復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第164回]
●CMコマンド
前回は、DMコマンドのプログラムを一部変更して、同じアドレス0000〜7FFFに置いたROMとRAMの中味をそれぞれ表示できるようにしました。
DMでそういうことができるようになると、同じことをCMコマンドでもできるようにしたくなります。
そこでCMコマンドもプログラムを変更して、そのようにしてしまいました。
CMコマンドは、アドレスを指定して、1バイトずつそのアドレスのメモリ内容を表示し、必要ならメモリ内容を書き換えることができます。
ROMに対してもメモリ内容を表示することはできますが、書き換えることはできません。
下はCMコマンドを実行中の画面です。
最初は今までと同じCMコマンドです。
CM 0200[Enter]
と入力して、メモリ内容を書き換えるために、12、34、56、78と入力しました。
データを入力する代わりに[←]キーを入力すると、一つ前のアドレスに戻って表示が行なわれます。
書き換えたつもりのアドレスを表示させてみましたが、0200〜0203はROMですから、内容は書き換わってはいません。
同じことをその下のところで、
CM@0200[Enter]
と入力して行ないました。
12、34、56、78と入力したあと、[←]キーを入力して、前のアドレスの内容を確認してみますと。
今度はちゃんと書き換わっています。
DMコマンドと同じように、@をつけて実行することで、RAMが選択されるようになりました。
下はそのように変更したCMコマンドのプログラムリスト(アセンブルリスト)です。
ND80ZVのROMに書かれているプログラムですが、今回は前回のDMコマンドと同様に、0000〜7FFFのRAMの内容も表示できるように一部を書き換えました。
;;; ;;; CHANGE MEMORY 1A65 CD6C10 CM:CALL ATMKCK 1A68 CD4510 CALL ASHX4 1A6B DA3010 JP C,WHTDP 1A6E E5 CM1:PUSH HL 1A6F CD4E10 CALL HXDP4 1A72 E1 POP HL 1A73 CD3910 CALL SPCDP 1A76 E5 PUSH HL 1A77 CDC41C CALL MEMRD 1A7A 67 LD H,A 1A7B CD4B10 CALL HXDP2 1A7E E1 POP HL 1A7F 3E2D LD A,2D 1A81 CD1510 CALL ADISP 1A84 3E03 LD A,03 1A86 CDAB10 CALL SOUT_M 1A89 CDAE10 CALL SIN 1A8C DAB11A JP C,CMEND 1A8F FE3E CP 3E;> 1A91 282E JR Z,*CM42 1A93 FE3C CP 3C;< 1A95 2003 JR NZ,*CM3 1A97 2B DEC HL 1A98 1828 JR *CM43 1A9A FE2F CM3:CP 2F;/ 1A9C CAB11A JP Z,CMEND 1A9F E5 PUSH HL 1AA0 67 LD H,A 1AA1 CD3F10 CALL ASHX1 1AA4 3822 JR C,*CM5 1AA6 3E03 LD A,03 1AA8 CDAB10 CALL SOUT_M 1AAB CDAE10 CALL SIN 1AAE 3007 JR NC,*CM31 1AB0 E1 POP HL 1AB1 CD1B10 CMEND:CALL CRLF 1AB4 C3A418 JP ENTRY 1AB7 6F CM31:LD L,A 1AB8 CD4210 CALL ASHX2 1ABB 380B JR C,*CM5 1ABD E1 POP HL 1ABE CDD51C CALL MEMWR 1AC1 23 CM42:INC HL 1AC2 CD1B10 CM43:CALL CRLF 1AC5 C36E1A JP CM1 1AC8 E1 CM5:POP HL 1AC9 3E3F LD A,3F;? 1ACB CD1510 CALL ADISP 1ACE CD1B10 CALL CRLF 1AD1 C36E1A JP CM1 |
;;; ;;; CHANGE MEMORY 1A5B 13 CM:INC DE 1A5C CD4510 CALL ASHX4 1A5F DA3010 JP C,WHTDP 1A62 E5 CM1:PUSH HL 1A63 CD4E10 CALL HXDP4 1A66 E1 POP HL 1A67 CD3910 CALL SPCDP 1A6A E5 PUSH HL 1A6B 66 LD H,(HL) 1A6C CD4B10 CALL HXDP2 1A6F E1 POP HL 1A70 3E2D LD A,2D 1A72 CD1510 CALL ADISP 1A75 3E03 LD A,03 1A77 CDAB10 CALL SOUT_M 1A7A CDAE10 CALL SIN 1A7D DAA21A JP C,CMEND 1A80 FE3E CP 3E;> 1A82 282C JR Z,*CM42 1A84 FE3C CP 3C;< 1A86 2003 JR NZ,*CM3 1A88 2B DEC HL 1A89 1826 JR *CM43 1A8B FE2F CM3:CP 2F;/ 1A8D CAA21A JP Z,CMEND 1A90 E5 PUSH HL 1A91 67 LD H,A 1A92 CD3F10 CALL ASHX1 1A95 3820 JR C,*CM5 1A97 3E03 LD A,03 1A99 CDAB10 CALL SOUT_M 1A9C CDAE10 CALL SIN 1A9F 3007 JR NC,*CM31 1AA1 E1 POP HL 1AA2 CD1B10 CMEND:CALL CRLF 1AA5 C3A118 JP ENTRY 1AA8 6F CM31:LD L,A 1AA9 CD4210 CALL ASHX2 1AAC 3809 JR C,*CM5 1AAE E1 POP HL 1AAF 77 LD (HL),A 1AB0 23 CM42:INC HL 1AB1 CD1B10 CM43:CALL CRLF 1AB4 C3621A JP CM1 1AB7 E1 CM5:POP HL 1AB8 3E3F LD A,3F;? 1ABA CD1510 CALL ADISP 1ABD CD1B10 CALL CRLF 1AC0 C3621A JP CM1 ;;; |
1CD5 F5 MEMWR:PUSH AF 1CD6 3AD1F2 LD A,(RAMCK) 1CD9 FE40 CP 40;@ 1CDB CA3FD2 JP Z,RAMWR 1CDE F1 POP AF 1CDF 77 LD (HL),A 1CE0 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 |