復活!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
前へ
次へ
ホームページトップへ戻る