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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第206回]


●ファンクションコール0E(ディスクドライブセレクト)

ファンクションコール0Eのテストは[第82回][第86回]で行なっています。
そこで作ったテストプログラムはFTST10−2です。

[第140回]ではRAMディスク版での動作テストをしています。

今回はFTST10−2を64KBフルRAM用に一部を書き換えてファイル名をVFTST102にしました。
下はそのソースプログラムリストです。

●ソースプログラムVFTST102.TXT

; BDOS TEST10 filename search   function0e,11,12
;2012/3/19 4/4 8/27
;
        ORG $0100
        FCALL=$0005
        FCB=$005C
        DMA=$0080
;
LOOP:LD DE,INPMSG
        CALL MSGDP
        LD C,01
        CALL FCALL
        CP 1A;^z
        RET Z
        CP 30
        JP Z,DNOPASS
        AND 0F
        DEC A
        LD E,A
        LD C,0E
        CALL FCALL
DNOPASS:CALL CRLF
        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
        CALL MSGDP
        JP LOOP 
;
END:LD DE,ENDMSG
        CALL MSGDP
        JP LOOP
;
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
;
INPMSG:"drvn"
        "o."
        DB 3F;?
        DB 24;$
NFMSG:"not "
        "foun"
        "d"
        DB 0D
        DB 0A
        DB 24;$
ENDMSG:"end"
        DB 0D
        DB 0A
        DB 24;$
;

●VFTST102の実行

[第140回]と同じことをVFTST102で行なってみました。
表示結果が多くて1画面には収まりませんので[第140回]と同様にログファイルでお見せします。
表示結果が長くなりますので、ドライブのディレクトリ表示は途中のファイル名表示を省略しました。

logfile nd80zlog\08272032.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
can't open D.vfd
>jp d233

A>copy z:vftst102.bin

A>vftst102 *.*
drvno.?a
F80.COM
F80.COM
HELL1.FOR
HELL1.REL
.
.
FNC0BT-2.COM
FNC06T-2.COM
FNC03T-2.COM
VFTST102.COM
end
drvno.?b
TEST2.COM
MBASIC.COM
.
.
FORLIB.REL
HELLO.COM
end
drvno.?0
TEST2.COM
MBASIC.COM
.
.
FORLIB.REL
HELLO.COM
end
drvno.?
A>

drvno?の表示に

と入力するとAドライブのファイル名が表示されました。
次のdrvno?の表示に

と入力するとBドライブのファイル名が表示されました。
次のdrvno?の表示に

と入力するとBドライブのファイル名が表示されました。
ここでCtrl+Zを入力してVFTST102の実行を終了しました。
プログラムの中でBドライブを選択して終了したのですが、その選択はプログラムの中だけで有効で、プログラムを終了すると、プログラム開始時のカレントドライブに戻ります。

続いてカレントドライブを意識したテストを行ないます。
カレントドライブをBドライブに変更して、VFTST102を実行します。

A>b:
B>a:vftst102 *.*
drvno.?0
TEST2.COM
MBASIC.COM
.
.
FORLIB.REL
HELLO.COM
end
drvno.?a
F80.COM
F80.COM
HELL1.FOR
HELL1.REL
.
.
FNC0BT-2.COM
FNC06T-2.COM
FNC03T-2.COM
VFTST102.COM
end
drvno.?0
F80.COM
F80.COM
HELL1.FOR
HELL1.REL
.
.
FNC0BT-2.COM
FNC06T-2.COM
FNC03T-2.COM
VFTST102.COM
end
drvno.?
B>

drvno?の表示に

と入力すると実行開始時のカレントドライブが選択され、Bドライブのファイル名が表示されました。
次のdrvno?の表示に

と入力するとAドライブのファイル名が表示されました。
次のdrvno?の表示に

と入力するとAドライブのファイル名が表示されました。
ここでCtrl+Zを入力してVFTST102の実行を終了しました。

プログラムの中でAドライブを選択して終了したのですが、その選択はプログラムの中だけで有効で、プログラムを終了すると、プログラム開始時のカレントドライブBドライブに戻り、
B>
と表示されました。

実は[第140回]の説明は間違っています。
今回の記事を書くために読み直していてそのことに気が付きました。
どうやらバグがまだ残ったままで[第140回]を書いてしまったようです。
B>(カレントドライブがBドライブ)でFTST10−2を起動して、drvno?の表示に0を入力してAドライブのファイル名が表示されていますが、それは間違いで、今回のようにBドライブのファイル名が表示されます。

ワンボードマイコンでCP/Mを![第206回]
2012.8.27upload

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