復活!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  |