Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
homecomputer:ac1:monitor31 [2018/08/21 09:32] – angelegt volkerphomecomputer:ac1:monitor31 [2023/01/04 11:37] – [Internes] volkerp
Zeile 1: Zeile 1:
 ====== Monitor ====== ====== Monitor ======
 +
 +{{:homecomputer:ac1:mon_v31.gif|}}
 +
 +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-Zeichen­satz, mit dem der Befehl X ist hierbei ein Zeichen aus dem ASCII-Zeichen­satz, mit dem der Befehl
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. Die einzelnen Befehle sind:+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, häufig benötigte Programme im restlichen bzw. erweiterten 
-EPROM-Speicher abzulegen, besteht natürlich auch, ist aber weitaus teurer als 
-die Nutzung des externen Magnetband­Speichers. 
  
 Das Monitorprogramm für den "AC1" entstand auf der Grundlage von [10]. Dazu Das Monitorprogramm für den "AC1" entstand auf der Grundlage von [10]. Dazu
 wurde der dort veröffentlichte hexadezimale Speicherausdruck (Hexlisting) wurde der dort veröffentlichte hexadezimale Speicherausdruck (Hexlisting)
 rückübersetzt, kommentiert und der Hardware des "AC1" angepaßt; also mit rückübersetzt, kommentiert und der Hardware des "AC1" angepaßt; also mit
-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, Funkschau 52 (1980), H.11 [10] Krake, H.: ZETBUG - ein komfortabler Z-80-Monitor, Funkschau 52 (1980), H.11
  
 +
 +**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)), die mit dem R-Befehl angezeigt werden kann, die Belegung des gesamten Registersatzes der CPU zum Zeitpunkt des RESET bzw. des Ansprungs der Adresse 0. Das kann bei der Fehlersuche in Programmen, die sich z.B. festgelaufen haben, und nur noch mit einem RESET abgebrochen werden können, hilfreich sein. Aus den Registerbelegungen lassen sich dann meist Schlüsse auf die Fehlerursache ziehen.
 +
 +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, ausgenommen den Sprung zur Monitoreingabeschleife, kehren in das aufrufende Programm zurück, siehe Tabelle 12. Das derzeitige Ende der Arbeitszellen des Monitors ist bei 187FH. Um noch etwas Platz für spätere Erweiterungen zu lassen, und um Kollisionen mit diesen Arbeitszellen zu vermeiden, sollten Anwenderprogramme erst ab 1900H beginnen. 
  
 ===== Erweiterbarkeit ===== ===== Erweiterbarkeit =====
 +Zum Abschluß der Beschreibung des Monitorprogramms noch einige Hinweise zu dessen Erweiterbarkeit, die sich ohne Eingriffe in das vorliegende Programm realisieren lassen. 
  
 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, Ausgabe Zeichen ) | 
-| 1808H - 180AH  Sprung zur RST 18H-Routine  ( Ausgabe Zeichenkette ) | +| 1808H - 180AH | Ansprung bei RST 18H ( Sprung zu PRNST, Ausgabe Zeichenkette ) | 
-| 180BH - 180DH  Sprung zur RST 20H-Routine  z.Z. vom Monitor nicht belegt | +| 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 NMIz.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, kehrt bei gedrückter Taste mit dem nach 30 ms anliegenden Kode zurück ( wartet nicht auf loslassen der Taste! ); wenn keine Taste gedrückt, erfolgt sofortige Rückkehr mit gesetztem Zero-Flag | 
 +| CALL 07FDH | GETCO1 | Sprung zur Monitoreingabeschleife, der Monitorstack wird neu initialisiert |
  
 +===== 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 | +<code> 
-| RST 10H | gibt das im Akku enthaltene Zeichen ( ASCII-Kode ) auf dem Bildschirm aus und rückt den Cursor um eins weiter | +d:>bdiff.exe mon_v31_16.bin mon_v31_32.bin 
-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 ........ |*17 11 FF*17 01 C0*07 ED ........ 
-CALL 07EBH | MS30 | Zeitschleife etwa 30 ms ( wird zur Tastenentprellung genutzt ), +0000B8: 1C C5 01 FF*03 ED B0 22 ......." 1C C5 01 FF*07 ED B0 22 ......." 
-Akku bei Return = 0 | +0001E0: 01 21 1D 02 01*E3*1D AF .!...... 01 21 1D 02 01*E0*FD AF .!...... 
-CALL 07EEH | OUTHEX | gibt den Akku als zweistellige Hexzahl auf dem Schirm aus, +0002D0: 03 3E 55 CD 30 03 06*06 .>U.0... 03 3E 55 CD 30 03 06*10 .>U.0... 
-kein Register wird zerstört | +000398: F9 06*06 2A 00 18 CD 26 ...*...& F9 06*10 2A 00 18 CD 26 | ...*...& 
-CALL 07F1H | OUTHL | gibt das HL-Register als vierstellige Hexzahl auf dem Schirm aus, +0007B8: 07*03*78*B1 28 18 18 F5 ..x.(... 07*78*B1*03 28 18 18 F5 .x..(... 
-kein Register wird zerstört | +</code>
-| 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 stehtDE wird entsprechend dekrementiert, der Akku wird zerstört | +
-CALL 07FAH | TASTE | testet den Tastaturstatus, kehrt bei gedrückter Taste mit dem nach 30 ms anliegenden Kode zurück wartet nicht auf loslassen der Taste! ); wenn keine Taste gedrückt, erfolgt sofortige Rückkehr mit gesetztem Zero-Flag | +
-| CALL 07FDH | GETCO1 | Sprung zur Monitoreingabeschleife, der Monitorstack wird neu initialisiert |+
  
 +Der Quellcode mon_v31_16-as.asm erzeugt auch die Version mon_v31_32.bin, wenn folgende Werte gesetzt werden:
  
 +<code>
 +LINES equ 32 ; bei 2K BWS
 +NAMELEN equ 16 ; max. Länge des Dateinamens bei LOAD/SAVE
 +RAMEND equ 0FFFDh ; Ende f. Kdo-Suche, auf RAM beschränkt
 +fkopatch equ 1 ; Korrektur in Find-Kommando
 +</code>
  
  • homecomputer/ac1/monitor31.txt
  • Zuletzt geändert: 2023/01/04 15:29
  • von volkerp