MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第128回]
●ファンクション24(2)
ファンクション24は「ワンボードマイコンでCP/Mを!」[第233回]〜「ワンボードマイコンでCP/Mを!」[第235回]でテストをしています。
前回は「ワンボードマイコンでCP/Mを!」[第233回]と同じように、ファンクション24のテストをするための前準備として、シーケンシャルファイルTEST.SAFを作成しました。
そしてTEST.SAFが正しく作成されたかどうかを確かめるために、VFDUMPでBドライブのセクタを直接読んで確認をしました。
「ワンボードマイコンでCP/Mを!」[第234回ではVFTST24.COMを作って、TEST.SAFの内容を読み出しています。
今回もそれと同じテストをしてみることにします。
テストプログラムVFTST24のソースプログラムをインテルニーモニックに書き直してMFTST24を作りました。
●テストプログラムMFTST24
MFTST24のソースプログラムです。
; BDOS VFTST24 file read
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;10/18
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
DMA=$0080
;
MVI C,0F;open
LXI D,FCB
CALL FCALL
INR A;if FFH?
JZ ERR
XRA A
STA RECNO
;
LOOP1:MVI C,14;read
LXI D,FCB
CALL FCALL
ORA A
RNZ;read end
;
LDA RECNO
CALL B2HEXDP
MVI A,28;(
CALL ADP
LXI H,DMA
MOV C,M
INX H
MOV A,M
CALL B2HEXDP
MOV A,C
CALL B2HEXDP
MVI A,29;)
CALL ADP
CALL SPDP
CALL SPDP
JMP LOOP1
;
;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
;
ERR:LXI D,ERRMSG
MVI C,09
CALL FCALL
RET
ERRMSG:"can'"
"t op"
"en"
DB 0D
DB 0A
DB 24;$
;
|
2015/2/3 15:13 mftst24.txt
END=01D1
; BDOS VFTST24 file read
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;10/18
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
DMA=$0080
;
0100 0E0F MVI C,0F;open
0102 115C00 LXI D,FCB
0105 CD0500 CALL FCALL
0108 3C INR A;if FFH?
0109 CABC01 JZ ERR
010C AF XRA A
010D 327C00 STA RECNO
;
0110 0E14 LOOP1:MVI C,14;read
0112 115C00 LXI D,FCB
0115 CD0500 CALL FCALL
0118 B7 ORA A
0119 C0 RNZ;read end
;
011A 3A7C00 LDA RECNO
011D CDA301 CALL B2HEXDP
0120 3E28 MVI A,28;(
0122 CD4C01 CALL ADP
0125 218000 LXI H,DMA
0128 4E MOV C,M
0129 23 INX H
012A 7E MOV A,M
012B CDA301 CALL B2HEXDP
012E 79 MOV A,C
012F CDA301 CALL B2HEXDP
0132 3E29 MVI A,29;)
0134 CD4C01 CALL ADP
0137 CD4A01 CALL SPDP
013A CD4A01 CALL SPDP
013D C31001 JMP LOOP1
;
;CL & LF
0140 3E0D CRLF:MVI A,0D
0142 CD4C01 CALL ADP
0145 3E0A MVI A,0A
0147 C34C01 JMP ADP
;space disp
014A 3E20 SPDP:MVI A,20
;A disp
014C C5 ADP:PUSH B
014D E5 PUSH H
014E 5F MOV E,A
014F 0E02 MVI C,02
0151 CD0500 CALL FCALL
0154 E1 POP H
0155 C1 POP B
0156 C9 RET
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
0157 7C B2HEX4:MOV A,H
0158 CD5D01 CALL B2HEX2
015B EB XCHG
015C 7B MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
015D F5 B2HEX2:PUSH PSW
015E 0F RRC
015F 0F RRC
0160 0F RRC
0161 0F RRC
0162 CD6C01 CALL B2HEX1
0165 57 MOV D,A
0166 F1 POP PSW
0167 CD6C01 CALL B2HEX1
016A 5F MOV E,A
016B C9 RET
;binary to hex, low 4bit to ascii 1charactor
016C E60F B2HEX1:ANI 0F
016E C630 ADI 30
0170 FE3A CPI 3A
0172 D8 RC;0-9
0173 C607 ADI 07;A-F
0175 C9 RET
;hex to binary, ascii 1charactor to low 4bit
0176 FE30 HTOB1:CPI 30;>="0"?
0178 D8 RC;no
0179 FE3A CPI 3A;<="9"?
017B DA8F01 JC HTOB1_2;yes,"0" to "9"
017E FE41 CPI 41;>="A" ?
0180 D8 RC;no
0181 FE47 CPI 47;<="F"?
0183 DA8D01 JC HTOB1_1
0186 FE61 CPI 61;>="a"?
0188 D8 RC;no
0189 FE67 CPI 67;<="f"?
018B 3F CMC
018C D8 RC;no
018D C609 HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
018F E60F HTOB1_2:ANI 0F
0191 C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
0192 C5 HEX4DP:PUSH B
0193 E5 PUSH H
0194 CD5701 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
0197 D5 PUSH D
0198 EB XCHG
0199 CDAE01 CALL DEDP
019C D1 POP D
019D CDAE01 CALL DEDP
01A0 E1 POP H
01A1 C1 POP B
01A2 C9 RET
;A(binary) to asckii 2bytes HEX & disp
01A3 C5 B2HEXDP:PUSH B
01A4 E5 PUSH H
01A5 CD5D01 CALL B2HEX2
01A8 CDAE01 CALL DEDP
01AB E1 POP H
01AC C1 POP B
01AD C9 RET
;
;DE(asckii 2bytes) disp
01AE D5 DEDP:PUSH D
01AF 5A MOV E,D
01B0 0E02 MVI C,02
01B2 CD0500 CALL FCALL
01B5 D1 POP D
01B6 0E02 MVI C,02
01B8 CD0500 CALL FCALL
01BB C9 RET
;
01BC 11C501 ERR:LXI D,ERRMSG
01BF 0E09 MVI C,09
01C1 CD0500 CALL FCALL
01C4 C9 RET
01C5 63616E27 ERRMSG:"can'"
01C9 74206F70 "t op"
01CD 656E "en"
01CF 0D DB 0D
01D0 0A DB 0A
01D1 24 DB 24;$
;
ADP =014C B2HEX1 =016C B2HEX2 =015D
B2HEX4 =0157 B2HEXDP =01A3 CRLF =0140
DEDP =01AE DMA =0080 ERR =01BC
ERRMSG =01C5 FCALL =0005 FCB =005C
HEX4DP =0192 HTOB1 =0176 HTOB1_1 =018D
HTOB1_2 =018F LOOP1 =0110 RECNO =007C
SPDP =014A
|

