復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第188回]
●RT@コマンド(CP/M互換DOSのための変更その3)
今回はCP/M互換DOSのための変更を行なったブレーク処理プログラムについての説明の最終回です。
FFコード(RST7)を利用してブレークしたあと、そのブレークポイントからプログラムの続きの実行を再開するためのコマンドがRTコマンドです。
RTコマンドについて説明をする前に、BPコマンドについて説明を補足しておきます(BPコマンドについては[第186回]を参照)。
ブレークポイントを設定するためのBPコマンドはフルRAMに対応するようにプログラム変更を行ないましたが、DM@コマンドやCM@コマンドのように、対象になるメモリアドレスがフルRAMの0000H〜7FFFHである場合の@記号を使うようにはしませんでした。
それはBPコマンドの特殊性からきています。
BPコマンドはブレークアドレスのマシン語命令コードをFF(RST7)で置き換えるためのコマンドです。
アドレス0000H〜7FFFHがもしもROMであった場合、その行為そのものが意味をもちません(当然ブレークすることはできません)。
つまりBPコマンドの場合には、ブレークアドレスとして0000H〜7FFFHが指定されたならば、それはフルRAM構成を選択していると考えればよいことになります。
ですからわざわざBP@とする必要はありません。
RTコマンドの場合はどうでしょうか。
RTコマンドを入力する時点では、0000H〜7FFFHはROMが選択されています。
ブレークしたアドレスから実行を再開するのですが、そのアドレスが0000H〜7FFFHの範囲でしたら、当然フルRAM構成を選択することになります。
では8000H以降のアドレスならば、フルRAMなのでしょうか?
それともROMのままなのでしょうか?
これはアドレスからだけでは決められません。
むむむ。
今気がつきました。
ブレークしたときにフルRAMかROMかいずれが選択されているかという情報を保存しておけば、RTコマンド入力時にその情報から同じ状態に戻すことができますね。
いずれ時間ができたら、そのように考えてみましょう。
今はRTコマンドならば0000H〜7FFFHはROM、RT@コマンドを使ったならばフルRAMを選択する、というプログラムになっています。
下がそのように変更を行なったあとのRTプログラムのリストです。
変更前のリストは[第184回]にあります。
プログラムの変更を行なったために、アドレスが少し変わっています。
;;;
;;;RETURN
1B98 1A RT:LD A,(DE)
1B99 32D1F2 LD (RAMCK),A
1B9C 2100ED LD HL,STCWK
1B9F 1100F5 LD DE,STC
1BA2 010003 LD BC,$0300
1BA5 EDB0 LDIR
1BA7 3184F0 RT2:LD SP,HLBF2
1BAA E1 POP HL
1BAB D1 POP DE
1BAC C1 POP BC
1BAD D9 EXX
1BAE F1 POP AF
1BAF 08 EX AF,AF'
1BB0 E1 POP HL
1BB1 D1 POP DE
1BB2 C1 POP BC
1BB3 F1 POP AF
1BB4 FDE1 POP IY
1BB6 DDE1 POP IX
1BB8 F5 PUSH AF
1BB9 3AD1F2 LD A,(RAMCK)
1BBC FE40 CP 40;@
1BBE CA39D2 JP Z,RTRAM
1BC1 F1 POP AF
1BC2 ED7B99F0 LD SP,(SPBF)
1BC6 228CF0 LD (HLBF1),HL
1BC9 2A9BF0 LD HL,(PCL)
1BCC E5 PUSH HL
1BCD 2A8CF0 LD HL,(HLBF1)
1BD0 C9 RET
;;;
|
;
ORG $D200
;
D200 C377D2 JP SETENTRY;coldboot
D203 C37ED2 BOOT:JP WBOOTJ
D206 C312D3 JP CONSTJ
D209 C334D3 JP CONINJ
D20C C354D3 JP CONOUTJ
D20F C374D3 JP LISTJ
D212 C375D3 JP PUNCHJ
D215 C387D3 JP READERJ
D218 C3A6D3 JP HOMEJ
D21B C3B1D3 JP SELDSKJ
D21E C3CDD3 JP SETTRKJ
D221 C3D5D3 JP SETSECJ
D224 C3DBD3 JP SETDMAJ
D227 C3E1D3 JP READJ
D22A C34AD4 JP WRITEJ
D22D C36AD4 JP PRSTATJ
D230 C36BD4 JP SECTRNJ
D233 C377D2 JP SETENTRY
D236 C36ED4 JP ZREENTJ
D239 C3DED2 JP RTRAM
D23C C387D4 JP LOADZ
D23F C3F2D2 JP RAMWR
D242 C3FED2 JP RAMRD
D245 C306D3 JP RAMJP
;
|
;
D2DE 3EFF RTRAM:LD A,FF
D2E0 D39C OUT (9C),A
D2E2 F1 POP AF
D2E3 ED7B99F0 LD SP,(SPBF)
D2E7 228CF0 LD (HLBF1),HL
D2EA 2A9BF0 LD HL,(PCL)
D2ED E5 PUSH HL
D2EE 2A8CF0 LD HL,(HLBF1)
D2F1 C9 RET
;
|