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