Forum: Mikrocontroller und Digitale Elektronik Adressdekoder für 68k CPU


von C. W. (chefkoch)


Lesenswert?

Hallo *,

ich befasse mich gerade gedanklich mit dem Design eines Boards für einen 
68000. Im Gegensatz zu den meisten Projekten möchte ich allerdings das 
RAM bei 0x0000-0x???? haben um zur Laufzeit die Vektoren für die 
Exceptions ändern zu können. Mein Ansatz wäre jetzt für die Dekodierung 
ein CPLD zu verwenden und damit für die ersten Zugriffe nach dem Reset 
das ROM auf 0x0000 zu "spiegeln". Gibt es weiter Vorschläge?
von Frank K. (fchk)


Lesenswert?

Nimm einen 68010, 020, 030. Da hast Du dann ein Vektorbasisregister und 
kannst die Exceptiontabelle irgendwo hinlegen.

fchk
von Volker B. (Firma: L-E-A) (vobs)


Lesenswert?

C. W. schrieb:

> ich befasse mich gerade gedanklich mit dem Design eines Boards für einen
> 68000. Im Gegensatz zu den meisten Projekten möchte ich allerdings das
> RAM bei 0x0000-0x???? haben um zur Laufzeit die Vektoren für die
> Exceptions ändern zu können. Mein Ansatz wäre jetzt für die Dekodierung
> ein CPLD zu verwenden und damit für die ersten Zugriffe nach dem Reset
> das ROM auf 0x0000 zu "spiegeln". Gibt es weiter Vorschläge?

Man kann die drei Function Code Pins FC0--FC2 für die Dekodierung 
benutzen, denn diese signalisieren auch den Zugriff auf die 
Reset-Vektoren. So hatte ich Anfang der 1990er mein eigenes Board 
entworfen. Der Adressdekodierer bestand im Wesentlichen aus 2 GALs (16V8 
und 20V8) und ein paar TTL-Gattern. Meine Dokumentation ist aber leider 
etwas lückenhaft.

Für die moderenen 68k-CPUs musst Du aber ggf. prüfen, ob die sich gleich 
verhalten.

Andere Lösungen implementierten ein Flipflop im Adressdekoder, das nach 
dem Auslesen des Resetvektors kippt und dann statt des ROMs das RAM in 
den unteren Adressbereich einblendete, bis zum nächsten Reset.

Grüßle,
Volker
von Falk B. (falk)


Lesenswert?

C. W. schrieb:
> Mein Ansatz wäre jetzt für die Dekodierung
> ein CPLD zu verwenden und damit für die ersten Zugriffe nach dem Reset
> das ROM auf 0x0000 zu "spiegeln". Gibt es weiter Vorschläge?

So hat es der Amiga gemacht ;-)
von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

Address decoder (die die jeweiligen ChipSelect-Signale (CS)) erzeugen 
brauchste doch so oder so um weitere Chips etc an den AdressBus zu 
klemmen.

Statt konfigurierbaren PLD könnte man aus der 74 Familie auch einen "1 
aus n decoder" verwenden (74xx138).

* Beitrag "1 aus N Decoder"
: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

C. W. schrieb:
> für die ersten Zugriffe nach dem Reset

Es ist halt die Frage, wie man das zahlt.

Ein FlipFlop, von RESET zuruckgesetzt, wird gesetzt so bald ein Zugriff 
anderswo erfolgt der sowieso decodiert wurde. Dieses FlipFlop fliesst in 
die Decodierung ein und blendet z.B. das RAM aus.

Besser als Instruktionen oder Zeit zählen.
von Norbert (der_norbert)


Lesenswert?

C. W. schrieb:
> Gibt es weiter Vorschläge?

Musste erst mal mein ur-uraltes 68000 Assembler Manual 
(Kane,Hawkins,Leventhal) ausgraben um mich etwas aufzufrischen. ;-)

Also lt. Fig 15-1 sind es 256 Vektoren, davon einige (24) für Motorola 
reserviert und 192 für User Interrupts.

Man könnte das ROM dort lassen, wo es hingehört. Nach einem RESET eine 
Struktur/Sprungtabelle im RAM anlegen mit später modifizierbaren 
Vektoren. Die ROM Vektoren zeigen auf diese Sprungtabelle im RAM. Kostet 
ein paar Zyklen, spart aber Hardware und erfüllt alle Zwecke.
von Heiner B. (karadur)


Lesenswert?

Ich würde das Rom kopieren, weil könnte 8Bit sein und Ram dann in 
Wortbreite.
von Ulrich (Firma: DC3AX) (uprinz)


Lesenswert?

Ich muss Heiner beipflichten. ROM mit Shadow-RAM Konfiguration und 
Flipflop zum Umschalten. Beim Einschalten das ROM ins RAM kopieren und 
umschalten. Danach kann man alles so Ändern, wie man es mag.
von Norbert (der_norbert)


Lesenswert?

Dann aber darauf achten, dass im ROM nur relative Sprünge und Referenzen 
verwendet werden, damit diese im RAM auch noch funktionieren.
Und eine physikalische Umschaltung nach abgeschlossenem RESET braucht 
man dennoch.
: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Dann aber darauf achten, dass im ROM nur relative Sprünge und Referenzen
> verwendet werden, damit diese im RAM auch noch funktionieren.

Nö.

Nach Reset: ROM lesen, RAM schreiben.
Umgeschaltet: RAM lesen, RAM schreiben.

Im Reset-Handler den Adressraum auf sich selbst kopieren, umschalten. 
Hat man schon anno Z80 so gemacht.
: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

OK, komplett also. Na ja, kann man machen wenn genug RAM zum 
Verschwenden da ist. Mir erschließt sich allerdings der Nutzen noch 
nicht vollumfänglich.
von Ulrich (Firma: DC3AX) (uprinz)


Lesenswert?

Der Aufwand hält sich in Grenzen.
Ich hab das mal gelöst, in dem ich RAM und ROM auf der gleichen Adresse 
hatte. Gelesen wurde nach RESET immer das ROM und geschrieben immer das 
RAM. Dann wurde per IO umgeschaltet und das ROM "verschwand". Die Logik 
dahinter ist minimal und das "Durchkopieren" einfach. Der Code benötigt 
für das Umschalten keinerlei Besonderheiten. Er macht im RAM einfach da 
weiter, wo er im ROM aufgehört hat.

Ich hab das vor langer langer Zeit mal so gemacht... 6502 oder Z80... 
Ich weiß es nicht mehr. Später noch mal in einem Ti DSP.
von Hmmm (hmmm)


Lesenswert?

C. W. schrieb:
> Mein Ansatz wäre jetzt für die Dekodierung
> ein CPLD zu verwenden und damit für die ersten Zugriffe nach dem Reset
> das ROM auf 0x0000 zu "spiegeln". Gibt es weiter Vorschläge?

Beim Atari ST wurden nur die ersten beiden Vektoren (Init-Werte für SSP 
und PC) aus dem ROM eingespiegelt. Macht den Adressdecoder etwas 
komplizierter als stumpfes "Hälfte RAM, Hälfte ROM", aber sobald Du 
etwas Peripherie dranhängst, ist er das ohnehin.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.