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?
Nimm einen 68010, 020, 030. Da hast Du dann ein Vektorbasisregister und kannst die Exceptiontabelle irgendwo hinlegen. fchk
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
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 ;-)
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
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.
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.
Ich würde das Rom kopieren, weil könnte 8Bit sein und Ram dann in Wortbreite.
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.
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
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.