Forum: Projekte & Code 32 KB (EP)ROM-Simulator mit RP2040 Pico-Board


von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Zum Spielen mit älteren Prozessoren braucht man in der Regel 
Programmspeicher bzw. Simulatoren für DIL-Gehäuse, die sich möglichst 
zügig umprogrammieren lassen. Frühere Ausführungen für ROM-Simulatoren 
wurden vielfach per LPT1 angesprochen, was mit heutigen PCs kaum noch 
möglich ist.

Der RP2040 kann zum einen seriell angelieferte Daten entgegennehmen und 
in seinem internen RAM speichern und ist zum anderen auf Grund seinen 
hohen Taktrate gut geeignet, diese schnell als Datenbytes auszugeben.

Die gezeigte Schaltung basiert auf dem RP2040 Pico-Board, das genug 
GPIO-Leitungen frei hat, um die an GPIO0 – GPIO14 angelegte Adresse 
einzulesen und an den Ausgängen GPIO15 – GPIO22 das zugehörige Byte 
auszugeben. Da ältere CPUs in der Regel mit 5 V Pegeln arbeiten, werden 
für die Adressleitungen 74LVC541-Puffer benötigt, um die 3,3 V Pegel für 
den RP2040 zu erhalten.
Ausgangsseitig gibt es einen Puffer 74HCT541, der zu den angelegten 3,3 
V Pegeln 5 V Pegel liefert. Zudem hat er idealerweise zwei 
Freigabeeingänge, die bestens zu den Signalen /CS und /OE passen.
Ein RP2040 kann maximal ein ROM mit 256 KB simulieren, weshalb hier für 
eine mögliche Erweiterung ein 34-pol. Pfostenstecker gewählt wurde, der 
auch das /Reset-Signal liefern kann.

Die Daten werden über eine PIO-simulierte RS232-Schnittstelle mit 500 kB 
empfangen. Dadurch können auch ältere Rechner (ggf. std. Baudrate 
einstellen) Dateien im Intel-Hex oder Motorola S-Format übertragen. Da 
es sich hierbei um ASCII-Dateien handelt, reicht die Ausgabe über ein 
'type' wie es im Beispiel 'bas.bat' gezeigt wird.

Nach Initialisierung des Programms wird die Routine 'rom_simulation()' 
ausgeführt, die permanent die Adressleitungen einliest und das 
zugehörige Datenbyte aus dem 'rom_puffer[]' an PIO1-SM0 übergibt, 
welches die schnelle Ausgabe erledigt. Bei 200 MHz Taktfrequenz des 
RP2040 beträgt die max. Zugriffszeit 120 ns. 70 ns werden bei 360 MHz 
erreicht.
Da jeder Zeichenempfang diese Routine per ISR unterbricht, wird mit 
jedem ser. Zeichen automatisch ein /Reset ausgelöst.

Damit je nach Speicherbelegung im Zielsystem und benötigter ROM-Größe 
2732 – 27128 die Daten an der richtigen Adresse im 'rom_puffer[]' 
liegen, kann die übertragene Adresse maskiert "=Sxxxx<CR>" (Maske = xxxx 
- 1) und mit einem Offset versehen werden: "=Oxxxx<CR>".

Der ROM-Simulator kann auch 'stand alone' arbeiten. Dazu wird beim 
Programmstart das zuletzt unter Index = 0 abgelegte Programm ins RAM 
geladen. Für das Abspeichern gibt es den Befehl "=R{index}<CR>", der 
optional das aktuelle Programm an bis zu acht unterschiedlichen Stellen 
sichern kann: Index 0 – 7. Fehlt eine Angabe des Index wird 0 gewählt.
Zurückgelesen werden diese Bereiche mit dem Befehl "=L{index}<CR>" - 
ebenfalls mit default = 0 wie beim Programmstart.

Das Programm ist ein Projekt für Segger Embedded Studio und die Bilder 
zeigen Schaltung, Aufbau und das Adapterkabel. Platinen bzw. die 
Fertigungsdateien dafür könnte ich bei Interesse bereitstellen.

von Mi N. (msx)


Angehängte Dateien:

Lesenswert?

Bei der eingangs gezeigten Schaltung ist Q1 schlecht gezeichnet und 
falsch. Es muß ein NPN Typ sein wie z.B. BC817. Das Layout der 
Leiterplatte stimmt dennoch.
Um das Schaltbild nicht einfach zu wiederholen, wird ein Schaltbild 
gezeigt, welches Speicher mit bis zu 256 KB simulieren kann. Dabei wird 
kein original Pico-Board verwendet, sondern die Ausführung eines anderen 
Anbieters, welches alle GPIO-Leitungen frei verfügbar auf den 
Stiftleisten herausgeführt hat. Diese Boards kosten <= 2,50 Euro und 
sind auch mit 4 bzw. 16 MB Flash-Speicher mit der Zusatzbezeichnung 
'Ultimate' erhältlich. Nebenbei: Für Anwendungen mit dem ADC dürfte der 
dort verwendete LDO wegen geringeren Rauschens von Vorteil sein.

Das oben gezeigte Programm ist leicht angepasst worden. Der für die 
Baudrate verwendete PIO0-SM0 Teiler verwendet nun den ganzzahligen und 
fraktionalen Teil damit 'krumme' Baudraten wie zum Beispiel 460800 Baud 
genauer eingestellt werden können.

Dann gibt es eine neue Version, bei der nun Core1 des RP2040 allein den 
Ablauf der Simulationsroutine erledigt. Der Vorteil ist, daß Interrupts 
beim RX-Empfang die Routine nicht mehr unterbrechen und zwangsläufig ein 
/Reset ausgegeben werden muß. Soll statt RS232 die USB-Schnittstelle 
verwendet werden (Arduino-IDE), müssen Unterbrechungen durch ISRs auf 
jeden Fall vermieden werden, was nur mit Core1 ereichbar ist.
Unter http://mino-elektronik.de/Gemischtes/ROM-Simulator.html finden 
sich die neuen Versionen und auch die Fertigungsdaten für die Platine.

: Bearbeitet durch User
von Denny A. (denny_a)


Lesenswert?

Wäre es mit dem gezeigten ROM-Simulator möglich, einen 2716 EPROM (2 
Kbit, 11 Adressleitungen, 8 Datenleitungen, 5V-Pegel) zu simulieren?
Gibt es dafür Besonderheiten bei der Adressmaske oder beim Offset, oder 
kann der 2716 direkt abgebildet werden?

von Mi N. (msx)


Lesenswert?

Da beim 2716 Pin 21 (Vpp) wohl auf Vcc liegt, würde das einem 2732 
entsprechen, bei dem der Code in der oberen Hälfte des Speichers liegt 
(A11 = '1'). Dafür könnte man beim erzeugten .hex-Code die 
Speicheradresse mit einem Offset von 0x800 versehen. Alternativ 
verbindet man Pin 21 nicht, wodurch dann durch den 
'pull-down'-Widerstand A11 = '0' wird.

Da ich 2708/2716 garnicht mehr auf dem Schirm hatte, hatte ich 
MIN_ROM_SIZE auf 0x1000 gesetzt.
Die aktuellen Versionen sind jetzt für den 2716 (0x800) angepaßt!

von Vanye R. (vanye_rijan)


Lesenswert?

Die interessante Frage ist noch ob so ein Simulator auch wirklich in 
jedem alten System funktioniert. Die Hardwaresimulation ist ja durchaus 
anspruchsvoll wie man an der hohen notwendigen Taktfrequenz sieht. Und 
damals hat ja auch nicht jeder immer perfekt nach Datenblatt die 
Hardware designt. Da koennte es schon auch ein paar Geraete geben wo das 
Timing zu knapp ist.

Vanye

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.