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