復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第163回]
●DMコマンド(2)
今回は、DMコマンドでROMと同じアドレス0000〜7FFFに置いたRAMの中味を表示するにはどのようにすればよいか、ということについて説明をいたします。
まずはじめに下の画像を見てください。
DMコマンドを実行して、アドレス0000〜007Fのメモリの中味を表示しています。

同じことを2回実行しているように見えますが、表示されているメモリの中味は全然違います。
でもアドレスはどちらも0000〜007Fで同じです。
よく見ますと下側のDMコマンドは、
DM@0000,007F
になっています。
普通のDMコマンドは「DM」とアドレスとの間はスペースで区切りますが、下側のDMコマンドはスペースの代わりに@を使っています。
DMコマンドの機能を拡張して、DMの後に@をつけたときは、0000〜7FFFの範囲のRAMの内容を表示するようにしました。
そのようにすることで、同じアドレス0000〜7FFFに置いたROMの内容もRAMの内容もどちらも表示することができるようになりました。
上側のDMの後ろがスペースになっている今までと同じ形式のDMコマンドで表示されているのはROMの0000〜007Fの内容です。
下側のDM@コマンドで表示されているのはRAMの0000〜007Fの内容です。
下はそのように変更したDMコマンドのプログラムリスト(アセンブルリスト)です。
ND80ZVのROMに書かれているプログラムですが、今回は0000〜7FFFのRAMの内容も表示できるように一部を書き換えました。
;
19F5 CD6C10 DM:CALL ATMKCK
19F8 CD5110 CALL ADRD
19FB CD0B1A DM1:CALL DMSB
19FE CD5410 CALL BREAK
1A01 CD2710 CALL HDCMP
1A04 28F5 JR Z,*DM1
1A06 38F3 JR C,*DM1
1A08 C3A418 JP ENTRY
;
1A0B E5 DMSB:PUSH HL
1A0C E5 PUSH HL
1A0D CD4E10 CALL HXDP4
1A10 E1 POP HL
1A11 CD3910 CALL SPCDP
1A14 0608 LD B,08
1A16 CD3910 DM2:CALL SPCDP
1A19 CD5A1A CALL DM2SB
1A1C 10F8 DJNZ *DM2
1A1E 3E2D LD A,2D
1A20 CD1510 CALL ADISP
1A23 CD5A1A CALL DM2SB
1A26 0607 LD B,07
1A28 CD3910 DM22:CALL SPCDP
1A2B CD5A1A CALL DM2SB
1A2E 10F8 DJNZ *DM22
1A30 E1 POP HL
1A31 CD3910 CALL SPCDP
1A34 CD3910 CALL SPCDP
1A37 0610 LD B,10
1A39 CDC41C DM3:CALL MEMRD
1A3C CD451A CALL DM4
1A3F 23 INC HL
1A40 10F7 DJNZ *DM3
1A42 C31B10 JP CRLF
;
1A45 FE20 DM4:CP 20
1A47 380C JR C,*DM5
1A49 FE80 CP 80
1A4B 380A JR C,ADSPJ
1A4D FEA0 CP A0
1A4F 3804 JR C,*DM5
1A51 FEE0 CP E0
1A53 3802 JR C,ADSPJ
1A55 3E2E DM5:LD A,2E
1A57 C31510 ADSPJ:JP ADISP
;
1A5A E5 DM2SB:PUSH HL
1A5B CDC41C CALL MEMRD
1A5E 67 LD H,A
1A5F CD4B10 CALL HXDP2
1A62 E1 POP HL
1A63 23 INC HL
1A64 C9 RET
|
;
19F2 13 DM:INC DE
19F3 CD5110 CALL ADRD
19F6 CD061A DM1:CALL DMSB
19F9 CD5410 CALL BREAK
19FC CD2710 CALL HDCMP
19FF 28F5 JR Z,*DM1
1A01 38F3 JR C,*DM1
1A03 C3A118 JP ENTRY
;
1A06 E5 DMSB:PUSH HL
1A07 E5 PUSH HL
1A08 CD4E10 CALL HXDP4
1A0B E1 POP HL
1A0C CD3910 CALL SPCDP
1A0F 0608 LD B,08
1A11 CD3910 DM2:CALL SPCDP
1A14 CD531A CALL DM2SB
1A17 10F8 DJNZ *DM2
1A19 3E2D LD A,2D
1A1B CD1510 CALL ADISP
1A1E CD531A CALL DM2SB
1A21 0607 LD B,07
1A23 CD3910 DM22:CALL SPCDP
1A26 CD531A CALL DM2SB
1A29 10F8 DJNZ *DM22
1A2B E1 POP HL
1A2C CD3910 CALL SPCDP
1A2F CD3910 CALL SPCDP
1A32 0610 LD B,10
1A34 7E DM3:LD A,(HL)
1A35 CD3E1A CALL DM4
1A38 23 INC HL
1A39 10F9 DJNZ *DM3
1A3B C31B10 JP CRLF
;
1A3E FE20 DM4:CP 20
1A40 380C JR C,*DM5
1A42 FE80 CP 80
1A44 380A JR C,ADSPJ
1A46 FEA0 CP A0
1A48 3804 JR C,*DM5
1A4A FEE0 CP E0
1A4C 3802 JR C,ADSPJ
1A4E 3E2E DM5:LD A,2E
1A50 C31510 ADSPJ:JP ADISP
;
1A53 E5 DM2SB:PUSH HL
1A54 66 LD H,(HL)
1A55 CD4B10 CALL HXDP2
1A58 E1 POP HL
1A59 23 INC HL
1A5A C9 RET
|
;check '@'
167C 1A ATMKCK:LD A,(DE)
167D 32D1F2 LD (RAMCK),A
1680 13 INC DE
1681 FE20 CP 20
1683 C8 RET Z
1684 FE2C CP 2C
1686 C8 RET Z
1687 FE40 CP 40;@
1689 C8 RET Z
168A C33010 JP WHTDP
|
1CC4 3AD1F2 MEMRD:LD A,(RAMCK) 1CC7 FE40 CP 40;@ 1CC9 CA42D2 JP Z,RAMRD 1CCC 7E LD A,(HL) 1CCD C9 RET |
;
D200 C395D2 JP SETEN2
D203 C3F2D2 BOOT:JP WBOOTJ
D206 C3F9D2 JP CONSTJ
D209 C31BD3 JP CONINJ
D20C C33BD3 JP CONOUTJ
D20F C35BD3 JP LISTJ
D212 C35CD3 JP PUNCHJ
D215 C36ED3 JP READERJ
D218 C38DD3 JP HOMEJ
D21B C398D3 JP SELDSKJ
D21E C3B4D3 JP SETTRKJ
D221 C3BCD3 JP SETSECJ
D224 C3C2D3 JP SETDMAJ
D227 C3C8D3 JP READJ
D22A C331D4 JP WRITEJ
D22D C351D4 JP PRSTATJ
D230 C352D4 JP SECTRNJ
D233 C377D2 JP SETENTRY
D236 C355D4 JP ZREENTJ
D239 C3BED2 JP RTRAM
D23C C36ED4 JP LOADZ
D23F C3D2D2 JP RAMWR
D242 C3DED2 JP RAMRD
D245 C3E6D2 JP RAMJP
;
|
;
D2D2 3EFF RAMWR:LD A,FF
D2D4 D39C OUT (9C),A
D2D6 F1 POP AF
D2D7 77 LD (HL),A
D2D8 F5 RAMWR2:PUSH AF
D2D9 AF XOR A
D2DA D39C OUT (9C),A
D2DC F1 POP AF
D2DD C9 RET
;
D2DE 3EFF RAMRD:LD A,FF
D2E0 D39C OUT (9C),A
D2E2 7E LD A,(HL)
D2E3 C3D8D2 JP RAMWR2
|