APPLICATIONSPROGRAMMATION ★ CPC-Monitor ★

CPC - Monitor (CPC Amstrad International)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 ★ 

Der CPC-Monitor ist ein komfortabler Maschinensprache-Monitor, der zu 100 % in Maschinensprache ist, und nur etwas mehr als 7 KByte belegt Er beinhaltet einen Assembler, Disassambler (mit der Möglichkeit zur Ausgabe auf dem Drucker), Monitor-Teil, eine Verschiebroutine (in welcher Sprünge in den zu verschiebenden Block automatisch auf die neue Adreesse angepaßt werden), eine Breakpoint-Option, sowie noch einige zusätzliche Befehle, die das Programmieren erleichtern. Eine genaue Erklärung der Befehle folgt in der Anleitung.

Der CPC-Monitor beginnt an der Adresse &8EB0 und endet an Adresse &AB0F; die Adressen &AB10 - &AB7F werden zum Abspeichern von Flags und Registerinhalten benutzt. Eine genauere Speicherbelegung finden Sie im Anhang.

Anleitung

1. Eingabe und Sicherung des Programms

Nachdem Sie das Basic-Listing des CPC-Monitors eingegeben und gestartet haben, werden die Werte in den Data-Zeilen ab Adresse &8EB0 in den Speicher gePOKEd. Sollten Sie beim Abtippen einen Fehler gemacht haben, so bekommen Sie die Zeilennummer, in der der Fehler auftrat, ausgedruckt und brauchen nur diese Zeile auf den Fehler hin zu untersuchen.

Allerdings sollten Sie beim Eintippen der Prüfsumme am Ende jeder Zeile besonders aufpassen, da es sonst zu unerwarteten Fehlern kommen kann. Sind nun alle Data-Zeilen fehlerfrei, so sollten Sie zunächst einmal das Basic-Listing mit < SAVE"CPC-MON-DATAS" > und anschließend das Maschinenprogramm mit < SAVE"CPC-MON",b,&8EB0,&AB0F < &8EB0 > abspeichern. Nun können Sie den CPC-Monitor mit CALL &8EB0 starten. Der CPC-Monitor wurde auf einem Schneider CPC 464 geschrieben; da der CPC 664 und der CPC 6128 ein erweitertes 464-RAM haben, müßte das Programm auch auf ihnen laufen.

2. Laden und Starten des Programms

Wenn Sie dann wieder einmal den CPC-Monitor laden wollen, so müssen Sie eingeben, um das Programm vor dem Überschreiben durch das Betriebssystem zu schützen.

Danach geben Sie < LOAD"CPC-MON" >.ein. Ist dann der CPC-Monitor nach dem Ladevorgang im Speicher, können Sie ihn mit starten oder Ihr selbsterstelltes Maschinenprogramm noch in den Speicher laden, bevor Sie den CPC-Monitor aufrufen. Nach dem Starten befinden Sie sich in der Menueebene des CPC-Monitors und können mit der Programmierung beginnen.

Doch zuvor noch eine Beschreibung des Bildschirm-aufbaus.

3. Der Bildschirmaufbau des CPC-Monitor

In der obersten Zeile steht der Programmname, sowie mein Name. In der untersten Zeile finden Sie die Kürzel der wichtigsten Befehle. Am rechten Bildrand sind die Inhalte der Z80-Register aufgeführt. Diese haben nach dem Aufruf des Monitors zufällige Werte ohne jegliche Aussagekraft. Sie werden sich sicherlich fragen, wieso sie dann ausgedruckt werden. Das hat folgenden Grund: Sie dienen der Fehlersuche in Ihrem erstellten Programm, nachdem Sie es vom CPC-Monitor aus, aufgerufen haben. Denn dann werden die letzten dem Register zugeschriebenen Werte ausgedruckt. Hat dann ein Register nicht den erhofften Wert, so wurde es falsch benutzt. Die zwei Register sind invers dargestellt

Des weiteren gibt es noch zwei Fenster. Das erste und wichtigste liegt in der linken Bildschirmhälfte und dient zum Assemblieren, Disassemblieren, Verschieben, usw. Das zweite liegt in der rechten Bildschirmhälfte und reicht bis zum Registerausdruck. Es dient ausschließlich zum Betrieb des Monitorteils - doch davon später.

4. Programmierbefehle allgemein...

sind beim CPC-Monitor nicht ganze Wörter, wie etwa beim Basic, sondern Kürzel von einem Zeichen (Buchstaben) Länge, die einen Befehl symbolisieren. Bei einigen Befehlen werden noch Adressen oder Werte verlangt, welche Sie dezimal oder hexadezimal eingeben können. Es spielt auch keine Rolle, ob Sie Groß- oder Kleinbuchstaben benutzen.

Falls der Befehl noch Adressen oder Werte verlangt, so müssen Sie nach dem Kürzel noch ein Zeichen unterbringen (z.B. Leerzeichen oder Punkt). Um einen Befehl in der Menueebene abzuschließen, drücken Sie < ENTER >. Sollte Ihre Eingabe nicht korrekt sein, so können Sie sie mit < CLR > und < DEL > bearbeiten oder einfach überschreiben, indem Sie den Cursor mittels der Pfeiltasten auf die gewünschte Position innerhalb der Zeile bringen und dann die neuen Zeichen eingeben. 5. Programmierbefehle im einzelnen Nun folgt eine Aufstellung aller beim CPC-Monitor verfügbaren Befehle:

a. Der Assembler... : wird mit < A > und einer Adresse aufgerufen: Bsp: A 1000.

Dann wird diese Adresse in hexadezimaler Form ausgegeben und ein Maschinensprachebefehl erwartet. Ist derein-gegebene Befehl nicht korrekt, so wird die Adresse nochmals ausgegeben und es wird ein neuer Maschinenbefehl oder ein < S > (um zur Menueebene zurückzukehren) erwartet.

Selbstverständlich sind alle Z80-Befehle uneingeschränkt benutzbar.

Ist der Befehl korrekt, so wird er übersetzt und die Werte (bzw. der Wert) ab der angegebenen Adresse im Speicher abgelegt. Danach wird die Adresse um die entsprechende Anzahl der Werte erhöht und in der nächsten Zeile ausgegeben. Die Bearbeitungszeit ist kaum feststellbar! Noch eine Anmerkung zum JR: Sie können den Offset entweder als Distanz (JR $+100/ JR S-10) oder als Adresse (JR &9000) eingeben. Haben Sie eine Adresse eingegeben, so wird die Distanz aus dieser und der aktuellen Adresse errechnet. Die Distanz darf nur zwischen -126 und + 129 liegen.

Außerdem stehen Ihnen noch zwei zusätzliche Befehle zur Verfügung:

  1. übergibt eine Zeichenkette (deren ASCII-Werte)
  2. übergibt eine bis zu 16 Bit hohe Zahl. Bei beiden Befehlen muß ein Doppelpunkt nach dem Kürzel stehen.


b. Der Disassembler : Wird auf drei Arten mit und einer oder zwei Adresse aufgerufen.

  1. D adr: Der Befehl, der an dieser Adresse steht, wird übersetzt und danach wird in die Menueebene zurückgesprungen.
  2. D adr-: Ab der angegebenen Adresse werden zehn Befehle übersetzt, danach wird eine Eingabe von Ihnen erwartet. Ist diese Eingabe NOTEGAL < S >, wird der Vorgang wiederholt, ansonsten wird in die Menueebene gesprungen.
  3. D anfadr.-endadr.: Funktioniert wie 2., wird jedoch die endadr. erreicht, so wird automatisch abgebrochen.

Falls nun ein Befehl 4 Bytes belegt (Adresse 1000 bis 1003) und Sie D 1002 eingegeben haben, so bekommen Sie trotzdem den richtigen Ausdruck, da der CPC-Monitor jede Adresse, die nicht auf das erste Byte eines Maschinenbefehls zeigt, auf das erste Byte anpaßt.

c. Der Drucker... : wird wie der Disassembler auf drei Arten mit < P > statt < D > aufgerufen «P> weil Printer). Da Sie die Printer-Routine nicht mit < S > abbrechen können, ist die zweite Art nicht empfehlenswert.

d. Der Monitor-Teil... :kann wie der Disassembler auf drei Arten mit statt

aufgerufen werden. Jedoch wird nach Beendigung des Ausdrucks nicht in die Menueebene zurückgesprungen, es können vielmehr Speicherinhalte, die im Monitor-Fenster stehen, verändert werden. Sie tun dies, indem Sie den Cursor mittels der vier Pfeiltasten über die zu verändernde Zahl bringen und den neuen Wert einfach darüberschreiben.

Befindet sich der Cursor in den zuletzt ausgedruckten Zeilen, können Sie mittels < ENTER > die nächsten acht Werte ausdrucken lassen und bearbeiten. Erst wenn Sie sich im Monitor-Fenster befinden, gelangen Sie durch < S > wieder zurück in die Menueebene. Von dort aus können Sie durch < M > ohne Adresse wieder zum Monitor-Fenster zurückkehren (dies ist nur möglich, wenn Sie vorher schon einmal den Monitor-Teil aufgerufen haben, da ansonsten noch keine Werte und Adressen ausgedruckt werden).

e. Umschalten : < U > eingeben genügt. Zunächst werden Sie keine Veränderung bemerken.

Wenn Sie aber den Monitor-Teil aufrufen, werden Sie feststellen, daß an die Stelle der Registerinhalte nun die entsprechenden ASC-Zeichen der ausgelesenen Werte gedruckt werden. Sie sollten deswegen erst < U > drücken, wenn Sie die Registerinhalte nicht mehr brauchen (Werte kleiner als 32 werden als Punkt ausgedruckt). Nochmaliges Eingeben von < U > bewirkt, daß wieder umgeschaltet wird.

f. Run : Ein von Ihnen geschriebenes Programm kann mittels < R > und einer Adresse aufgerufen werden (R 2000). Ihr Programm muß mit RET enden, damit richtig zurückgesprungen wird.

Sie sollten besonders auf die Richtigkeit des Stack Pointers (SP = Stapelzeiger) achten, denn wenn Sie ein PUSH oder ein POP zuviel ausführen, kommt es sehr leicht zum Absturz. Um dem zu entgehen, sollten Sie anfangs die Rücksprungadresse retten (mit POP HL/LD(Adresse),HL] und vor dem Rücksprung wieder auf den Stapel legen [durch: LD HL,(Adresse)/PUSH HL].

g. Der Breakpoint : Um die Fehlersuche in Ihrem Programm zu erleichtern, können Sie an eine beliebige Stelle Ihres Programms einen Breakpoint (sinngemäß: Kontrollpunkt) setzen, indem Sie und eine Adresse eingeben. Ab dieser Adresse steht dann ein Sprung zum CPC-Monitor. In diesem Zusammenhang ist der Ausdruck der Registerinhalte bei der Fehlersuche sehr nützlich Hinweis: Der Breakpoint belegt 3 Bytes, so daß Sie darauf achten sollten, daß der Breakpoint nicht wichtige Befehle überschreibt, deren Fehlen beim Ansprung zu Fehlergebnissen führen würden. Den Breakpoint können Sie durch löschen. Die drei durch den Breakpoint ersetzen Bytes werden zurückgegeben. Auch durch die Eingabe eines neuen Breakpoints wird der alte gelöscht, ebenso wie es auch beim Rücksprung in Basic geschieht, damit Sie Ihr Programm ohne Breakpoint abspeichern können.

h. Basic : Durch < B > kehren Sie ins Basic zurück und können Ihr geschriebenes Programm mit <SAVE"name",B,anfadr,länge> abspeichern oder an einem Basicprogramm schreiben.

i. Füllen : Füllt einen Block mit einem Wert - z.B. F 1000,2000,32 füllt die Speicherzellen von 1000 - 2000 mit 32. Allgemein: F anfadr.,endadr, wert.

j. Verschieben : Verschiebt einen Block an eine neue Adresse. Wird mi < V> und drei durch Komma getrennte Adresse aufgerufen:

V anfadr, endadr., neüadr.. anfadr. und endadr. legen den zu verschiebenden Block fest, während neueadr den neuen Blockanfang festlegt

k. Eingeben : Dient zur Unterstützung der Verschieb-Routine. Falls Si< einen Block an eine neue Adresse verschoben haben unc diesen Block von Ihrem Programm aus anspringen woller (mit JP oder Call) müßten Sie alle Sprungadressen, die ir diesen Block zeigen, anpassen. Genau dies wird von diese Routine übernommen. Und zwar geschieht dies folgen dermaßen:

Sie müssen dem CPC-Monitor vor Benutzung der Ver schieb-Routine einen Block angeben, welcher dann bein Aufruf der Verschieb-Routine auf die o.g. Sprünge durch sucht wird, und diese anpaßt Dies wird durch < E > anfadr. endadr. bewerkstelligt (z.B.: E &8000,&9000). Dies« Adressen müssen Sie nur einmal eingeben. Haben Sie voi dem ersten Aufruf der Verschieb-Routine die Adresser nicht eingegeben, so wird nur verschoben. Um diesen Be fehl abzustellen, geben Sie ein. Wollen Sie der Bereich ändern, dann geben Sie einen neuen E-Befehl ein

l. Suchen : Sucht einen angegebenen Wert innerhalb eines anzugebenden Blocks und druckt die Adresse(n) in denen dei Wert gefunden wurde. Wird durch < S anfadr., endadr. wert> aufgerufen < S 1000,2000,10 >. Der Wert sollte 255 nicht überschreiten. Sie können die Ausgabe durch eine beliebige Taste abbrechen,

m. Cls : Löscht das linke Fenster.< C > eingeben genügt,

n. Zusatz : Mit < Z > können Sie zwischen RAM und dem ROM ir &0000 - &3FFF und &C000 - &FFFF umschalten. Somi können Sie sich z.B. mit dem Disassemblerdas ROM anschauen. Um ins RAM zurückzuschalten, drücken Sie erneut < Z >.

Anhang:

  • Adresse Inhalt
  • 8EB0 - 8F07 Verschiedenes
  • 8F08 - 8F1E Drucker-Routinen
  • 8F1F - 8F84 Breakpoint
  • 8F85 - 8F92 Befehl interpretieren 3
  • 8F93 - 9002 Verschiedenes
  • 9003 - 9020 Wort-Befehl beim Assembler
  • 9021 - 903E Zahl-Befehl beim Assembler
  • 903F - 9081 Befehl interpretieren 2
  • 9082 - 90A9 < DEL > ausführen
  • 90AA - 90CE < CLEAR > ausführen
  • 90CF - 9102 Disassembler: Adresse holen
  • 9103 - 9135 Disassembler: Hauptschleife
  • 9136 - 9377 Disassembler: UPRO's
  • 9378 - 97AC Disassembler: interpretieren
  • 97AD - 97ED Monitor: Adresse holen
  • 97EF - 9867 Monitor: Werte holen und drucken
  • 9868 - 9979 Monitor: Speicherinhalte ändern
  • 997A - 99B2 Fill
  • 99B3 - 99DB Cls
  • 99DC - 9A45 Run
  • 9A46 - 9A9B verschieben
  • 9A9C - 9AEF Verschieben - Sprunganpassung
  • 9AF0 - 9BFF UPRO's
  • 9C00 - 9CBF Zeichenketten einiger Z80-Befehle für den Disassembler
  • 9CC0 - 9D68 Assembler: übersetzten Befehl in Speicher legen
  • 9D69 - 9EEB UPRO's
  • 9DE6 - 9E8F Eingegebene Zeichenkette in abarbeitbare Zahl oder Adresse wandeln
  • 9EEC - A047 Assembler: Interpretation des Operanden
  • A048 - A268 Zeichenketten zum Vergleichen und Ausdrucken
  • A269 - A394 Programmstart: Initialisierung und Bildschirmaufbau
  • A395 - A41A Tastaturabfrage bzw. Befehlseingabe
  • A41B - A479 Cursorposition auf nächste Abfrage vorbereiten
  • A47A - A4B1 Assembler: aktivieren und aktuelle Adresse ausgeben
  • A4B2 - AAFF Assembler: Befehlsinterpretation
  • A4EB - A57A Assembler: Sprungtabelle zu Befehlen mit Operand
  • A57B - A5D1 Assembler: Befehle ohne Operand
  • A5D2 - AAFF Assembler: Interpretation eines Befehls mit Operand
  • AB00 - AB0F Befehl interpretieren 1

CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1986
★ CONFIG: ???
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL-SONDERHEFT
★ AUTHOR: P.Benes
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» CPC-Monitor    (CPC  Amstrad  International)    GERMANDATE: 2012-12-22
DL: 343
TYPE: ZIP
SiZE: 14Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Label Jump (Schneider Magazin)
» Applications » RSX Scroller v4.0
» Applications » FIOLIB (C library for FutureOS)
» Applications » CompacMove
» Applications » REM-Killer
» Applications » Disassembliertem
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 390 millisecondes et consultée 1647 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.