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