CP/M Debugger

Hier eine Übersicht über Debugger — und der von mir modifizierten Version —, die von Digital Research vertrieben wurden mit einer Zusammenstellung der vorhandenen Kommandos:
BefehlDebugger →
↓ Funktion
DDT SID ZSID ZSID mod
?Help --- --- --- ?
AAssemble As {-}A{s} {-}A{s} {-}A{s}
BSearch --- --- --- B{"}s{"}
CCall --- Cs{b{,d}} Cs{b{,d}} Cs{b{,d}}
DDisplay D{s{,f}} {-}D{W}{s}{,f} {-}D{W}{s}{,f} {-}D{W}{s}{,f}
EExecution --- Epgm-file{,sym-file}--- Epgm-file{,sym-file}
FFill memory Fs,f,c Fs,f,d Fs,f,d Fs,f,d
GGo G{s{,b{,c}}} {-}G{p}{,a{,b}} {-}G{p}{,a{,b}}{-}G{p}{,a{,b}}
HHex --- H{a,b} H{a,b} H{a,b}
IInput line Ifilename{.typ}Icommand tail Icommand tail Icommand tail
LLists mnemonicsL{s{,f}} {-}L{s}{,f} {-}L{s}{,f} {-}L{s}{,f}
MMove Ms,f,d Ms,h,d Ms,h,d Ms,h,d
OOther bank --- --- --- O{b}
PPass point --- {-}P{p{,c}} {-}P{p{,c}} {-}P{p{,c}}
QQuit --- --- --- Q
RRead R{b} Rfilespec{,d} R{d} Rfilespec{,d}
SSet memory Ss S{W}s S{W}s S{W}s
TTrace T{n} {-}T{W}{n{,c}} {-}T{W}{n{,c}} {-}T{W}{n{,c}}
UUntrace U{n} {-}U{W}{n{,c}} {-}U{W}{n{,c}} {-}U{W}{n{,c}}
VValue --- V --- {-}U{W}{n{,c}}
WWrite --- --- --- Wfile,s,f
XExamine X{r} X{f}{r} X{f}{r} X{f}{r}

Der Debugger soll ein Programm untersuchen, das in die TPA, also ab Adresse 0x0100, geladen wird. Auch der Debugger ist ein Programm, das in diese Adresse geladen wird.
Deshalb ist allen Debuggern gemeinsam, dass sie zunächst direkt unter das BDOS verschoben werden. Sie bestehen daher aus zwei Teilen:
  1. Ein Ladeprogramm, welches den eigentlichen Debugger unter das BDOS verschiebt
  2. Der Code für den Debugger gefolgt von einer Bitmap für die Relokation
Die Debugger unterstützen die Ein- und Ausgabe von Mnemonics (Befehle A und L). Außer beim DDT kann dieser Bereich abgetrennt werde, so dass auch größere Programme in den Speicher geladen werden können.
Falls Änderungen des Programmcodes durchgeführt wurden, ist eine Speicherung des neuen Codes notwendig. Unter CP/M 2 gab es dafür den eingebauten Befehl SAVE. Dieser steht allerdings unter CP/M 3 nicht zur Verfügung, weil der CCP, anders als bei CP/M 2, in der TPA ab Adresse 0x0100 abgelegt ist. Unter CP/M 3 gibt es jedoch das Programm SAVE, was vor Aufruf von (Z)SID aktiviert werden musste. Nach Ende des Debuggers wurde dann abgefragt, welcher Speicherbereich in eine Datei geschrieben werden soll. Ich habe dafür das neue Kommando W eingeführt, um die Handhabung zu erleichtern.

Hinweise zu weiteren Debuggern finden sich hier


Werner Cirsovius Zusammengestellt Mai 2010