MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第117回]
●ファンクション11、12
ファンクション11は最初のファイルサーチです。
ファンクション12は次のファイルサーチです。
上記のファンクションは「ワンボードマイコンでCP/Mを!」[第204回]でテストをしています。
テストプログラムはVFTST10です。
ファイル名を指定して、ディレクトリ(ドライブ)の中から該当するファイルを抽出します。
もとになったプログラムの説明は「ワンボードマイコンでCP/Mを!」[第65回]でしています。
いつものようにVFTST10のソースプログラムをインテルニーモニックに書き直してMFTST10を作りました。
●テストプログラムMFTST10
MFTST10のソースプログラムです。
; BDOS TEST10 filename search function11,12
;2012/3/19 8/24
;
ORG $0100
FCALL=$0005
FCB=$005C
DMA=$0080
;
MVI C,11;first file search
LXI D,FCB
CALL FCALL
CPI FF
JZ NOFILE
;
LXI H,DMA
LXI D,$0020
ORA A;dirctory code 00-03
LOOP1:JZ NMDISP
DAD D
DCR A
JMP LOOP1
NMDISP:INX H;pass drive no.
MVI B,08
NMDISP2:MOV A,M
CPI 20
JZ NMDISP3
CALL ADP
NMDISP3:INX H
DCR B
JNZ NMDISP2
MVI A,2E;"."
CALL ADP
MVI B,03
NMDISP4:MOV A,M
CALL ADP
INX H
DCR B
JNZ NMDISP4
CALL CRLF
;next file search
MVI C,12;next file search
LXI D,FCB
CALL FCALL
CPI FF
JZ END
LXI H,DMA
LXI D,$0020
ORA A;dirctory code 00-03
NXTSRCH:JZ NMDISP
DAD D
DCR A
JMP NXTSRCH
;
NOFILE:LXI D,NFMSG
JMP MSGDP
;
END:LXI D,ENDMSG
MSGDP:MVI C,09
CALL FCALL
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
;
NFMSG:"not "
"foun"
"d"
DB 24;$
ENDMSG:"end"
DB 24;$
;
|
2015/1/29 11:31 mftst10.txt
END=018F
; BDOS TEST10 filename search function11,12
;2012/3/19 8/24
;
ORG $0100
FCALL=$0005
FCB=$005C
DMA=$0080
;
0100 0E11 MVI C,11;first file search
0102 115C00 LXI D,FCB
0105 CD0500 CALL FCALL
0108 FEFF CPI FF
010A CA5C01 JZ NOFILE
;
010D 218000 LXI H,DMA
0110 112000 LXI D,$0020
0113 B7 ORA A;dirctory code 00-03
0114 CA1C01 LOOP1:JZ NMDISP
0117 19 DAD D
0118 3D DCR A
0119 C31401 JMP LOOP1
011C 23 NMDISP:INX H;pass drive no.
011D 0608 MVI B,08
011F 7E NMDISP2:MOV A,M
0120 FE20 CPI 20
0122 CA2801 JZ NMDISP3
0125 CD7701 CALL ADP
0128 23 NMDISP3:INX H
0129 05 DCR B
012A C21F01 JNZ NMDISP2
012D 3E2E MVI A,2E;"."
012F CD7701 CALL ADP
0132 0603 MVI B,03
0134 7E NMDISP4:MOV A,M
0135 CD7701 CALL ADP
0138 23 INX H
0139 05 DCR B
013A C23401 JNZ NMDISP4
013D CD6B01 CALL CRLF
;next file search
0140 0E12 MVI C,12;next file search
0142 115C00 LXI D,FCB
0145 CD0500 CALL FCALL
0148 FEFF CPI FF
014A CA6201 JZ END
014D 218000 LXI H,DMA
0150 112000 LXI D,$0020
0153 B7 ORA A;dirctory code 00-03
0154 CA1C01 NXTSRCH:JZ NMDISP
0157 19 DAD D
0158 3D DCR A
0159 C35401 JMP NXTSRCH
;
015C 118201 NOFILE:LXI D,NFMSG
015F C36501 JMP MSGDP
;
0162 118C01 END:LXI D,ENDMSG
0165 0E09 MSGDP:MVI C,09
0167 CD0500 CALL FCALL
016A C9 RET
;
;CL & LF
016B 3E0D CRLF:MVI A,0D
016D CD7701 CALL ADP
0170 3E0A MVI A,0A
0172 C37701 JMP ADP
;space disp
0175 3E20 SPDP:MVI A,20
;A disp
0177 C5 ADP:PUSH B
0178 E5 PUSH H
0179 5F MOV E,A
017A 0E02 MVI C,02
017C CD0500 CALL FCALL
017F E1 POP H
0180 C1 POP B
0181 C9 RET
;
0182 6E6F7420 NFMSG:"not "
0186 666F756E "foun"
018A 64 "d"
018B 24 DB 24;$
018C 656E64 ENDMSG:"end"
018F 24 DB 24;$
;
ADP =0177 CRLF =016B DMA =0080
END =0162 ENDMSG =018C FCALL =0005
FCB =005C LOOP1 =0114 MSGDP =0165
NFMSG =0182 NMDISP =011C NMDISP2 =011F
NMDISP3 =0128 NMDISP4 =0134 NOFILE =015C
NXTSRCH =0154 SPDP =0175
|
