復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第231回]
●ファンクションコール28H(空きを00で埋めるランダムライト)その3
前回からの続きです。
2バイトのデータを書き込むはずなのに、どういうわけか下位バイトしか書き込まれていないのはなぜか?
いくらなんでもCP/M互換DOSがデータの中身にまで影響を与える、というのはおかしい。
さてはテストプログラムか?
ビンゴでありました。
毎々書いておりますように、このところいろいろ他にやっていることがありまして、もうあと一息のところで、CP/M互換DOSの検証作業が終わりません。
作業も細切れ状態で落ち着いてまとまって作業をする時間が取れなくて、思考が中断しがちです。
そんなこんなで、ファンクションコール28Hのテストプログラムについては、さして深く考えもせず、半ば機械的に[第110回]で作ったFTST20−3をもとにしてVFTST204を作ったのでありました([第229回])。
あらためてVFTST204ソースリストをよくよく調べてみて、やっとわかりました。
FTST20−3は8ビットのレコードbフランダムファイルを作成するプログラムだったのでした(上位8ビットはつねに0にしています)。
それをそのままフルRAM用に変更しただけだったために期待と反する結果になってしまったのでした。
落ち着いてよく考えてみましたら、FTST20−3などを持ち出したりしないで、[第216回]で作ったファンクションコール22H用のテストプログラムVFTST202をもとにして、ファンクションコール22Hの代わりにファンクションコール28Hをコールするように、そのところだけ22Hを28Hに変更するだけでよいということに気がつきました。
なんともおばかなことでありました。
あらためてそのようにして作ったVFTST205のソースプログラムリストてす。
●ソースプログラムVFTST205.TXT
; BDOS TEST205 function28 random write with 00
;2012/3/4 3/7 4/16 4/17 4/27
;9/15 10/11
;
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)
LD (FCBR0),A
LD C,A
INC HL
LD A,(HL)
CP FF
JP Z,CLOSE
LD (FCBR1),A
LD B,A
INC HL
PUSH HL
;data fill
LD HL,DMA
LD D,40
LOOP2:LD (HL),C
INC HL
LD (HL),B
INC HL
DEC D
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
;
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:"done"
DB 0D
DB 0A
DB 24;$
ERRT:"err "
DB 24;$
;
|
VFTST205を実行してみたところ、期待した通りの結果が得られました。
そのときの画像もお見せするつもりだったのですが、本日もまた時間がなくなってしまいました。
実行した結果につきましてはまた次回に整理してお見せすることにいたします。
ワンボードマイコンでCP/Mを![第231回]
2012.10.13upload
前へ
次へ
ホームページトップへ戻る