復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第96回]
●ファンクションコール1FH(ディスクパラメータアドレスの取得)
ファンクションコール1FHはディスクパラメータの先頭アドレスを取得してHLレジスタに入れます。
ディスクパラメータについては[第33回]で説明をしています。
そのときはAドライブだけでしたが、その後仮RAMディスクを2つに分割してAドライブとBドライブに分けました。
そのためディスクパラメータも変更になり、その作業は[第83回]で説明をいたしました。
ディスクパラメータは、セクタ数、ブロック数やディスクサイズなどディスクドライブの基本的なパラメータで、15バイトのサイズがあります。
ファンクションコール1FHのテストプログラムFTST16.TXTのソースリストです。
; BDOS TEST16 function1F (get disk parameter address ) ;2012/4/12 ; ORG $8100 FCALL=$8005 ; LD C,1F CALL FCALL CALL HEX4DP CALL CRLF LD B,0F;=15 LOOP:LD A,(HL) CALL B2HEXDP CALL SPDP INC HL DEC B JP NZ,LOOP RET ; ;CL & LF CRLF:LD A,0D CALL ADP LD A,0A JP ADP ;space disp SPDP:LD A,20 ;A disp ADP:PUSH BC PUSH HL LD E,A LD C,02 CALL FCALL POP HL POP BC RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE B2HEX4:LD A,H CALL B2HEX2 EX DE,HL LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE B2HEX2:PUSH AF RRCA RRCA RRCA RRCA CALL B2HEX1 LD D,A POP AF CALL B2HEX1 LD E,A RET ;binary to hex, low 4bit to ascii 1charactor B2HEX1:AND 0F ADD A,30 CP 3A RET C;0-9 ADD A,07;A-F RET ;hex to binary, ascii 1charactor to low 4bit HTOB1:CP 30;>="0"? RET C;no CP 3A;<="9"? JP C,HTOB1_2;yes,"0" to "9" CP 41;>="A" ? RET C;no CP 47;<="F"? JP C,HTOB1_1 CP 61;>="a"? RET C;no CP 67;<="f"? CCF RET C;no HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F HTOB1_2:AND 0F RET ;HL(bynary 2bytes) to asckii 4bytes & disp HEX4DP:PUSH BC PUSH HL CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes PUSH DE EX DE,HL CALL DEDP POP DE CALL DEDP POP HL POP BC RET ;A(binary) to asckii 2bytes HEX & disp B2HEXDP:PUSH BC PUSH HL CALL B2HEX2 CALL DEDP POP HL POP BC RET ; ;DE(asckii 2bytes) disp DEDP:PUSH DE LD E,D LD C,02 CALL FCALL POP DE LD C,02 CALL FCALL RET ; ERRMSG:"err" DB 24;$ ; |
2012/4/12 22:11 ftst16.txt END=8199 ; BDOS TEST16 function1F (get disk parameter address ) ;2012/4/12 ; ORG $8100 FCALL=$8005 ; 8100 0E1F LD C,1F 8102 CD0580 CALL FCALL 8105 CD6C81 CALL HEX4DP 8108 CD1A81 CALL CRLF 810B 060F LD B,0F;=15 810D 7E LOOP:LD A,(HL) 810E CD7D81 CALL B2HEXDP 8111 CD2481 CALL SPDP 8114 23 INC HL 8115 05 DEC B 8116 C20D81 JP NZ,LOOP 8119 C9 RET ; ;CL & LF 811A 3E0D CRLF:LD A,0D 811C CD2681 CALL ADP 811F 3E0A LD A,0A 8121 C32681 JP ADP ;space disp 8124 3E20 SPDP:LD A,20 ;A disp 8126 C5 ADP:PUSH BC 8127 E5 PUSH HL 8128 5F LD E,A 8129 0E02 LD C,02 812B CD0580 CALL FCALL 812E E1 POP HL 812F C1 POP BC 8130 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 8131 7C B2HEX4:LD A,H 8132 CD3781 CALL B2HEX2 8135 EB EX DE,HL 8136 7B LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 8137 F5 B2HEX2:PUSH AF 8138 0F RRCA 8139 0F RRCA 813A 0F RRCA 813B 0F RRCA 813C CD4681 CALL B2HEX1 813F 57 LD D,A 8140 F1 POP AF 8141 CD4681 CALL B2HEX1 8144 5F LD E,A 8145 C9 RET ;binary to hex, low 4bit to ascii 1charactor 8146 E60F B2HEX1:AND 0F 8148 C630 ADD A,30 814A FE3A CP 3A 814C D8 RET C;0-9 814D C607 ADD A,07;A-F 814F C9 RET ;hex to binary, ascii 1charactor to low 4bit 8150 FE30 HTOB1:CP 30;>="0"? 8152 D8 RET C;no 8153 FE3A CP 3A;<="9"? 8155 DA6981 JP C,HTOB1_2;yes,"0" to "9" 8158 FE41 CP 41;>="A" ? 815A D8 RET C;no 815B FE47 CP 47;<="F"? 815D DA6781 JP C,HTOB1_1 8160 FE61 CP 61;>="a"? 8162 D8 RET C;no 8163 FE67 CP 67;<="f"? 8165 3F CCF 8166 D8 RET C;no 8167 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 8169 E60F HTOB1_2:AND 0F 816B C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 816C C5 HEX4DP:PUSH BC 816D E5 PUSH HL 816E CD3181 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 8171 D5 PUSH DE 8172 EB EX DE,HL 8173 CD8881 CALL DEDP 8176 D1 POP DE 8177 CD8881 CALL DEDP 817A E1 POP HL 817B C1 POP BC 817C C9 RET ;A(binary) to asckii 2bytes HEX & disp 817D C5 B2HEXDP:PUSH BC 817E E5 PUSH HL 817F CD3781 CALL B2HEX2 8182 CD8881 CALL DEDP 8185 E1 POP HL 8186 C1 POP BC 8187 C9 RET ; ;DE(asckii 2bytes) disp 8188 D5 DEDP:PUSH DE 8189 5A LD E,D 818A 0E02 LD C,02 818C CD0580 CALL FCALL 818F D1 POP DE 8190 0E02 LD C,02 8192 CD0580 CALL FCALL 8195 C9 RET ; 8196 657272 ERRMSG:"err" 8199 24 DB 24;$ ; ADP =8126 B2HEX1 =8146 B2HEX2 =8137 B2HEX4 =8131 B2HEXDP =817D CRLF =811A DEDP =8188 ERRMSG =8196 FCALL =8005 HEX4DP =816C HTOB1 =8150 HTOB1_1 =8167 HTOB1_2 =8169 LOOP =810D SPDP =8124 |
logfile nd80zlog\04122211.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst16.bin,8100 loading FTST16.BIN ...009a(154)bytes loaded,from 8100 to 8199 >jp d233 a>save 1 ftst16.com a>ftst16 D259 10 00 02 03 00 0B 00 0F 00 80 00 00 00 00 00 a>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Thu Apr 12 22:17:21 2012 |