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