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