Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
homecomputer:ac1:monitor31 [2018/08/21 09:32] – angelegt volkerp | homecomputer:ac1:monitor31 [2023/01/04 11:37] – [Internes] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Monitor ====== | ====== Monitor ====== | ||
+ | |||
+ | {{: | ||
+ | |||
+ | fa 84/xx, Erweiterte Hinweise fa 85/1 | ||
Der Monitor des Amateurcomputers meldet sich mit der Überschrift "AC 1 U 880 - | Der Monitor des Amateurcomputers meldet sich mit der Überschrift "AC 1 U 880 - | ||
Zeile 8: | Zeile 12: | ||
der Programme, in denen man sich gerade befindet, verwendet man meist | der Programme, in denen man sich gerade befindet, verwendet man meist | ||
verschiedene Promptsymbole. So benutzt der Mini-Basic-Interpreter z.B. ein > | verschiedene Promptsymbole. So benutzt der Mini-Basic-Interpreter z.B. ein > | ||
- | (größer als) als Promptsymbol. Jeder Befehl wird dem Monitor in Form einer | + | (größer als) als Promptsymbol. |
+ | |||
+ | Jeder Befehl wird dem Monitor in Form einer | ||
Kommandozeile übergeben, die die Form # X aaaa bbbb cccc CR (Wagenrücklauf) hat. | Kommandozeile übergeben, die die Form # X aaaa bbbb cccc CR (Wagenrücklauf) hat. | ||
X ist hierbei ein Zeichen aus dem ASCII-Zeichensatz, | X ist hierbei ein Zeichen aus dem ASCII-Zeichensatz, | ||
Zeile 22: | Zeile 28: | ||
mit Hilfe der Backspacetaste (Rückschritt) noch korrigiert bzw. verändert | mit Hilfe der Backspacetaste (Rückschritt) noch korrigiert bzw. verändert | ||
werden. Ist der Befehl falsch oder nicht im Monitor enthalten, so quittiert der | werden. Ist der Befehl falsch oder nicht im Monitor enthalten, so quittiert der | ||
- | Computer die Eingabe mit der Ausschrift WHAT #. Fügt man dem Kennzeichen anstatt | + | Computer die Eingabe mit der Ausschrift WHAT #. |
+ | |||
+ | Fügt man dem Kennzeichen anstatt | ||
der Argumente einen : (Doppelpunkt) an, so kommen die letzten | der Argumente einen : (Doppelpunkt) an, so kommen die letzten | ||
- | zwischengespeicherten Argumente zur Anwendung. | + | zwischengespeicherten Argumente zur Anwendung. |
===== Befehle ===== | ===== Befehle ===== | ||
Zeile 199: | Zeile 207: | ||
Speicher des Rechners befinden muß, braucht dieser auch nur so groß zu sein, wie | Speicher des Rechners befinden muß, braucht dieser auch nur so groß zu sein, wie | ||
es das jeweilige Programm erfordert. | es das jeweilige Programm erfordert. | ||
- | |||
- | Die Möglichkeit, | ||
- | EPROM-Speicher abzulegen, besteht natürlich auch, ist aber weitaus teurer als | ||
- | die Nutzung des externen MagnetbandSpeichers. | ||
Das Monitorprogramm für den " | Das Monitorprogramm für den " | ||
wurde der dort veröffentlichte hexadezimale Speicherausdruck (Hexlisting) | wurde der dort veröffentlichte hexadezimale Speicherausdruck (Hexlisting) | ||
rückübersetzt, | rückübersetzt, | ||
- | entsprechenden Routinen für Tastatur, Bildschirm und Tonbandausgang versehen. In | + | entsprechenden Routinen für Tastatur, Bildschirm und Tonbandausgang versehen. |
- | der endgültigen Version wird er etwa 2 KByte EPROM und etwa 60 RAM-Zellen | + | |
- | belegen. Eine abgerüstete Variante, die nur das Einlesen und Anspringen von | + | |
- | Programmen ermöglicht und dann etwa 1 KByte EPROM benötigt, ist ebenfalls | + | |
- | denkbar. | + | |
[10] Krake, H.: ZETBUG - ein komfortabler Z-80-Monitor, | [10] Krake, H.: ZETBUG - ein komfortabler Z-80-Monitor, | ||
+ | |||
+ | **Erweiterte Hinweise zu den Befehlen des Monitor v3.1 Teil 12 (fa 85/1)** | ||
+ | |||
+ | Im Ergebnis der Testphase haben sich beim Monitorprogramm noch einige Erweiterungen ergeben, die im folgenden aufgeführt sind. | ||
+ | |||
+ | 1. Nach jedem RESET steht in der RSA ((register save area, Speicherbereich 1861H-187DH)), | ||
+ | |||
+ | Im Normalfall erfordert das, daß die RSA nach dem Einschaltreset mit dem I-Befehl zu initialisieren ist. Zumindest ist vor der Benutzung der Befehle E, G und J die Belegung des Stackpointers zu überprüfen. Sollte dieser auf einen nicht real existierenden Kellerspeicher zeigen, wird die Ausführung der oben genannten Testkommandos mit der Ausschrift INIT SP verweigert, da ansonsten die Benutzung dieser Kommandos zum Programmabsturz bzw. zu einer Fehlerausschrift führen würde. Mit dem I-Befehl wird der Stack automatisch auf das vorhandene obere Ende des RAM-Bereiches des Grundmoduls gesetzt. Also auf 2000H bzw. 1C00H, je nachdem, ob der RAM-Speicher verdoppelt wurde oder nicht. Wird infolge eines Fehlers in einen Speicherbereich gesprungen, der nicht vorhanden oder mit FFH belegt ist, erfolgt die Ausschrift ERROR AT xxxx (xxxx Adresse, auf der der Fehler auftrat). Für den Inhalt der RSA gilt dann das gleiche wie nach dem RESET. | ||
+ | |||
+ | 2. Die Befehle des Magnetbandinterface L, S und V können mit Control-C jederzeit abgebrochen werden. Bei den Befehlen L und V müssen dabei Impulse am Interfaceeingang anliegen, um die Abbruchfunktion zu gewährleisten. Beim Abspeichern eines Files mit dem Save-Befehl wird nach dem Abspeichern des Namens noch einmal für etwa 1,5 s der Kennton ausgegeben, und erst danach folgen die eigentlichen Daten. Beim Einlesen kann somit nach dem Erscheinen des Namens auf dem Schirm innerhalb dieses Kenntones mit Control-C abgebrochen werden, ohne daß schon Daten dieses Files im Speicher stehen. Damit soll das Auffinden eines bestimmten Files inmitten des Bandes erleichtert werden. Beim Einlesen eines Files von Kassette in den RAM wird geprüft, ob das jeweilige eingelesene Byte auch wirklich in den entsprechenden Speicherplatz übernommen wurde. Bei fehlerhaftem oder nicht vorhandenem RAM erfolgt dann die Ausschrift aaaa xx ff BREAK, und der Einlesevorgang wird abgebrochen (aaaa - Adresse des Speichers, xx Sollbyte, ff Fehlerbyte). | ||
+ | |||
+ | 3. Am Ende des Monitorprogramms ist ein Sprungverteiler angebracht, um z.B. für Erweiterungen des Monitorprogramms oder andere Anwendungen einige bereits im Monitor vorhandene allgemein verwendbare Unterprogramme nutzen zu können, auch wenn in eventuellen späteren Monitorvarianten diese eigentlichen Unterprogramme dann an ganz anderen Stellen im Speicher stehen können. Dieser Sprungverteiler und dessen Reihenfolge wird auch in späteren Veränderungen des Monitorprogramms erhalten bleiben. Aus den genannten Kompatibilitätsgründen sollte man deshalb eine direkte Nutzung dieser bzw. auch weiterer Unterprogramme des Monitors möglichst vermeiden. Alle nachfolgend erläuterten Unterprogramme, | ||
===== Erweiterbarkeit ===== | ===== Erweiterbarkeit ===== | ||
+ | Zum Abschluß der Beschreibung des Monitorprogramms noch einige Hinweise zu dessen Erweiterbarkeit, | ||
Die einzelnen Befehlsroutinen des Monitors werden nicht über | Die einzelnen Befehlsroutinen des Monitors werden nicht über | ||
Zeile 240: | Zeile 253: | ||
^ Systemadressen ^ ^ | ^ Systemadressen ^ ^ | ||
- | | 1800H - 1801H | Speicher für Cursorposition | + | | 1800H - 1801H | Speicher für Cursorposition | |
- | | 1802H - 1804H | Sprung zur RST 8H-Routine ( Eingabe Zeichen ) | | + | | 1802H - 1804H | Ansprung bei RST 08H ( Sprung zu INCH, Eingabe Zeichen ) | |
- | | 1805H - 1807H | Sprung zur RST 10H-Routine ( Ausgabe Zeichen ) | | + | | 1805H - 1807H | Ansprung bei RST 10H ( Sprung zu OUTCH, |
- | | 1808H - 180AH | Sprung zur RST 18H-Routine | + | | 1808H - 180AH | Ansprung bei RST 18H ( Sprung zu PRNST, |
- | | 180BH - 180DH | Sprung zur RST 20H-Routine | + | | 180BH - 180DH | Ansprung bei RST 20H z.Z. vom Monitor nicht belegt | |
- | | 180EH - 1810H | Sprung zur RST 28H-Routine z.Z. vom Monitor nicht belegt | | + | | 180EH - 1810H | Ansprung bei RST 28H z.Z. vom Monitor nicht belegt | |
- | | 1811H - 1813H | Sprung zur RST 30H-Routine z.Z. vom Monitor nicht belegt | | + | | 1811H - 1813H | Ansprung bei RST 30H z.Z. vom Monitor nicht belegt | |
- | | 1814H - 1816H | Sprung zur RST 38H-Routine ( Fehlermeldung ) | | + | | 1814H - 1816H | Ansprung bei RST 38H ( Fehlermeldung ) | |
- | | 1817H - 1819H | Sprung zur NMI-Routine z.Z. vom Monitor nicht belegt | | + | | 1817H - 1819H | Ansprung bei NMI, z.Z. vom Monitor nicht belegt | |
- | | 185BH - 185CH | Speicher für Argument 1 | | + | | 185BH - 185CH | Speicher für Argument 1 | |
- | | 185DH - 185EH | Speicher für Argument 2 | | + | | 185DH - 185EH | Speicher für Argument 2 | |
- | | 185FH - 1860H | Speicher für Argument 3 | | + | | 185FH - 1860H | Speicher für Argument 3 | |
+ | |||
+ | |||
+ | ^ nutzbare Unterprogramme ^ ^ | ||
+ | | RST 08H | INCH | holt ein Zeichen von der Tastatur und kehrt mit dem ASCII-Kode des Zeichens im Akku zurück | | ||
+ | | RST 10H | OUTCH | gibt das im Akku enthaltene Zeichen ( ASCII-Kode ) auf dem Bildschirm aus und rückt den Cursor um eins weiter | | ||
+ | | RST 18H | PRNST | gibt die dem Unterprogrammaufruf folgende Zeichenkette auf dem Bildschirm aus bis einschließlich dem Byte, bei dem Bit 7 gesetzt ist, bewegt den Cursor weiter, kehrt dann zum folgenden Byte zurück | | ||
+ | | CALL 07EBH | MS30 | Zeitschleife etwa 30 ms ( wird zur Tastenentprellung genutzt ), Akku bei Return = 0 | | ||
+ | | CALL 07EEH | OUTHEX | gibt den Akku als zweistellige Hexzahl auf dem Schirm aus\\ kein Register wird zerstört | | ||
+ | | CALL 07F1H | OUTHL | gibt das HL-Register als vierstellige Hexzahl auf dem Schirm aus\\ kein Register wird zerstört | | ||
+ | | CALL 07F4H | INLINE | liest eine Zeile, die mit cr abgeschlossen wird, auf dem Schirm ein und legt den Anfang der Zeile in den Zellen 181Ah...181BH ab\\ kein Register wird zerstört | | ||
+ | | CALL 07F7H | INHEX | wandelt eine maximal vierstellige in ASCII-Zeichen angegebene Zahl ab (DE) abwärts in deren hexadezimalen Wert um, der dann in HL steht. DE wird entsprechend dekrementiert\\ der Akku wird zerstört | | ||
+ | | CALL 07FAH | TASTE | testet den Tastaturstatus, | ||
+ | | CALL 07FDH | GETCO1 | Sprung zur Monitoreingabeschleife, | ||
+ | ===== Versionsunterschiede ===== | ||
- | nutzbare Unterprogramme | + | Der Monitor mon_v31_32.bin ist der an 4 Bytes auf den vergrößerten BWS angepasste mon_v31_16.bin. Außerdem wurde die Filenamenslänge auf 16 Zeichen erhöht und der Suchbereich für externe Kommandos erweitert. |
- | | RST 08H | holt ein Zeichen von der Tastatur und kehrt mit dem ASCII-Kode des Zeichens im Akku zurück | | + | < |
- | | RST 10H | gibt das im Akku enthaltene Zeichen ( ASCII-Kode ) auf dem Bildschirm aus und rückt den Cursor um eins weiter | | + | d:> |
- | | RST 18H | gibt die dem Unterprogrammaufruf folgende Zeichenkette auf dem Bildschirm aus bis einschließlich dem Byte, bei dem Bit 7 gesetzt ist, bewegt den Cursor weiter, kehrt dann zum folgenden Byte zurück | + | 000090:*13 11 FF*13 01 C0*03 ED | ........ |
- | | CALL 07EBH | MS30 | Zeitschleife etwa 30 ms ( wird zur Tastenentprellung genutzt ), | + | 0000B8: 1C C5 01 FF*03 ED B0 22 | ......." |
- | Akku bei Return = 0 | | + | 0001E0: 01 21 1D 02 01*E3*1D AF | .!...... |
- | | CALL 07EEH | OUTHEX | gibt den Akku als zweistellige Hexzahl auf dem Schirm aus, | + | 0002D0: 03 3E 55 CD 30 03 06*06 | .> |
- | kein Register wird zerstört | + | 000398: F9 06*06 2A 00 18 CD 26 | ...*...& |
- | | CALL 07F1H | OUTHL | + | 0007B8: 07*03*78*B1 28 18 18 F5 | ..x.(... | 07*78*B1*03 28 18 18 F5 | .x..(... |
- | kein Register wird zerstört | + | </ |
- | | CALL 07F4H | INLINE | + | |
- | kein Register wird zerstört | + | |
- | | CALL 07F7H | INHEX | wandelt eine maximal vierstellige in ASCII-Zeichen angegebene Zahl ab (DE) abwärts in deren hexadezimalen Wert um, der dann in HL steht. DE wird entsprechend dekrementiert, | + | |
- | | CALL 07FAH | TASTE | testet den Tastaturstatus, | + | |
- | | CALL 07FDH | GETCO1 | Sprung zur Monitoreingabeschleife, | + | |
+ | Der Quellcode mon_v31_16-as.asm erzeugt auch die Version mon_v31_32.bin, | ||
+ | < | ||
+ | LINES equ 32 ; | ||
+ | NAMELEN equ 16 ; | ||
+ | RAMEND equ 0FFFDh ; | ||
+ | fkopatch equ 1 ; | ||
+ | </ | ||