MFA – MAT85 Sprungtabelle/Routinen

RST/Interrupt-Sprungtabelle

Adresse (h)BezeichnungVersionBeschreibungVektor
Sprungziel
0008RST 11.8RST 1
Kommando (User)
JMP CMDUSER
0010RST 21.8RST 2
Anwender-Restart
JMP FC8C
0018RST 31.8RST 3
Anwender-Restart
JMP FC8F
0020RST 41.8RST 4
Breakpoint
JMP BREAK
0024TRAP1.8Nicht maskierbarer InterruptJMP TRAP
0028RST 51.8RST 3
Anwender-Restart
JMP FC92
002CRST 5.51.8RST 5.5
Anwender-Interrupt
JMP FC95
0030RST 61.8RST 6
Anwender-Restart
JMP FC98
0034RST 6.51.8RST 6.5
Anwender-Interrupt
JMP FC9B
0038RST 71.8RST 7 – Abort
Programmabbruch
JMP 024D
003CRST 7.51.8RST 7.5
Anwender-Interrupt
JMP FC9E

Unterroutinen in MAT85

Adresse (h)BezeichnungVersionBeschreibung
0040CMD1.8MAT85 Kommandoaufforderung (KMD >)
0043RCHAR1.8Ein Zeichen von der Konsole lesen
00461.8Reserve
00491.8Reserve
004FBSTIME1.8.6Zeitschleife (ca. 0,24 sec)
0052WCHAR1.8Ein Zeichen auf der Konsole ausgeben
0055WCHARI1.8Ein Zeichen nach CALL ausgeben
0058WAHEX1.8Zwei Hex-Stellen als ASCII ausgeben (A)
005BWHLHEX1.8Vier Hex-Stellen als ASCII ausgeben (HL)
005EWABIN1.8Binärwerte als ASCII ausgeben (A)
0061WADEZ1.8Drei Dezimalstellen als ASCII ausgeben (A)
0064WAFOR1.8Als ASCII ausgeben (A), abhängig von C-Register:
0=ASCII
1=BIN
2=DEZ
3=HEX
00xxWAFORB1.8Wie WAFOR mit anschließendem Blank ‘ ‘
0067WBLANK1.8Leerzeichen ausgeben
006AWBUF1.8Text ausgeben, (Zeiger: HL), Ende mit $0
006DWBUFI1.8Text nach dem CALL ausgeben, Ende mit $0
0070WCRLF1.8CR/LF ausgeben (neue Zeile)
0073WCRLFI1.8CR/LF und Text nach CALL ausgeben, Ende mit $0
00761.8Reserve
00791.8Reserve
007C1.8Reserve
0228PSTAR1.8Gebe ‘***’ + [TEXT] + ‘***’ aus
03B8PKLIST1.8Gebe Kommandoliste aus (Zeiger: HL)
0A74HSTART1.8Hole Startadresse (in HL)
0B93WBLNKI1.8Gebe X mal ein Space aus ‘ ‘ (Anzahl im Akku)
0CAABUFCLR1.8Lösche den MAT85 Eingabepuffer
0D0ABREAD1.8Lese ein Zeichen aus dem Eingabepuffer
0EB0TEST1.8Prüfe ob ein Zeichen in einer Tabelle enthalten ist (Zeiger: HL, Zeichen A)
0EE9GROSS1.8Wandle ein Zeichen in Großbuchstaben
1039SUB21.8Subtrahiere DE von HL: HL = HL – DE

Unterroutinen in MAT85-SP1

Adresse (h)BezeichnungVersionBeschreibung
215BHSTOP1.8 SP1Hole Stopp-Adresse (in HL)
219ECOPY1.8 SP1Kopiert einen Speicherinhalt
Anfangsadresse (Quelle): in HL
Endadresse (Quelle): in DE
Anfangsadresse (Ziel). in BC
Fehlermeldung, wenn Zielberiech nicht vollständig mit RAM bestückt ist -> Rücksprung zur Kommandoeingabe MAT85+
219FCOPY01.8 SP1Kopiert einen Speicherinhalt
Anfangsadresse (Quelle): in DE
Endadresse (Quelle): in HL
Anfangsadresse (Ziel). in BC
Fehlermeldung, wenn Zielberiech nicht vollständig mit RAM bestückt ist -> Rücksprung zur Kommandoeingabe MAT85+
21A8COPY11.8 SP1Kopiert einen Speicherinhalt
Anfangsadresse (Quelle): in DE
Endadresse (Quelle): in BC
Anfangsadresse (Ziel). in HL
Fehlermeldung, wenn Zielberiech nicht vollständig mit RAM bestückt ist -> Rücksprung zur Kommandoeingabe MAT85+
2371FLOOP1.8 SP1Liest einen Wert von der Tastatur im Format (C-Register: 0=ASCII, 1=BIN, 2=DEZ, 3=HEX) in die Speicherzelle ein, deren Adresse im HL-Registerpaar steht.
Die Eingabe kann mit Space oder CR abgeschlossen werden.
Nach dem Return steht das Abschlusszeichen (Space/CR) im Akku. Der Inhalt des Registerpaares ist um eins erhöht.
Das eingelesene Zeichen steht in Register D
2815INCHAR1.8 SP1Liest ein Zeichen von der Tastatur. Falls CTRL-P eingegeben wurde, wird der Drucker umgeschaltet (Ein/Aus)
Kleinbuchstaben werden in Großbuchstaben gewandelt.
Nach dem Rücksprung steht das eingelesene Zeichen im Akku.
2823TSTINP1.8 SP1Prüft, ob das Zeichen im Akku in einer Wertetabelle enthalten ist. Die Anfangsadresse der Tabelle steht im HL-Registerpaar. Die Tabelle muss mit einem Null-Byte (00) enden.
Wenn das Zeichen in der Tabelle steht, ist das Zero-Flag beim Rücksprung gesetzt.
2878TSTBS1.8 SP1Prüft, ob das Zeichen im Akku 08 (Backspace) oder 7F (Delete) ist. Beim Rücksprung ist das Zero-Flag gesetzt, wenn einer der beiden Werte im Akku steht.
31F4R4 (CMPHD)1.8 SP1Vergleiche HL / DE
HL < DE : Zero: 0, Carry: 1
HL = DE : Zero: 1, Carry: 0
HL > DE : Zero: 0, Carry: 0
31F4CMPDH1.8 SP1Vergleiche HL / DE
HL < DE : Zero: 0, Carry: 0
HL = DE : Zero: 1, Carry: 0
HL > DE : Zero: 0, Carry: 1
320BR51.8 SP1Suche naechstes Zeichen ungleich Space ‘ ‘
326FTSTNUM1.8 SP1Wandelt eine Dezimalzahl im ASCII-Format in eine Binärzahl um
Die ASCII-Zahl muss um Speicher stehen. Wobei die höherwertigen Stellen die niedrigeren Speicherzellen belegen.
Beispiel für die Zahl 123
Adresse
E000 1
E001 2
E003 3
E004 00 als nicht numerisches Abschlusszeichen
Der erlaubte Wertebereich reicht von 0 bis 65535. Führende Leerzeichen sind erlaubt. Die Adresse der ersten Ziffer muss beim Unterprogrammaufruf im Registerpaar DE stehen. Die ASCII-Zahl muss mit einem nichtnumerischen Zeichen abgeschlossen sein. Die Binärzahl, die der ASCII-Zahl entspricht, befindet sich nach der Rückkehr im HL-Registerpaar. Die Anzahl der Ziffern steht im B-Register.
Fehler: wird keine Ziffer gefunden, so enthält das B-Register den Wert 00. Wird der zulässige Zahlenbereich überschritten, so enthält das B-Register den Wert $FF.
Nach dem Rücksprung wird daher folgender Fehlertest empfohlen:
INR b
JZ UEBERLAUF
DCR b
JZ KEINE_ZIFFER
3272TN01.8 SP1Wie TSTNUM, aber keine führenden Leerzeichen erlaubt
348CCLEAR1.8 SP1Loesche Basic-Programm und Variablen
3AFEDIVIDE1.8 SP1Dividiert den Inhalt des Registerpaares HL durch den Inhalt des Registerpaares DE. Das Ergebnis steht im Registerpaar B, der Rest im Registerpaar HL.
BC = HL / DE (Rest in HL)
Keine Fehlermeldung bei Division durch Null
3C43PRTNUM1.8 SP1Druckt eine Zahl in der dezimalen Schreibweise.
Die Zahl muss beim Unterprogrammaufruf als Zweierkomplement im HL-Registerpaar stehen (FFFF = -1)
Vor positiven Zahlen wird ein Leerzeichen ausgegeben, vor negativen Zahlen wird ein “-” ausgegeben.
Nach der Zahl wird ein Leerzeichen angehängt.
Zahlenbereich: -32768 bis +32767
3C46PRTLNN1.8 SP1Wie PRTNUM, Die Zahl im HL-Registerpaar muss jedoch in normaler Binärcodierung vorliegen (FFFF = 65535)
Ist beim Aufruf von PRTLNN das Sign-Bit im Flag-Register gleich Null, so wird eine positive Zahl ausgegeben.
Ist das Sign-Bit gleich Eins, so wird eine negative Zahl (mit voangestellten “-“) ausgegeben.
Beim Aufruf von PRTLNN + 1 wird das Sign-Bit automatisch auf Null (positiv) gesetzt.
3ECEDRUSWP1.8 SP1Drucker umschalten (Ein <-> Aus)
3EDADRUOFF1.8 SP1Drucker einschalten
3EF3DRUON1.8 SP1Drucker ausschalten
3FD6BCLEAR1.8 SP1Loesche Bildschirmspeicher
! Fehlerhafte Implementierung bei Video 8.2/8.4/TTY