2015.1.31

前へ
次へ
ホームページトップへ戻る

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;$
;

下はMFTST10のアセンブルリストです。

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  

●MFTST10の実行

「ワンボードマイコンでCP/Mを!」[第204回]と同じテストをしました。
ただしVFTSTをMFTSTに変えてテストをしました。


MYCPU80でCP/Mを![第117回]
2015.1.31upload

前へ
次へ
ホームページトップへ戻る