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

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

[第200回]


●ファンクションコール0FH(ファイルオープン)とファンクションコール14H(シーケンシャルリード)

RAMディスク版での説明は[第134回]ですが、テストプログラムFTEST4のリストは[第49回]にあります。

今までのテストプログラムと同じ要領で、FTEST4を64KBフルRAMに対応するように変更して、VFTST4を作成しました。
VFTST4はTYPEコマンドと同じ動作をします。
テキストファイルを読み込んで、その内容をコンソールに表示します。
[第134回]と同じ要領でVFTST4.TXTをVFTST4−1.TXTの名前でAドライブにセーブしてから、それをVFTST4で読み出して内容を表示します。
今回はCOPYコマンドが使えますから、[第134回]よりもファイル操作はうんと簡単になりました。

A>copy z:vftst4.bin

A>copy z:vftst4.txt

A>ren vftst4.txt vftst4-1.txt

A>dir
A: F80      COM : HELL1    FOR : HELL1    REL : HELLO    FOR
A: HELLO    REL : HELL2    FOR : HELL2    REL : HELL3    FOR
A: HELL3    REL : M80      COM : MVFTST1  MAC : MVFTST1  REL
A: MVFTST1B MAC : MVFTST1B PRN : MVFTST1B REL : MVFTST1C MAC
A: MVFTST1C PRN : MVFTST1C REL : L80      COM : MVFTST1C COM
A: VFTST1   COM : FORLIB   REL : HELLO    COM : MVFTST1D MAC
A: MVFTST1D PRN : MVFTST1D REL : MVFTST1D COM : MVFTST1E MAC
A: MVFTST1E PRN : MVFTST1E REL : MVFTST1E COM : MVFTST1F MAC
A: MVFTST1F PRN : MVFTST1F REL : MVFTST1F COM : MVFTST1G MAC
A: MVFTST1G PRN : MVFTST1G REL : MVFTST1G COM : VFTST9   COM
A: VFTST2   COM : VFTST4   COM : VFTST4-1 TXT
A>

上のログファイルの説明です。

最初にCOPYコマンドでVFTST4.BINをAドライブにコピーしました。
COPYコマンドは[第175回]で説明をしました。
ドライブ名をZ:にすると、WindowsのZBDOSシステムプログラムがあるフォルダが選択されます。
そしてファイル名の拡張子がBINのときは、それをCOMに変更して、カレントドライブにセーブします。

A>COPY Z:VFTST4.BIN

を実行した結果、VFTST4.BINがVFTST4.COMの名前でAドライブに保存されました。

次に

A>COPY Z:VFTST4.TXT

を実行して、VFTST4.TXTをAドライブにセーブしました。
そのあと、
RENコマンドで、VFTST4.TXTをVFTST4−1.TXTに名前を変更しました。
このように名前を変更する必要はないのですが、そのあとで実行するVFTST4が、
VFTST4 VFTST4.TXT
では、同じファイル名になってしまってサンプルとしてはやや不適当かと思い、そのように名前を変えることにしたのです。

以上の操作をしたあとで、念の為にDIRコマンドでAドライブのディレクトリを表示させてみました。
VFTST4.BINはVFTST4.COMの名前でセーブされています。
またVFTST4.TXTはVFTST4−1.TXTに変更されています。

●まさかのエラー発生です

準備が完了したのでVFTST4を実行してみましたら。
まさかのエラーが発生してしまいました。

A>vftst4 vftst4-1.txt
VFTST4 VFTST4-1.TXT4-1.TBv3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v3v?
A>

こういうことがあるので、やっぱりテストしなければいけないのですねえ。
CCPプログラムにバグがみつかりました。
バグを直して再実行です。
今度はうまくいったようです。

A>vftst4 vftst4-1.txt
; BDOS TEST4 TYPE
;2012/2/28 8/17
;
        ORG $0100
        FCALL=$0005
        FCB=$005C
        RECNO=$007C
        DMA=$0080
;
        LD C,0F;open
        LD DE,FCB
        CALL FCALL
        INC A;if FFH?
        JP Z,ERR
        XOR A
        LD (RECNO),A
;
LOOP1:  LD C,14;read
        LD DE,FCB
        CALL FCALL
        OR A
        RET NZ;read end
;
        LD HL,DMA
LOOP2:LD E,(HL)
        LD C,02
        PUSH HL
        CALL FCALL
        POP HL
        INC L
        JP NZ,LOOP2
        JP LOOP1
;
ERR:LD DE,ERRMSG
        LD C,09
        CALL FCALL
        RET
ERRMSG:"can'"
        "t op"
        "en"
        DB 0D
        DB 0A
        DB 24;$
;
\V@kl-u:}.}n}.17w}(",+_
TyTZno;gpwgWg{u+V>d
A>end of ZBDOS

あ。
いや。
テキストファイルの終わりにゴミが表示されてしまいました。
このゴミ問題については[第15回]で説明をしています。

実はこのゴミ対策として、COPYコマンドでテキストファイル(拡張子がTXTのファイル)をカレントドライブにコピーするときは、ファイルの最後にEOFコード(1A)を付け加えるようにプログラムしてあるのです。

あれ。
でも、それが利いていませんね。
上で表示されたリストはVFTST4.COMのソースプログラムリストです。
よく見ましたら、EOFをチェックしていません。
せっかくテキストファイルの終わりにEOFコードを付加したのですから、有効に利用することを考えましょう。

●VFTST4にEOFチェックを加えました

そのように変更して、再度実行してみました。
VFTST4−1.TXTも変更後のファイルにしましたから、下のログに表示されているVFTST4−1.TXTの内容は、変更後のVFTST4.TXTの内容になっています。

logfile nd80zlog\08182127.txt open

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

A>copy z:vftst4.bin

A>copy z:vftst4.txt

A>ren vftst4.txt vftst4-1.txt
err
A>era vftst4-1.txt

A>ren vftst4.txt vftst4-1.txt

A>vftst4 vftst4-1.txt
; BDOS TEST4 TYPE
;2012/2/28 8/17 8/18
;
        ORG $0100
        FCALL=$0005
        FCB=$005C
        RECNO=$007C
        DMA=$0080
;
        LD C,0F;open
        LD DE,FCB
        CALL FCALL
        INC A;if FFH?
        JP Z,ERR
        XOR A
        LD (RECNO),A
;
LOOP1:  LD C,14;read
        LD DE,FCB
        CALL FCALL
        OR A
        RET NZ;read end
;
        LD HL,DMA
LOOP2:LD E,(HL)
        LD A,E
        CP 1A;EOF
        RET Z
        LD C,02
        PUSH HL
        CALL FCALL
        POP HL
        INC L
        JP NZ,LOOP2
        JP LOOP1
;
ERR:LD DE,ERRMSG
        LD C,09
        CALL FCALL
        RET
ERRMSG:"can'"
        "t op"
        "en"
        DB 0D
        DB 0A
        DB 24;$
;

A>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sat Aug 18 21:31:19 2012

念の為、ログの説明です。
最初の
REN VFTST4.TXT VFTST4−1.TXT
の実行では、err が表示されています。
VFTST4−1.TXTはすでに存在するファイル名だからです。
RENコマンドでは、すでに存在するファイル名への変更はできません。
これは不注意によってすでに存在するファイルを上書きしてしまわないための配慮です。

そこでまずERAコマンドで古いVFTST4−1.TXTを削除してから、RENコマンドを実行しました。

変更後のVFTST4をあらためて実行した結果、ゴミは表示されなくなりました。

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

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