APPLICATIONSPROGRAMMATION ★ Happy Computer ★

Supermon CPC-1002 (Happy Computer)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

»Supermon CPC-1002« – Der Maschi nensprache-Monitor

Jeder, der das ROM seines Schneiders oder Maschinencode-Routinen untersuchen will, findet hier ein professionelles Werkzeug zum Abtippen. Kleine Routinen in Z80-Assembler können natürlich auch programmiert werden.

»Supermon CPC-1002« ist ein Monitor, der neben allgemein üblichen Funktionen (Speicherbereiche auflisten, Inhalte ändern und Maschinenprogramme starten) über einige leistungsstarke Anweisungen zum Laden, Speichern und Kopieren bestimmter Programm- und Datendateien verfügt. Viel Wert wurde auf möglichst einfache und schnelle Handhabung gelegt. Zahlreiche Befehle dienen deshalb ausschließlich der Fehlersuche in selbsterstellten Programmen. Breakpoints können gesetzt und gelöscht werden, die Inhalte der Z80-Register werden auf Tastendruck sichtbar und können gegebenenfalls vom Anwender verändert werden. Natürlich ist auch ein schneller Disassembler integriert, des weiteren lassen sich Speicherbereiche beliebig verschieben oder mit Daten belegen.

Eine Reihe von Befehlen sind an spezielle Eigenschaften der Schneider-Computer angepaßt. So kann mittels eines einzigen Kommandos zwischen verschiedenen Speicherbänken umgeschaltet werden. Auf diese Art und Weise kann man sehr einfach einen Blick ins Betriebssystem- oder Basic-ROM werfen. Auch die Analyse beliebiger Erweiterungsmodule ist möglich. Andere Befehle schalten zwischen 40- und 80-Zei-chen-Darstellung um oder wählen die Aufzeichnungsgeschwindigkeit bei Kassettenbetrieb. In Erweiterungs-ROMs enthaltene externe Kommandos lassen sich ebenfalls aufrufen, was besonders bei Verwendung eines Disketten-Laufwerks von Vorteil ist. Alle DOS-Kommandos können nämlich direkt vom Monitor aus aufgerufen werden.

Der Supermon CPC-1002 ist sowohl bei reinem Kassettenbetrieb (CPC 464) als auch bei Verwendung eines Diskettenlaufwerks voll funktionsfähig. Allerdings ist der Bildaufbau speziell an den 464 angepaßt. Alle Routinen zum Laden, Speichern oder Kopieren von Dateien sowie die »CAT«-Funktion arbeiten wahlweise mit Kassetten- oder Diskettenlaufwerk zusammen.

Weitere Leistungsmerkmale des Supermon CPC-1002 sind:

  • Aufruf von Maschinenprogrammen mit vorherigem Laden der Z80-Register
  • Laden von Programmen in beliebige Speicherbereiche
  • Anzeige aller relevanten Header-Informationen beim Laden
  • Erweiterbar durch beliebig belegbaren »User Jump«
  • Hexadezimale Addition und Subtraktion möglich
  • Berechnung refativer Sprungdistanzen
  • 7/8-Bit-ASCII-Modus wählbar
  • Alle Monitor-Funktionen wahlweise auch über Drucker auszugeben.

Bevor Sie ans Ausprobieren dieses Monitors gehen, sollten Sie die folgende Einführung in das Arbeiten mit dem Supermon gelesen haben. Bitte denken Sie immer daran, daß Sie mit diesem Monitor ohne Einschränkung Ihr gesamtes Schneider-System auf einer sehr Hardware-nahen Ebene in der Hand ha-ben. Fehlbedienungen oder Irrtümer bei der Dateneingabe können daher leicht zum »Absturz« des Systems und damit zum vollständigen Datenverlust führen.

Listing 2 ist der Basic-Lader für »Supermon CPC-1002«. Das Binärfeld wird ab Speicherzelle 8000 hex erzeugt und automatisch unter dem Namen »SMON.BIN« gespeichert, Listing 1 ist das Startprogramm und muß auf der Kassette direkt vor »SMON.BIN« stehen. Nach dem Programmstart (ohne Listing 1 mit »CALL&8000«) meldet sich der Monitor mit


SUPERMON CPC-1002

Copyright (c) 1985 by Happy Computer

Links unter den beiden Titelzeilen erscheint das Zeichen »>«, gefolgt von einem Cursor als sogenanntes »Prompt«-Symbol, also als Zeichen, daß der Supermon bereit ist, Befehle anzunehmen. Diese Befehle bestehen durchweg aus einem Zeichen, das bei den meisten Kommandos eine leicht zu merkende Abkürzung für die volle Befehlsbezeichnung ist (zum Beispiel »L« für »Load«). Bei einigen Befehlen genügt schon die Eingabe dieses Zeichens, um eine Aktion auszulösen (die Enter-Taste ist also nicht notwendig). Die meisten Monitor-Kommandos benötigen aber zumindest eine Adresse oder weitere Parameter. Dann wird nach dem Befehlssymbol ein Leerzeichen ausgegeben, und der Cursor erscheint wieder, um anzuzeigen, daß jetzt zusätzliche Eingaben erwartet werden. Alle Zahlenangaben müssen grundsätzlich hexadezimal (ohne vorangestelltes »&«) eingegeben werden — in der Regel vierstellig, da es sich zumeist um Adressen handelt, ln einigen Fällen (beim Laden und Speichern von Programmen) muß auch ein Programmname angegeben werden, der vom Monitor mit »FILENAME ?« erfragt wird. Derartige Namenseingaben müssen immer mit der Enter-Taste abgeschlossen werden, da der Computer ja nicht voraussehen kann, wie lang der Name werden wird. Im übrigen stehen bei Namenseingaben alle vom Basic her bekannten Editiermöglichkeiten zur Verfügung.

Anders verhält es sich bei den (hexadezimalen) Adressen-und Dateneingaben. Bei diesen braucht die Enter-Taste nicht extra betätigt werden, sondern der gewählte Befehl wird nach Eingabe der letzten Ziffer sofort ausgeführt. Es werden dabei nur hexadezimale Zahlen angenommen und alle anderen Eingaben ignoriert.

Falls Sie sich bei der Dateneingabe einmal vertippt haben sollten, können Sie den gewählten Befehl entweder durch Drücken von Esc oder Enter abbrechen. Der Monitor meldet in einem solchen Fall »NOT OK«, zum Zeichen, daß die Funktion nicht ordnungsgemäß durchgeführt wurde. Die gleiche Meldung erscheint, wenn ein Befehl zwar ordnungsgemäß erkannt und ausgeführt worden ist, sich aber während der Ausführung eine Fehlerbedingung ergab (beispielsweise, wenn Sie während des Ladens einer Programmdatei die Esc-Taste gedrückt haben oder wenn ein Lesefehler auftrat).

Wurde eine Funktion ordnungsgemäß zu Ende geführt, dann meldet sich der Monitor mit »OK« zurück. In beiden Fällen — also auch nach der »NOT 0 «-Meldung — ist der Monitor sofort wieder bereit zur Ausführung weiterer Befehle,

Befehlsübersicht Supermon CPC-1002

  • A ASCII-Dump B Breakpoint setzen C Copy (Datei kopieren)
  • D Disassembler F Find {Bytefolgen suchen)
  • G Go (Routine ausführen)
  • H Header anzeigen
  • J Jump (Programm aufrufen)
  • K Kill (Breakpoint löschen)
  • L Load (Programm laden)
  • M Memory Dump O On/Off (Kass. Moto rein/aus)
  • R Register anzeigen S Save (Programm speichern)
  • T Text eingeben U User Jump ausführen W Write (Bytes schreiben)
  • ! Bye (Monitor verlassen)
  • : RAM/ROM-Bank wählen
  • | Externes Kdo. aufrufen
  • @ CATalog-Funktion
  • # Drucker ein
  • & 40/80 Zeichen umschalten
  • ( User Jump definieren
  • ) User Jump anzeigen
  • 0 SPEED 0 wählen (Kassette)
  • 1 SPEED 1 wählen (Kassette)
  • . 7/8-Bit-Modus umschalten
  • + Hexadezimal addieren
  • — Hexadezimal subtrahieren
  • ↑ Sprungdistan2 berechnen
  • X Speicherbereich verschieben
  • Y Yank (Progr. verschob, laden)
  • Z Fill (Speicherbar, belegen)
  • Esc Funktion abbrechen
  • Enter Monitor-Warmstart
  • |BASIC Basic-Kaltstart
  • Ctrl C Monitor-Kaltstart

Externe DOS-Kommandos (nur bei abgeschlossenem Floppy-Laufwerk)

  • |A Aktuelles Laufwerk ist Laufwerk A
  • |B Aktuelles Laufwerk ist Laufwerk ß
  • |DRIVE Aktuelles Laufwerk wählen
  • |DIR Directory auf listen
  • |ERA Datei löschen
  • |REN Datei umbenennen
  • |DISC LOAD/SAVE von/auf Diskette
  • |DISC.IN LOAD von Diskette
  • |DISC.OUT SAVE auf Diskette
  • |TAPE LOAD.'SAVE von/auf Kassette
  • |TAPE.IN LOAD von Kassette
  • |TAPE .OUT SAVE auf Kassette
  • |CPM CP/M aufrufen [danach kann mit S-MON nicht mehr gearbeitet werden)
  • |USER (Von S-MON aus nicht verwendbar)

Die Supermon-Kommandos

Befehlsgruppe 1: Allgemeine Monitor-Kommandos

Die Befehlsgruppe 1 umfaßt Kommandos zum Auflisten, Verändern und Verschieben von Speicherbereichen sowie zum Aufruf von Maschinencode-Programmen, Ferner ist die Umschaltung zwischen verschiedenen ROM/RAM-Bänken vorgesehen.

ASCII-Dump (Speicherbereich als ASCII-Zeichen listen):

A < Anfangsadresse > — Nach Eingabe einer Adresse wird der Speicher-Inhalt von der gewünschten Stelle an als ASCII-Zeichenfolge aufgelistet. Die Inhalte der Speicherstelien werden dabei als ASCII-Zeichen interpretiert und am Bildschirm dargestellt. In einem Maschinenprogramm enthaltene Textpassagen lassen sich damit mühelos und schneit auffinden und identifizieren.

Memory-Dump (Speicherbereich hexadezimal listen):

M < Anfangsadresse > — Nach Eingabe einer Adresse wird der Speicher-Inhalt von der gewünschten Stelle an in hexadezimaler Schreibweise (Hex-Dump) aufgelistet. Um Text- und Tabellen-Bereiche leichter identifizieren zu können, erscheinen am rechten Rand jeder Zeile die dargestellten Speicher-zellen-lnhalte nochmals als ASCII-Zeichenfolge.

Disassembler (Speicherbereich als Z80-Mnemonics listen):

D < Anfangsadresse > — Nach Eingabe einer Adresse wird derSpeicherinhait von der gewünschten Stelle an als Maschinencode-Programm interpretiert und in Form von Z80-Mnemonics (Assemblerbefehlen) aufgelistet. Um einen mögliehst umfassenden Überblick zu gewährleisten, werden zusätzlich die entsprechenden Bytes in hexadezimaler Form und als ASCII-Zeichen ausgegeben.

Da Z80-Befehle einschließlich Operand bis zu 4 Byte lang sein können, kann es beim D-Befeh! passieren, daß die von Ihnen eingegebene Anfangsadresse nicht mit dem ersten Byte eines Z80-Befehls übereinstimmt. In diesem Falle werden erfahrungsgemäß die ersten zwei bis drei Befehle falsch disassembliert; danach hat sich der Disassembler eingependelt und übersetzt wieder korrekt. Wenn Sie also nicht genau sagen können, ob die von Ihnen angegebene Adresse genau der Anfang eines Z80-Befehls war, dann sollten Sie die ersten paar ausgegebenen Zeilen mit Vorsicht genießen. Oft empfiehlt es sich in solchen Fällen, mit der Disassemblierung mehrere Bytes vor der eigentlich interessierenden Stelle zu beginnen, um ein verläßliches Ergebnis zu erhalten.

Besondere Aufmerksamkeit sollten Sie Datenfeldern, Tabellen und Texten innerhalb von Maschinenprogrammen widmen, da der Disassembler in derartigen Programmteilen natürlich keine brauchbaren Ergebnisse liefern kann. Der vom Disassembler erzeugte Z80-Assembter-Code ist weitgehend kompatibel zu den meisten Z80-Assemblern. Zwei Unterschiede sind jedoch anzumerken: Alle Zahlenausgaben des Disassemblers sind hexadezimal, jedoch nicht weiter gekennzeichnet. Die meisten Assembler verlangen ein nachgestelltes »H« als Kennzeichnung für hexadezimale Zahlenwerte, vereinzelt auch ein vorangestelltes »$«, »&« oder»# «. Aus Gründen der verbesserten Übersicht werden bei relativen Sprüngen nicht die Sprungdistanzen, sondern direkt das Sprungziel ausgegeben.

Write Bytes (Speicherinhalte ändern):

W < Anfangsadresse > — Mit diesem Kommando können Speicherinhalte geändert werden. Nach Eingabe einer Adresse können beliebig viele Bytes in hexadezimaler Form eingegeben werden, die von der angegebenen Speicherstelle an abgelegt werden. Jedes Byte wird als ein Paar von Hexadezimalziffern eingegeben. Nach einem eingegebenen Byte wird automatisch ein Leerzeichen am Bildschirm ausgegeben, um die Übersichtlichkeit zu wahren.

Nach Eingabe der zweiten Ziffer eines Bytes wird dieses sofort an der entsprechenden Adresse im Speicher abgelegt und überschreibt dabei den vorherigen Speicherinhalt. Bei Abbruch der Eingabe nach dem Tippen der ersten Ziffer bleibt der Speicher unverändert. Der W-Befehl wird in erster Linie zur Änderung einzelner Bytes im Speicher oder zur Eingabe kompletter Maschinenprogramme benutzt.

Text (Text in Speicher schreiben):

T < Anfangsadresse > — Mit diesem Kommando können Sie beliebige Texte direkt in den Speicher schreiben. Auch Control-Zeichen (mit Ausnahme von Ctrt-M (= CHR$(13) = Enter) sind erlaubt. Nach Eingabe einer Adresse können Sie den Text sofort direkt eintippen.

Beachten Sie aber bitte unbedingt, daß Sie dabei direkt in den Speicher schreiben, das heißt jedes eingetippte Zeichen wird sofort im Speicher abgelegt und überschreibt die vorher dort stehenden Informationen. Es bestehen daher auch keine Editier-Möglichkeiten außer Neuschreiben fehlerhafter Passagen. Dieses Kommando ist als Hilfe zum einfachen Einfügen und Ändern von Texten in Maschinenprogrammen gedacht.

Find (Bytefolgen suchen):

F < Anfang > < Ende > < Byte1 > < Byte2 > < Byte3 > < Byte 4 > — Dieses Kommando sucht in einem anzugebenden Speicherbereich nach Bytefolgen mit einer Länge von maximal vier Bytes. Dazu müssen Anfang und Ende des Suchbereichs angegeben werden sowie die bis zu vier zu suchenden Bytes. Das erste der vier zu suchenden Bytes muß naturgemäß in jedem Falle angegeben werden, für jedes einzelne der drei folgenden Bytes kann auf eine Spezifizierung des Wertes verzichtet werden, indem die Enter-Taste betätigt wird. Statt eines Wertes erscheint am Bildschirm für das betreffende Byte nur »XX«. Ein so gekennzeichnetes Byte spielt während des Suchvorganges die Rolle eines Jokers, das heißt es kann jeden beliebigen Ein-Byte-Wert repräsentieren.

Ein Beispiel soll das verdeutlichen: Nehmen wir an, Sie wollten wissen, an welchen Stellen ein Maschinenprogramm, das im Speicher von 2000 bis 4000 hex steht, andere Routinen im Bereich A000 bis A0FF hex aufruft. Das heißt also, Sie suchen zwischen 2000 und 4000 hex alle CALL-Befehle (Z80-Code »CD«), bei denen das High-Byte der Adresse A0hex ist. Diese Befehle findet der Supermon für Sie in Sekundenbruchteilen durch Eingabe von »F 2000 4000 CD XX A0 XX«, wobei Sie natürlich statt »XX« jeweils die Enter-Taste drücken. Diese Eingabe findet alle Foigen aus 4 Byte zwischen 2000 und 4000 hex, die mit »CD« beginnen und deren drittes Byte »A0« ist. Nach Eingabe des vierten zu suchenden Bytes wird der angegebene Speicherbereich nach passenden Bytefolgen durchsucht. Wird eine Übereinstimmung gefunden, so wird die gefundene Bytefolge samt Adresse ausgegeben und die Suche fortgesetzt,

Jump (Maschinenprogramm aufrufen):

J < Startadresse > — Dieses Kommando dient zum Aufruf von Maschinencode-Programmen. Nach Eingabe einer Startadresse wird die an dieser Adresse stehende Routine wie ein Unterprogramm gestartet. Wenn das Programm keine Stack-Manipulation vornimmt, bewirkt ein »RET«-Befehl die Rückkehr zum Supermon CPC.

Da der J-Befehl die Kontrolle vollständig an das aufgerufene Maschinenprogramm übergibt, ist bei der Anwendung dieses Befehls besondere Sorgfalt geboten. Durch fehlerhafte oder unüberlegte Anwendung kann es leicht zum vollständigen »Absturz« des Computersystems kommen.

Im Gegensatz zum G-Befehl (GO, siehe Befehlsgruppe 2) wird der Monitor-Registerbereich durch das J-Kommando nicht verändert,

Transfer (Speicherbereich verschieben):

X < Blockanfang > < Blockende > < Zieladresse > — Dieses Kommando dient zum Verschieben von Speicherblöcken. Dazu müssen drei Adressen angegeben werden. Die ersten beiden Adressen bezeichnen dabei Anfang und Ende des zu verschiebenden Speicherbereichs, die dritte Adresse bezeichnet das Verschiebeziei, also die Adresse, zu der der Speicherbereich verschoben werden soll.

Beispiel 1: X 3000 3100 2000

Dieser Befehl kopiert den Speicherbereich von 3000 bis 3100 hex (einschließlich) in den Bereich 2000 bis 2100 hex.

Beispiel 2: X 3000 3FFF 3001

Dieser Befehl verschiebt den Speicherbereich von 3000 bis 3FFF hex (einschließlich) um ein Byte nach oben. Das X-Kommando arbeitet »intelligent«, das heißt abhängig von der Wahl der Zieladresse wird die Verschiebung stets so vorgenommen, daß der gewählte Speicherblock unverändert übertragen wird (vergleiche Beispiel 2).

Fill (Speicherbereich mit Konstante füllen):

Z < Anfang > <Ende> < Byte > —Der Speicherbereich von < Anfang > bis < Ende > wird mit einem konstanten < Byte > aufgefüllt. Besondere Vorsicht ist bei Anwendung dieses Kommandos geboten, um nicht versehentlich wichtige Speicherbereiche zu überschreiben,

Beispiel: Z C000 FFFF 00

Dieser Befehl löscht den Bildschirm, indem der gesamte Video-Speicher mit Null-Bytes gefüllt wird.

Switch Bank (Speicherbank schalten):

< Bank-Auswahl-Adresse > — Mit diesem Kommando gibt es keine unzugänglichen Ecken mehr in Ihrem Schneider-Computer. Sie können jedes eingesetzte ROM- oder RAM* Modul anwählen, insgesamt bis zu 252 Speicherbänke. Weiterhin können Sie mit diesem Kommando bestimmen, ob das Betriebssystem-ROM (Adreßbereich 0000 bis 3FFF hex) ein-oder ausgebtendet ist, desgleichen für das obere ROM (Adreßbereich COOO bis FFFF hex). Im oberen ROM-Bereicr wird je nach gewählter ROM-Auswahl-Adresse das Basic-ROM oder ein externes ROM oder auch ein RAM-Bereich eingeblendet.

Die ROM-Auswahl-Adresse ist ein Ein-Byte-Wert, der für Werte von 0 bis 252 (00 bis FB hex) eine ROM-Bank auswählt. Das eingebaute Basic hat die ROM-Auswahl-Adresse 0. das Amsdos- und CP/M-ROM im Floppy-Controller die ROM-Auswahl-Adresse 7. Da die Adreßleitungen in der Normalkonfiguration nicht vollständig decodiert sind, werden beide ROMs auch unter anderen Adressen eingeblendet. Die ROM-Aus-wahl-Adresse kann vier Werte mit speziellen Bedeutungen annehmen, die aber die eingestellte ROM-Auswahl nicht verändern:

  • FC hex Oberes ROM ein, unteres ROM ein
  • FD hex Oberes ROM ein, unteres ROM aus
  • FE hex Oberes ROM aus, unteres ROM ein
  • FF hex Oberes ROM aus, unteres ROM aus

Mit ROM-Auswahl-Adresse »FF« stellen Sie den normalen Zustand Ihres Schneiders wieder her.

Alle Routinen können mit Enter, Esc oder der Leertaste unterbrochen werden. Ein nachfolgender Druck auf Esc bricht das Kommando ab, jede andere Taste läßt das Programm fortfahren.

Befehlsgruppe 2: Debug-Kommandos

Die Befehle der zweiten Gruppe dienen in erster Linie der Fehlersuche und dem Austesten von Maschinencode-Routi-nen. Zum besseren Verständnis dieser Befehle sollen zuvor zwei mit dem »Debugging« (Fehlersuche) zusammenhängende Begriffe geklärt werden:

Breakpoint:

Ein Breakpoint (Unterbrechungspunkt) kann auf jeden Z80-Maschinenbefehl gesetzt werden. Erreicht das Maschinenprogramm während des Probelaufs diesen Punkt, dann wird es unterbrochen und es erscheint eine »Breaks-Meldung, gefolgt von der Adresse, an der die Unterbrechung erfolgte. Außerdem werden die Inhalte aller Z80-Register angezeigt, so daß der Programmierer sofort einen Überblick über den internen Zustand des Prozessors bei Erreichen des Breakpoints hat. Der Breakpoint ist beim Supermon durch den vom Betriebssystem nicht verwendeten »RST 6«-Befehl realisiert. Nach Eingabe der gewünschten Breakpoint-Adresse mit dem B-Kommando wird der ursprüngliche Inhalt dieser Adresse gerettet und anschließend der Code für den »RST 6*-Befehl eingeschrieben. Der Z80-Prozessor verzweigt bei Ausführung des »RST 6« zur Adresse 0030 hex, wo bei der Initialisierung des Monitors ein Sprung zur Breakpoint-Routine abgelegt wurde

Verwenden Sie daher den »RST 6«-Befehl nicht in eigenen Programmen, wenn diese mit dem Supermon CPC ausgetestet werden sollen.

Registerspeicher:

Die Breakpoint-Routine des Supermon rettet alle Primärregister des Z80 sowie die beiden Indexregister in einem spezielien Speicherbereich innerhalb des Monitors, den Registerspeicher. Dieser belegt die Adressen 7110 bis 711D hex. Der Registerspeicher wird bei Auftreten eines Breakpoints mit den CPU-Registern geladen, desgleichen bei der Rückkehr von einem G-Befehl. Bei Aufruf eines Maschinencode-Programms mittels G-Befehl werden vor dem eigentlichen Programmstart die Z80-Register aus dem Registerbereich geladen. Der Registerspeicher kann mittels R-Kommando aufgelistet werden oder per M-Kommando (zum Beispiel »M 8110«). Um den Registerspeicher mit bestimmten Startwerten zu füllen, benutzen Sie bitte das W-Kommando (zum Beispiel »W 8110«), Die Register sind 16-Bit-weise in der Reihenfolge AF, BC, DE, HL, IX, IV im Registerspeicher abgelegt.

Breakpoint setzen:

B < Adresse > — Mit diesem Befehl kann in ein Maschinenprogramm ein Unterbrechungspunkt (Breakpoint) gesetzt werden. Der Breakpoint muß immer auf das erste Byte eines Z80-Befehls gesetzt werden, da er sonst nicht die gewünschte Wirkung erzielt, sondern im Gegenteil zu unvorhersehbaren Ergebnissen bei der Programmausführung führen kann. Es ■cann jeweils nur ein Breakpoint gesetzt sein. Beim Versuch, weitere Breakpoints mittels B-Kommando zu setzen, erscheint die Meldung »NOT Ok«.

Kill Breakpoint (Breakpoint löschen):

K - Das K-Kommando dient zum Löschen eines gesetzten Breakpoints.

Go (startet Maschinenprogramm):

G < Startadresse > — Mit dem G-Kommando wird ein Maschinenprogramm an der gewählten Adresse gestartet, wobei zuvor die Prozessor-Register aus dem Registerspeicher (sie-ne oben) geladen werden. Damit ist es möglich, Routinen zu starten, die bestimmte Registerinhalte erwarten. Der Befehl ist ebenfalls nützlich zum »wieder-starten« eines Programms nach Unterbrechung durch einen Breakpoint. Es muß dazu nur der Breakpoint mit dem K-Befehl gelöscht werden; ein anschließender G-Befehl auf die Break-Adresse setzt das Maschinenprogramm dann ab der Unterbrechungsstelle mit der richtigen Registerbelegung wieder fort. Die gestartete Maschinencode-Routine kehrt nach einem »RET«-Befehl wieder zum Monitor zurück, wobei die Z80-Register im Registerspeicher abgelegt werden. Eine eventuelle Meldung »BREAK«, gefolgt von einer Adresse und einer Auflistung der Z80-Register-lnhalte bedeutet, daß das gestartete Maschinenprogramm auf einen Breakpoint gestoßen ist.

Register anzeigen:

R — dieser Befehl listet die Inhalte der im Registerspeicher festgehaltenen Z80-Register auf, wie sie vom G-Befehl verwendet werden. Eine Änderung der Registerinhalte ist über den W-Befehl möglich (siehe auch unter »Registerspeicher«).

User-Jump ausführen:

U — diese Funktion führt ein vom Anwender per (-Kommando definiertes Unterprogramm aus. Das U-Kommando ist insbesondere nützlich, um den Befehlssatz des Supermon zu erweitern, oder um häufig gebrauchte, selbstgeschriebene Routinen schnell und sicher aufrufen zu können. Die User-Routine wird sofort ausgeführt,

User-Jump definieren:

( < Startadresse > — dieses Kommando legt die Startadresse einer Anwender-Routine zur Erweiterung des Supermon-Befehlssatzes fest. Nach diesem Kommando wird beim U-Befehl stets die hier angegebene Startadresse angesprungen. Die User-Routine muß mit »RET« abgeschlossen sein und darf den Stack nicht manipulieren. Ist beim Verlassen der User-Routine das Carry-Flag gesetzt, dann wird nach dem U-Befehl die Meldung »Ok« ausgegeben, andernfalls die Meldung »NOT Ok«, Um den User-Jump abzuschalten, geben Sie die Startadresse 0000 ein; es wird dann kein User-Jump mehr ausgeführt.

User-Jump anzeigen:

) — der augenblicklich definierte User-Jump kann mit diesem Kommando angezeigt werden. 0000 bedeutet, daß kein User-Jump definiert ist.

Befehlsgruppe 3: Laden und Speichern

Die Befehle dieser Gruppe dienen dem Datenverkehr zwischen Computer und Disketten-Kassettenlaufwerk. Bei Kassettenbetrieb muß beachtet werden, daß die Namenskonvention für Kassetten- und Diskettendateien unterschiedlich ist Kassettendateien dürfen beliebige Namen mit einer Länge von maximal 16 Zeichen haben, Namen für Diskettendateien bestehen dagegen aus maximal 8 Zeichen plus 3 Zeichen Namenserweiterung {Extension). Dateiname und Extension müssen durch einen Punkt ».« getrennt sein. Gültige Disketten-Dateinamen sind also zum Beispiel »TEST.BAS« oder »PROGRAMMBIN«. Die Konvention für Diskettendateinamen ist mit der Namenskonvention unter CP/M weitgehend identisch.

Um Probleme bei der Übertragung speziell von Kassette zu Diskette zu vermeiden, werden alle Namen von Kassettenprogrammen vom Supermon CPC automatisch an das Namens-format für Diskettendateien angepaßt. Aus »TESTPROGRAMM« wird damit »TESTPROG.RAM«.

Dem Kassettenbenutzer sei im Hinblick auf die spätere Anschaffung eines Diskettenlaufwerks empfohlen, von vorne-herein nur Namen entsprechend der Disketten-Konvention zu verwenden.

Folgende Dateitypen werden von den Schneider-Computern unterstützt:

00 Basic-Programm

01 Basic-Programm (protected)

02 Maschinensprache-Programm

03 Maschinensprache-Programm (protected)

04 Bildschirmdatei

05 Bildschirmdatei (protected)

16 Sequentielle Datei (mit OPENOUT erzeugt, kann nicht als Programm geladen werden)

Load (Programm laden):

L < Filename > — dieses Kommando dient zum Laden eines Programmes von Kassette oder Diskette Es wird automatisch in den gleichen Speicherplatz geladen, aus dem es abgespeichert wurde. Während des Ladevorganges werden alle relevanten Informationen aus dem File-Header (Vorspann) angezeigt. Wenn Sie nicht sicher sind, ob das zu ladende Programm eventuell wichtige Daten {oder sogar den Supermon) überschreibt, sollten Sie das Y-Kommando verwenden.

Yank (Programm verschoben laden):

Y < Filename> — das Y-Kommando funktioniert weitgehend analog zum L-Befehl. Allerdings wird hier das Programm nicht unbedingt an den Original-Speicherplatz geladen, sondern kann an eine beliebige Adresse geladen werden. Dazu werden wiederum alle Header-Informationen ausgegeben. Anschließend erfragt das System mit »LOAD:« die Speicheradresse, an die das Programm geladen werden soll. Das Y-Kommando ist besonders nützlich, wenn das zu ladende Programm sich normalerweise in einem ungünstigen Speicherbereich befindet sich also beispielsweise mit dem Supermon

CPC speichermäßig überschneiden würde. Mit dem Y-Befehl kann das Programm in einem solchen Falle in einen »ungefährlichen« Speicherbereich geladen und dort analysiert werden. In der Regel ist es dort aber nicht lauffähig.

Header-Informationen ausgeben:

H — dieses Kommando listet die wichtigen Header-Informa-tionen zu dem zuletzt geladenen Programm auf.

Copy (Programm kopieren):

C — das C-Kommando kopiert das zuletzt geladene File mit den Parametern, wie sie im H-Kommando aufgeiistet werden.

Save (Programm speichern):

S < Filename > < Filetyp > < Anfangsadresse >

< Endadresse > < Startadresse > — dieses Kommando dient zum Speichern von Programmen oder beliebigen Speicherbereichen auf Kassette oder Diskette. Angegeben werden müssen hierzu der gewünschte Filename, der Filetyp (vergleiche L-Befehl), der Speicherbereich, der aufgezeichnet werden soll (< Anfangsadresse > bis < Endadresse >) und schließlich noch die Startadresse, Die Startadresse ist die Adresse, ab der ein Maschinenprogramm gestartet werden muß (falls die zu speichernde Datei kein Maschinensprache-Programm darstellt, ist die Startadresse 0000).

Catalog (Inhalt einer Kassette oder Diskette anzeigen):

@ — das @-Kommando entspricht der CAT-Funktion in Basic. Der Inhalt der eingelegten Kassette/Diskette wird am Bildschirm aufgelistet.

Speed 0 (Aufzeichnungsgeschwindigkeit 0 wählen):

0 — das Kommando wählt eine Aufzeichnungsgeschwindigkeit von 1 000 Baud für Kassetten-Operationen (entspricht »SPEED WRITE 0« in Basic).

Speed 1 (Aufzeichnungsgeschwindigkeit 1 wählen):

1 — das Kommando wählt eine Aufzeichnungsgeschwindigkeit von 2000 Baud für Kassettenoperationen (entspricht »SPEED WRITE 1« in Basic).

On/Off (Kassettenmotor ein/aus):

0 — dieses Kommando schaltet den Kassettenmotor wechselweise ein/aus. Es dient zur Feinjustierung der Kassette auf eine bestimmte Bandstelle.

Externe Kommandos (DOS-Kommandos) | < Kommandoname >, < Parameter 1 >, < Parameter 2 > Mit »|« können (wie von Basic aus) externe Kommandos, in erster Linie natürlich die DOS-Kommandos, aufgerufen werden.

Ohne Diskettenlaufwerk (CPC 464) wird nur das Kommando »iBASIC« unterstützt, das die Kontrolle wieder an das eingebaute Schneider-Basic abgibt. Nach diesem Kommando kann nicht mehr mit dem Monitor gearbeitet werden. Strings können übrigens direkt übergeben werden — nicht umständlich mittels Variablen, wie normalerweise bei Erweiterungsbefehlen.

Beispiele:

»|ERA, NAME.BIN* löscht das File »NAME BIN* von der Diskette.

»|REN,NEUNAME, ALTNAME« benennt das File »ALTNAME« in »NEUNAME« um.

Befehlsgruppe 4: Verschiedenes

Bye (Verlassen des Monitors):

! — der !-Befehl bewirkt ein »weiches« Verlassen des Supermon CPC durch einen Sprung zum Basic-Warmstart (Ready-Routine). Alle Programme und Speicherinhalte bleiben dabei erhalten.

Drucker einschalten:

# — Das #-Kommando bewirkt, daß der Drucker während der Ausführung des nächsten Monitor-Befehls zugeschalte: wird. Hierzu muß der Drucker angeschlossen und eingeschaltet sein. Das gewünschte, mit dem Drucker zu protokollierende Monitor-Kommando kann direkt im Anschluß an den # -Befehl gegeben werden. Falls die Meldung »NOT OK« erscheint, ist der Drucker nicht richtig angeschlossen.

40/80-Zeichen-Umschaltung:

& — der &-Befehl schaltet zwischen 40- und 80-Zeichen-Modus hin und her.

7/8-Bit-ASCII-Umschaltung:

. — der . —Befehl bewirkt eine Umschaltung der Anzeige von

7- auf 8-Bit-ASCII-Modus und umgekehrt. Im 8-Bit-Modus werden alle in Auflistung vorkommenden Zeichen vom Monitor als vollständige 8-Bit-Zeichen gelistet. Im 7-Bit-Modus wird Bit 7 jedes Zeichens auf Null gesetzt; es ergibt sich ein 7-Bit-ASCII-Code.

Der 7-Bit-Modus ist insbesondere zur Suche von Befehlslisten in Maschinenprogrammen zu verwenden, bei denen Bit 7 einzelner Zeichen gesetzt ist, wodurch die Zeichenfolgen im

8-Bit-Modus unleserlich werden.

Bei Druckerausgabe wird ausschließlich der 7-Bit-Modus verwendet.

Hex Addition:

+ < Wert 1 > < Wert 2 > — dieses Kommando ermöglicht die Addition zweier vierstelliger Hexadezimal-Zahlen. Es ist bei Adressenberechnungen häufig nützlich.

Hex Subtraktion:

— < Wert 1 > < Wert 2 > — dieses Kommando ermöglicht die Subtraktion zweier vierstelliger Hexadezimal-Zahlen.

Relative Sprungdistanz berechnen:

↑ < Sprungadresse > < Sprungziel > — Dieses Kommando berechnet das »Distanz-Byte« bei relativen Sprunganweisungen aus der Adresse, an der der Sprungbefehl steht und der Adresse, zu der gesprungen werden soll. Das Kommando ist bei der Eingabe kleiner Maschinenprogramme eine häufig benutzte Arbeitserleichterung. Falls die Meldung »NOT OK« auftritt, liegt das Sprungziel außerhalb des beim Z80 mit relativen Sprüngen zu erreichenden Bereichs.

Monitor-Warmstart:

Enter — die Enter-Taste ohne Befehlseingabe bewirkt einen Monitor-Warmstart.

Monitor-Kaltstart

Ctrl-C — die Tastenkombination Ctrl und C bewirkt einen Monitor-Kaltstart, also eine neue Initialisierung des Monitors. Ein solcher Kaltstart hilft in vielen Fällen, wo die Bildschirmanzeige durch nicht einwandfrei lautende Maschinenprogramme durcheinander geraten ist.

Volker Everts, HC

★ PUBLISHER: Happy Computer
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER-SCHNEIDER SONDERHEFT
★ AUTHOR: Volker Everts
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Supermon  CPC-1002    (Happy  Computer-Sonderheft)    GERMANDATE: 2021-03-19
DL: 155
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Amstrad Moniteur (Amstrad Magazine)
» Applications » Disc-Monitor (CPC Amstrad International)
» Applications » Micro-Monitor (Computer Schau)
» Applications » Micropower - Machine Code Monitor
» Applications » Moniteur de Disquette (CPC Revue)
» Applications » Disk-Monitor
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 591 millisecondes et consultée 842 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.