復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第111回]
●ファンクションコール24H(ランダムレコードアクセスポインタの更新)
ファンクションコール24Hは「応用CP/M」(村瀬康治著。アスキー出版局)では、「ランダムレコードのセット」と書かれています。
解説を読めば、そういうことかとわかるのですが「ランダムレコードのセット」では、ちょっとわかりにくいと思いましたので、表題のようにいたしました。
インターネットのCP/Mサイト(http://www.seasip.demon.co.uk/Cpm/index.html)のファンクションコール36(24H)の説明ページ(http://www.seasip.demon.co.uk/Cpm/bdos.html#36)での説明文
Set the random record count bytes of the FCB to the number of the last record read/written by the sequential I/O calls.
の直訳です。
どういうことかといいますと。
シーケンシャルファイルをread/writeしていて、その途中でこのファンクションをコールすると、最後にシーケンシャルアクセスしたレコードの次のレコードbェFCBのランダムアクセスb管理している3バイトのエリアに書き込まれます。
その3バイトのエリアはこれまで説明をしてきましたファンクションコール21H(ランダムリード)、ファンクションコール22H(ランダムライト)などでコール前にレコードb入れていたFCBのアドレスです。
今までの説明ではFCBR0〜FCBR2(807DH〜807FH)というラベル名で説明をしてきました。
そこに最後にアクセスした次のレコードbェ入りますから、そこでファンクションコール21H(ランダムリード)やファンクションコール22H(ランダムライト)を実行することで、その次のレコードからランダムアクセスすることができる、という機能です。
しかし、なんだかよくわからない機能です。
なんでこんな機能があるのか、どこでこんなものを使うのか、ちょいと疑問に感じます。
ま。でも。
こういう機能が用意されているということは、おそらくその必要があったからでありましょう。
上記の「応用CP/M」(村瀬康治著。アスキー出版局)では、かなりページを割いて、サンプルプログラム「ランダムアクセスによる検索プログラム」を例にあげて、解説を行なっています。
ううむ。
そういう使い方か…。
どうも余りしっくりしないのでありますが、まあ、そんなようなものかと…。
ともかく。
何に使えるのかということはさて置いて、そのように機能することが確認できればそれでよし、ということでありますから。
確認をしてみることにいたしました。
●シーケンシャルファイルの作成プログラム
そのためには、まずはシーケンシャルファイルが必要になります。
シーケンシャルファイルの作成については、[第51回]でファンクションコール15H(シーケンシャルライト)を使ったテストプログラムを作成しました。
しかし今回のテストにはちょっと不向きなところがありますから、今回のテスト用にあらためて作成することにしました。
こちらがシーケンシャルファイル作成プログラムFTST23のソースリスト(FTST23.TXT)です。
; BDOS TEST23 sequential file make ;ftom ftst5cpy.txt ;2012/3/4 3/7 ;2012/4/30 ; ORG $8100 FCALL=$8005 FCB=$805C RECNO=$807C DMA=$8080 ; LD C,16;make file LD DE,FCB CALL FCALL INC A;if FFH? JP Z,DFULERR ; XOR A LD (RECNO),A LD B,00 ; LOOP:LD C,80 LD HL,DMA LOOP1:LD (HL),B INC HL DEC C JP NZ,LOOP1 PUSH BC LD C,15;write LD DE,FCB CALL FCALL INC A;if FFH? POP BC JP Z,DFULERR INC B LD A,B CP 10 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;$ ; |
2012/4/30 11:19 ftst23.txt END=8175 ; BDOS TEST23 sequential file make ;ftom ftst5cpy.txt ;2012/3/4 3/7 ;2012/4/30 ; ORG $8100 FCALL=$8005 FCB=$805C RECNO=$807C DMA=$8080 ; 8100 0E16 LD C,16;make file 8102 115C80 LD DE,FCB 8105 CD0580 CALL FCALL 8108 3C INC A;if FFH? 8109 CA4481 JP Z,DFULERR ; 810C AF XOR A 810D 327C80 LD (RECNO),A 8110 0600 LD B,00 ; 8112 0E80 LOOP:LD C,80 8114 218080 LD HL,DMA 8117 70 LOOP1:LD (HL),B 8118 23 INC HL 8119 0D DEC C 811A C21781 JP NZ,LOOP1 811D C5 PUSH BC 811E 0E15 LD C,15;write 8120 115C80 LD DE,FCB 8123 CD0580 CALL FCALL 8126 3C INC A;if FFH? 8127 C1 POP BC 8128 CA4481 JP Z,DFULERR 812B 04 INC B 812C 78 LD A,B 812D FE10 CP 10 812F C21281 JP NZ,LOOP ; 8132 0E10 CLOSE:LD C,10;close 8134 115C80 LD DE,FCB 8137 CD0580 CALL FCALL 813A 3C INC A;if FFH? 813B CA4A81 JP Z,CLOSERR 813E 116F81 LD DE,OK 8141 C34D81 JP MSGOUT ; 8144 115381 DFULERR:LD DE,DFULL 8147 C34D81 JP MSGOUT 814A 116081 CLOSERR:LD DE,CANTCLS 814D 0E09 MSGOUT:LD C,09 814F CD0580 CALL FCALL 8152 C9 RET ; 8153 6469736B DFULL:"disk" 8157 2066756C " ful" 815B 6C21 "l!" 815D 0D DB 0D 815E 0A DB 0A 815F 24 DB 24;$ 8160 63616E27 CANTCLS:"can'" 8164 7420636C "t cl" 8168 6F736521 "ose!" 816C 0D DB 0D 816D 0A DB 0A 816E 24 DB 24;$ 816F 646F6E65 OK:"done" 8173 0D DB 0D 8174 0A DB 0A 8175 24 DB 24;$ ; CANTCLS =8160 CLOSE =8132 CLOSERR =814A DFULERR =8144 DFULL =8153 DMA =8080 FCALL =8005 FCB =805C LOOP =8112 LOOP1 =8117 MSGOUT =814D OK =816F RECNO =807C |
logfile nd80zlog\04301119.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld fille5.bin,8100 loading FILLE5.BIN ...0010(16)bytes loaded,from 8100 to 810F >jp 8100 >/ld ftst23.bin,8100 loading FTST23.BIN ...0076(118)bytes loaded,from 8100 to 8175 >jp d233 a>save 1 ftst23.com a>dir A: FTST23 COM a>ftst23 test.saf done a>dir A: FTST23 COM : TEST SAF a>^D end of CP/M > |
>dm 8800,887f 8800 00 46 54 53 54 32 33 20-20 43 4F 4D 00 00 00 02 .FTST23 COM.... 8810 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 54 45 53 54 20 20 20-20 53 41 46 00 00 00 10 .TEST SAF.... 8830 02 03 04 05 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8850 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8860 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8870 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ >dm 8c00,94ff 8C00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8C80 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8C90 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CA0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CB0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CC0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CD0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CE0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8CF0 01 01 01 01 01 01 01 01-01 01 01 01 01 01 01 01 ................ 8D00 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D10 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D20 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D30 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D40 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D50 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D60 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D70 02 02 02 02 02 02 02 02-02 02 02 02 02 02 02 02 ................ 8D80 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8D90 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DA0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DB0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DC0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DD0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DE0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8DF0 03 03 03 03 03 03 03 03-03 03 03 03 03 03 03 03 ................ 8E00 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E10 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E20 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E30 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E40 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E50 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E60 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E70 04 04 04 04 04 04 04 04-04 04 04 04 04 04 04 04 ................ 8E80 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8E90 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8EA0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8EB0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8EC0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8ED0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8EE0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8EF0 05 05 05 05 05 05 05 05-05 05 05 05 05 05 05 05 ................ 8F00 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F10 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F20 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F30 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F40 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F50 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F60 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F70 06 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ................ 8F80 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8F90 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FA0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FB0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FC0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FD0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FE0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 8FF0 07 07 07 07 07 07 07 07-07 07 07 07 07 07 07 07 ................ 9000 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9010 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9020 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9030 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9040 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9050 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9060 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9070 08 08 08 08 08 08 08 08-08 08 08 08 08 08 08 08 ................ 9080 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 9090 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90A0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90B0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90C0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90D0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90E0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 90F0 09 09 09 09 09 09 09 09-09 09 09 09 09 09 09 09 ................ 9100 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9110 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9120 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9130 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9140 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9150 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9160 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9170 0A 0A 0A 0A 0A 0A 0A 0A-0A 0A 0A 0A 0A 0A 0A 0A ................ 9180 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 9190 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91A0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91B0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91C0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91D0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91E0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 91F0 0B 0B 0B 0B 0B 0B 0B 0B-0B 0B 0B 0B 0B 0B 0B 0B ................ 9200 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9210 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9220 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9230 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9240 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9250 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9260 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9270 0C 0C 0C 0C 0C 0C 0C 0C-0C 0C 0C 0C 0C 0C 0C 0C ................ 9280 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 9290 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92A0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92B0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92C0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92D0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92E0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 92F0 0D 0D 0D 0D 0D 0D 0D 0D-0D 0D 0D 0D 0D 0D 0D 0D ................ 9300 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9310 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9320 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9330 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9340 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9350 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9360 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9370 0E 0E 0E 0E 0E 0E 0E 0E-0E 0E 0E 0E 0E 0E 0E 0E ................ 9380 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 9390 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93A0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93B0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93C0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93D0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93E0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 93F0 0F 0F 0F 0F 0F 0F 0F 0F-0F 0F 0F 0F 0F 0F 0F 0F ................ 9400 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9410 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9420 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9430 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9440 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9450 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9460 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9470 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9480 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 9490 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94A0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94B0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94C0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94D0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94E0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 94F0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ >0000 00C3 - リモート接続を終了しました logfile closed at Mon Apr 30 11:21:42 2012 |