]> cloudbase.mooo.com Git - ddt180.git/blob - doc/ddtz-de.txt
Don't convert whole command line buffer to uppercase to allow case sensitive symbols.
[ddt180.git] / doc / ddtz-de.txt
1
2
3
4 ***************************************
5 ***** *****
6 ***** DDTZ *****
7 ***** *****
8 ***************************************
9
10 Ein Programmentwicklungs- und Fehlersuch-Werkzeug fuer Z80-
11 Mikrocomputer
12
13
14 Einfuehrung
15 ===========
16
17 Das DDTZ ist ein komfortables Werkzeug zum Entwickeln und
18 Austesten von Z80-Programmen, sowie zum Ueberpruefen des Zusam-
19 menwirkens zwischen Programm und Hardware-System.
20
21 Folgende Komponenten sind im DDTZ enthalten:
22
23 - Assembler zum Direkt-Eingeben von Programmaenderungen oder
24 kleineren vollstaendigen Programmen in Z80-Assemblersprache.
25 - Disassembler zum Rueck-Uebersetzen von Maschinenprogrammen.
26 - Tracer zum Ausfuehren von Programmen in Einzelschritten und
27 zur Programmausfuehrung mit vorgebbaren Abbruchbedingungen.
28 - Disk Ein/Ausgaberoutinen erlauben das Lesen und Schreiben von
29 Files.
30 - Ausdruck-Interpreter erlaubt bei allen Kommandos die Verwen-
31 dung von arithmetischen und logischen Ausdruecken mit HEX-,
32 Dezimal-, Binaer- und ASCII-Werten, sowie Speicher- und
33 Registerinhalten und Variablen.
34
35 Das DDTZ laeuft unter dem CP/M-Betriebssystem (Digital
36 Research, ab Version 1.4) und anderen dazu kompatiblen Sys-
37 temen. Es benoetigt eine Z80-CPU und belegt 8,5 KBytes Spei-
38 cher.
39 Da Konsol-Eingaben nur ueber die CP/M-Stringeingabefunktion
40 erfolgen, ist das DDTZ auch mit dem CP/M-Hilfsprogramm XSUB
41 lauffaehig.
42
43 Der Gebrauch des DDTZ
44 =====================
45
46 Der Aufruf
47 ----------
48
49 Auf Ihrer DDTZ-Originaldiskette befindet sich die File
50 DDTZ.COM. Bevor Sie diese das erste Mal aufrufen, kopieren Sie
51 bitte die File auf eine andere Diskette, die Sie dann zum
52 Arbeiten benutzen. Bewahren Sie die Originaldiskette an einem
53 sicheren Ort auf und benutzen Sie sie nur zum Anfertigen
54 weiterer Arbeitsdisketten. Verwenden Sie also nie das Original
55 als Arbeitsdiskette.
56
57 Das DDTZ wird entsprechend den CP/M-Regeln folgendermassen
58 aufgerufen:
59 \f
60 DDTZ
61 oder
62 DDTZ d:filename.ext
63
64 Bei beiden Aufrufen laedt das Disk Operating System das DDTZ
65 bei Adresse 100H beginnened in den Speicher. Das DDTZ verlagert
66 sich danach automatisch direkt vor das BDOS und ueberschreibt
67 dabei den CCP. Dadurch wird der Speicher ab 100H fuer das zu
68 untersuchende Programm frei. Der Adressteil des Befehls JP BDOS
69 auf Adresse 5 wird erniedrigt, um dem Anwenderprogramm die
70 durch das DDTZ verringerte Speichergroesse mitzuteilen. Der
71 urspruenglich vom DDTZ belegte Speicher wird daraufhin mit
72 Nullen geloescht.
73 Wurde im Aufruf ein Filename angegeben, so laedt das DDTZ die
74 File in den Speicher.
75 Nach Ausgabe des Prompt-Zeichens '>' ist das DDTZ betriebs-
76 bereit.
77 \f
78 Die Kommandos
79 -------------
80
81 Jede Taetigkeit des DDTZ, z.B. Lesen einer File, Disassemblie-
82 ren eines Programm-Abschnittes usw. wird mit einem Kommando
83 eingeleitet. Kommandos koennen immer dann eingegeben werden,
84 wenn das DDTZ mit dem Prompt-Zeichen '> ' oder '>>' seine
85 Bereitschaft anzeigt.
86
87 Kommandos beginnen mit einem der Zeichen '@' bis 'Z', eventuell
88 gefolgt von weiteren optionalen Buchstaben, sowie Argumenten.
89 Bei einigen Kommandos sind alle Argumente obligat, d.h. alle
90 Argumente muessen angegebnen werden. Bei anderen Kommandos sind
91 jedoch die Argumente alle oder zum Teil optional, d.h. sie
92 koennen entweder explizit angegeben werden, duerfen aber auch
93 weggelassen werden. Wird eine optionale Anfangsadresse wegge-
94 lassen, so wird die Adresse benutzt, bei der das Kommando
95 zuletzt beendet wurde. Wird eine optionale Endadresse weggelas-
96 sen, so wird das Kommando (z.B. L oder D) so lange ausgefuehrt,
97 bis etwa ein Bildschirm vollgeschrieben ist. Ein weggelassenes
98 optionales Argument, hinter dem weitere Argumente angegeben
99 werden sollen, muss durch ein Komma ersetzt werden. Optionale
100 Elemente sind in den folgenden Kommando-Beschreibungen durch
101 eckige Klammern gekennzeichnet (die Klammern sind also nicht
102 mit einzugeben). Zwischen zwei Argumenten muss ein Blank, ein
103 Tab (^I) oder ein Komma stehen.
104
105 Argumente werden im allgemeinen als HEX-Zahlen eingegeben,
106 duerfen aber auch als Dezimal- und Binaerzahlen, als ASCII-
107 Werte, Variablen oder in Form arithmetischer Ausdruecke einge-
108 geben werden. HEX-Zahlen sind im DDTZ Zahlen, die aus den
109 Ziffern 0 bis 9 und den Buchstaben A bis F (oder a bis f)
110 bestehen und nicht durch weitere Zusaetze (z.B. Buchstabe H)
111 als HEX-Zahl gekennzeichnet sein muessen. Im Gegensatz zu den
112 meisten Assemblern sind HEX-Zahlen, deren erstes Zeichen ein
113 Buchstabe ist, im DDTZ erlaubt. Dezimal-Zahlen werden zur
114 Unterscheidung mit einem Punkt abgeschlossen und Binaerzahlen
115 tragen am Ende ein doppeltes Anfuehrungszeichen. Naeheres zur
116 Eingabe von Zahlen, Variablen und Ausdruecken finden Sie bei
117 der Beschreibung des H-Kommandos und im Anhang.
118
119 Bei Kommandos, die eine Start- und eine Endadresse erfordern,
120 kann anstelle der Endadresse auch der Buchstabe 'S', gefolgt
121 von einer Laengenangabe verwendet werden.
122 z.B. bedeutet D 1000 S 100 oder D1000s100
123 das selbe wie D 1000 10FF oder d1000,10ff
124
125 Bei allen Eingaben ist es einerlei, ob Gross- oder Kleinbuch-
126 staben verwendet werden. Die einzige Ausnahme ist die Eingabe
127 von ASCII-Zeichen und Zeichenketten.
128 \f
129 Die Wiederhol-Funktion
130 ----------------------
131
132 Beim Gebrauch des DDTZ kommt es oefters vor, dass man einen
133 Befehl nicht nur einmal benutzt und danach einen anderen Befehl
134 anwendet, sondern das man ein und denselben Befehl mehrmals
135 wiederholen will. Moechte man z.B. ein Programm in Einzel-
136 schritten ausfuehren lassen, um nach jedem Schritt die Register
137 zu inspizieren, so waere fuer jeden Schritt die Eingabe eines
138 Trace-Kommandos ohne Argumente notwendig (also der Buchstabe
139 'T' und die Return-Taste). Ein weiteres Beispiel ist das Ueber-
140 pruefen der Hardware eines Ausgabeports: Will man mit einem
141 Oszilloskop Signale eines Ausgabeports ueberpruefen, so waere
142 es sehr laestig, zur wiederholten Ausgabe eines Testbytes an
143 den Port waehrend der Beobachtung des Oszilloskops immer wieder
144 das 'O'-Kommando eingeben zu muessen.
145 Aus diesen Gruenden besitzt das DDTZ die Wiederholfunktion.
146 Diese bewirkt, dass bei einer leeren Eingabe (nur Return-Taste)
147 das letzte Kommando ohne Argumente wiederholt wird. Die Bereit-
148 schaft der Wiederhol-Funktion wird durch einen doppelten Prompt
149 '>>' anstelle des einfachen '> ' angezeigt.
150 \f
151 Die Kommandos des DDTZ
152 ======================
153
154 Im Folgenden werden alle Kommandos des DDTZ erklaert und mit
155 Beispielen verdeutlicht. Im Bereich der Computertechnik hat es
156 sich international eingebuergert, englische Bezeichnungnen zu
157 benutzen. Deshalb sind auch beim DDTZ die Kommandos Abkuer-
158 zungen englischer Woerter. Diese sind neben einer deutschen
159 Bezeichnung am Anfang jeder Kommando-Erklaerung mit angegeben.
160 Zur Einarbeitung empfiehlt es sich, an dieser Stelle des DDTZ
161 schon einmal zu starten und die im kommenden Abschnitt erklaer-
162 ten Kommandos der Reihe nach auszuprobieren. Assemblieren Sie
163 ein simples Testprogramm mit dem A-Kommando,
164
165 z.B.: > A100
166 0100 NOP ld a,0
167 0102 NOP dec a
168 0103 NOP jp nz,102
169 0106 NOP jp 0
170 0109 NOP .
171
172 Listen Sie das Programm dann mit dem L-Kommando in disassem-
173 blierter Form aus, setzen Sie einen Breakpoint auf Adresse 0
174 mit dem B-Kommando und starten Sie es mit dem G-Kommando usw.
175 Nach einigem Ausprobieren und Spielen mit dem DDTZ werden Sie
176 sicher schnell die vielen Moeglichkeiten dieses komfortablen
177 Werkzeugs kennen und nutzen koennen.
178
179 @
180 -
181
182 Anzeigen und eventuell Aendern des Displacement-Registers.
183 (examin [substitude] displacement register @)
184
185 Der derzeitige Wert wird angezeigt und ein neuer - angefor-
186 dert. Eine leere Eingabe (nur Return-Taste) belaesst den alten
187 Wert.
188
189 Ein mit dem DDTZ zu bearbeitendes Programm kann natuerlich nur
190 innerhalb des verfuegbaren Adressraums in den Speicher geladen
191 werden, muss also mindestens bei Adresse 100H beginnen und darf
192 sich nicht mit dem DDTZ oder dem System ueberlappen. Um ein
193 Programm, das beispielsweise bei Adresse 0 oder F000H beginnt,
194 zu bearbeiten, muss dieses entsprechend verschoben in den Spei-
195 cher geladen werden. Damit beim Disassemblieren, Modifizieren
196 mit Hilfe des eingebauten Assemblers, Auslisten in HEX/ASCII
197 usw. trotzdem die korrekten Adressen angezeigt werden, ist ein
198 Displacement-Register @ (Verschiebungsregister) vorhanden,
199 dessen Wert auf die Differenz Solladresse minus Ladeadresse
200 gesetzt werden kann. Ist @ ungleich Null, so zeigt das DDTZ
201 ueberall, wo Adressen ausgelistet werden, die Adressen auch in
202 der Form @xxxx an, wobei xxxx die Solladresse des verschobenen
203 Programms ist.
204 Eine andere Anwendungsmoeglichkeit des Displacement-Registers
205 ist das Bearbeiten von Subroutinen, die mit Hilfe eines Linkers
206 in ein Programm eingebunden wurden, und zu denen im Allgemeinen
207 nur ein Listing beginnend ab Adresse 0 vorhanden ist. In diesem
208 Fall wird das @-Register auf die aus der Symboltabelle des
209 Linkers zu entnehmende Anfangsadresse der Routine gesetzt.
210 Jeder Adresse xxxx im Listing entspricht dann die Adresse @xxxx
211 im Speicher.
212 Achtung: Programme, die (ohne Linker) im Speicher verschoben
213 wurden, koennen zwar z.B. disassembliert oder modifiziert,
214 jedoch nicht ausgefuehrt werden.
215 \f
216 A
217 -
218 Assemblieren von Z80-Befehlen.
219 (Assemble Zilog Z80 mnemonics)
220
221 Beginnend bei der optionalen Anfangsadresse werden als Z80-
222 Mnemonics eingegebene Befehle direkt in den Speicher assem-
223 bliert. Das DDTZ zeigt jeweils den an dem betreffenden Spei-
224 cherplatz bereits stehenden Befehl zur Kontrolle an, worauf ein
225 neuer Z80-Befehl eingegeben werden oder mit einer leeren Ein-
226 gabe zum naechsten Befehl uebergegangen werden kann. Die Ein-
227 gabe eines Minuszeichens bewirkt ein Ruecksetzen auf den vor-
228 letzten Befehl zur Kontrolle oder Korrektur, ein Punkt beendet
229 das Assemblieren. Die Form der Befehle ist Zilog-kompatibel mit
230 einigen Erweiterungen:
231 Statt ADD A,... SBC A,... usw. koennen auch Kurzformen ADD ...
232 SBC ... usw. benutzt werden. Bei den Befehlen IN A,(ausdruck)
233 und OUT (ausdruck),A koennen die Klammern weggelassen werden.
234 Der Opcode ist von dem Argument durch Tabs oder Blanks ge-
235 trennt.
236 Auf die Adresse des Z80-Befehls kann - wie bei Assemblern
237 ueblich - mittels des $-Zeichens Bezug genommen werden, z.B.
238 ist der Befehl JR Z,$+4 identisch mit JR 204, wenn der Befehl
239 bei Adresse 200 steht.
240 Achtung: Da beim DDTZ HEX-Zahleneingaben ohne fuehrende Dezi-
241 malziffer zulaessig sind, koennen beim Assemblieren Zweideut-
242 igkeiten entstehen oder Fehler unerkannt bleiben, z.B. soll das
243 Register A mit dem Hex-Wert 0B geladen werden, so ist LD A,0B
244 einzugeben, da mit LD A,B das Register B angesprochen wird. Der
245 Befehl LD BC,DE wird als LD BC,0DE interpretiert, da es einen
246 Z80-Befehl, der das BC-Register aus dem DE-Register laedt,
247 nicht gibt.
248
249 B
250 -
251
252 Anzeigen aller Breakpoints.
253 (display all breakpoints)
254
255 Die Adressen, Wiederholungszaehler und Bedingungen aller ge-
256 setzten Breakpoints werden aufgelistet.
257
258
259 B breakp [breakp..]
260 -------------------
261
262 Breakpoints setzen.
263 (set breakpoints)
264
265 Zum Austesten eines Programms ist es erforderlich, das Programm
266 nicht nur starten zu koennen, sondern der Ablauf des Programms
267 muss sich auch bequem verfolgen und beobachten lassen. Neben
268 den Tracen (siehe Kommandos T und C) ist das Setzen von Break-
269 points (Unterbrechungspunkten) eine sehr komfortable Moeglich-
270 keit, den Programmablauf zu verfolgen.
271 Ein Breakpoint wird auf das erste Byte (den Opcode) eines
272 Maschinenbefehls gesetzt und bewirkt, dass der Programmablauf
273 unterbrochen wird, sobald der Programmzaehler bei dieser Adres-
274 se angekommen ist. Man kann dann die Registerinhalte inspizie-
275 ren, Speicherinhalte kontrollieren usw., um danach den Pro-
276 grammablauf fortzusetzen oder an einer anderen Stelle fortzu-
277 fahren.
278 Neben der Adresse, die bestimmt, wo der Breakpoint zu setzen
279 ist, koennen noch zusaetzliche Optionen gewaehlt werden.
280 \f
281 Ein Breakpoint wird in folgender Form definiert:
282 [R] adresse [:zaehler] [I bedingung]
283 Der optionale Buchstabe R bedeutet, dass jedesmal beim Errei-
284 chen des Breakpoints die CPU-Registerinhalte ausgelistet werden
285 sollen, auch dann, wenn wegen eines Zaehlers oder einer Bedin-
286 gung der Breakpoint keinen Programmstopp bewirkt.
287 Die Adresse ist ein beliebiger Ausdruck, der auf einen Opcode
288 zeigen muss.
289 Der Zaehler kann auf einen Wert n<>1 gesetzt werden und be-
290 wirkt, dass jedesmal, wenn die Breakpointadresse durchlaufen
291 wird, der Zaehler um Eins erniedrigt wird und erst beim n-ten
292 Mal ein Programmstop erfolgt. Er steht dann auf 1.
293 Eine Bedingung (der Buchstabe I fuer 'if'='wenn', gefolgt von
294 einem Ausdruck) bestimmt, ob ein Programmstop bzw. ein Dekre-
295 mentieren des Wiederholungs-Zaehlers erfolgen soll.
296 z.B.: > B R 200 I ^A=0
297 listet jedesmal, wenn Adresse 200 angelaufen wird, die
298 Register aus und unterbricht den Programmlauf, falls das
299 A-Register den Wert 0 hat.
300 > B Y0:16., R $ I0
301 setzt zwei Breakpoints:
302 1. Wird 16 mal die Adresse, die in der Variablen Y0
303 steht, angelaufen, so wird das Programm unterbrochen.
304 2. Wird die Adresse, auf der der Programmzaehler zum
305 Zeitpunkt der Breakpoint-Eingabe stand, durchlaufen,
306 so werden die Register ausgelistet, aber nicht unter-
307 brochen (Bedingung immer 'falsch').
308
309 Um den Benutzer zusaetzliche Eingriffsmoeglichkeiten zu geben,
310 werden alle Breakpoints, auch mit Zaehlern ungleich Null oder
311 unerfuellten Bedingungen, trotzdem aktiv, wenn eine beliebige
312 Taste an der Konsole gedrueckt wird.
313 Wird ein Breakpoint auf eine Adresse gesetzt, auf der sich
314 bereits ein Breakpoint befindet, so wird der bereits vorhandene
315 automatisch geloescht.
316 Achtung: Breakpoints koennen nur im RAM gesetzt werden; in
317 Programmen die in ROM's oder EPROM's enthalten sind, sind
318 Breakpoints nicht moeglich (Siehe folgenden Abschnitt).
319
320 Interne Breakpointbehandlung des DDTZ:
321
322 Wird ein Programm mit dem G-Kommando gestartet, so ersetzt das
323 DDTZ alle Opcodes, auf die eine Breakpoint-Adresse zeigt, durch
324 einen Restart-Befehl RST n und bewahrt die Opcodes auf. In die
325 Adresse n, auf die der RST-Befehl springt, wird ein Sprungbe-
326 fehl eingesetzt, der in den Breakpoint-Handler des DDTZ fuehrt.
327 Nach einem Programmstop werden die Opcodes wieder eingesetzt,
328 sodass das Programm immer dann, wenn es dem Benutzer zugaeng-
329 lich ist, unmodifiziert ist. Als RST-Adresse ist 38H voreinge-
330 stellt. Ist die Adresse 38H jedoch fuer andere Zwecke bereits
331 vergeben, so kann der RST-Befehl geaendert werden, z.B. auf
332 30H:
333 > AT4
334 xxx9 RST 38 rst 30
335 xxxA xxx .
336
337 \f
338 BX
339 --
340
341 Loeschen aller Breakpoints.
342 (clear all breakpoints)
343
344 BX adresse [adresse..]
345 ----------------------
346
347 Loeschen der Breakpoints an den angegebenen Adressen.
348 (clear breakpoints)
349
350 C[N][J] ]befehlsanzahl]
351 C[N][J] W ausdruck
352 C[N][J] U ausdruck
353 ------------------
354
355 Tracen ueber CALLs [ohne Ausgabe] [nur Sprungbefehle]
356 / ..solange.. / ..bis..
357 (trace over CALLs [No list] [Jumps only] /..While../..Until..
358
359 Tracen wie mit dem T-Kommando, nur mit dem Unterschied, dass
360 eine Subroutine wie ein einzelner Maschinenbefehl gehandhabt
361 wird. Bei jedem CALL-Befehl wird also die aufgerufene Routine
362 in Echtzeit abgearbeitet und erst bei Erreichen des auf den
363 CALL-Befehl folgenden Befehls wird wieder in den Trace-Modus
364 zurueckgekehrt. (siehe T-Kommando).
365 Achtung: Das C-Kommando funktioniert nur dann, wenn die Subrou-
366 tine nach ihrer Beendigung zu der auf den CALL-Befehl folgenden
367 Adresse zurueckkehrt. Ein Programm der Form
368 CALL SUBR
369 DB ARG
370 mit einer Routine SUBR, die nach Abarbeitung hinter dem Argu-
371 ment ankommt, kann nicht mit C bearbeitet werden.
372
373
374 D [startadr] [endadr]
375 ---------------------
376
377 Auslisten des Speichers in HEX und ASCII
378 (Display memory in hex and ASCII)
379
380 Der Speicher-Inhalt wird beginnend bei der Startadresse bis zur
381 Endadresse in HEX und ASCII auf der Konsole ausgelistet. Die
382 ASCII-Anzeige ignoriert das Bit 7 des jeweiligen Bytes. Ist der
383 Wert eines Bytes nicht als ASCII-Zeichen druckbar, so wird
384 statt dessen ein Punkt ausgegeben.
385 \f
386 F-Kommandozeile
387 ---------------
388
389 File-Cointrolblock und CP/M-Kommandozeile spezifizieren.
390 (specify Filename and command line)
391
392 Dieses Kommando hat zwei Anwendungen:
393
394 1. Vor einem Einlesen oder Ausschreiben einer File vom DDTZ aus
395 wird mit dem F-Kommando der Filename angegeben.
396 z.B. Einlesen eines zu testenden Kopier-Programms mit dem
397 Namen 'COPY.COM' von der Diskette A:
398 > Fa:copy.com
399 > R
400 2. Soll ein Programm ausgetestet werden, das beim Aufruf vom
401 CP/M aus eine Kommandozeile im Kommandopuffer bei 80H und
402 File-Control-Blocks bei 5CH und 6CH erwartet, so kann mit
403 dem F-Kommando des DDTZ der CP/M-Aufruf simuliert werden.
404 z.B. Das im obigen Beispiel eingelesene Programm soll so ab-
405 laufen als sei es vom CP/M aus mit dem Aufruf
406 A>COPY A:DESTIN.*=B:SOURCE.*
407 gestartet worden. Die Kommandozeile wird deshalb vor
408 dem Programmablauf mit
409 > FA:DESTIN.*=B:SOURCE.*
410 eingegeben.
411
412
413 G [startadr] [;breakp..]
414 ------------------------
415
416 Starte ein geladenes Programm, eventuell mit temporaeren Breakpoints.
417 (Go [to start] [with temporary breakpoints])
418
419 Wird eine Startadresse angegeben, so wird der Programmzaehler
420 des Z80 auf diese Adresse gesetzt, andernfalls wird bei dem
421 letzten Programmzaehlerstand fortgefahren. Im G-Kommando koen-
422 nen temporaere Breakpoints angegeben werden. Sie werden in der
423 gleichen Form wie die permanenten Breakpoints beim B-Kommando
424 spezifiziert und haben auch die gleiche Wirkung mit dem Unter-
425 schied, dass bei einem Programmstop an einem der temporaeren
426 oder permanenten Breakpoints die temporaeren automatisch ge-
427 loescht werden.
428 z.B. Vollstaendiges Abarbeiten eines CP/M-Programms, das mit
429 JP 0 endet:
430 > GL;0
431
432 H
433 -
434
435 Groesse und maximale Groesse von Files anzeigen.
436 (display High and maximal size of files)
437
438 Die hoechste von der zuletzt eingelesenen File belegte Adresse
439 wird angezeigt, sowie die hoechste von irgendeiner der einge-
440 lesenen Files belegte Adresse. Erstere ist auch in der Varia-
441 blen H, letztere in der Variablen M enthalten. (Siehe auch W-
442 und R-Kommando)
443 \f
444 H ausdruck
445 H ausdruck ausdruck
446 -------------------
447
448 Berechnen eines Ausdrucks / Summe und Differenz zweier Ausdrucke.
449 (compute expressions / Hex and other sum and difference)
450
451 Wird ein Ausdruck angegeben, so zeigt das DDTZ dessen Ergebnis
452 an, werden zwei Ausdruecke angegeben, so werden deren Summe und
453 Differenz angezeigt. Ergebnisse werden in HEX, als negative
454 HEX-Zahl, in Dezimal, als negative Dezimalzahl, in Binaer und
455 das niederwertige Byte zusaetzlich als ASCII-Zeichen darge-
456 stellt. Nicht druckbare ASCII-Zeichen werden dabei als Control-
457 Zeichen in der Form Buchstabe minus '@' angezeigt.
458
459 Wie Ausdruecke formuliert werden, ist der Uebersichtlichkeit
460 halber im Anhang angegeben.
461
462 z.B.: Was ist die Endadresse eines 17 KByte langen Programms,
463 das bei Adresse 100H beginnt?
464 > H17.*1024.+100
465 4500 -BB00 17664. -47872. 01000101"00000000" '@'-'@'
466 Der freie Speicher beginnt also bei 4500H.
467 z.B.: Beim Disassemblieren eines unbekannten Programms wird
468 eine Subroutine gefunden, die nacheinander mit den Werten
469 D8F0H, FC18H, FF9CH usw. in den Registern aufgerufen
470 wird. Was kann das fuer eine Routine sein?
471 > HD8F0
472 D8F0 -2710 55536. -10000. 11011000"11110000" 'p'.
473 > H fc18
474 FC18 -03E8 64536. -1000 11111100"00011000" 'X'-'@'
475 > H FF9CH
476 FF9C -0064 65436. -100 ...
477 Bei den Werten handelt es sich offenbar um dezimal -
478 10000, -1000 usw.; die Routine hat also wahrscheinlich
479 etwas mit einer Binaer-zu-Dezimal-Umrechnung zu tun.
480
481 I [port]
482 --------
483
484 Einlesen eines Daten-Bytes von einem Port.
485 (input a byte from port)
486
487 Zum Austesten der Computer-Hardware koennen mit diesem Kommando
488 Bytes von Ports eingelesen und in HEX und binaer angezeigt
489 werden. Wird die Portadresse nicht angegeben, so wird der
490
491 zuletzt in einem frueheren I-Kommando angegebene Port ange-
492 sprochen. Die Moeglichkeit, bei Z80-I/O-Befehlen hardwareseitig
493 auch die Adressleitungen A15 bis A8 zur Informationsuebertra-
494 gung mitzuverwenden, ist im DDTZ realisiert. DDTZ-intern wird
495 die Portadresse als Zwei-Byte-Wort in das BC-Register
496 geladen und mit IN A,(C) der Port gelesen.
497 Bei diesem Kommando zeigt zeigt sich besonders der Vorteil der
498 Wiederholungsfunktion des DDTZ: Nachdem einmal das I-Kommando
499 explizit gegeben wurde, kann man, waehrend man verschiedene
500 Pegel an die Anschluesse des Ports anlegt, durch einfaches
501 Druecken der Return-Taste die Portabfrage wiederholen.
502 \f
503 L [startadr] [endadr]
504 ---------------------
505
506 Listen eines Speicherbereichs in Z80-Mnemonics.
507 (List disassembled code)
508
509 Dieses Kommando disassembliert im Speicher stehende Programme.
510 (Beispiel: siehe Q-Kommando)
511
512
513 M[V] startadr endadr zieladr
514 ----------------------------
515
516 Umladen eines Speicherbereichs in einen anderen, eventuell ver-
517 gleichen. (Move memory [and verify])
518
519 Der Speicherinhalt beginnend bei der angegebenen Startadresse
520 bis (einschliesslich) zur angegebenen Endadresse wird in einen
521 anderen Bereich, beginnend bei der angegebenen Zieladresse,
522 kopiert. Wird der optionale Buchstabe V gegeben, so wird die
523 Kopie mit dem Original verglichen und etwaige Diffrenzen in HEX
524 ausgelistet. Differenzen koennen bei defektem Speicher ent-
525 stehen oder dann, wenn versehentlich in Bereiche kopiert wird,
526 die kein RAM enthalten. Das M-Kommando wird auch dann korrekt
527 ausgefuehrt, wenn der Quell- und der Zielbereich gegenseitig
528 ueberlappen. In diesem Fall ist ein Vergleichen allerdings
529 nicht moeglich, da beim Kopieren ja ein Teil des Quellbereichs
530 ueberschrieben wird.
531 Achten Sie bei diesem Kommando besonders darauf, dass Sie nicht
532 das DDTZ oder das Disk Operating System versehentlich ueber-
533 schreiben.
534
535 O [byte] [port]
536 ---------------
537
538 Ausgeben eines Datenbytes an einen Ausgabeport.
539 (Output a byte to a port)
540
541 Zum Austesten der Computer-Hardware koennen mit diesem Kommando
542 Bytes an Ports des Computersystems ausgegeben werden.
543 Achtung: Im Gegensatz zu dem Z80-Befehl OUT port,byte ist hier
544 aus folgendem Grund erst das Datenbyte und dann die Portadresse
545 anzugeben:
546 Die Portadresse kann weggelassen werden, falls ein Datenbyte an
547 den selben Port, wie in einem vorherigen O-Kommando spezifi-
548 ziert, ausgegeben werden soll.
549 Die Moeglichkeit, bei Z80-I/O-Befehlen hardwareseitig auch die
550 Adressleitungen A15 bis A8 zur Informationsuebertragung mitzu-
551 verwenden, ist im DDTZ realisiert. DDTZ-intern wird die Port-
552 adresse als Zwei-Byte-Wort in das BC-Register geladen und mit
553 OUT (C),A das Byte an den Port ausgegeben.
554 \f
555 Q[J] startadr endadr bytes
556 --------------------------
557
558 Durchsuchen des Speichers nach einer gegebenen Folge von Bytes.
559 (Query memory for a byte string [justified])
560
561 Der Speicher wird beginnend bei der angegebnen Startadresse und
562 endet (einschliesslich) bei der angegebenen Endadresse auf eine
563 angegebene Byte-Folge hin durchsucht. Fundstellen werden wie
564 beim D-Kommando in HEX und ASCII ausgelistet. Das erste ge-
565 suchte Byte steht dabei jeweils am linken Bildrand. Wird der
566 optionale Buchstabe J gegeben, so werden jeweils noch 8 vorher-
567 gehende Bytes mit ausgelistet, sodass die gesuchte Byte-Folge
568 in der Bildmitte beginnt. Die Byte-Folge kann wie beim S-
569 Kommando eine Folge von HEX-Zahlen, Ausdruecken, Worten und
570 Text-Strings sein.
571
572 z.B. Ein zu untersuchendes Programm gibt an einem bestimmten
573 Punkt seines Ablaufes aus unbekannter Ursache die Meldung
574 "Hardware error" auf die Konsole aus und stoppt. Woher
575 kommt diese Meldung ?
576 > QJ l h 'Hardwar'
577 1502 73 74 65 64 24 4E 6F 20 48 61 72 64 77 61 ...
578 Der Text "Hardware error beginnt also bei Adresse 150A. Wo
579 wird er ausgegeben ?
580 > QJ l h w150a
581 >
582 (Keine Meldung) Auf die Adresse wird also nicht direkt
583 zugegriffen. Vielleicht haben wir Glueck, indem wir
584 suchen, wo 'No Hardware error" ausgegeben wird. Dieser
585 Text beginnt bei 1507H.
586 > QJ l h w1507
587 08FE 00 00 00 00 00 AF C9 21 07 15 CD 65 07 30 ...
588 > L8FE+7
589 0905 LD HL,1507
590 0908 CALL 0765
591 090B JR NC,0910
592 090D INC HL
593 090E INC HL
594 090F INC HL
595 0910 CALL 0654
596 Die Subroutine, die bei Adresse 908 aufgerufen wird,
597 fuehrt also offenbar einen Test durch und meldet einen
598 Fehler im Carry-Flag. Der Text wird dann bei Adresse 910
599 ausgegeben.
600
601 R [displacement]
602 ----------------
603
604 Einlesen einer Binaer- oder HEX-File in den Speicher, eventuell
605 verschoben.
606 (Read a binary or hex file [add displacement])
607
608 Eine File, deren Name mit dem F-Kommando spezifiziert worden
609 sein muss, wird von der Diskette in den Speicher eingelesen.
610 Eine File, deren Name mit ".HEX" endet, wird als Intel-HEX-File
611 interpretiert; die Daten werden bei den in der File enthaltenen
612 Adressen im Speicher abgelegt. Jede andere File wird ohne jede
613 weitere Interpretation bei Adresse 100H beginnend in den Spei-
614 cher geladen.
615 \f
616 Wird im R-Kommando ein Displacement angegeben, so wird eine
617 HEX-File bei der entsprechenden Adresse erhoeht um das Dis-
618 placement abgelegt, andere Files bei 100H+Displacement. Nach
619 dem Einlesen der File wird erst die hoechste von dieser File
620 belgte Speicheradresse ausgelistet und dann die hoechste von
621 irgendeiner File seit Starten des DDTZ belegte Adresse. Falls
622 das DDTZ statt dessen ein Fragezeichen ausgibt, konnte entweder
623 die File nicht gefunden werden, beim Lesen einer HEX-File wurde
624 ein Checksummenfehler entdeckt, oder die File belegt Speicher-
625 plaetze ausserhalb des Bereichs L bis T.
626 z.B.: Eine File TEST.BIN soll bei Adresse 2000H beginnend in
627 den Speicher geladen werden:
628 > Ftest.bin
629 > R2000-l
630 High = 277F Max = 277F
631
632 S [startadr]
633 ------------
634
635 Anzeigen und Aendern von Daten im Speicher
636 (Substitute memory)
637
638 Die Startadresse, oder wenn diese nicht angegeben wurde, die
639 Adresse bei der das letzte S-Kommando beendet wurde, wird auf
640 der Konsole ausgegeben, und danach wird das an dieser Stelle im
641 Speicher befindliche Byte in HEX angezeigt. Anschliessend
642 erwartet das DDTZ eine Eingabe, und zwar gibt es folgende
643 Moeglichkeiten:
644 - Eine leere Eingabe (nur Return-Taste) schreitet ohne Spei-
645 cheraenderung zur naechsten Adresse weiter.
646 - Ein Minus-Zeichen geht ohne Speicheraenderung einen
647 AdressSchritt zurueck.
648 - Ein Punkt (alleine in einer Zeile) beendet das Kommando.
649 - Ein Datenbyte oder eine Folge von von Datenbytes wird in
650 den Speicher eingetragen.
651
652 Datenbytes koennen folgendermassen eingegeben werden:
653 - Ausdruecke (im einfachsten Fall HEX-Zahlen) werden der
654 Reihe nach berechnet und eingetragen.
655 - W ausdruck berechnet den Ausdruck als Zwei-Byte-Wort und
656 traegt ihn in zwei Speicher-Bytes ein; erst das niederwer-
657 tige, dann das hoeherwertige Byte.
658 - Ein Apostroph, gefolgt von ASCII-Zeichen und einem
659 weiteren Apostroph bewirkt ein Eintragen einer ASCII-
660 Zeichenfolge. Kommt der Apostroph selbst in der Zeichen-
661 folge vor, so muss er zweimal gegeben werden. Folgt
662 auf den abschliessenden Apostroph ein Punkt, so wird das
663 Bit 7 des letzten Zeichens auf Eins gesetzt.
664 z.B. der Programmteil
665 0200 CALL 1234H
666 0203 DM 'Test ''1''' ; Test '1'
667 kann mit dem S-Kommando folgendermassen eingegeben werden:
668 > S200
669 0200 00 cdW1234
670 0203 00 'Test ''1'''.
671 020B 00 -
672 020A A7 .
673 \f
674 T[N][J] ]befehlsanzahl]
675 T[N][J] W ausdruck
676 T[N][J] U ausdruck
677 ------------------
678
679 Tracen [ohne Ausgabe] [nur Sprungbefehle] / ..solange.. / ..bis..
680 (Trace [no list] [Jumps only] / ..While.. / ..Until..)
681
682 Im Gegensatz zum Starten eines Programms mit dem G-Kommando,
683 bei dem die Kontrolle voll dem auszufuehrenden Programm ueber-
684 geben wird und erst bei einem Breakpoint dem DDTZ zurueckge-
685 geben wird, behaelt beim Tracen das DDTZ die ganze Zeit die
686 Kontrolle. Das wird dadurch erreicht, dass das DDTZ automatisch
687 hinter jedem Befehl, bevor er ausgefuehrt wird, einen Break-
688 point einsetzt und nach Ausfuehrung des Befehls wieder loescht.
689 Bei bedingten Spruengen werden sogar zwei Breakpoints gesetzt,
690 einer hinter dem Sprungbefehl, der andere am Sprungziel. Das
691 Programm wird also in Einzelschritten ausgefuehrt. Nach jedem
692 Schritt legt das DDTZ die aktuellen Werte aller Register in
693 Speicherplaetze innerhalb des DDTZ ab, sodass die Register-
694 inhalte jederzeit ueberwacht werden koennen.
695 Das Tracen beginnt jeweils beim derzeitigen Stand des Programm-
696 zaehlers. Soll an einer anderen Stelle mit dem Tracen begonnen
697 werden, so muss der Programmzaehler mit dem X-Kommando neu
698 gesetzt werden.
699 Nach jedem Schritt werden alle Registerinhalte und der naechste
700 Z80-Befehl wie beim X-Kommando angezeigt.
701 Die einfachste Form des T-Kommandos ist nur der Buchstabe T
702 (gefolgt von der Return-Taste), worauf ein Einzelschritt ausge-
703 fuehrt wird. Falls das letzte Kommando bereits ein T-Kommando
704 war, genuegt wegen der Wiederholfunktion des DDTZ auch die
705 Return-Taste alleine, was das Einzelschritt-Tracen sehr er-
706 leichtert.
707 Wird im T-Kommando eine Befehlsanzahl angegeben, so werden
708 entsprechend viele Schritte hintereinander ausgefuehrt. In
709 diesem Fall kann, wie auch bei dem im Folgenden erlaeuterten
710 Tracen mit Abbruchkriterium, der Trace-Vorgang durch Druecken
711 einer beliebigen Taste der Konsole vorzeitig abgebrochen
712 werden. Das Tracen wird unabhaengig von einer angegebenen
713 Befehlsanzahl oder Bedingung abgebrochen, wenn ein Breakpoint
714 erreicht wird.
715 Wird der Buchstabe W, gefolgt von einem Ausdruck angegeben, so
716 wird das Programm solange im Trace-Modus abgearbeitet, wie der
717 Ausdruck 'wahr' ist, d.h. vor jedem Schritt wird der Ausdruck
718 berechnet und nur dann fortgefahren, wenn er ein von Null ver-
719 schiedenes Ergebnis hat.
720 Wird der Buchstabe U, gefolgt von einem Ausdruck angegeben, so
721 wird das Tracen dann abgebrochen, wenn der Ausdruck ein von
722 Null verschiedenes Ergebnis hat.
723 Bei allen Formen des T-Kommandos kann man durch Angabe des
724 Buchstaben N das Auslisten der Register abschalten, was die
725 Ausfuehrungszeit erheblich verkuerzt. In diesem Fall werden nur
726 beim Beenden des Trace die Registerinhalte angezeigt.
727 Die Angabe des Buchstabens J veranlasst das DDTZ, nur hinter
728 Befehle, die den Programmzaehler beeinflussen, Breakpoints zu
729 setzen, also bei den Befehlen JP,JR,CALL,RET. Es werden dann
730 auch nur bei diesen Befehlen die Registerinhalte angezeigt und
731 ein Abbruchkriterium geprueft.
732 \f
733 Achtung: Da die Einzelschritt-Abarbeitung durch automatisches
734 Setzen von Breakpoints erreicht wird, ist es unmoeglich, Pro-
735 gramme in ROMs zu tracen. Subroutinen in ROMs koennen mit dem
736 G-Kommando und geeigneten Breakpoints oder mit dem C-Kommando
737 uebersprungen werden. Falls Teile des BIOS in ROMs stehen,
738 stoert dies nicht, solange das zu untersuchende Programm nur
739 BDOS-Aufrufe enthaelt. Bei BDOS-Aufrufen wird der Trace-Modus
740 verlassen und erst nach der Rueckkehr aus dem BDOS wieder
741 aufgenommen.
742 z.B.: > TNU(1234)='A'
743 traced das Programm ohne Registeranzeige, bis der Spei-
744 cherplatz 1234H das ASCII-Zeichen A enthaelt.
745 > TJW[^hl=0]&[^a<80]
746 traced die Sprungbefehle, solange das HL-Register Null
747 ist und das A-Register kleiner als 80H ist.
748
749
750 V startadr endadr zieladr
751 -------------------------
752 Vergleichen zweier Speicherbereiche.
753 (Verify (compare) two memory areas)
754
755 Der Inhalt des Speichers beginnend bei der angegebenen Start-
756 adresse bis (einschliesslich) zur angegebenen Endadresse wird
757 mit dem Inhalt eines gleich langen Bereichs beginnend bei der
758 angegebenen Zieladresse verglichen. Unterschiede werden in HEX
759 ausgelistet. Das Auslisten kann durch Druecken einer beliebigen
760 Taste der Konsole abgebrochen werden.
761
762
763 W startadr endadr
764 -----------------
765
766 Ausschreiben eines Speicherbereichs in eine File.
767 (Write a file to disk)
768
769 Der Inhalt des Speichers beginnend bei der angegebenen Start-
770 adresse bis (einschliesslich) zur angegebenen Endadresse wird
771 in eine File auf der Diskette geschrieben. Der Filename muss
772 vorher mit dem F-Kommando spezifiziert werden. Die Laenge des
773 abgespeicherten Bereiches wird vom DDTZ auf volle Saetze aufge-
774 rundet.
775 z.B.: In ein Programm namens PROG-ALT.COM sollen Aenderungen,
776 die in einer File PATCH.HEX enthalten sind, eingefuegt
777 werden, und das modifizierte Programm soll in einer File
778 namens PROG-NEU.COM auf Diskette B: abgelegt werden:
779 > Fprog-alt.com
780 > R
781 High = 257F Max = 257F
782 > Fpatch.hex
783 > R
784 High = 2345 Max = 257F
785 > Fb:prog-neu.com
786 > Wl m
787 \f
788 X
789 -
790
791 Anzeigen aller Register und des Befehls, auf den der Programm-
792 zaehler zeigt.
793 (eXamine all cpu registers)
794
795 Jedesmal, wenn ein Breakpoint angelaufen wird oder ein Pro-
796 grammschritt getraced wird, legt das DDTZ die Registerinhalte
797 in einem innerhalb des DDTZ befindlichen Speicherbereich ab.
798 Wird mit G oder T die Ausfuehrung des Programms fortgesetzt, so
799 laedt das DDTZ vorher diese Daten wieder in die Register. Mit
800 dem X-Kommando koennen diese abgespeicherten Registerinhalte
801 jederzeit kontrolliert werden. Die Anzeige erfolgt, wie immer
802 im DDTZ, in HEX.
803 Die sechs gueltigen Bits des F- und des F'-Registers werden als
804 Buchstaben dargestellt. Das Interrupt-Flag wird wie ein Bit des
805 F-Registers angezeigt.
806 Der Z80-Befehl, auf den der Programmzaehler zeigt, wird in dis-
807 assemblierter Form ausgegeben. Falls das Displacement-Register
808 @ von Null verschieden ist, wird der Programmzaehler auch
809 relativ dazu angezeigt.
810 z.B. Das Displacement-Register enthalte den Wert F00H, alle
811 Flags seien gesetzt, der Interrupt sei eingeschaltet und
812 die Register enthalten willkuerliche Werte:
813 > X
814 SZHVNCE A =12 BC =3456 DE =789A HL =BCDE SP=F012 PC=3456..
815 SZHVNC A'=78 BC'=9ABC DE'=DEF0 HL'=1234 IX=5678 IY=9ABC..
816 Nach einem Neustart des DDTZ enthalten die Register
817 folgende Werte:
818 E A =00 BC =0000 DE =0000 HL =0000 SP=AC00 PC=0100..
819 A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000..
820 Das Interrupt-Enabled-Flag ist gesetzt, falls beim Start des
821 DDTZ der Interrupt eingeschaltet war. Das I-Register enthaelt
822 den Wert, den es beim Start des DDTZ enthielt. Der Programm-
823 zaehler steht auf 100H, zeigt also auf den Anfang des Benutzer-
824 speichers. Der Stackpointer zeigt auf das obere Ende des Be-
825 nutzerspeichers, abgerundet auf volle 100H. Alle anderen Re-
826 gister enthalten Nullen.
827
828 X register
829 ----------
830
831 Anzeigen und eventuell modifizieren eines Registers.
832 (eXamine [and substitute] a register)
833
834 Nach Eingabe des Buchstabens X, gefolgt von einem Register-
835 namen, wird der betreffende Registerinhalt ausgegeben und ein
836 neuer Wert angefordert. Eine leere Eingabe (nur Return-Taste)
837 laesst den Registerinhalt unveraendert; ein eingegebener Wert
838 oder Ausdruck wird in das Register eingetragen. Ist das ange-
839 waehlte Register das F- oder F'-Register, so werden die Flags
840 als Buchstaben angezeigt. Daraufhin koennen durch Eingabe neuer
841 Buchstaben in beliebiger Reihenfolge die entsprechenden Flags
842 gesetzt werden, wobei nicht gegebene Flags zurueckgesetzt
843 werden. Das Interrupt-Flag wird im DDTZ wie ein Flag des F-
844 Registers behandelt.
845
846 Die Namen der Register und der Flags der F-Register sind im
847 Anhang aufgelistet.
848 \f
849 z.B. Setzen des HL-Registers auf ABCDH, des C-Registers auf den
850 ASCII-Wert 'A', und Setzen des Carryflags des F-Registers
851 und des Interrupt-Flags:
852 > Xhl
853 HL=1234 abcd
854 > Xc
855 C=40 'A'
856 > Xf
857 S VNCE ce
858
859
860 Y
861 -
862
863 Anzeigen aller Y-Variablen.
864 (examine all Y variables)
865
866 Beim Untersuchen eines Programms ist es vielfach von Vorteil,
867 wenn man bestimmte Adressen, Registerstaende, Zwischenergebnis-
868 se bei Berechnungen usw. festhalten kann und bei weiteren
869 Berechnungen oder DDTZ-Kommandos als Argumente einsetzen kann.
870 Fuer diesen Zweck haelt das DDTZ zehn frei verfuegbare Varia-
871 blen bereit, die mit Y0 bis Y9 bezeichnet sind. Die derzeitigen
872 Werte in diesen Variablen koennen mit dem Y-Kommando angezeigt
873 werden.
874 z.B. Nach dem Starten des DDTZ enthalten die Y-Variablen alle
875 den Wert Null:
876 > Y
877 Y0=0000 Y1=0000
878 Y2=0000 Y3=0000
879 Y4=0000 Y5=0000
880 Y6=0000 Y7=0000
881 Y8=0000 Y9=0000
882
883 Yziffer0bis9
884 ------------
885
886 Anzeigen und eventuell Modifizieren einer Y-Variablen.
887 (examine [and substitute] an Y variable)
888
889 Nach Eingabe des Buchstabens Y, unmittelbar gefolgt von einer
890 Ziffer 0 bis 9, wird der derzeitige Wert der berteffenden Y-
891 Variable angezeigt und ein neuer Wert angefordert. Eine leere
892 Eingabe (nur Return-Taste) laesst den Wert unveraendert, ein
893 angegebener Wert wird in die Variable eingetragen.
894 z.B. Ein File-Control-Block (33 Bytes lang), auf den zur Zeit
895 das DE-Register zeigt, soll im weiteren Verlauf eines
896 Programmtests oefters inspiziert werden. Statt sich den
897 Stand des DE-Registers zu merken oder zu notieren und
898 immer wieder einzugeben, kann er in eine Variable, z.B.
899 Y1, eingetragen werden:
900 > Y1
901 Y1=0000 ^de
902 Mit D y1 s 33. oder dy1s21 kann jetzt jederzeit der File-
903 Control-Block angesehen werden.
904 \f
905
906 Z startadr endadr bytes
907 -----------------------
908
909 Vorbesetzen eines Speicherbereiches mit einer Byte-Folge.
910 (Zap (fill) memory with a byte string)
911
912 Der Speicher wird beginnend bei der angegebenen Startadresse
913 bis (einschliesslich) zur angegebenen Endadresse mit der ange-
914 gebenen Bytefolge belegt. Die Bytefolge wird genauso wie beim
915 S-Kommando angegeben. Ist sie kuerzer als der zu besetzende
916 Speicher, so wird die Bytefolge wiederholt, bis die Endadresse
917 erreicht ist.
918 z.B. Loeschen des gesamten Benutzerspeichers mit Nullen:
919 > Z l t 0
920 z.B. Fuellen eines bei der Adresse 1000H beginnenden, 10H Bytes
921 langen Puffers mit dem Text 'leer!', Carriage Return,
922 Linefeed:
923 > Z1000s10 'leer!',d,a
924 > D1000s12
925 1000 6C 65 65 72 21 0D 0A 6C 65 65 72 21 0D 0A 6C..
926 1010 00 00 ..
927 z.B. Durchfuehren eines einfachen Speichertests: Erst wird der
928 gesamte Benutzerspeicher mit einer krummen Anzahl, z.B.
929 sieben, Testbytes gefuellt und dann der Speicher mit sich
930 selbst, um die Laenge der Testbytefolge verschoben, ver-
931 glichen:
932 > Zl t 0 ff aa 55 a5 5a 0f
933 > Vl t-7 l+7
934 \f
935 ANHANG
936 ======
937
938 Zusammenfassung der Kommandos
939 -----------------------------
940
941 > @
942 examine [substitute] displacement register @
943 Anzeigen und eventuell Aendern des Displacement-Registers
944
945 > A [startadresse]
946 Assemble Zilog Z80 mnemonics
947 Assemblieren von Z80-Befehlen
948
949 > B
950 display all breakpoints
951 Anzeigen aller Breakpoints
952 > B breakp [breakp..]
953 set breakpoints
954 Breakpoints setzen
955 > BX
956 clear all breakpoints
957 Loeschen aller Breakpoints
958 > BX adresse [adresse..]
959 clear breakpoints
960 Breakpoints loeschen
961
962 >>C[N][J] [befehlsanzahl]
963 >>C[N][J] W ausdruck
964 >>C[N][J] U ausdruck
965 trace over calls [No list] [Jumps only] /.While./.Until.
966 Tracen ueber CALLs [ohne Ausgabe] [nur Sprungbefehle]
967 /.solange./.bis.
968
969 >>D [startadr] [endadr]
970 Display memory in hex and ASCII
971 Auslisten des Speichers in HEX und ASCII
972
973 > Fkommandozeile
974 specifiy filename and command line
975 File-Controlblock und CP/M-Kommandozeile spezifizieren
976
977 > G [startadr] [;breakp..]
978 Go [to start] [with temporary breakpoints]
979 Starte ein geladenes Programm, eventuell mit temporaeren
980 Breakpoints
981
982 > H
983 display High and maximal size of files
984 Groesse und maximale Groesse von Files anzeigen
985 > H ausdruck
986 compute hex and other expressions
987 Berechnen eines Ausdrucks
988 > H ausdruck ausdruck
989 Hex and other sum and difference
990 Summe und Differenz zweier Ausdruecke
991
992 >>I [port]
993 Input a byte from port
994 Einlesen eines Daten-Bytes von einem Port
995
996 >>L [startadr] [endadr]
997 List disassembled code
998 Listen eines Speicherbereichs in Z80-Mnemonics
999 \f
1000 > M[V] startadr endadr zieladr
1001 Move memory [and verify]
1002 Umladen eines Speicherbereiches in einen anderen, evtl.
1003 Vergleichen
1004
1005 >>O [byte] [port]
1006 Output a byte to a port
1007 Ausgeben eines Datenbytes an einen Ausgabeport
1008
1009 > Q[J] startadr endadr bytes
1010 Query memory for a byte string [Justified]
1011 Durchsuchen des Speichers nach einer gegebenen Folge von
1012 Bytes
1013
1014 > R [displacement]
1015 Read a binary or hex file ]add displacement]
1016 Einlesen einer Binaer- oder HEX-File in den Speicher,
1017 evtl. verschoben
1018
1019 > S [startadr]
1020 Substitute Memory
1021 Anzeigen und Aendern von Daten im Speicher
1022
1023 >>T[N][J] [befehlsanzahl]
1024 >>T[N][J] W ausdruck
1025 >>T[N][J] U ausdruck
1026 Trace [no List] [Jumps only] / .While. / .Until.
1027 Tracen [ohne Ausgabe] [nur Sprungbefehle] /.solange./.bis.
1028
1029 > Vstartadr endadr zieladr
1030 Verify (compare) two memory areas
1031 Vergleichen zweier Speicherbereiche
1032
1033 > Wstartadr endadr
1034 Write a file to disk
1035 Ausschreiben eines Speicherbereichs in eine File
1036
1037 > X
1038 eXamine all cpu registers
1039 Anzeigen aller Register und des Befehls, auf den der Pro-
1040 grammzaehler zeigt
1041 > X register
1042 eXamine [and substitute] a register
1043 Anzeigen und eventuell Modifizieren eines Registers
1044
1045 > Y
1046 examine all Y variables
1047 Anzeigen aller Y-Variablen
1048 > Yziffer0bis9
1049 examine [and substitute] an Y variable
1050 Anzeigen und eventuell Modifizieren einer Y-Variablen
1051
1052 > Z startadr endadr bytes
1053 Zap (fill) memory with a byte string
1054 Vorbesetzen eines Speicherbereiches mit einer Byte-Folge
1055
1056 \f
1057 Registernamen
1058 -------------
1059
1060 A , F , B , C , D , E , H , L ,BC , DE , HL
1061 A', F', B', C', D', E', H', L',BC', DE', HL'
1062 IX oder X , IY oder Y , Sp oder S , PC oder P , I
1063
1064 Flags des F- und des F'-Registers:
1065
1066 S Sign Vorzeichen
1067 Z Zero Null
1068 H Half carry Uebertrag von Bit 3 nach Bit 4
1069 V oVerflow/parity Ueberlauf/ gerade Paritaet
1070 N Negation NEG, DEC, SUB o.ae. wurde ausgefuehrt
1071 C Carry Uebertrag von Bit 7
1072 E Interrupt Enabled Das Interrupt-Flag wird im DDTZ wie
1073 ein Flag des F-Registers behandelt.
1074
1075 Variablen und Konstanten
1076 ------------------------
1077
1078 L Low Benutzerspeicher-Anfang. Festwert 100H
1079 H High Hoechste Adresse der letzten gelesenen
1080 File
1081 M Max Maximale Adresse aller gelesenen Files
1082 T Top Oberes Ende des Benutzerspeichers
1083 @ Displacement Register
1084 $ beim Assemblieren Anfangsadresse des
1085 Befehls sonst = PC
1086 Y0..Y9 Frei verwendbare Variablen
1087 ^register Inhalt eines Registers
1088 (adresse) Inhalt eines Speicherplatzes (Byte)
1089 (adresse). Inhalt eines Speicherplatzes (Wort)
1090
1091 Ausdruecke
1092 ----------
1093
1094 In allen Situationen, in denen Zahlen eingegeben werden koen-
1095 nen, ist auch die Eingabe von Ausdruecken erlaubt.
1096
1097 Ausdruecke sind im allgemeinen arithmetische Ausdruecke, koen-
1098 nen aber auch (zum Formulieren von Bedingungen) Relationen
1099 sein. Relationen bestehen aus zwei arithmetischen Ausdruecken,
1100 zwischen denen einer der folgenden Relationsoperatoren steht:
1101 = <> > >= <= <
1102
1103 Relationen haben den Wert -1 (=0FFFFH), wenn die Relation wahr
1104 ist, 0 sonst.
1105 z.B. der Ausdruck 1+2=3 hat den Wert -1, und 'A'>'B' den Wert 0
1106
1107 Ein arithmetischer Ausdruck hat die folgende Form
1108
1109 faktor arithmetikoperator faktor arith... faktor
1110
1111 \f
1112 Die Arithmetikoperatoren sind
1113 + - * / % Addition, Subtraktion, Mult., Division, Modulo
1114 & ! # bitweise AND, OR, XOR
1115
1116 Ein Faktor hat die Form
1117 [ausdruck] geklammerter Ausdruck
1118 +faktor
1119 -faktor Negation
1120 ~faktor bitweise NOT (1er-Komplement)
1121 'a' Wert eines ASCII-Zeichens (a=druckbares Zeichen)
1122 'a'. " mit gesetzem Bit 7
1123 'ab' Wert zweier ASCII-Zeichen (a,b=druckbare Zeichen)
1124 'ab'. " das niederwertige Zeichen mit gesetztem Bit 7
1125 (ausdruck) ein Byte im Speicher
1126 (ausdruck). ein Wort im Speicher
1127 hhhh[H] Hex-Zahl (h=0..9,A..F oder a..f)
1128 ddddd. Dezimal-Zahl (d=0..9)
1129 bbbbbbbb"bbbbbbbb" Binaer-Zahl (beliebig mit '"' unterteilt (b=0,1)
1130
1131 Enthaelt ein Ausdruck einen Relationsoperator, so werden erst
1132 die beiden arithmetischen Ausdruecke berechnet und dann die
1133 Relation.
1134 Ein arithmetischer Ausdruck wird von links nach rechts be-
1135 rechnet, also ohne Beachtung "Punktrechnung vor Strichrech-
1136 nung", die Reihenfolge kann jedoch mit Klammern '[' und ']'
1137 geaendert werden.
1138 Ein Pluszeichen darf, wenn dabei der Ausdruck eindeutig bleibt,
1139 weggelassen werden; z.B. ist @1000 dasselbe wie @+1000.
1140 Ausdruecke duerfen keine Leerzeichen enthalten!
1141