復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第65回]
●ファイルサーチ(ファンクションコール11H&12H)
今回はファイルサーチのファンクションコールについて説明をします。
ファンクションコール11Hは「最初の」ファイルサーチです。
ファンクションコール12Hは「次の」ファイルサーチです。
ファイル名を指定して、ディレクトリから同じファイル名を抽出します。
「最初のファイルサーチ」はディレクトリの先頭からサーチします。
「次のファイルサーチ」は、その前に実行した「最初のファイルサーチ」または「次のファイルサーチ」で見つけたファイル名の次からサーチします。
ファンクションコール11H及び12Hを使ったテストプログラムです。
ソースプログラムリストです。
; BDOS TEST10 filename search function11,12
;2012/3/19
;
ORG $8100
FCALL=$8005
FCB=$805C
DMA=$8080
;
LD C,11;first file search
LD DE,FCB
CALL FCALL
CP FF
JP Z,NOFILE
;
LD HL,DMA
LD DE,$0020
OR A;dirctory code 00-03
LOOP1: JP Z,NMDISP
ADD HL,DE
DEC A
JP LOOP1
NMDISP:INC HL;pass drive no.
LD B,08
NMDISP2:LD A,(HL)
CP 20
JP Z,NMDISP3
CALL ADP
NMDISP3:INC HL
DEC B
JP NZ,NMDISP2
LD A,2E;"."
CALL ADP
LD B,03
NMDISP4:LD A,(HL)
CALL ADP
INC HL
DEC B
JP NZ,NMDISP4
CALL CRLF
;next file search
LD C,12;next file search
LD DE,FCB
CALL FCALL
CP FF
JP Z,END
LD HL,DMA
LD DE,$0020
OR A;dirctory code 00-03
NXTSRCH:JP Z,NMDISP
ADD HL,DE
DEC A
JP NXTSRCH
;
NOFILE:LD DE,NFMSG
JP MSGDP
;
END:LD DE,ENDMSG
MSGDP:LD C,09
CALL FCALL
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
;
NFMSG:"not "
"foun"
"d"
DB 24;$
ENDMSG:"end"
DB 24;$
;
|
2012/3/19 21:48 ftst10.txt
END=818F
; BDOS TEST10 filename search function11,12
;2012/3/19
;
ORG $8100
FCALL=$8005
FCB=$805C
DMA=$8080
;
8100 0E11 LD C,11;first file search
8102 115C80 LD DE,FCB
8105 CD0580 CALL FCALL
8108 FEFF CP FF
810A CA5C81 JP Z,NOFILE
;
810D 218080 LD HL,DMA
8110 112000 LD DE,$0020
8113 B7 OR A;dirctory code 00-03
8114 CA1C81 LOOP1: JP Z,NMDISP
8117 19 ADD HL,DE
8118 3D DEC A
8119 C31481 JP LOOP1
811C 23 NMDISP:INC HL;pass drive no.
811D 0608 LD B,08
811F 7E NMDISP2:LD A,(HL)
8120 FE20 CP 20
8122 CA2881 JP Z,NMDISP3
8125 CD7781 CALL ADP
8128 23 NMDISP3:INC HL
8129 05 DEC B
812A C21F81 JP NZ,NMDISP2
812D 3E2E LD A,2E;"."
812F CD7781 CALL ADP
8132 0603 LD B,03
8134 7E NMDISP4:LD A,(HL)
8135 CD7781 CALL ADP
8138 23 INC HL
8139 05 DEC B
813A C23481 JP NZ,NMDISP4
813D CD6B81 CALL CRLF
;next file search
8140 0E12 LD C,12;next file search
8142 115C80 LD DE,FCB
8145 CD0580 CALL FCALL
8148 FEFF CP FF
814A CA6281 JP Z,END
814D 218080 LD HL,DMA
8150 112000 LD DE,$0020
8153 B7 OR A;dirctory code 00-03
8154 CA1C81 NXTSRCH:JP Z,NMDISP
8157 19 ADD HL,DE
8158 3D DEC A
8159 C35481 JP NXTSRCH
;
815C 118281 NOFILE:LD DE,NFMSG
815F C36581 JP MSGDP
;
8162 118C81 END:LD DE,ENDMSG
8165 0E09 MSGDP:LD C,09
8167 CD0580 CALL FCALL
816A C9 RET
;
;CL & LF
816B 3E0D CRLF:LD A,0D
816D CD7781 CALL ADP
8170 3E0A LD A,0A
8172 C37781 JP ADP
;space disp
8175 3E20 SPDP:LD A,20
;A disp
8177 C5 ADP:PUSH BC
8178 E5 PUSH HL
8179 5F LD E,A
817A 0E02 LD C,02
817C CD0580 CALL FCALL
817F E1 POP HL
8180 C1 POP BC
8181 C9 RET
;
8182 6E6F7420 NFMSG:"not "
8186 666F756E "foun"
818A 64 "d"
818B 24 DB 24;$
818C 656E64 ENDMSG:"end"
818F 24 DB 24;$
;
ADP =8177 CRLF =816B DMA =8080
END =8162 ENDMSG =818C FCALL =8005
FCB =805C LOOP1 =8114 MSGDP =8165
NFMSG =8182 NMDISP =811C NMDISP2 =811F
NMDISP3 =8128 NMDISP4 =8134 NOFILE =815C
NXTSRCH =8154 SPDP =8175
|
logfile nd80zlog\03192148.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst10.bin,8100 loading FTST10.BIN ...0090(144)bytes loaded,from 8100 to 818F >jp d233 a>save 1 ftst10.com a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM A: TESTDAT2 TXT : CMP COM : FILL00 BIN : FTST7 COM A: FTST8 COM : FTST9 COM : FTST10 COM a>ftst10 copy.com COPY.COM end a>ftst10 ftest*.* FTEST1.COM FTEST2.COM FTEST4.COM FTEST4-1.TXT FTEST4-2.COM FTEST4-3.COM end a>ftst10 c?p*.* COPY.COM CMP.COM end a>^D>a>^D> ERR:23 >0000 00C3 - リモート接続を終了しました logfile closed at Mon Mar 19 21:53:38 2012 |
logfile nd80zlog\03192158.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >jp d233 a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM A: TESTDAT2 TXT : CMP COM : FILL00 BIN : FTST7 COM A: FTST8 COM : FTST9 COM : FTST10 COM a>ren search.com=ftst10.com a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM A: TESTDAT2 TXT : CMP COM : FILL00 BIN : FTST7 COM A: FTST8 COM : FTST9 COM : SEARCH COM a>search ftst*.* FTST7.COM FTST8.COM FTST9.COM end a>^D>a>^D> ERR:23 >0000 00C3 - リモート接続を終了しました logfile closed at Mon Mar 19 21:59:19 2012 |