復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第216回]
●ファンクションコール22H(ランダムライト)
しばらくぶりの更新です。
このところいろいろやらねばならないことが重なってしまい、つい更新が後回しになってしまいました。
それといよいよ最後のランダムアクセス関係のファンクションコールがちょいとホネでありまして、仮RAMディスク版から仮想FDD版に移行する段階で、ランダムアクセス関係のプログラム部分には十分なデバッグができてなかったため、案の定トラブッてしまい予想外に時間を食ってしまったことも、更新が遅くなってしまった理由のひとつです。
ファンクションコール22H(ランダムライト)については、最初に[第102回]で説明をしました。
そこで作ったテストプログラムはFTST20です。
仮RAMディスク版としては、[第145回]で説明をしました。
いままでと同じ手順に従えば、[第145回]あたりをベースにして、フルRAM(及び仮想FDD)版についての説明を展開することになるのですけれど。
実は。
仮RAMディスク版は、容量の制約からモデル的に、ランダムアクセスファイルのレコードb本来16ビットのところを8ビットに落としてテストを行ないました。
今回の仮想FDDは2MBと十分過ぎる容量ですから、当然本来の16ビットのレコードbナテストをやりたいところです。
すると[第145回]はそのままでは使えません。
さてどうするか。
あらためてそのあたりを再読してみましたら、[第151回]でレコードb16ビットにしてテストをしておりました。
実は[第106回]が16ビットでのテストを行なった最初でした。
そこで作ったテストプログラムはFTST20−2です。
今回の説明とあわせて、[第106回]及び[第151回]、[第152回]あたりも再読していただくとより理解が進むことと思います。
今回はFTST20−2を64KBフルRAM用に一部を書き換えてファイル名をVFTST202にしました。
下はそのソースプログラムリストです。
●ソースプログラムVFTST202.TXT
; BDOS TEST20-2 function22 random write
;2012/3/4 3/7 4/16 4/17 4/27
;9/15
;
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,22;random write
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;$
;
|
logfile nd80zlog\09152117.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** can't open D.vfd >cm@0300 0300 49-a2 0301 27-01 0302 6D-b5 0303 20-03 0304 66-9e 0305 69-00 0306 6E-44 0307 65-00 0308 2E-b6 0309 54-03 030A 68-a7 030B 61-01 030C 6E-9f 030D 6B-00 030E 20-9a 030F 79-00 0310 6F-b3 0311 75-03 0312 2E-a5 0313 0D-01 0314 0A-98 0315 6E-00 0316 27-47 0317 22-00 0318 0D-42 0319 0A-00 031A 20-ff 031B 20-ff 031C 20- >cm@0300 0300 A2- 0301 01- 0302 B5- > |

