復活!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 ; |