Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
homecomputer:ac1:monitor31 [2018/08/21 09:32] – angelegt volkerphomecomputer:ac1:monitor31 [2023/01/04 15:29] (aktuell) – [Befehle] 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 =====
  
-**A aaaa bbbb c (Arithmetik)**+==== grundlegende Bedienung ====
  
-Es werden Summe, Differenz, wenn möglich das Displacement, (relative Distanz) 
-für einen Sprungbefehl aus den ersten beiden Argumenten sowie der dezimale Wert 
-des ersten Arguments, berechnet. c gibt die Länge des Sprungbefehls an. Für die 
-relativen Sprungbefehle des U­880-Befehlssatzes ist dann c z.B. gleich zwei. 
  
-**aaaa (Breakpoint)**+**aaaa (Jump)**
  
-Dieser Befehl ist nützlich für das Testen von bzw. die Fehlersuche in +Dieser Befehl führt ebenfalls zum Ansprung eines Anwenderprogramms ab der 
-Programmen. Er setzt ein Softwarehaltepunkt auf die Adresse aaaa. aaaa muß dabei +Adresse aaaa analog dem E-Befehl, jedoch ohne Breakpointaktivierung. 
-immer auf das erste Byte eines Befehls zeigenIst nach dem Starten des + 
-Programms diese Adresse erreichterfolgt die Ausschrift BREAK AT aaaa # und die +**L aaaa ± (Load from Cassette)** 
-Kontrolle geht wieder an den Monitor zurückZuvor werden alle Registerinhalte + 
-der CPU in die RSA (Register Save Areagerettetso daß sie sich z.B. mittels +Der Computer versucht, ein Programm oder eine Datei, kurz File genannt, vom 
-des R-Befehls anzeigen lassenDas zu testende Programm wird durch den Break- +Bandgerätinterface in den Speicher zu ladenDas Argument aaaa± bewirkt, das 
-Befehl nicht zerstört. Man kann es dann beispielsweise mit dem Go-Befehl +File um diesen Offset verschoben vom ursprünglichen Speicherbereich einzulesen, 
-fortsetzen.+zum Beispiel dann, wenn der Speicherbereich, von dem das File abgespeichert 
 +wurde, im eigenen Computer nicht vorhanden ist. Sonst, also in der Regel, kann 
 +man dieses Argument weglassen. Wird der Ladevorgang erfolgreich beendet, so 
 +trägt diese Routine die Startadresse des Files, die auch auf dem Bildschirm 
 +erscheint, in die Speicherzelle für das erste Argument ein. Das geladene 
 +Programm läßt sich dann einfach mit J: anspringen
 + 
 +**S aaaa bbbb cccc name (Save to Cassette)** 
 + 
 +Hiermit kann man eine File ab der Adresse aaaa bis zur Adresse bbbb mit der 
 +Startadresse cccc unter dem Namen name (Länge max 6 Zeichen) auf Magnetband 
 +abspeichern. 
 + 
 +**V (Verify with Cassette)** 
 + 
 +Hiermit ist es möglichein auf Magnetband abgespeichertes File noch einmal mit 
 +dem Speicheroriginal zu vergleichen. Dadurch sind z.B. Datenfehler aufgrund 
 +mangelhaften Bandmaterials vermeidbar. 
 + 
 + 
 +==== Speichereditor ==== 
 + 
 + 
 +**D aaaa bbbb (Display Memory; Dump)** 
 + 
 +Der Speicherinhalt von der Adresse aaaa bis zur Adresse bbbb wird als Hexdump 
 +auf dem Bildschirm ausgegeben. Zu Beginn jeder Zeile erfolgt die Ausgabe der 
 +jeweiligen Anfangsadresse, es folgen 16 Datenbytes.
  
 **C aaaa bbbb cccc (Compare)** **C aaaa bbbb cccc (Compare)**
Zeile 55: Zeile 86:
 Taste führt zum Abbruch. Taste führt zum Abbruch.
  
-**aaaa bbbb (Display Memory; Dump)**+**aaaa (Modify Memory)**
  
-Der Speicherinhalt von der Adresse aaaa bis zur Adresse bbbb wird als Hexdump +Hiermit kann der RAM-Speicher ab der Adresse aaaa byteweise angezeigt und neu 
-auf dem Bildschirm ausgegebenZu Beginn jeder Zeile erfolgt die Ausgabe der +beschrieben werden. Nach jedem Drücken der CR-Taste erscheinen die aktuelle 
-jeweiligen Anfangsadressees folgen 16 Datenbytes.+Adresse und das zugehörige Byte. Nach dem Promptsymbol läßt sich ein neues Byte 
 +oder auch eine Bytefolge, durch Leerzeichen getrennt, eingebenDrückt man 
 +laufend nur die CR-Taste, erfolgt die Speicheranzeige Byte für Byte. Bei einer 
 +Dateneingabe würde diese nach dem Drücken der CR-Taste in den Speicher 
 +übertragen und der Schreibvorgang überprüft. Sollte das neue Byte nicht vom 
 +Speicher übernommen worden seinweil er z.B. im EPROM-Bereich liegt oder gar 
 +nicht vorhanden ist, so erfolgt eine Fehlermeldung. Man schließt den M-Befehl 
 +durch die Eingabe eines. (Punkt) ab. Dabei gelangt die zuletzt bearbeitete 
 +Speicheradresse in die Speicherstelle für das zweite Argument. Dadurch läßt sich 
 +der bearbeitete Bereich mit D: noch einmal betrachten.
  
-**aaaa (Execute Machine Programm)**+**aaaa bbbb cc (Pattern)**
  
-Das Maschinenprogramm ab Adresse aaaa läuft unter Breakpointkontrolle. Das +Dieser Befehl füllt den Speicher von der Adresse aaaa bis zur Adresse bbbb mit 
-heißt, die Register der CPU werden entsprechend der aktuellen Werte der RSA +dem Bitmuster cc auf.
-geladen, der Softwarebreakpoint wird aktiviert und dann wird zur Adresse aaaa +
-gesprungen.+
  
 **F aa bb ce dd ... nn (Find String)** **F aa bb ce dd ... nn (Find String)**
Zeile 79: Zeile 117:
 #. #.
  
-**(Go on)**+**T aaaa bbbb cccc (Transfer)** 
 + 
 +Mit diesem Befehl kann der Speicherinhalt ab der Adresse aaaa in den 
 +Speicherbereich ab der Adresse bbbb für die Länge von cccc Bytes kopiert werden. 
 +Ein Überlappen der beiden Speicherbereiche ist zulässig. 
 +Beispiel: T 1900 1901 80 verschiebt den Speicherinhalt ab 1900H für 80H Byte um eines nach oben. 
 + 
 + 
 +==== Debugger ====
  
-Dieses Kommando funktioniert analog dem E-Befehl. Die Programmausführung wird 
-hierbei ab der Adresse im PC fortgesetzt. Falls ein Breakpoint zuvor eingegeben 
-wurde, wird dieser aktiviert. 
  
 **I (lnitialize)** **I (lnitialize)**
Zeile 96: Zeile 139:
 die Ausschrift CLR/RSA. die Ausschrift CLR/RSA.
  
-**aaaa (Jump)**+**aaaa (Breakpoint)**
  
-Dieser Befehl führt ebenfalls zum Ansprung eines Anwenderprogramms ab der +Dieser Befehl ist nützlich für das Testen von bzw. die Fehlersuche in 
-Adresse aaaa analog dem E-Befehl, jedoch ohne Breakpointaktivierung.+Programmen. Er setzt ein Softwarehaltepunkt auf die Adresse aaaa. aaaa muß dabei 
 +immer auf das erste Byte eines Befehls zeigen. Ist nach dem Starten des 
 +Programms diese Adresse erreicht, erfolgt die Ausschrift BREAK AT aaaa # und die 
 +Kontrolle geht wieder an den Monitor zurück. Zuvor werden alle Registerinhalte 
 +der CPU in die RSA (Register Save Area) gerettet, so daß sie sich z.B. mittels 
 +des R-Befehls anzeigen lassen. Das zu testende Programm wird durch den Break- 
 +Befehl nicht zerstört. Man kann es dann beispielsweise mit dem Go-Befehl 
 +fortsetzen.
  
-**L aaaa ± (Load from Cassette)** 
  
-Der Computer versucht, ein Programm oder eine Datei, kurz File genannt, vom +**E aaaa (Execute Machine Programm)**
-Bandgerätinterface in den Speicher zu laden. Das Argument aaaa± bewirkt, das +
-File um diesen Offset verschoben vom ursprünglichen Speicherbereich einzulesen, +
-zum Beispiel dann, wenn der Speicherbereich, von dem das File abgespeichert +
-wurde, im eigenen Computer nicht vorhanden ist. Sonst, also in der Regel, kann +
-man dieses Argument weglassen. Wird der Ladevorgang erfolgreich beendet, so +
-trägt diese Routine die Startadresse des Files, die auch auf dem Bildschirm +
-erscheint, in die Speicherzelle für das erste Argument ein. Das geladene +
-Programm läßt sich dann einfach mit J: anspringen.+
  
-**M aaaa (Modify Memory)**+Das Maschinenprogramm ab Adresse aaaa läuft unter Breakpointkontrolle. Das 
 +heißt, die Register der CPU werden entsprechend der aktuellen Werte der RSA 
 +geladen, der Softwarebreakpoint wird aktiviert und dann wird zur Adresse aaaa 
 +gesprungen.
  
-Hiermit kann der RAM-Speicher ab der Adresse aaaa byteweise angezeigt und neu 
-beschrieben werden. Nach jedem Drücken der CR-Taste erscheinen die aktuelle 
-Adresse und das zugehörige Byte. Nach dem Promptsymbol läßt sich ein neues Byte 
-oder auch eine Bytefolge, durch Leerzeichen getrennt, eingeben. Drückt man 
-laufend nur die CR-Taste, erfolgt die Speicheranzeige Byte für Byte. Bei einer 
-Dateneingabe würde diese nach dem Drücken der CR-Taste in den Speicher 
-übertragen und der Schreibvorgang überprüft. Sollte das neue Byte nicht vom 
-Speicher übernommen worden sein, weil er z.B. im EPROM-Bereich liegt oder gar 
-nicht vorhanden ist, so erfolgt eine Fehlermeldung. Man schließt den M-Befehl 
-durch die Eingabe eines. (Punkt) ab. Dabei gelangt die zuletzt bearbeitete 
-Speicheradresse in die Speicherstelle für das zweite Argument. Dadurch läßt sich 
-der bearbeitete Bereich mit D: noch einmal betrachten. 
  
-**P aaaa bbbb cc (Pattern)**+**(Go on)** 
 + 
 +Dieses Kommando funktioniert analog dem E-Befehl. Die Programmausführung wird 
 +hierbei ab der Adresse im PC fortgesetzt. Falls ein Breakpoint zuvor eingegeben 
 +wurde, wird dieser aktiviert.
  
-Dieser Befehl füllt den Speicher von der Adresse aaaa bis zur Adresse bbbb mit 
-dem Bitmuster cc auf. 
  
 **R XX (Register Display/Modify)** **R XX (Register Display/Modify)**
Zeile 144: Zeile 178:
 ihres Symbols dargestellt. ihres Symbols dargestellt.
  
-**S aaaa bbbb cccc name (Save to Cassette)**+==== Sonstige ====
  
-Hiermit kann man eine File ab der Adresse aaaa bis zur Adresse bbbb mit der +**A aaaa bbbb (Arithmetik)**
-Startadresse cccc unter dem Namen name (Länge max 6 Zeichenauf Magnetband +
-abspeichem.+
  
-**T aaaa bbbb cccc (Transfer)** +Es werden Summe, Differenz, wenn möglich das Displacement, (relative Distanz
- +für einen Sprungbefehl aus den ersten beiden Argumenten sowie der dezimale Wert 
-Mit diesem Befehl kann der Speicherinhalt ab der Adresse aaaa in den +des ersten Arguments, berechnet. c gibt die Länge des Sprungbefehls anFür die 
-Speicherbereich ab der Adresse bbbb für die Länge von cccc Bytes kopiert werden+relativen Sprungbefehle des U­880-Befehlssatzes ist dann c z.B. gleich zwei.
-Ein Überlappen der beiden Speicherbereiche ist zulässig. +
-Beispiel: T 1900 1901 80 verschiebt den Speicherinhalt ab 1900H für 80H Byte um eines nach oben. +
- +
-**V (Verify with Cassette)** +
- +
-Hiermit ist es möglich, ein auf Magnetband abgespeichertes File noch einmal mit +
-dem Speicheroriginal zu vergleichen. Dadurch sind z.B. Datenfehler aufgrund +
-mangelhaften Bandmaterials vermeidbar.+
  
 **Z** **Z**
Zeile 174: Zeile 198:
 werden kann. Damit ist es z.B. möglich, die Startadresse für den F-Befehl frei werden kann. Damit ist es z.B. möglich, die Startadresse für den F-Befehl frei
 zu wählen. zu wählen.
 +
 +
  
 ===== Internes ===== ===== Internes =====
Zeile 199: Zeile 225:
 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 271:
  
 ^ 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.1534843924.txt.gz
  • Zuletzt geändert: 2018/08/21 09:32
  • von volkerp