gültig für Monitor-Version 2.02
vorläufige Fassung
Bearbeitungsstand : Dienstag, 01. Januar 2008
Arbeitszellen im RAM
Adresse
|
Name |
Länge
|
Bedeutung |
0000h
|
RST00 |
3
|
RST 00h, frei für den Anwender |
0003h
|
SUBNR |
1
|
Zwischenspeicher für Spezifikationsbyte RST 20h |
0004h
|
KEYCH |
1
|
Merkzelle für letztes Zeichen von der Tastatur |
0005h
|
CALL5 |
3
|
frei für Anwendung eines zentralen CALL 5 |
0008h
|
RST08 |
3
|
RST 08h, frei für Anwender |
000Bh
|
BPADR |
2
|
Zwischenspeicher für BREAK-Adresse |
000Dh
|
BPOPC |
3
|
Zwischenspeicher für Operandenfolge bei BREAK |
0010h
|
RST10 |
3
|
RST 10h, frei für Anwender |
0013h
|
DATA |
2
|
Arbeitszellen für INHEX-Routine |
0015h |
? |
1 |
|
0016h
|
SOIL |
2
|
Anfangsadresse der Eingabezeile |
0018h
|
RST18 |
3
|
RST 18h, frei für Anwender |
001Bh
|
ARG1 |
2
|
Parameter 1 |
001Dh
|
ARG2 |
2
|
Parameter 2 |
001Fh |
BUFFA |
1 |
Code-Zwischenspeicher für OUTCH |
0020h
|
RST20 |
3
|
RST 20h, zentraler Ansprung für Monitorroutinen |
0023h
|
ARG3 |
2
|
Parameter 3 |
0025h
|
SOIL2 |
2
|
2. Adresse der Eingabezeile |
0027h
|
GFLAG |
1
|
Merkzelle ASCII = 0 / Grafik = 80h |
0028h
|
RST28 |
3
|
RST 28h, frei für den Anwender |
002Bh
|
CURSR |
2
|
aktuelle Cursorposition |
002Dh
|
|
1
|
Cursor-Zwischenspeicher (darunter liegendes
Zeichen) |
002Eh
|
|
1
|
? |
002Fh
|
CLPOL |
1
|
Merkzelle der Phasenlage bei CLOAD |
0030h
|
RST30 |
3
|
RST 30h, frei für den Anwender |
0033h
|
CSSYNC |
2
|
Länge des Synchronisationslücke bei CSAVE |
0035h
|
KYTAB1 |
2
|
Beginn der Tastencodetabelle (entfällt im A.2
Monitor) |
0037h
|
|
1
|
? (Bedeutung im A.2 Monitor) |
0038h
|
RST38 |
3
|
RST 38h, wird als zentraler Fehleransprung
verwendet, bei Eintritt
in den Monitor erscheint ?# |
003Bh
|
KYTAB2 |
12
|
Fortsetzung der Tastencodetabelle |
0047h
|
DWIND |
2
|
Rolldistanz im OUTCH |
0049h
|
AWIND |
2
|
Anfangsadresse des Bildschirm-Rollbereiches |
004Bh
|
EWIND |
2
|
Endadresse + 1 des Bildschirm-Rollbereiches |
004Dh
|
RSA |
24
|
Registerrettebereich |
0065h
|
|
1
|
? |
0066h
|
NMI |
3
|
NMI, frei für Anwender |
0069h
|
|
39
|
Anwender-Stackbereich (Stack läuft nach unten) |
... |
|
|
|
0090h
|
STACK |
>32
|
System-Stackbereich (Stack läuft nach unten) |
|
|
|
|
00B0h
|
|
3 x 26
|
Monitor-Erweiterungstabelle (Kommando @) in der
Form
DB <buchstabe>
DW <startadresse> |
Kopfpuffer für Headersave
Adresse
|
Name |
Länge (Byte)
|
Bedeutung |
00E0h |
AADR |
2 |
Anfangsadresse der zu
speichernen Daten |
00E2h |
EADR |
2 |
Endadresse der zu
speichernen Daten |
00E4h |
SADR |
2 |
Startadresse
(Programmadresse für Selbststart) |
00E6h |
USER |
6 |
frei für
Zusatzinformationen |
00ECh |
FTYP |
1 |
Typkennzeichen |
00EDh |
HMARK |
3 |
3 x 0D3h =
Kopfkennzeichen |
00F0H |
FNAME |
16 |
Namensblock |
E/A-Adressen
Adresse
|
Bedeutung |
00h
|
PIO Port A Daten |
01h
|
PIO Port A Steuerwort |
02h
|
PIO Port B Daten |
03h
|
PIO Port B Steuerwort |
04h
...
07h
|
frei |
08h
...
09h
|
Tastaturspalten-Treiber |
Unterprogramme des Betriebssystems
Die Unterprogramme des Betriebssystems (Systemdienste) werden über
einen RST 20h-Befehl mit nachfolgender Unterprogramm-Nummer gerufen. Der
RST 20h-Programmverteiler holt sich dieses Byte und inkrementiert den
Return-Zeiger auf dem Stack. Beispiel:
LD A, 'A' |
; Zeichen A ausgeben |
RST 20h |
; Aufruf des Unterprogramm-Verteilers |
DB 0 |
; Unterprogramm-Nummer OUTCH |
Alternativ besteht die Möglichkeit, Systemdienste durch Direktaufruf
zu benutzen; da jedoch auf dem Z1013 zwei gängige
Betriebssystem-Varianten existierten (je nach Tastatur: 2.02 oder A2), ist
das nicht portabel.
Legende
Eingabe: |
Parameter-Eingabe |
Ausgabe: |
Parameter-Ausgabe |
VR: |
Veränderte Register: Die veränderten Register sind nicht
dokumentiert und hier vermutlich fehlerhaft. |
Adressen: |
Direkteinsprung-Adresse für 8x4-Tastatursystem / Adresse für
8x8-Tastatursystem |
Betriebssystem-Unterprogramme
Unter-Programmverteiler RST 20h
UP-Nr. |
Name |
Adresse
Monitor 2.02
|
Adresse
Monitor A2
|
Funktion |
00h
|
OUTCH |
F21Bh |
F258h |
Ausgabe eines einzelnen Zeichens |
01h
|
INCH |
F20Ch |
F219h |
Zeicheneingabe von der Tastatur |
02h
|
PRST7 |
F2A5h |
F2E2h |
Stringausgabe mit gesetztem Bit 7
als Endekennzeichen |
03h
|
INHEX |
F2F4h |
F331h |
Hexadezimal-Konvertierung |
04h
|
INKEY |
F130h |
F119h |
Zeicheneingabe von der Tastatur
ohne Warten |
05h
|
INLIN |
F2B3h |
F2F0h |
Eingabe einer Zeile mit führendem
Promptsymbol |
06h
|
OUTHX |
F301h |
F33Eh |
Hexadezimale Ausgabe Register A |
07h
|
OUTHL |
F31Ah |
F357h |
Hexadezimale Ausgabe Register HL |
08h
|
CSAVE |
F369h |
F3A6h |
Kassetten-Ausgabe |
09h
|
CLOAD |
F3F8h |
F435h |
Kassetten-Lesen |
0Ah
|
MEM |
F325h |
F362h |
Speicherinhalt verändern |
0Bh
|
WIND |
F6D1h |
F6F5h |
Rollfenster festlegen |
0Ch
|
OTHLS |
F5C7h |
F604h |
Hexadezimale Ausgabe Register HL
und ein Leerzeichen |
0Dh
|
OUTDP |
F5C4h |
F601h |
Ausgabe Doppelpunkt und weiter wie
OTHLS |
0Eh
|
OUTSP |
F5CFh |
F60Ch |
Ausgabe eines Leerzeichens |
0Fh
|
TRANS |
F51Dh |
F55Ah |
Speicherblock verschieben |
10h
|
INSTR |
F2B9h |
F2F6h |
Eingabe einer Zeile ohne Prompt |
11h
|
KILL |
F51Dh |
F548h |
Füllen eines Speicherbereichs |
12h
|
HEXUM |
F6B8h |
- |
Hex-Umschaltung der Tastatur |
13h
|
ALFA |
F6C5h |
- |
Alpha-Umschaltung der Tastatur |
UP
00h OUTCH
Ausgabe eines Zeichens |
Eingabe: |
A=Zeichencode |
Ausgabe: |
- |
Register: |
- |
Anmerkung: |
Folgende Steuerzeichen werden vom
Z1013-Videotreiber gesondert interpretiert:
08h Cursor links
09h Kursor rechts
0Ah
0Ch Bildschirm löschen
0Dh Neue Zeile; bei Erreichen des unteren Bildschirmrandes
wird gerollt
|
UP
01h INCH
Zeicheneingabe von Tastatur |
Eingabe: |
- |
Ausgabe: |
A = Zeichencode |
Register: |
AF |
Anmerkung: |
Diese Routine wartet solange, bis
ein Zeichen verfügbar ist, d.h. bis der Tastencode ungleich Null
ist. |
UP
02h PRST7
Stringausgabe mit gesetztem Bit 7 als Endekennzeichen |
Eingabe: |
Der String folgt
unmittelbar nach der Aufruf, d.h. nach dem DB 02h |
Ausgabe: |
- |
Register: |
- |
Anmerkung: |
Grafikzeichen (80h..FFh) können
hiermit nicht ausgegeben werden; dafür ist OUTCH zu verwenden.Die
Return-Adresse wird auf dem Stack automatisch korrigiert. |
UP
03h INHEX
Konvertierung einer max. 4stelligen Hexadezimalzahl in das interne
Format |
Eingabe: |
DE=Stringadresse |
Ausgabe: |
HL=eingelesene Zahl |
Register: |
AF, DE, HL |
Anmerkung: |
Führende Leerzeichen werden
überlesen. Danach werden Hexadezimalzeichen umgewandelt. Bei jedem
anderen Zeichen bricht die Routine ab. Bei zu langen Hexzahlen steht
in HL der Wert der 4 letzten Zeichen. |
UP
04h INKEY
Tasteneingabe ohne Warten auf Tastendruck |
Eingabe: |
- |
Ausgabe: |
A=Tastencode, 00h wenn
keine Taste gedrückt |
Register: |
AF, HL, IX |
Anmerkung: |
Innerhalb von INKEY wird mit
SHIFT4+'G' (17h) in den Grafikmodus geschaltet, d.h. auf den
Zeichencode 80h addiert. Die Rückschaltung erfolgt mit SHIFT4+'A'
(91h). |
UP
05h INLIN
Ausgabe Promptsymbol und Eingabe Zeichenkette mit Echo bis Enter
(0Dh).("input line"="Zeileneingabe") |
Eingabe: |
- |
Ausgabe: |
(SOIL)=Adresse der
Eingabezeile (auf Bildschirm) |
Register: |
? |
Anmerkung: |
Die Adresse in SOIL (0016h) kann
anschließend für INHEX u.ä. verwendet werden. Beim Rollen erfolgt
automatisch eine Korrektur von (SOIL) um -20h. |
UP
06h OUTHX
Ausgabe eines Bytes hexadezimal |
Eingabe: |
A=Hexzahl |
Ausgabe: |
- |
Register: |
- |
|
Es werden genau 2 Zeichen
ausgegeben. |
UP
07h OUTHL
Ausgabe des Doppelregisters HL hexadezimal |
Eingabe: |
HL=Hexzahl |
Ausgabe: |
- |
VR: |
- |
|
Es werden genau 4 Zeichen
ausgegeben. |
UP
08h CSAVE
Ausgabe Speicherbereich auf Kassette |
Funktion: |
Entspricht dem S-Kommando des
Monitors. Diese Routine kehrt nach dem Speichern zurück. |
Eingabe: |
(ARG1)=Anfangsadresse,
(ARG2)=Endadresse |
Ausgabe: |
- |
VR: |
AF, BC, DE, HL, IX |
UP
09h CLOAD
Laden Speicherbereich von Kassette |
Funktion: |
Entspricht dem L-Kommando des
Monitors. Diese Routine kehrt nach erfolgreichem Laden zurück.
Andernfalls funktioniert nur noch RESET; es erfolgt dann keine
Rückkehr. |
Eingabe: |
(ARG1)=Anfangsadresse,
(ARG2)=Endadresse |
Ausgabe: |
- |
VR: |
AF, BC, DE, HL, IX |
UP
0Ah MEM
Speicher modifizieren |
Funktion: |
Entspricht dem M-Kommando des
Monitors.
Diese Routine kehrt beim Beenden des interaktiven Modus zurück. |
Eingabe: |
(ARG1)=Anfangsadresse |
Ausgabe: |
- |
VR: |
AF, BC, DE, HL, IX |
UP
0Bh WIND
Rollfenster für Bildschirmbereich einstellen |
Funktion: |
Entspricht dem W-Kommando des
Monitors. Standardmäßig steht der Roll-Anfang auf EC00h und das
Ende+1 auf F000h; d.h. es rollt der ganze Bildschirm. Beim Erreichen
des Fensterendes bei jeglicher Zeichenausgabe wird das Fenster um
eine Zeile nach oben gerollt. |
Eingabe: |
(ARG1)=Anfangsadresse,
(ARG2)=Endadresse+1 |
Ausgabe: |
- |
VR: |
AF, BC, DE, HL |
UP
0Ch - OTHLS
Ausgabe des Doppelregisters HL hexadezimal und eines
Leerzeichens |
Eingabe: |
HL=Hexzahl |
Ausgabe: |
- |
VR: |
AF? |
Es werden genau 5 Zeichen ausgegeben.
Adressen: F5C7h / F604h
UP
0Dh - OUTDP("output doubelpoint)
Ausgabe eines Doppelpunktes, des Doppelregisters HL hexadezimal und
eines Leerzeichens |
Eingabe: |
HL=Hexzahl |
Ausgabe: |
- |
VR: |
AF? |
Es werden genau 6 Zeichen ausgegeben.
Adressen: F5C4h / F601h
Z1013 UP 0Eh OUTSP
Ausgabe eines Leerzeichens ("output space"="Ausgabe
Leerzeichen") |
Eingabe: |
- |
Ausgabe: |
- |
VR: |
AF? |
Eingabe: -
Ausgabe: -
Adressen: F5CFh / F60Ch
UP 0Fh TRANS
Speicherbereich verschieben (svw. kopieren unter Beachtung von
Überlappungen)
("transfer"="Verschiebung")
Eingabe: (ARG1)=Quelladresse, (ARG2)=Zieladresse, (ARG3)=Bytezahl
Ausgabe: -
VR: AF, BC, DE, HL
Entspricht dem T-Kommando des Monitors.
Adressen: F51Dh / F55Ah
("input string"="Eingabe Zeichenkette")
UP
10h INSTR
Eingabe Zeichenkette mit Echo bis Enter (0Dh). |
Eingabe: |
- |
Ausgabe: |
(SOIL)=Adresse der Eingabezeile (auf Bildschirm) |
VR: |
- |
|
Wie INLIN; jedoch wird kein führendes Promptsymbol
ausgegeben. |
UP
11h KILL
Speicherbereich füllen |
Eingabe: |
(ARG1)=Startadresse, (ARG2)=Endadresse,
(ARG3)=Füllbyte |
Ausgabe: |
- |
VR: |
AF, BC, DE, HL |
Entspricht dem K-Kommando des Monitors.
Adressen: F51Dh / F548h
UP 12h HEXUM
Hexadezimal-Umschaltung der Tastatur
Eingabe: -
Ausgabe: -
VR: AF?
Entspricht dem H-Kommando des Monitors. Umschaltung der Tastatur,
sodaß die Zeichen 0..9 ohne Shift-Taste erreichbar sind. Nützlich vor
Zahleneingaben.
Adressen: F6B8h / entfällt
Z1013 UP 13h ALFA
Alphanumerische Umschaltung der Tastatur
Eingabe: -
Ausgabe: -
VR: AF?
Entspricht dem A-Kommando des Monitors. Rückschaltung der Tastatur, so
daß die Zeichen H..W ohne Shift-Taste erreichbar sind.
Adressen: F6B8h / entfällt
|