復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第229回]
●ファンクションコール28H(空きを00で埋めるランダムライト)
ファンクションコール28Hについては[第110回]で説明をしています。
ファンクションコール22H(ランダムライト)と同じ、ランダムなレコードの書き込みです。
ファンクションコール22Hとの違いについては、[第110回]で説明をしていますので、そちらをご参照ください。
仮RAMディスクを使ってCP/M互換DOSでのテストについては[第147回]で説明をしました。
ファンクションコール28Hのためのテストプログラムは[第110回]で作りました。
FTST20−3です。
[第147回]でもそれをそのまま使いました。
今回はそのFTST20−3をフルRAM用に一部を書き換えてファイル名をVFTST204にしました。
●ソースプログラムVFTST204.TXT
; BDOS TEST23 function22 random write with 00 record ;2012/3/4 3/7 4/16 4/17 ;4/30 ;10/8 ; ORG $0100 FCALL=$0005 NMBRTBL=$0300 FCB=$005C FCBR0=$007D FCBR1=$007E FCBR2=$007F DMA=$0080 ; LD C,16;make file LD DE,FCB CALL FCALL INC A;if FFH? JP Z,DFULERR ; XOR A LD (FCBR2),A LD HL,NMBRTBL PUSH HL LOOP:POP HL LD A,(HL) CP FF JP Z,CLOSE LD (FCBR0),A LD C,A XOR A LD (FCBR1),A INC HL PUSH HL ;data fill LD HL,DMA LD B,80 LOOP2:LD (HL),C INC HL DEC B JP NZ,LOOP2 ; LD C,28;random write with 00 LD DE,FCB CALL FCALL OR A JP Z,LOOP POP HL OR 30 PUSH AF LD DE,ERRT CALL MSGOUT POP AF LD E,A LD C,02 CALL FCALL RET ; CLOSE:LD C,10;close LD DE,FCB CALL FCALL INC A;if FFH? JP Z,CLOSERR LD DE,OK JP MSGOUT ; DFULERR:LD DE,DFULL JP MSGOUT CLOSERR:LD DE,CANTCLS MSGOUT:LD C,09 CALL FCALL RET ; DFULL:"disk" " ful" "l!" DB 0D DB 0A DB 24;$ CANTCLS:"can'" "t cl" "ose!" DB 0D DB 0A DB 24;$ OK:"done" DB 0D DB 0A DB 24;$ ERRT:"err " DB 24;$ ; |
ご覧の通りセクタbP842と1844の間にあるセクタbP843、1844はいずれも全データがE5Hになっています。
E5が書かれているということはこのセクタが一度も使われたことがないということを示しています。
これでVFTST204を実行する前のTEST.RAFの内容の確認ができました。
それではVFTST204を実行してみます。
●VFTST204の実行
VFTST204.COMをAドライブに保存すると、新しくつくるTEST.RAFのセーブエリアが、いままでのエリアとずれてしまい、せっかく上で確認したのと違うセクタbェ使われてしまいます。
そこでVFTST204.COMはBドライブに保存しました。
すでに作成されているTEST.RAFを一旦削除します。
その上で、VFTST204を実行しました。
その結果なのですが…。
念のためにディレクトリエリアを確認してみましたら。
あれ?
ファイルが作成されていません。
下の3つのTEST.RAFのFCBは先頭にE5が書かれていますから、これは削除されたファイルネームです。
むむ。
どうやらファンクションコール28Hにバグがあるようです。
本日は時間がなくなってしまいました。
いろいろ忙しいなかで、今回みつかったバグをつぶさなければなりません。
うまくバグ退治ができましたら、明日またご報告ができるのですけれど。
さて、どうなりますでしょうか。
ワンボードマイコンでCP/Mを![第229回]
2012.10.9upload
前へ
次へ
ホームページトップへ戻る