復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第233回]
●ファンクションコール24H(ランダムレコードアクセスポインタの更新)
ファンクションコール24Hについては[第111回]で説明をしています。
ちょっとどう使うのかよくわからないファンクションです。
そのテストについては、[第111回]〜[第113回]で行なっています。
仮RAMディスクを使ったCP/M互換DOS上でのテストについては[第149回]で説明をしていますが、[第111回]〜[第113回]と同じことをやっているだけのようです。
とはいえかなり時間がたってしまって、もうすっかり忘れてしまいましたから、あらためて[第111回]〜[第113回]を読み直してみました。
しかし、まあ、やっぱりなんだかなあ、という感じのファンクションコールです。
とにかくはテストしないことには終わりませんから、あまり深くは考えないことにして、[第149回]と同様、[第111回]〜[第113回]と同じことをしてみます。
[第111回]ではFTST23.COMを使ってシーケンシャルファイルTEST.SAFを作成しています。
[第112回]ではFTST24.COMを使って、TEST.SAFの内容を読み出しています。
[第113回]ではFTST24.COMにファンクションコール24Hを追加したFTST25.COMを作って、実行しています。
今回も余り時間がありませんから、まずはシーケンシャルファイルTEST.SAFを作成するところまでをやってみることにします。
FTST23をフルRAM用に一部を書き換えてファイル名をVFTST23にしました。
●ソースプログラムVFTST23
; BDOS VFTST23 sequential file make
;ftom ftst5cpy.txt
;2012/3/4 3/7
;2012/4/30
;10/17
;
ORG $0100
FCALL=$0005
FCB=$005C
RECNO=$007C
DMA=$0080
;
LD C,16;make file
LD DE,FCB
CALL FCALL
INC A;if FFH?
JP Z,DFULERR
;
XOR A
LD (RECNO),A
LD BC,$0000
;
LOOP:LD E,40
LD HL,DMA
LOOP1:LD (HL),C
INC HL
LD (HL),B
INC HL
DEC E
JP NZ,LOOP1
PUSH BC
PUSH DE
LD C,15;write
LD DE,FCB
CALL FCALL
INC A;if FFH?
POP DE
POP BC
JP Z,DFULERR
INC BC
LD A,B
CP 02
JP NZ,LOOP
;
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
;
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;$
;
|



