MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第129回]
●ファンクション24(3)
前々回、前回と同様に今回も以前に行なったファンクション24のテストをそのまま踏襲します。
以前に行なったテストは「ワンボードマイコンでCP/Mを!」[第233回]から「ワンボードマイコンでCP/Mを!」[第235回]で行ないました。
今回は「ワンボードマイコンでCP/Mを!」[第235回]と同じテストを行ないます。
「ワンボードマイコンでCP/Mを!」[第235回]ではその前に作ったVFTST24にファンクションコール24を追加したVFTST25作り、そのファンクションコールによって、ランダムアクセスのためのレコードbェFCB上に作成されることを確認しました。
そこでいつものようにテストプログラムVFTST25のソースプログラムをインテルニーモニックに書き直してMFTST25を作りました。
●テストプログラムMFTST25
MFTST25のソースプログラムです。
; BDOS VFTST25 function call 24
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;10/18
;from vftst24.txt & ftst25.txt 10/21
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
FCBR0=$007D
FCBR1=$007E
FCBR2=$007F
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
MVI A,5B;[
CALL ADP
LXI D,FCB
MVI C,24
CALL FCALL
LDA FCBR2
CALL B2HEXDP
CALL SPDP
LDA FCBR1
CALL B2HEXDP
CALL SPDP
LDA FCBR0
CALL B2HEXDP
MVI A,5D;]
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:15 mftst25.txt
END=01FB
; BDOS VFTST25 function call 24
; from ftest4-1.txt & ftest3dm.txt
;2012/2/28
;4/30
;10/18
;from vftst24.txt & ftst25.txt 10/21
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
FCBR0=$007D
FCBR1=$007E
FCBR2=$007F
DMA=$0080
;
0100 0E0F MVI C,0F;open
0102 115C00 LXI D,FCB
0105 CD0500 CALL FCALL
0108 3C INR A;if FFH?
0109 CAE601 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 CDCD01 CALL B2HEXDP
0120 3E28 MVI A,28;(
0122 CD7601 CALL ADP
0125 218000 LXI H,DMA
0128 4E MOV C,M
0129 23 INX H
012A 7E MOV A,M
012B CDCD01 CALL B2HEXDP
012E 79 MOV A,C
012F CDCD01 CALL B2HEXDP
0132 3E29 MVI A,29;)
0134 CD7601 CALL ADP
0137 3E5B MVI A,5B;[
0139 CD7601 CALL ADP
013C 115C00 LXI D,FCB
013F 0E24 MVI C,24
0141 CD0500 CALL FCALL
0144 3A7F00 LDA FCBR2
0147 CDCD01 CALL B2HEXDP
014A CD7401 CALL SPDP
014D 3A7E00 LDA FCBR1
0150 CDCD01 CALL B2HEXDP
0153 CD7401 CALL SPDP
0156 3A7D00 LDA FCBR0
0159 CDCD01 CALL B2HEXDP
015C 3E5D MVI A,5D;]
015E CD7601 CALL ADP
0161 CD7401 CALL SPDP
0164 CD7401 CALL SPDP
0167 C31001 JMP LOOP1
;
;CL & LF
016A 3E0D CRLF:MVI A,0D
016C CD7601 CALL ADP
016F 3E0A MVI A,0A
0171 C37601 JMP ADP
;space disp
0174 3E20 SPDP:MVI A,20
;A disp
0176 C5 ADP:PUSH B
0177 E5 PUSH H
0178 5F MOV E,A
0179 0E02 MVI C,02
017B CD0500 CALL FCALL
017E E1 POP H
017F C1 POP B
0180 C9 RET
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
0181 7C B2HEX4:MOV A,H
0182 CD8701 CALL B2HEX2
0185 EB XCHG
0186 7B MOV A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
0187 F5 B2HEX2:PUSH PSW
0188 0F RRC
0189 0F RRC
018A 0F RRC
018B 0F RRC
018C CD9601 CALL B2HEX1
018F 57 MOV D,A
0190 F1 POP PSW
0191 CD9601 CALL B2HEX1
0194 5F MOV E,A
0195 C9 RET
;binary to hex, low 4bit to ascii 1charactor
0196 E60F B2HEX1:ANI 0F
0198 C630 ADI 30
019A FE3A CPI 3A
019C D8 RC;0-9
019D C607 ADI 07;A-F
019F C9 RET
;hex to binary, ascii 1charactor to low 4bit
01A0 FE30 HTOB1:CPI 30;>="0"?
01A2 D8 RC;no
01A3 FE3A CPI 3A;<="9"?
01A5 DAB901 JC HTOB1_2;yes,"0" to "9"
01A8 FE41 CPI 41;>="A" ?
01AA D8 RC;no
01AB FE47 CPI 47;<="F"?
01AD DAB701 JC HTOB1_1
01B0 FE61 CPI 61;>="a"?
01B2 D8 RC;no
01B3 FE67 CPI 67;<="f"?
01B5 3F CMC
01B6 D8 RC;no
01B7 C609 HTOB1_1:ADI 09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
01B9 E60F HTOB1_2:ANI 0F
01BB C9 RET
;HL(bynary 2bytes) to asckii 4bytes & disp
01BC C5 HEX4DP:PUSH B
01BD E5 PUSH H
01BE CD8101 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
01C1 D5 PUSH D
01C2 EB XCHG
01C3 CDD801 CALL DEDP
01C6 D1 POP D
01C7 CDD801 CALL DEDP
01CA E1 POP H
01CB C1 POP B
01CC C9 RET
;A(binary) to asckii 2bytes HEX & disp
01CD C5 B2HEXDP:PUSH B
01CE E5 PUSH H
01CF CD8701 CALL B2HEX2
01D2 CDD801 CALL DEDP
01D5 E1 POP H
01D6 C1 POP B
01D7 C9 RET
;
;DE(asckii 2bytes) disp
01D8 D5 DEDP:PUSH D
01D9 5A MOV E,D
01DA 0E02 MVI C,02
01DC CD0500 CALL FCALL
01DF D1 POP D
01E0 0E02 MVI C,02
01E2 CD0500 CALL FCALL
01E5 C9 RET
;
01E6 11EF01 ERR:LXI D,ERRMSG
01E9 0E09 MVI C,09
01EB CD0500 CALL FCALL
01EE C9 RET
01EF 63616E27 ERRMSG:"can'"
01F3 74206F70 "t op"
01F7 656E "en"
01F9 0D DB 0D
01FA 0A DB 0A
01FB 24 DB 24;$
;
ADP =0176 B2HEX1 =0196 B2HEX2 =0187
B2HEX4 =0181 B2HEXDP =01CD CRLF =016A
DEDP =01D8 DMA =0080 ERR =01E6
ERRMSG =01EF FCALL =0005 FCB =005C
FCBR0 =007D FCBR1 =007E FCBR2 =007F
HEX4DP =01BC HTOB1 =01A0 HTOB1_1 =01B7
HTOB1_2 =01B9 LOOP1 =0110 RECNO =007C
SPDP =0174
|

