MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第119回]
●ファンクション25
ファンクション25はディスクドライブをリセットします。
[第112回]でテストしたファンクションコール0Dもディスクドライブをリセットしました。
ファンクション0Dは全てのドライブのライトプロテクトを解除しますが、それ以外はなにも変更しません。
ファンクション25はドライブb指定して(複数のドライブを指定可能)、そのドライブのライトプロテクトを解除するとともに、ログインベクトルの該当するビットも0にします。
ファンクション25は「ワンボードマイコンでCP/Mを!」[第209回]でテストをしました。
そこで作ったテストプログラムはVFTST18です。
また結果を確認するために、ログインベクトルとR/Oベクトルを取り出して表示するプログラムVFTST19も作りました。
ログインベクトルは[第118回]で、またR/Oベクトルは[第112回]で説明をしました。
いつものようにVFTST18、VFTST19のソースプログラムをインテルニーモニックに書き直してMFTST18、19を作りました。
●テストプログラムMFTST18
MFTST18のソースプログラムです。
; BDOS TEST18 function25 (disk reset )
;2012/4/16 8/31
;
ORG $0100
FCALL=$0005
FCB=$005C
;
LXI H,FCB
MOV A,M
LXI H,$0001
DCR A
JZ DISKRS
DAD H
DCR A
JZ DISKRS
MVI E,3F;'?'
MVI C,02
CALL FCALL
RET
DISKRS:MVI C,25
XCHG
CALL FCALL
RET
|
2015/1/29 22:42 mftst18.txt
END=011E
; BDOS TEST18 function25 (disk reset )
;2012/4/16 8/31
;
ORG $0100
FCALL=$0005
FCB=$005C
;
0100 215C00 LXI H,FCB
0103 7E MOV A,M
0104 210100 LXI H,$0001
0107 3D DCR A
0108 CA1801 JZ DISKRS
010B 29 DAD H
010C 3D DCR A
010D CA1801 JZ DISKRS
0110 1E3F MVI E,3F;'?'
0112 0E02 MVI C,02
0114 CD0500 CALL FCALL
0117 C9 RET
0118 0E25 DISKRS:MVI C,25
011A EB XCHG
011B CD0500 CALL FCALL
011E C9 RET
DISKRS =0118 FCALL =0005 FCB =005C
|
; BDOS TEST19 login vector & r/o vector function18,1D
;2012/4/10 test12
;4/16 test19
;9/3
;
ORG $0100
FCALL=$0005
FCB=$005C
;
MVI C,18
CALL FCALL
MVI A,4C;'L' login vector
CALL ADP
CALL SPDP
CALL HEX4DP
CALL CRLF
MVI C,1D
CALL FCALL
MVI A,52;'R' R/O vector
CALL ADP
CALL SPDP
CALL HEX4DP
RET
;
;CL & LF
CRLF:MVI A,0D
CALL ADP
MVI A,0A
JMP ADP
;space disp
SPDP:MVI A,20
;A disp
ADP:PUSH B
PUSH H
MOV E,A
MVI C,02
CALL FCALL
POP H
POP B
RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
B2HEX4:MOV A,H
CALL B2HEX2
XCHG
MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
B2HEX2:PUSH PSW
RRC
RRC
RRC
RRC
CALL B2HEX1
MOV D,A
POP PSW
CALL B2HEX1
MOV E,A
RET
;binary to hex, low 4bit to ascii 1charactor
B2HEX1:ANI 0F
ADI 30
CPI 3A
RC;0-9
ADI 07;A-F
RET
;hex to binary, ascii 1charactor to low 4bit
HTOB1:CPI 30;>="0"?
RC;no
CPI 3A;<="9"?
JC HTOB1_2;yes,"0" to "9"
CPI 41;>="A" ?
RC;no
CPI 47;<="F"?
JC HTOB1_1
CPI 61;>="a"?
RC;no
CPI 67;<="f"?
CMC
RC;no
HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
HTOB1_2:ANI 0F
RET
;HL(bynary 2bytes) to asckii 4bytes & disp
HEX4DP:PUSH B
PUSH H
CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
PUSH D
XCHG
CALL DEDP
POP D
CALL DEDP
POP H
POP B
RET
;A(binary) to asckii 2bytes HEX & disp
B2HEXDP:PUSH B
PUSH H
CALL B2HEX2
CALL DEDP
POP H
POP B
RET
;
;DE(asckii 2bytes) disp
DEDP:PUSH D
MOV E,D
MVI C,02
CALL FCALL
POP D
MVI C,02
CALL FCALL
RET
;
|
2015/1/29 22:43 mftst19.txt
END=019F
; BDOS TEST19 login vector & r/o vector function18,1D
;2012/4/10 test12
;4/16 test19
;9/3
;
ORG $0100
FCALL=$0005
FCB=$005C
;
0100 0E18 MVI C,18
0102 CD0500 CALL FCALL
0105 3E4C MVI A,4C;'L' login vector
0107 CD3001 CALL ADP
010A CD2E01 CALL SPDP
010D CD7601 CALL HEX4DP
0110 CD2401 CALL CRLF
0113 0E1D MVI C,1D
0115 CD0500 CALL FCALL
0118 3E52 MVI A,52;'R' R/O vector
011A CD3001 CALL ADP
011D CD2E01 CALL SPDP
0120 CD7601 CALL HEX4DP
0123 C9 RET
;
;CL & LF
0124 3E0D CRLF:MVI A,0D
0126 CD3001 CALL ADP
0129 3E0A MVI A,0A
012B C33001 JMP ADP
;space disp
012E 3E20 SPDP:MVI A,20
;A disp
0130 C5 ADP:PUSH B
0131 E5 PUSH H
0132 5F MOV E,A
0133 0E02 MVI C,02
0135 CD0500 CALL FCALL
0138 E1 POP H
0139 C1 POP B
013A C9 RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
013B 7C B2HEX4:MOV A,H
013C CD4101 CALL B2HEX2
013F EB XCHG
0140 7B MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
0141 F5 B2HEX2:PUSH PSW
0142 0F RRC
0143 0F RRC
0144 0F RRC
0145 0F RRC
0146 CD5001 CALL B2HEX1
0149 57 MOV D,A
014A F1 POP PSW
014B CD5001 CALL B2HEX1
014E 5F MOV E,A
014F C9 RET
;binary to hex, low 4bit to ascii 1charactor
0150 E60F B2HEX1:ANI 0F
0152 C630 ADI 30
0154 FE3A CPI 3A
0156 D8 RC;0-9
0157 C607 ADI 07;A-F
0159 C9 RET
;hex to binary, ascii 1charactor to low 4bit
015A FE30 HTOB1:CPI 30;>="0"?
015C D8 RC;no
015D FE3A CPI 3A;<="9"?
015F DA7301 JC HTOB1_2;yes,"0" to "9"
0162 FE41 CPI 41;>="A" ?
0164 D8 RC;no
0165 FE47 CPI 47;<="F"?
0167 DA7101 JC HTOB1_1
016A FE61 CPI 61;>="a"?
016C D8 RC;no
016D FE67 CPI 67;<="f"?
016F 3F CMC
0170 D8 RC;no
0171 C609 HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
0173 E60F HTOB1_2:ANI 0F
0175 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
0176 C5 HEX4DP:PUSH B
0177 E5 PUSH H
0178 CD3B01 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
017B D5 PUSH D
017C EB XCHG
017D CD9201 CALL DEDP
0180 D1 POP D
0181 CD9201 CALL DEDP
0184 E1 POP H
0185 C1 POP B
0186 C9 RET
;A(binary) to asckii 2bytes HEX & disp
0187 C5 B2HEXDP:PUSH B
0188 E5 PUSH H
0189 CD4101 CALL B2HEX2
018C CD9201 CALL DEDP
018F E1 POP H
0190 C1 POP B
0191 C9 RET
;
;DE(asckii 2bytes) disp
0192 D5 DEDP:PUSH D
0193 5A MOV E,D
0194 0E02 MVI C,02
0196 CD0500 CALL FCALL
0199 D1 POP D
019A 0E02 MVI C,02
019C CD0500 CALL FCALL
019F C9 RET
;
ADP =0130 B2HEX1 =0150 B2HEX2 =0141
B2HEX4 =013B B2HEXDP =0187 CRLF =0124
DEDP =0192 FCALL =0005 FCB =005C
HEX4DP =0176 HTOB1 =015A HTOB1_1 =0171
HTOB1_2 =0173 SPDP =012E
|
