Hello, Guest the thread was called569 times and contains 10 replays

last post from Jan at the

Erkennung $C00000 RAM im Amiga?

  • Wie funktioniert beim Amiga die Erkennung des RAMs auf $C00000 (Ranger Memory)? Autoconfig-Logik gibt es für diesem Bereich nicht.


    Beim A500 gibt es /EXRAM, aber das sagt ja nur GARY bescheid, daß er die Steuersignale korrekt liefert. Beim A2000A gibt es nur die Karte im MMU-Slot die den Speicher dort einblendet. Irgendwie muss das OS das RAM selbst auch noch finden und die Größe erkennen oder wissen, daß es überhaupt dort suchen muss.


    Die Erwartung von mir war, daß Kickstart auf $Cxxxxxx per Software eine RAM-Erkennung durchführt. Aber wenn ich mir eine kleine Logik baue die auf $Cxxxxxx reagiert sehe ich genau gar keine Zugriffe (auch nicht auf 'single' wo ich jede einzelne Flanke sehen müsste) solange /EXRAM nicht gesetzt ist. Steckt hingegen die Speicherkarte im A500 sehe ich Zugriffe. Irgendwie hat Kickstart es also geschafft rauszufinden, daß da RAM ist.


    Im Netz habe ich hierzu keine Erklärung finden können.

  • Leider weiß ich nicht genau, was Du meinst. Im Netz gibt es folgende Analyse der Routine zum Erkennen des $Cxxxxx-Rams:

    Wie man der Routine entnehmen kann, landen bei nicht vorhandenem Ram Zugriffe auf den Bereich $Cxxxxx im Bereich $dffxxx, was den Test etwas schwierig macht. Das OS schreibt daher absichtlich an einer "falschen" Adresse nach INTENA, um sich das Ergebnis von INTENAR ausgeben zu lassen. Es wird also nicht direkt aufs Ram getestet, indem Werte ins Ram geschrieben werden, sondern ob das INTENA-Register reagiert. Weiß nicht, ob das weiterhilft... :/

  • Nicht ganz, denn auch dann müsste ich an der CPU Adressen für $Cxxxxx sehen, oder? Und das tue ich nicht.


    Alles sehr mysteriös, speziell im Bezug auf den A2000A.


    Nachtrag: Es würde schon helfen wenn man einen Blick auf die Logikgleichungen von GARY werfen könnte.

  • Hmm.... Da kann irgendwas nicht stimmen. Die Routine zur Erkennung des $Cxxxxx-Rams erfolgt im Rom-Bootcode direkt nach dem Test auf Gültigkeit von ExecBase (sogar noch vor dem Chipramtest). Es gibt dort keinerlei Code, der irgendeine zusätzliche Hardware abfragen würde. Anders gesagt: Im Originalrom wird die Routine für den Speichertest bei Anschalten des Amigas auf jeden Fall ausgeführt.

  • Ich kann mir das nur so erklären, daß diese Routine nur bei einem echten Cold-Boot (Einschalten) ausgeführt wird und nicht bei einem normalen Reset.

    Ja, die Routine wird beim Einschalten ausgeführt oder wenn die Informationen in Execbase nicht stimmen. Man kann einen Speicherneutest erzwingen, indem man z. B. den ExecBase-Zeiger (an Adresse 4) auf einen ungeraden Wert setzt. Das OS testet die Gültigkeit des Zeigers und springt bei einem ungeraden Wert direkt zum Speichertest.

  • Ok, ich habs hinbekommen, RESET-Leitung am Keyboard-Port auf GND ziehen, einschalten und erst dann freigeben... Das was ich vorhatte geht nicht weil GARY nicht mitspielt. Wenn die /EXRAM-Leitung offen, also HIGH ist, dann wird beim Zugriff auf $Cxxxxx die /REGEN-Leitung zu AGNUS aktiv, man sieht also die Customchip-Register. Zieht man /EXRAM auf LOW ist das nicht der Fall, dafür wird /RAMEN aktiv. Egal wie man es dreht, der Adressraum $Cxxxxx wird so immer über die Buspuffer in den Customchip-Bereich geroutet.


    Ich hatte gehofft, man könnte $Cxxxxx-RAM am Expansionport realisieren, wäre wegen der automatischen Erkennung schön einfach gewesen. Aber ohne Zusatzlogik zwischen GARY und dem Rest des Systems wird das nichts.


    Egal, wieder was gelernt.

  • Hi,

    erst mal Entschuldigung, dass ich alte Threads ausgrabe, aber der TO scheint ja noch aktiv zu sein.



    Hast Du an der Sache noch weiter gemacht? Ich habe vor mir so eine Erweiterung selbst zu bauen und bin dabei über den Thread gestolpert.

    Ich habe auch einen Amiga 2000A mit der 1MB Karte und einen B2000. Die 1MB Karte hatte ich die ganze Zeit im B2000, nachem der A2000 aber wieder funktioniert, soll der sie wieder bekommen.

    Da der Zorro Bereich schon voll ist, will ich daher wieder eine Karte die wie die aus dem A2000 den C00000 Bereich verwendet.

    Das onboard decoding der Adressen und damit das shadowing der CS Register soll sich über das OVR Override Signal deaktiveren lassen (ich denke das war wonach Du gesucht hast). Das ist auch am Expansion Slot vom A500 vorhanden. Im Amiga_A500_A2000_Technical_Reference Manual http://classiccomputers.info/d…ference%20Manual_1987.pdf ist es auf Seite 93 beschrieben. Dann muss man aber auch DTACK selbst generieren.

    Allerdings steht da auch dass es auf Grund des Timings von Gary im Gegensatz zu den PALs (wie im 1000 und A2000) das deaktivieren der CS Register nicht mehr (zuverlässig) unterstützt wird.

    Das IDE68K Projekt verwendet OVR aber wohl trotzdem: http://www.mkl211015.altervista.org/ide/ide68k.html


    Meine Befürchung wäre dass dadurch schlechtes Timing Agnus vielleicht doch kurz aktiviert wird, was dann zu instabilen Verhalten führen könnte und noch schlimmer, Agnus (über Zeit) gegrillt wird, da hier dann für einen kurzen Moment Agnus gegen den RAM Treiben könnte, also praktisch Kurzschluss.

    Wie siehst Du das, ist das wirklich so problematisch, könnte man sich davor schützen?