]> cloudbase.mooo.com Git - ddt180.git/blob - doc/ddtz-de-tiny.txt
Remove register name aliases and unused strings t_(tstfl_ZCPS). dissas opt (arg printing)
[ddt180.git] / doc / ddtz-de-tiny.txt
1
2
3
4 ***************************************
5 ***** *****
6 ***** DDTZ *****
7 ***** *****
8 ***************************************
9
10 Ein Programmentwicklungs- und Fehlersuch-Werkzeug fuer Z180-
11 Mikrocomputer
12
13
14 Einfuehrung
15 ===========
16
17 Das DDTZ ist ein komfortables Werkzeug zum Entwickeln und
18 Austesten von Z180-Programmen, sowie zum Ueberpruefen des Zusam-
19 menwirkens zwischen Programm und Hardware-System.
20
21 Folgende Komponenten sind im DDTZ enthalten:
22
23 - Disassembler zum Rueck-Uebersetzen von Maschinenprogrammen.
24 - Tracer zum Ausfuehren von Programmen in Einzelschritten.
25 - Ausdruck-Interpreter erlaubt bei allen Kommandos die Verwen-
26 dung von arithmetischen und logischen Ausdruecken mit HEX-,
27 Dezimal-, Binaer- und ASCII-Werten, sowie Speicher- und
28 Registerinhalten und Variablen.
29
30 Das DDTZ laeuft unter [todo]
31 Es benoetigt eine Z80- oder Z180-CPU und belegt [todo] KBytes
32 Speicher.
33
34 Der Gebrauch des DDTZ
35 =====================
36
37 Der Aufruf [todo]
38 ----------
39
40 relokation
41
42 um dem Anwenderprogramm die
43 durch das DDTZ verringerte Speichergroesse mitzuteilen. Der
44 urspruenglich vom DDTZ belegte Speicher wird daraufhin mit
45 Nullen geloescht. [todo]
46
47 HW-Initialisierung
48
49 Nach Ausgabe des Prompt-Zeichens '>' ist das DDTZ betriebs-
50 bereit.
51 \f
52 Die Kommandos
53 -------------
54
55 Jede Taetigkeit des DDTZ, z.B. Disassemblieren eines Programm-
56 Abschnittes usw. wird mit einem Kommando
57 eingeleitet. Kommandos koennen immer dann eingegeben werden,
58 wenn das DDTZ mit dem Prompt-Zeichen '> ' oder '>>' seine
59 Bereitschaft anzeigt.
60
61 Kommandos beginnen mit einem der Zeichen '' [todo] bis 'Z', eventuell
62 gefolgt von weiteren optionalen Buchstaben, sowie Argumenten.
63 Bei einigen Kommandos sind alle Argumente obligat, d.h. alle
64 Argumente muessen angegebnen werden. Bei anderen Kommandos sind
65 jedoch die Argumente alle oder zum Teil optional, d.h. sie
66 koennen entweder explizit angegeben werden, duerfen aber auch
67 weggelassen werden. Wird eine optionale Anfangsadresse wegge-
68 lassen, so wird die Adresse benutzt, bei der das Kommando
69 zuletzt beendet wurde. Wird eine optionale Endadresse weggelas-
70 sen, so wird das Kommando (z.B. L oder D) so lange ausgefuehrt,
71 bis etwa ein Bildschirm vollgeschrieben ist. Ein weggelassenes
72 optionales Argument, hinter dem weitere Argumente angegeben
73 werden sollen, muss durch ein Komma ersetzt werden. Optionale
74 Elemente sind in den folgenden Kommando-Beschreibungen durch
75 eckige Klammern gekennzeichnet (die Klammern sind also nicht
76 mit einzugeben). Zwischen zwei Argumenten muss ein Blank
77 oder ein Komma stehen.
78
79 Argumente werden im allgemeinen als HEX-Zahlen eingegeben,
80 duerfen aber auch als Dezimal- und Binaerzahlen, als ASCII-
81 Werte, Variablen oder in Form arithmetischer Ausdruecke einge-
82 geben werden. HEX-Zahlen sind im DDTZ Zahlen, die aus den
83 Ziffern 0 bis 9 und den Buchstaben A bis F (oder a bis f)
84 bestehen und nicht durch weitere Zusaetze (z.B. Buchstabe H)
85 als HEX-Zahl gekennzeichnet sein muessen. Im Gegensatz zu den
86 meisten Assemblern sind HEX-Zahlen, deren erstes Zeichen ein
87 Buchstabe ist, im DDTZ erlaubt. Dezimal-Zahlen werden zur
88 Unterscheidung mit einem Punkt abgeschlossen und Binaerzahlen
89 tragen am Ende ein doppeltes Anfuehrungszeichen. Naeheres zur
90 Eingabe von Zahlen, Variablen und Ausdruecken finden Sie bei
91 der Beschreibung des H-Kommandos und im Anhang.
92
93 Bei Kommandos, die eine Start- und eine Endadresse erfordern,
94 kann anstelle der Endadresse auch der Buchstabe 'S', gefolgt
95 von einer Laengenangabe verwendet werden.
96 z.B. bedeutet D 1000 S 100 oder D1000s100
97 das selbe wie D 1000 10FF oder d1000,10ff
98
99 Bei allen Eingaben ist es einerlei, ob Gross- oder Kleinbuch-
100 staben verwendet werden. Die einzige Ausnahme ist die Eingabe
101 von ASCII-Zeichen und Zeichenketten.
102 \f
103 Die Wiederhol-Funktion
104 ----------------------
105
106 Beim Gebrauch des DDTZ kommt es oefters vor, dass man einen
107 Befehl nicht nur einmal benutzt und danach einen anderen Befehl
108 anwendet, sondern das man ein und denselben Befehl mehrmals
109 wiederholen will. Moechte man z.B. ein Programm in Einzel-
110 schritten ausfuehren lassen, um nach jedem Schritt die Register
111 zu inspizieren, so waere fuer jeden Schritt die Eingabe eines
112 Trace-Kommandos ohne Argumente notwendig (also der Buchstabe
113 'T' und die Return-Taste). Ein weiteres Beispiel ist das Ueber-
114 pruefen der Hardware eines Ausgabeports: Will man mit einem
115 Oszilloskop Signale eines Ausgabeports ueberpruefen, so waere
116 es sehr laestig, zur wiederholten Ausgabe eines Testbytes an
117 den Port waehrend der Beobachtung des Oszilloskops immer wieder
118 das 'O'-Kommando eingeben zu muessen.
119 Aus diesen Gruenden besitzt das DDTZ die Wiederholfunktion.
120 Diese bewirkt, dass bei einer leeren Eingabe (nur Return-Taste)
121 das letzte Kommando ohne Argumente wiederholt wird. Die Bereit-
122 schaft der Wiederhol-Funktion wird durch einen doppelten Prompt
123 '>>' anstelle des einfachen '> ' angezeigt.
124 \f
125 Die Kommandos des DDTZ
126 ======================
127
128 Im Folgenden werden alle Kommandos des DDTZ erklaert und mit
129 Beispielen verdeutlicht. Im Bereich der Computertechnik hat es
130 sich international eingebuergert, englische Bezeichnungnen zu
131 benutzen. Deshalb sind auch beim DDTZ die Kommandos Abkuer-
132 zungen englischer Woerter. Diese sind neben einer deutschen
133 Bezeichnung am Anfang jeder Kommando-Erklaerung mit angegeben.
134 Zur Einarbeitung empfiehlt es sich, an dieser Stelle des DDTZ
135 schon einmal zu starten und die im kommenden Abschnitt erklaer-
136 ten Kommandos der Reihe nach auszuprobieren. Assemblieren Sie
137 ein simples Testprogramm mit dem A-Kommando,
138 [todo]
139 z.B.: > s100
140 0100 00 3E 00 3D C2 02 01 C3 00 00
141 0109 00 .
142
143 Listen Sie das Programm dann mit dem L-Kommando in disassem-
144 blierter Form aus,
145
146 > l100 108
147 0100 LD A,00
148 0102 DEC A
149 0103 JP NZ,0102
150 0106 JP 0000
151
152 setzen Sie einen Breakpoint auf Adresse 0
153 mit dem B-Kommando und starten Sie es mit dem G-Kommando usw.
154 Nach einigem Ausprobieren und Spielen mit dem DDTZ werden Sie
155 sicher schnell die vielen Moeglichkeiten dieses komfortablen
156 Werkzeugs kennen und nutzen koennen.
157
158
159 B
160 -
161
162 Anzeigen aller Breakpoints.
163 (display all breakpoints)
164
165 Die Adressen aller gesetzten Breakpoints werden aufgelistet.
166
167
168 B breakp [breakp..]
169 -------------------
170
171 Breakpoints setzen.
172 (set breakpoints)
173
174 Zum Austesten eines Programms ist es erforderlich, das Programm
175 nicht nur starten zu koennen, sondern der Ablauf des Programms
176 muss sich auch bequem verfolgen und beobachten lassen. Neben
177 den Tracen (siehe Kommando T) ist das Setzen von Break-
178 points (Unterbrechungspunkten) eine sehr komfortable Moeglich-
179 keit, den Programmablauf zu verfolgen.
180 Ein Breakpoint wird auf das erste Byte (den Opcode) eines
181 Maschinenbefehls gesetzt und bewirkt, dass der Programmablauf
182 unterbrochen wird, sobald der Programmzaehler bei dieser Adres-
183 se angekommen ist. Man kann dann die Registerinhalte inspizie-
184 ren, Speicherinhalte kontrollieren usw., um danach den Pro-
185 grammablauf fortzusetzen oder an einer anderen Stelle fortzu-
186 fahren.
187
188 \f
189 Wird ein Breakpoint auf eine Adresse gesetzt, auf der sich
190 bereits ein Breakpoint befindet, so wird der bereits vorhandene
191 automatisch geloescht.
192 Achtung: Breakpoints koennen nur im RAM gesetzt werden; in
193 Programmen die in ROM's oder EPROM's enthalten sind, sind
194 Breakpoints nicht moeglich (Siehe folgenden Abschnitt).
195
196 Interne Breakpointbehandlung des DDTZ:
197
198 Wird ein Programm mit dem G-Kommando gestartet, so ersetzt das
199 DDTZ alle Opcodes, auf die eine Breakpoint-Adresse zeigt, durch
200 einen Restart-Befehl RST n und bewahrt die Opcodes auf. In die
201 Adresse n, auf die der RST-Befehl springt, wird ein Sprungbe-
202 fehl eingesetzt, der in den Breakpoint-Handler des DDTZ fuehrt.
203 Nach einem Programmstop werden die Opcodes wieder eingesetzt,
204 sodass das Programm immer dann, wenn es dem Benutzer zugaeng-
205 lich ist, unmodifiziert ist. Als RST-Adresse ist 38H oder 30H
206 voreingestellt. Ist die voreingestellte Adresse jedoch fuer
207 andere Zwecke bereits vergeben, so kann der RST-Befehl geaendert
208 werden, z.B. auf
209 30H:
210 > LT4S1
211 xxx9 RST 38
212 >>ST4
213 xxx9 F7 F7
214 xxxA 00 .
215 > LT4S1
216 xxx9 RST 30
217
218 \f
219 BX
220 --
221
222 Loeschen aller Breakpoints.
223 (clear all breakpoints)
224
225 BX adresse [adresse..]
226 ----------------------
227
228 Loeschen der Breakpoints an den angegebenen Adressen.
229 (clear breakpoints)
230
231 D [startadr] [endadr]
232 ---------------------
233
234 Auslisten des Speichers in HEX und ASCII
235 (Display memory in hex and ASCII)
236
237 Der Speicher-Inhalt wird beginnend bei der Startadresse bis zur
238 Endadresse in HEX und ASCII auf der Konsole ausgelistet. Die
239 ASCII-Anzeige ignoriert das Bit 7 des jeweiligen Bytes. Ist der
240 Wert eines Bytes nicht als ASCII-Zeichen druckbar, so wird
241 statt dessen ein Punkt ausgegeben.
242 \f
243 G [startadr] [;breakp..]
244 ------------------------
245
246 Starte ein geladenes Programm, eventuell mit temporaeren Breakpoints.
247 (Go [to start] [with temporary breakpoints])
248
249 Wird eine Startadresse angegeben, so wird der Programmzaehler
250 des Z80 auf diese Adresse gesetzt, andernfalls wird bei dem
251 letzten Programmzaehlerstand fortgefahren. Im G-Kommando koen-
252 nen temporaere Breakpoints angegeben werden. Sie werden in der
253 gleichen Form wie die permanenten Breakpoints beim B-Kommando
254 spezifiziert und haben auch die gleiche Wirkung mit dem Unter-
255 schied, dass bei einem Programmstop an einem der temporaeren
256 oder permanenten Breakpoints die temporaeren automatisch ge-
257 loescht werden.
258 z.B. Vollstaendiges Abarbeiten eines CP/M-Programms, das mit
259 JP 0 endet:
260 > GL;0
261
262 H
263 -
264
265 Groesse und maximale Groesse von Files anzeigen.
266 (display High and maximal size of files)
267
268 Die hoechste von der zuletzt eingelesenen File belegte Adresse
269 wird angezeigt, sowie die hoechste von irgendeiner der einge-
270 lesenen Files belegte Adresse. Erstere ist auch in der Varia-
271 blen H, letztere in der Variablen M enthalten. (Siehe auch
272 R-Kommando)
273
274 H ausdruck
275 ----------
276
277 Berechnen eines Ausdrucks.
278 (compute expression / Hex and other)
279
280 Wird ein Ausdruck angegeben, so zeigt das DDTZ dessen Ergebnis
281 an Ergebnisse werden in HEX, als negative
282 HEX-Zahl, in Dezimal, als negative Dezimalzahl, in Binaer und
283 das niederwertige Byte zusaetzlich als ASCII-Zeichen darge-
284 stellt. Nicht druckbare ASCII-Zeichen werden dabei als Control-
285 Zeichen in der Form '^x' angezeigt.
286
287 Wie Ausdruecke formuliert werden, ist der Uebersichtlichkeit
288 halber im Anhang angegeben.
289
290 z.B.: Was ist die Endadresse eines 17 KByte langen Programms,
291 das bei Adresse 100H beginnt?
292 > H17.*1024.+100
293 4500 -BB00 17664. -47872. 01000101"00000000" '^@'
294 Der freie Speicher beginnt also bei 4500H.
295 z.B.: Beim Disassemblieren eines unbekannten Programms wird
296 eine Subroutine gefunden, die nacheinander mit den Werten
297 D8F0H, FC18H, FF9CH usw. in den Registern aufgerufen
298 wird. Was kann das fuer eine Routine sein?
299 > HD8F0
300 D8F0 -2710 55536. -10000. 11011000"11110000" 'p'.
301 > H fc18
302 FC18 -03E8 64536. -1000 11111100"00011000" '^X'
303 > H FF9CH
304 FF9C -0064 65436. -100 11111111"10011100" '^\'.
305 Bei den Werten handelt es sich offenbar um dezimal -
306 10000, -1000 usw.; die Routine hat also wahrscheinlich
307 etwas mit einer Binaer-zu-Dezimal-Umrechnung zu tun.
308
309 I [port]
310 --------
311
312 Einlesen eines Daten-Bytes von einem Port.
313 (input a byte from port)
314
315 Zum Austesten der Computer-Hardware koennen mit diesem Kommando
316 Bytes von Ports eingelesen und in HEX und binaer angezeigt
317 werden. Wird die Portadresse nicht angegeben, so wird der
318
319 zuletzt in einem frueheren I-Kommando angegebene Port ange-
320 sprochen. Die Moeglichkeit, bei Z80-I/O-Befehlen hardwareseitig
321 auch die Adressleitungen A15 bis A8 zur Informationsuebertra-
322 gung mitzuverwenden, ist im DDTZ realisiert. DDTZ-intern wird
323 die Portadresse als Zwei-Byte-Wort in das BC-Register
324 geladen und mit IN A,(C) der Port gelesen.
325 Bei diesem Kommando zeigt zeigt sich besonders der Vorteil der
326 Wiederholungsfunktion des DDTZ: Nachdem einmal das I-Kommando
327 explizit gegeben wurde, kann man, waehrend man verschiedene
328 Pegel an die Anschluesse des Ports anlegt, durch einfaches
329 Druecken der Return-Taste die Portabfrage wiederholen.
330 \f
331 L [startadr] [endadr]
332 ---------------------
333
334 Listen eines Speicherbereichs in Z180-Mnemonics.
335 (List disassembled code)
336
337 Dieses Kommando disassembliert im Speicher stehende Programme.
338 (Beispiel: siehe Q-Kommando)
339
340
341 M[V] startadr endadr zieladr
342 ----------------------------
343
344 Umladen eines Speicherbereichs in einen anderen, eventuell ver-
345 gleichen. (Move memory [and verify])
346
347 Der Speicherinhalt beginnend bei der angegebenen Startadresse
348 bis (einschliesslich) zur angegebenen Endadresse wird in einen
349 anderen Bereich, beginnend bei der angegebenen Zieladresse,
350 kopiert. Wird der optionale Buchstabe V gegeben, so wird die
351 Kopie mit dem Original verglichen und etwaige Diffrenzen in HEX
352 ausgelistet. Differenzen koennen bei defektem Speicher ent-
353 stehen oder dann, wenn versehentlich in Bereiche kopiert wird,
354 die kein RAM enthalten. Das M-Kommando wird auch dann korrekt
355 ausgefuehrt, wenn der Quell- und der Zielbereich gegenseitig
356 ueberlappen. In diesem Fall ist ein Vergleichen allerdings
357 nicht moeglich, da beim Kopieren ja ein Teil des Quellbereichs
358 ueberschrieben wird.
359 Achten Sie bei diesem Kommando besonders darauf, dass Sie nicht
360 das DDTZ oder das Disk Operating System versehentlich ueber-
361 schreiben.
362
363 O [byte] [port]
364 ---------------
365
366 Ausgeben eines Datenbytes an einen Ausgabeport.
367 (Output a byte to a port)
368
369 Zum Austesten der Computer-Hardware koennen mit diesem Kommando
370 Bytes an Ports des Computersystems ausgegeben werden.
371 Achtung: Im Gegensatz zu dem Z80-Befehl OUT port,byte ist hier
372 aus folgendem Grund erst das Datenbyte und dann die Portadresse
373 anzugeben:
374 Die Portadresse kann weggelassen werden, falls ein Datenbyte an
375 den selben Port, wie in einem vorherigen O-Kommando spezifi-
376 ziert, ausgegeben werden soll.
377 Die Moeglichkeit, bei Z80-I/O-Befehlen hardwareseitig auch die
378 Adressleitungen A15 bis A8 zur Informationsuebertragung mitzu-
379 verwenden, ist im DDTZ realisiert. DDTZ-intern wird die Port-
380 adresse als Zwei-Byte-Wort in das BC-Register geladen und mit
381 OUT (C),A das Byte an den Port ausgegeben.
382 \f
383 Q startadr endadr bytes
384 --------------------------
385
386 Durchsuchen des Speichers nach einer gegebenen Folge von Bytes.
387 (Query memory for a byte string)
388
389 Der Speicher wird beginnend bei der angegebnen Startadresse und
390 endet (einschliesslich) bei der angegebenen Endadresse auf eine
391 angegebene Byte-Folge hin durchsucht. Fundstellen werden wie
392 beim D-Kommando in HEX und ASCII ausgelistet. Das erste ge-
393 suchte Byte steht dabei jeweils am linken Bildrand. Die Byte-
394 Folge kann wie beim S-Kommando eine Folge von HEX-Zahlen,
395 Ausdruecken, Worten und Text-Strings sein.
396
397 z.B. Ein zu untersuchendes Programm gibt an einem bestimmten
398 Punkt seines Ablaufes aus unbekannter Ursache die Meldung
399 "Hardware error" auf die Konsole aus und stoppt. Woher
400 kommt diese Meldung ?
401 [todo] > QJ l h 'Hardwar'
402 1502 73 74 65 64 24 4E 6F 20 48 61 72 64 77 61 ...
403 Der Text "Hardware error beginnt also bei Adresse 150A. Wo
404 wird er ausgegeben ?
405 > QJ l h w150a
406 >
407 (Keine Meldung) Auf die Adresse wird also nicht direkt
408 zugegriffen. Vielleicht haben wir Glueck, indem wir
409 suchen, wo 'No Hardware error" ausgegeben wird. Dieser
410 Text beginnt bei 1507H.
411 > QJ l h w1507
412 08FE 00 00 00 00 00 AF C9 21 07 15 CD 65 07 30 ...
413 > L8FE+7
414 0905 LD HL,1507
415 0908 CALL 0765
416 090B JR NC,0910
417 090D INC HL
418 090E INC HL
419 090F INC HL
420 0910 CALL 0654
421 Die Subroutine, die bei Adresse 908 aufgerufen wird,
422 fuehrt also offenbar einen Test durch und meldet einen
423 Fehler im Carry-Flag. Der Text wird dann bei Adresse 910
424 ausgegeben.
425
426 R [displacement]
427 ----------------
428 [todo console/reader]
429 Einlesen einer HEX-File in den Speicher, eventuell verschoben.
430 (Read a hex file [add displacement])
431
432 Eine Intel-Hex-File wird von der (seriellen) Reader-Schnittstelle
433 in den Speicher eingelesen.
434 Die Daten werden bei den in der File enthaltenen
435 Adressen im Speicher abgelegt.
436 Wird im R-Kommando ein Displacement angegeben, so wird eine
437 HEX-File bei der entsprechenden Adresse erhoeht um das Dis-
438 placement abgelegt. Nach
439 dem Einlesen der File wird erst die hoechste von dieser File
440 belgte Speicheradresse ausgelistet und dann die hoechste von
441 irgendeiner File seit Starten des DDTZ belegte Adresse. Falls
442 das DDTZ statt dessen ein Fragezeichen ausgibt, wurde beim Lesen
443 ein Checksummenfehler entdeckt, oder die File belegt Speicher-
444 plaetze ausserhalb des Bereichs L bis T.
445
446 S [startadr]
447 ------------
448
449 Anzeigen und Aendern von Daten im Speicher
450 (Substitute memory)
451
452 Die Startadresse, oder wenn diese nicht angegeben wurde, die
453 Adresse bei der das letzte S-Kommando beendet wurde, wird auf
454 der Konsole ausgegeben, und danach wird das an dieser Stelle im
455 Speicher befindliche Byte in HEX angezeigt. Anschliessend
456 erwartet das DDTZ eine Eingabe, und zwar gibt es folgende
457 Moeglichkeiten:
458 - Eine leere Eingabe (nur Return-Taste) schreitet ohne Spei-
459 cheraenderung zur naechsten Adresse weiter.
460 - Ein Minus-Zeichen geht ohne Speicheraenderung einen
461 Adressschritt zurueck.
462 - Ein Punkt (alleine in einer Zeile) beendet das Kommando.
463 - Ein Datenbyte oder eine Folge von von Datenbytes wird in
464 den Speicher eingetragen.
465
466 Datenbytes koennen folgendermassen eingegeben werden:
467 - Ausdruecke (im einfachsten Fall HEX-Zahlen) werden der
468 Reihe nach berechnet und eingetragen.
469 - Ein Apostroph, gefolgt von ASCII-Zeichen und einem
470 weiteren Apostroph bewirkt ein Eintragen einer ASCII-
471 Zeichenfolge. Kommt der Apostroph selbst in der Zeichen-
472 folge vor, so muss er zweimal gegeben werden. Folgt
473 auf den abschliessenden Apostroph ein Punkt, so wird das
474 Bit 7 des letzten Zeichens auf Eins gesetzt.
475 z.B. der Programmteil
476 0200 CALL 1234H
477 0203 DM 'Test ''1''' ; Test '1'
478 kann mit dem S-Kommando folgendermassen eingegeben werden:
479 > S200
480 0200 00 cdW1234
481 0203 00 'Test ''1'''.
482 020B 00 -
483 020A A7 .
484 \f
485 T [befehlsanzahl]
486 -----------------
487
488 Tracen
489 (Trace)
490
491 Im Gegensatz zum Starten eines Programms mit dem G-Kommando,
492 bei dem die Kontrolle voll dem auszufuehrenden Programm ueber-
493 geben wird und erst bei einem Breakpoint dem DDTZ zurueckge-
494 geben wird, behaelt beim Tracen das DDTZ die ganze Zeit die
495 Kontrolle. Das wird dadurch erreicht, dass das DDTZ automatisch
496 hinter jedem Befehl, bevor er ausgefuehrt wird, einen Break-
497 point einsetzt und nach Ausfuehrung des Befehls wieder loescht.
498 Bei bedingten Spruengen werden sogar zwei Breakpoints gesetzt,
499 einer hinter dem Sprungbefehl, der andere am Sprungziel. Das
500 Programm wird also in Einzelschritten ausgefuehrt. Nach jedem
501 Schritt legt das DDTZ die aktuellen Werte aller Register in
502 Speicherplaetze innerhalb des DDTZ ab, sodass die Register-
503 inhalte jederzeit ueberwacht werden koennen.
504 Das Tracen beginnt jeweils beim derzeitigen Stand des Programm-
505 zaehlers. Soll an einer anderen Stelle mit dem Tracen begonnen
506 werden, so muss der Programmzaehler mit dem X-Kommando neu
507 gesetzt werden.
508 Nach jedem Schritt werden alle Registerinhalte und der naechste
509 Z80-Befehl wie beim X-Kommando angezeigt.
510 Die einfachste Form des T-Kommandos ist nur der Buchstabe T
511 (gefolgt von der Return-Taste), worauf ein Einzelschritt ausge-
512 fuehrt wird. Falls das letzte Kommando bereits ein T-Kommando
513 war, genuegt wegen der Wiederholfunktion des DDTZ auch die
514 Return-Taste alleine, was das Einzelschritt-Tracen sehr er-
515 leichtert.
516 Wird im T-Kommando eine Befehlsanzahl angegeben, so werden
517 entsprechend viele Schritte hintereinander ausgefuehrt. In
518 diesem Fall kann der Trace-Vorgang durch Druecken
519 einer beliebigen Taste der Konsole vorzeitig abgebrochen
520 werden. Das Tracen wird unabhaengig von einer angegebenen
521 Befehlsanzahl oder Bedingung abgebrochen, wenn ein Breakpoint
522 erreicht wird.
523 \f
524 Achtung: Da die Einzelschritt-Abarbeitung durch automatisches
525 Setzen von Breakpoints erreicht wird, ist es unmoeglich, Pro-
526 gramme in ROMs zu tracen. Subroutinen in ROMs koennen mit dem
527 G-Kommando und geeigneten Breakpoints oder mit dem C-Kommando
528 uebersprungen werden. Falls Teile des BIOS in ROMs stehen,
529 stoert dies nicht, solange das zu untersuchende Programm nur
530 BDOS-Aufrufe enthaelt. Bei BDOS-Aufrufen wird der Trace-Modus
531 verlassen und erst nach der Rueckkehr aus dem BDOS wieder
532 aufgenommen.
533
534
535 V startadr endadr zieladr
536 -------------------------
537 Vergleichen zweier Speicherbereiche.
538 (Verify (compare) two memory areas)
539
540 Der Inhalt des Speichers beginnend bei der angegebenen Start-
541 adresse bis (einschliesslich) zur angegebenen Endadresse wird
542 mit dem Inhalt eines gleich langen Bereichs beginnend bei der
543 angegebenen Zieladresse verglichen. Unterschiede werden in HEX
544 ausgelistet. Das Auslisten kann durch Druecken einer beliebigen
545 Taste der Konsole abgebrochen werden.
546
547
548 X
549 -
550
551 Anzeigen aller Register und des Befehls, auf den der Programm-
552 zaehler zeigt.
553 (eXamine all cpu registers)
554
555 Jedesmal, wenn ein Breakpoint angelaufen wird oder ein Pro-
556 grammschritt getraced wird, legt das DDTZ die Registerinhalte
557 in einem innerhalb des DDTZ befindlichen Speicherbereich ab.
558 Wird mit G oder T die Ausfuehrung des Programms fortgesetzt, so
559 laedt das DDTZ vorher diese Daten wieder in die Register. Mit
560 dem X-Kommando koennen diese abgespeicherten Registerinhalte
561 jederzeit kontrolliert werden. Die Anzeige erfolgt, wie immer
562 im DDTZ, in HEX.
563 Die sechs gueltigen Bits des F- und des F'-Registers werden als
564 Buchstaben dargestellt. Das Interrupt-Flag wird wie ein Bit des
565 F-Registers angezeigt.
566 Der Z180-Befehl, auf den der Programmzaehler zeigt, wird in dis-
567 assemblierter Form ausgegeben.
568 z.B. Alle Flags seien gesetzt, der Interrupt sei eingeschaltet
569 und die Register enthalten willkuerliche Werte:
570 > X
571 SZHVNCE A =12 BC =3456 DE =789A HL =BCDE SP=F012 PC=3456..
572 SZHVNC A'=78 BC'=9ABC DE'=DEF0 HL'=1234 IX=5678 IY=9ABC..
573 Nach einem Neustart des DDTZ enthalten die Register
574 folgende Werte:
575 E A =00 BC =0000 DE =0000 HL =0000 SP=AC00 PC=0100..
576 A'=00 BC'=0000 DE'=0000 HL'=0000 IX=0000 IY=0000..
577 Das Interrupt-Enabled-Flag ist gesetzt, falls beim Start des
578 DDTZ der Interrupt eingeschaltet war. Das I-Register enthaelt
579 den Wert, den es beim Start des DDTZ enthielt. Der Programm-
580 zaehler steht auf 100H, zeigt also auf den Anfang des Benutzer-
581 speichers. Der Stackpointer zeigt auf das obere Ende des Be-
582 nutzerspeichers, abgerundet auf volle 100H. Alle anderen Re-
583 gister enthalten Nullen.
584
585 X register
586 ----------
587
588 Anzeigen und eventuell modifizieren eines Registers.
589 (eXamine [and substitute] a register)
590
591 Nach Eingabe des Buchstabens X, gefolgt von einem Register-
592 namen, wird der betreffende Registerinhalt ausgegeben und ein
593 neuer Wert angefordert. Eine leere Eingabe (nur Return-Taste)
594 laesst den Registerinhalt unveraendert; ein eingegebener Wert
595 oder Ausdruck wird in das Register eingetragen. Ist das ange-
596 waehlte Register das F- oder F'-Register, so werden die Flags
597 als Buchstaben angezeigt. Daraufhin koennen durch Eingabe neuer
598 Buchstaben in beliebiger Reihenfolge die entsprechenden Flags
599 gesetzt werden, wobei nicht gegebene Flags zurueckgesetzt
600 werden. Das Interrupt-Flag wird im DDTZ wie ein Flag des F-
601 Registers behandelt.
602
603 Die Namen der Register und der Flags der F-Register sind im
604 Anhang aufgelistet.
605
606 z.B. Setzen des HL-Registers auf ABCDH, des C-Registers auf den
607 ASCII-Wert 'A', und Setzen des Carryflags des F-Registers
608 und des Interrupt-Flags:
609 > Xhl
610 HL=1234 abcd
611 > Xc
612 C=40 'A'
613 > Xf
614 S VNCE ce
615
616
617
618 Z startadr endadr bytes
619 -----------------------
620
621 Vorbesetzen eines Speicherbereiches mit einer Byte-Folge.
622 (Zap (fill) memory with a byte string)
623
624 Der Speicher wird beginnend bei der angegebenen Startadresse
625 bis (einschliesslich) zur angegebenen Endadresse mit der ange-
626 gebenen Bytefolge belegt. Die Bytefolge wird genauso wie beim
627 S-Kommando angegeben. Ist sie kuerzer als der zu besetzende
628 Speicher, so wird die Bytefolge wiederholt, bis die Endadresse
629 erreicht ist.
630 z.B. Loeschen des gesamten Benutzerspeichers mit Nullen:
631 > Z l t 0
632 z.B. Fuellen eines bei der Adresse 1000H beginnenden, 10H Bytes
633 langen Puffers mit dem Text 'leer!', Carriage Return,
634 Linefeed:
635 > Z1000s10 'leer!',d,a
636 > D1000s12
637 1000 6C 65 65 72 21 0D 0A 6C 65 65 72 21 0D 0A 6C..
638 1010 00 00 ..
639 z.B. Durchfuehren eines einfachen Speichertests: Erst wird der
640 gesamte Benutzerspeicher mit einer krummen Anzahl, z.B.
641 sieben, Testbytes gefuellt und dann der Speicher mit sich
642 selbst, um die Laenge der Testbytefolge verschoben, ver-
643 glichen:
644 > Zl t 0 ff aa 55 a5 5a 0f
645 > Vl t-7 l+7
646 \f
647 ANHANG
648 ======
649
650 Zusammenfassung der Kommandos
651 -----------------------------
652
653 > B
654 display all breakpoints
655 Anzeigen aller Breakpoints
656 > B breakp [breakp..]
657 set breakpoints
658 Breakpoints setzen
659 > BX
660 clear all breakpoints
661 Loeschen aller Breakpoints
662 > BX adresse [adresse..]
663 clear breakpoints
664 Breakpoints loeschen
665
666 >>D [startadr] [endadr]
667 Display memory in hex and ASCII
668 Auslisten des Speichers in HEX und ASCII
669
670 > G [startadr] [;breakp..]
671 Go [to start] [with temporary breakpoints]
672 Starte ein geladenes Programm, eventuell mit temporaeren
673 Breakpoints
674
675 > H
676 display High and maximal size of files
677 Groesse und maximale Groesse von Files anzeigen
678 > H ausdruck
679 compute hex and other expressions
680 Berechnen eines Ausdrucks
681
682 >>I [port]
683 Input a byte from port
684 Einlesen eines Daten-Bytes von einem Port
685
686 >>L [startadr] [endadr]
687 List disassembled code
688 Listen eines Speicherbereichs in Z180-Mnemonics
689
690 > M startadr endadr zieladr
691 Move memory
692 Umladen eines Speicherbereiches in einen anderen
693
694 >>O [byte] [port]
695 Output a byte to a port
696 Ausgeben eines Datenbytes an einen Ausgabeport
697
698 > Q startadr endadr bytes
699 Query memory for a byte string
700 Durchsuchen des Speichers nach einer gegebenen Folge von
701 Bytes
702
703 > R [displacement]
704 Read a hex file ]add displacement]
705 Einlesen oder HEX-File in den Speicher, evtl. verschoben
706
707 > S [startadr]
708 Substitute Memory
709 Anzeigen und Aendern von Daten im Speicher
710
711 >>T [befehlsanzahl]
712 Trace
713 Tracen
714
715 > Vstartadr endadr zieladr
716 Verify (compare) two memory areas
717 Vergleichen zweier Speicherbereiche
718
719 > X
720 eXamine all cpu registers
721 Anzeigen aller Register und des Befehls, auf den der Pro-
722 grammzaehler zeigt
723 > X register
724 eXamine [and substitute] a register
725 Anzeigen und eventuell Modifizieren eines Registers
726
727 > Z startadr endadr bytes
728 Zap (fill) memory with a byte string
729 Vorbesetzen eines Speicherbereiches mit einer Byte-Folge
730
731 \f
732 Registernamen
733 -------------
734
735 A , F , B , C , D , E , H , L ,BC , DE , HL
736 A', F', B', C', D', E', H', L',BC', DE', HL'
737 IX oder X , IY oder Y , Sp oder S , PC oder P , I
738
739 Flags des F- und des F'-Registers:
740
741 S Sign Vorzeichen
742 Z Zero Null
743 H Half carry Uebertrag von Bit 3 nach Bit 4
744 V oVerflow/parity Ueberlauf/ gerade Paritaet
745 N Negation NEG, DEC, SUB o.ae. wurde ausgefuehrt
746 C Carry Uebertrag von Bit 7
747 E Interrupt Enabled Das Interrupt-Flag wird im DDTZ wie
748 ein Flag des F-Registers behandelt.
749
750 Variablen und Konstanten
751 ------------------------
752
753 L Low Benutzerspeicher-Anfang. Festwert 100H
754 H High Hoechste Adresse der letzten gelesenen
755 File
756 M Max Maximale Adresse aller gelesenen Files
757 T Top Oberes Ende des Benutzerspeichers
758 ^register Inhalt eines Registers
759 (adresse) Inhalt eines Speicherplatzes (Byte)
760 (adresse). Inhalt eines Speicherplatzes (Wort)
761
762 Ausdruecke
763 ----------
764
765 In allen Situationen, in denen Zahlen eingegeben werden koen-
766 nen, ist auch die Eingabe von Ausdruecken erlaubt.
767
768 Ausdruecke sind im allgemeinen arithmetische Ausdruecke.
769
770 Ein arithmetischer Ausdruck hat die folgende Form
771
772 faktor arithmetikoperator faktor arith... faktor
773
774 \f
775 Die Arithmetikoperatoren sind
776 + - * / % Addition, Subtraktion, Mult., Division, Modulo
777 & ! # bitweise AND, OR, XOR
778
779 Ein Faktor hat die Form
780 [ausdruck] geklammerter Ausdruck
781 +faktor
782 -faktor Negation
783 ~faktor bitweise NOT (1er-Komplement)
784 'a' Wert eines ASCII-Zeichens (a=druckbares Zeichen)
785 'a'. " mit gesetzem Bit 7
786 'ab' Wert zweier ASCII-Zeichen (a,b=druckbare Zeichen)
787 'ab'. " das niederwertige Zeichen mit gesetztem Bit 7
788 (ausdruck) ein Byte im Speicher
789 (ausdruck). ein Wort im Speicher
790 hhhh[H] Hex-Zahl (h=0..9,A..F oder a..f)
791 ddddd. Dezimal-Zahl (d=0..9)
792 bbbbbbbb"bbbbbbbb" Binaer-Zahl (beliebig mit '"' unterteilt (b=0,1)
793
794 Ein arithmetischer Ausdruck wird von links nach rechts be-
795 rechnet, also ohne Beachtung "Punktrechnung vor Strichrech-
796 nung", die Reihenfolge kann jedoch mit Klammern '[' und ']'
797 geaendert werden.
798 Ein Pluszeichen darf, wenn dabei der Ausdruck eindeutig bleibt,
799 weggelassen werden; z.B. ist L10 dasselbe wie L+10.
800 Ausdruecke duerfen keine Leerzeichen enthalten!