復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第95回]
●ファンクションコール1BH(アローケーションベクトルアドレスの取得)
アローケーションベクトル(ALV)はディスクドライブ毎に用意されていて、そのディスクの使用状況を示しています。
デイスク上の1ブロックを1ビットに置き換えて示し、使用済みブロックを1で、未使用ブロックを0で示します。
アローケーションベクトルは[第33回]で説明していますので、そちらも参照願います。
ファンクションコール1BHはカレントドライブのアローケーションベクトルのアドレスを取得します。
Cレジスタに1BHを入れてシステムをコールすると、HLレジスタにカレントドライブのアローケーションベクトルのアドレスが入ってリターンしてきます。
ファンクションコール1BHのテストプログラムFTST15.TXTのソースリストです。
; BDOS TEST15 function1B (get allocation vector address ) ;2012/4/12 ; ORG $8100 FCALL=$8005 ; LD C,1B CALL FCALL CALL HEX4DP CALL CRLF LD D,(HL) INC HL LD E,(HL) EX DE,HL CALL HEX4DP 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 21:59 ftst15.txt END=8192 ; BDOS TEST15 function1B (get allocation vector address ) ;2012/4/12 ; ORG $8100 FCALL=$8005 ; 8100 0E1B LD C,1B 8102 CD0580 CALL FCALL 8105 CD6581 CALL HEX4DP 8108 CD1381 CALL CRLF 810B 56 LD D,(HL) 810C 23 INC HL 810D 5E LD E,(HL) 810E EB EX DE,HL 810F CD6581 CALL HEX4DP 8112 C9 RET ; ;CL & LF 8113 3E0D CRLF:LD A,0D 8115 CD1F81 CALL ADP 8118 3E0A LD A,0A 811A C31F81 JP ADP ;space disp 811D 3E20 SPDP:LD A,20 ;A disp 811F C5 ADP:PUSH BC 8120 E5 PUSH HL 8121 5F LD E,A 8122 0E02 LD C,02 8124 CD0580 CALL FCALL 8127 E1 POP HL 8128 C1 POP BC 8129 C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 812A 7C B2HEX4:LD A,H 812B CD3081 CALL B2HEX2 812E EB EX DE,HL 812F 7B LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 8130 F5 B2HEX2:PUSH AF 8131 0F RRCA 8132 0F RRCA 8133 0F RRCA 8134 0F RRCA 8135 CD3F81 CALL B2HEX1 8138 57 LD D,A 8139 F1 POP AF 813A CD3F81 CALL B2HEX1 813D 5F LD E,A 813E C9 RET ;binary to hex, low 4bit to ascii 1charactor 813F E60F B2HEX1:AND 0F 8141 C630 ADD A,30 8143 FE3A CP 3A 8145 D8 RET C;0-9 8146 C607 ADD A,07;A-F 8148 C9 RET ;hex to binary, ascii 1charactor to low 4bit 8149 FE30 HTOB1:CP 30;>="0"? 814B D8 RET C;no 814C FE3A CP 3A;<="9"? 814E DA6281 JP C,HTOB1_2;yes,"0" to "9" 8151 FE41 CP 41;>="A" ? 8153 D8 RET C;no 8154 FE47 CP 47;<="F"? 8156 DA6081 JP C,HTOB1_1 8159 FE61 CP 61;>="a"? 815B D8 RET C;no 815C FE67 CP 67;<="f"? 815E 3F CCF 815F D8 RET C;no 8160 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 8162 E60F HTOB1_2:AND 0F 8164 C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 8165 C5 HEX4DP:PUSH BC 8166 E5 PUSH HL 8167 CD2A81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 816A D5 PUSH DE 816B EB EX DE,HL 816C CD8181 CALL DEDP 816F D1 POP DE 8170 CD8181 CALL DEDP 8173 E1 POP HL 8174 C1 POP BC 8175 C9 RET ;A(binary) to asckii 2bytes HEX & disp 8176 C5 B2HEXDP:PUSH BC 8177 E5 PUSH HL 8178 CD3081 CALL B2HEX2 817B CD8181 CALL DEDP 817E E1 POP HL 817F C1 POP BC 8180 C9 RET ; ;DE(asckii 2bytes) disp 8181 D5 DEDP:PUSH DE 8182 5A LD E,D 8183 0E02 LD C,02 8185 CD0580 CALL FCALL 8188 D1 POP DE 8189 0E02 LD C,02 818B CD0580 CALL FCALL 818E C9 RET ; 818F 657272 ERRMSG:"err" 8192 24 DB 24;$ ; ADP =811F B2HEX1 =813F B2HEX2 =8130 B2HEX4 =812A B2HEXDP =8176 CRLF =8113 DEDP =8181 ERRMSG =818F FCALL =8005 HEX4DP =8165 HTOB1 =8149 HTOB1_1 =8160 HTOB1_2 =8162 SPDP =811D |
logfile nd80zlog\04122159.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst15.bin,8100 loading FTST15.BIN ...0093(147)bytes loaded,from 8100 to 8192 >jp d233 a>save 1 ftst15.com a>dir A: FNC0E-1 COM : FTST10 COM : FTST10-2 COM : FTST10-4 COM A: FTST10-5 COM : FTST11 COM : FTST12 COM : FTST13 COM A: FTST14 COM : FTST15 COM a> |
a>ftst15 B884 FFE0 a> |
a>b: b>a:ftst15 B88A E000 b>dir B: TEST COM : TEST1 COM b> |