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

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

[第201回]


●ファンクションコール10H(ファイルクローズ)、13H(ファイル削除)、15H(シーケンシャルライト)、16H(新規ファイル作成)

[第135回]で表記のファンクションコールを一度にテストしました。
そのテストプログラムFTST5CPYは[第51回]で作成しました。
ファイルコピープログラムです。

FTST5CPYは[第52回]で実行しましたが、そこでバグがみつかったため、[第54回]で修正をしました。
そのあと再度実行をしています。

[第135回]ではRAMディスク版での動作テストをしています。
そこではFTST5CPYをCOPY.COMにファイル名を変更して実行しました。
しかし64KBフルRAM版では、あらたにCOPYコマンドを作りましたので、COPY.COMというファイル名は使えません。
そこで今回は、FTST5CPYを64KBフルRAM版に変更して、ファイル名はVFTST5にしました。

●またエラーです

今までのテストと同様に、[第135回]をバックにして、VFTST5を実行しました。
[第135回]と同じように
A>VFTST5 VFTST4−1.TXT TESTDAT2.TXT
と入力しました。

copy done
と表示されました。
念の為DIRコマンドで確認してみました。
ちょっと見には、うまくいったように見えたのですが…。



よく見ますと、COPY後のファイルはTESTDAT2.TXTになるはずのところ、TESTDATになってしまいました。

うーん。
1文字ずれてしまっているようです。
前回もそうでしたが、やっぱりちゃんと試してみなければいけませんねえ。
思わぬバグが潜んでいたりします。

実は、昨日はこの記事を書く段になって、土壇場で上記のバグに遭遇してしまいましたので、それで記事をUPすることができませんでした。

バグを修正して再度実行しました。



今度はうまくいきました。
やれやれ、です。

●VFTST5のソースプログラムリストです

; BDOS TEST5 COPY for RAM64KB
;2012/3/4 3/7 5/27
;6/13
;
        ORG $0100
        FCALL=$0005
	FCBWK=$003B
	RECNO2=$005B
        FCB=$005C
	FCB2=$006C
        RECNO=$007C
        DMA=$0080
;
	LD HL,FCB2
	LD DE,FCBWK
	LD B,11;=17
LOOP1:LD A,(HL)
	LD (DE),A
	INC HL
	INC DE
	DEC B
	JP NZ,LOOP1
;
        LD C,0F;open
        LD DE,FCB
        CALL FCALL
        INC A;if FFH?
        JP Z,NOFILERR
;
	LD C,13;delete
	LD DE,FCBWK
	CALL FCALL
;
	LD C,16;make file
	LD DE,FCBWK
	CALL FCALL
	INC A;if FFH?
	JP Z,DFULERR
;
        XOR A
        LD (RECNO),A
	LD (RECNO2),A
;
LOOP2:  LD C,14;read
        LD DE,FCB
        CALL FCALL
        OR A
        JP NZ,CLOSE;read end
	LD C,15;write
	LD DE,FCBWK
	CALL FCALL
	OR A;         5/27
	JP NZ,DFULERR;5/27
	JP LOOP2
;
CLOSE:LD C,10;close
	LD DE,FCBWK
	CALL FCALL
	INC A;if FFH?
	JP Z,CLOSERR
	LD DE,OK
	JP MSGOUT
;
NOFILERR:LD DE,CANTOPN
	JP MSGOUT
DFULERR:LD DE,DFULL
	JP MSGOUT
CLOSERR:LD DE,CANTCLS
MSGOUT:LD C,09
        CALL FCALL
        RET
;
CANTOPN:"can'"
        "t op"
        "en!"
        DB 0D
        DB 0A
        DB 24;$
DFULL:"disk"
        " ful"
        "l!"
        DB 0D
        DB 0A
        DB 24;$
CANTCLS:"can'"
        "t cl"
        "ose!"
        DB 0D
        DB 0A
        DB 24;$
OK:"copy"
        " don"
	"e"
        DB 0D
        DB 0A
        DB 24;$
;

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

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