Z1013 Systemadressen

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