EMRSIM

2022 ist ein LC-80 aufgetaucht, der in zwei ROMs einen Simulator für den U881 (Z8-Prozessor) enthält (https://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=20044).

Ich habe die Software reassembliert und analysiert.

Download

Beschreibung

  • emuliert einen Z8-Prozessor (U881)
  • U881-Speicher wird im LC-80 ab 2400h abgebildet
  • keine Unterscheidung CODE-Speicher, RAM-Speicher (lde, ldc)
  • Register liegen im RAM, Arithmetik etc. wird über Z80-Register A erledigt. Flags werden gesetzt/beachtet.
  • vier ungültige OP-Codes dienen als Simulator-Befehle (0f, 1f, 2,f 3f).
  • braucht
    • 0000-07FF 2Kx1 - System
    • 0800-123F 4K ROM EMRSIM
    • 2000-23FF 1K RAM
    • 2400-2BFF 2K RAM-Erweiterung f. Z8-Programm

Speicheradressen

2003/2004	Startadr Z8-Program (lo, hi; relative Adresse, also z.B. 000c = 0c 00)
2005		erstes Register f. Trace
2006		zweites Register f. Trace
2007		drittes Register f. Trace
2008		Modus, 0f single step, 1f trace (Standard)

2100-217F	Z8-Register
2180		Peudoregister 80 = Lo PC (absolute Adresse)
2181		Peudoregister 81 = Hi PC (absolute Adresse)
2182		Peudoregister 82 = Befehlszähler
21F0-21FF	Z8-Systemregister F0..FF

Start auf Adr. 0800.
Z8-Programm wird auf Adr. (2003/4) + 2400h gelesen und gestartet.
Im Modus Trace läuft das Programm autom. durch, nach jedem Z8-Befehl erfolgt eine kurze Anzeige der drei Register aus 2005..2007. Im Modus Single Step wird stattdessen nach der Anzeige angehalten. Weiter geht es erst mit Tastendruck.

Z8-Spezialbefehle

	0f	; spezial code: single step
	1f	; spezial code: trace
	2f	; spezial code: autorun
	3f	; spezial code: registeranzeige

Registeranzeige Der Emulator wird angehalten und der Inhalt eines Registers angezeigt.

  • +,- schaltet die Register weiter
  • ADR Registernummer editieren
  • DAT Registerwert editieren
  • 0..F ändert den Registerwert
  • EX beendet die Registeranzeige und setzt das Programm fort.

Ports Z8-Spezial-Port 2 wird emuliert → USERPORT

Nutzung im JKCEMU

Im Download-Paket liegt ein 8K-Binary lc80emrsim.bin. Dies enthält

0000-07FF orig 2Kx1-Monitor
0800-0FFF EMRSIM EPROM2
1000-17FF EMRSIM EPROM3
1800-1FFF U2716 EPROM4 (Brennersoftware, wird hier nicht benötigt)

Im JKCEMU ist in den Einstellungen der LC80-2 (4K ROM, 4K RAM) auszuwählen. Unter ROM wird als alternatives Monitorprogramm lc80emrsim.bin ausgewählt. Dann kann man den LC-80 starten.

Beispiel 1

Hochzählen eines U881-Registers. Trace-Mode, Anzeige Register 10

folgende Speicheradressen sind zu befüllen:

2003 : 00 00          relative Startadresse U881-Programm
2007 : 10             Anzeige Register 10 = r0
2008 : 1f             0F single step, 1F trace
                      ab 2400 liegt das U881-Programm
2400 : 31 10               	srp	#10h
2402 : 0C 2A               	ld	r0,#42
2404 : FF                       nop
2405 : 0E                  m1:	inc	r0
2406 : 8B FD               	jr	m1

Dann wird mit ADR, 0800, EX der Simulator gestartet. In der Anzeige sieht man jetzt FFFFxx, XX wird laufend hochgezählt. XX ist dabei der Inhalt des Registers 10h (r0).

Ändert man den Wert in 2008 auf 0f und startet das Programm, so wird nach jedem Befehl die Anzeige angehalten. Weiter geht es mit beliebiger Taste. Da die Schleife 2 Befehle umfasst, muss man 2x Taste drücken, ehe der angezeigte Wert hochzählt.

Der interne Programmzähler steht in den Pseudo-Registern 80/81 Trägt man in 2005 81 und 2006 80 ein, erfolgt die Ausgabe der Adresse (absolut, 2400 ff).

Nun tragen wir auf 2008 wieder 1f ein (trace-Mode) und patchen das U881-Programm.
Auf Adresse 2404 schreiben wir 3f (Registeranzeige).
Starten wir das Programm, stoppt die Ausführung auf Adresse 0004=2404 und es erscheint die Registeranzeige:

Links steht die Registernummer, rechts der Registerinhalt.

Mit den Zifferntasten bzw. +,- wird das Register ausgewählt.
Mit DAT wechselt man zur Wert-Eingabe (Punkte rechts)

Wert auf A3 geändert:

Mit EX wird die Registeranzeige beendet, die TRACE-Anzeige läuft weiter.

  • lc80/programme/emrsim.txt
  • Zuletzt geändert: 2022/08/04 06:51
  • von volkerp