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