Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
homecomputer:ac1:monitor31 [2019/06/06 08:11] – [Erweiterbarkeit] volkerp | homecomputer:ac1:monitor31 [2023/01/04 15:29] (aktuell) – [Befehle] volkerp | ||
---|---|---|---|
Zeile 28: | 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 #. | + | Computer die Eingabe mit der Ausschrift WHAT? #. |
Fügt man dem Kennzeichen anstatt | Fügt man dem Kennzeichen anstatt | ||
Zeile 36: | Zeile 36: | ||
===== Befehle ===== | ===== Befehle ===== | ||
- | **A aaaa bbbb c (Arithmetik)** | + | ==== grundlegende Bedienung ==== |
- | Es werden Summe, Differenz, wenn möglich das Displacement, | ||
- | 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 U880-Befehlssatzes ist dann c z.B. gleich zwei. | ||
- | **B aaaa (Breakpoint)** | + | **J aaaa (Jump)** |
- | Dieser Befehl | + | Dieser Befehl |
- | 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 zeigen. Ist nach dem Starten des | + | |
- | Programms | + | **L aaaa ± (Load from Cassette)** |
- | Kontrolle geht wieder an den Monitor zurück. Zuvor werden alle Registerinhalte | + | |
- | der CPU in die RSA (Register | + | Der Computer versucht, ein Programm oder eine Datei, kurz File genannt, vom |
- | des R-Befehls anzeigen lassen. Das zu testende Programm | + | Bandgerätinterface in den Speicher zu laden. Das 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, |
+ | 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 | ||
+ | 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öglich, ein 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, | ||
**C aaaa bbbb cccc (Compare)** | **C aaaa bbbb cccc (Compare)** | ||
Zeile 63: | Zeile 86: | ||
Taste führt zum Abbruch. | Taste führt zum Abbruch. | ||
- | **D aaaa bbbb (Display | + | **M aaaa (Modify |
- | 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 ausgegeben. Zu Beginn jeder Zeile erfolgt die Ausgabe | + | beschrieben werden. Nach jedem Drücken der CR-Taste erscheinen die aktuelle |
- | jeweiligen Anfangsadresse, es 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, eingeben. Drückt man | ||
+ | laufend nur die CR-Taste, | ||
+ | Dateneingabe würde diese nach dem Drücken | ||
+ | ü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. | ||
- | **E aaaa (Execute Machine Programm)** | + | **P 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 |
- | 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 | + | |
- | gesprungen. | + | |
**F aa bb ce dd ... nn (Find String)** | **F aa bb ce dd ... nn (Find String)** | ||
Zeile 87: | Zeile 117: | ||
#. | #. | ||
- | **G (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 104: | Zeile 139: | ||
die Ausschrift CLR/RSA. | die Ausschrift CLR/RSA. | ||
- | **J aaaa (Jump)** | + | **B aaaa (Breakpoint)** |
- | Dieser Befehl | + | Dieser Befehl |
- | Adresse aaaa analog | + | 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 | ||
+ | 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 | + | **E aaaa (Execute Machine |
- | 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, | + | |
- | 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 |
+ | 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)** | + | **G (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/ | **R XX (Register Display/ | ||
Zeile 152: | 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 | + | **A aaaa bbbb c (Arithmetik)** |
- | Startadresse cccc unter dem Namen name (Länge max 6 Zeichen) auf Magnetband | + | |
- | abspeichem. | + | |
- | **T aaaa bbbb cccc (Transfer)** | + | Es werden Summe, Differenz, wenn möglich das Displacement, |
- | + | 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 |
- | Speicherbereich ab der Adresse bbbb für die Länge | + | relativen Sprungbefehle des U880-Befehlssatzes |
- | Ein Überlappen der beiden Speicherbereiche | + | |
- | 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 182: | 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 220: | Zeile 238: | ||
Im Ergebnis der Testphase haben sich beim Monitorprogramm noch einige Erweiterungen ergeben, die im folgenden aufgeführt sind. | 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, 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. | + | 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. | 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. | ||
Zeile 280: | Zeile 298: | ||
===== Versionsunterschiede ===== | ===== Versionsunterschiede ===== | ||
+ | |||
+ | 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. | ||
< | < | ||
Zeile 289: | Zeile 309: | ||
000398: F9 06*06 2A 00 18 CD 26 | ...*...& | 000398: F9 06*06 2A 00 18 CD 26 | ...*...& | ||
0007B8: 07*03*78*B1 28 18 18 F5 | ..x.(... | 07*78*B1*03 28 18 18 F5 | .x..(... | 0007B8: 07*03*78*B1 28 18 18 F5 | ..x.(... | 07*78*B1*03 28 18 18 F5 | .x..(... | ||
+ | </ | ||
+ | |||
+ | 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 ; | ||
</ | </ | ||