2012.10.13
前へ
次へ
ホームページトップへ戻る

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

前へ
次へ
ホームページトップへ戻る