復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第114回]
●シーケンシャルファイルとランダムファイル
前回からの続きです。
シーケンシャルファイルのレコードを読んだあとでファンクションコール24Hを実行して、FCBのランダムアクセス用のエリアに、その次のレコードbェ作成されることを確認しました。
でもそれだけでは一体何をやっているのかよくわからないかもしれません。
そこで今回は、前回と同じようにシーケンシャルファイルを読み込んで、その途中でファンクションコール24Hを実行して、それから先はランダムレコードライトを行なうというようなテストプログラムを作るつもりでした。
しかしどうも気が乗らないのですよねえ。
そのような機能の使い道が今ひとつはっきり納得できないものですから、まるでカスのようなプログラムになってしまいます。
実はCP/Mの場合、シーケンシャルファイルとランダムファイルの区別が明確ではないのです。
はっきり言ってしまえば、ファイルを作成する過程でランダムにレコードを書くことができるのがランダムライトで、その結果作成されたファイルはランダムファイルになるのですけれど、それならシーケンシャルファイルはランダムアクセスできないかといいますと、それができてしまうのです。
しかもそれはファンクションコール24Hを使わなくても、できてしまいます。
むむむ。
そういう教科書通りではないことのほうが楽しいのですよねえ。
で。
予定を変更して、そういうプログラムを作って試してみました。
●テストプログラムFTST20−4
シーケンシャルファイルを読み込んで、ランダムライトをしてしまうプログラムです。
こちらがそのソースプログラムFTST20−4.TXTです。
; BDOS TEST20-4 function22 random write(sequential file open) ;2012/3/4 3/7 4/16 4/17 5/2 ; ORG $8100 FCALL=$8005 NMBRTBL=$8500 FCB=$805C FCBR0=$807D FCBR1=$807E FCBR2=$807F DMA=$8080 ; LD C,0F;file open LD DE,FCB CALL FCALL INC A;if FFH? JP Z,OPENERR ; XOR A LD (FCBR2),A LD HL,NMBRTBL PUSH HL LOOP:POP HL LD A,(HL) CP FF JP Z,CLOSE LD (FCBR0),A LD C,A XOR A LD (FCBR1),A INC HL PUSH HL ;data fill LD HL,DMA LD B,80 LOOP2:LD (HL),C INC HL DEC B 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 ; OPENERR:LD DE,CANTOPN JP MSGOUT CLOSERR:LD DE,CANTCLS MSGOUT:LD C,09 CALL FCALL RET ; CANTOPN:"can'" "t op" "en!" 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;$ ; |
2012/5/2 11:9 ftst20-4.txt END=8197 ; BDOS TEST20-4 function22 random write(sequential file open) ;2012/3/4 3/7 4/16 4/17 5/2 ; ORG $8100 FCALL=$8005 NMBRTBL=$8500 FCB=$805C FCBR0=$807D FCBR1=$807E FCBR2=$807F DMA=$8080 ; 8100 0E0F LD C,0F;file open 8102 115C80 LD DE,FCB 8105 CD0580 CALL FCALL 8108 3C INC A;if FFH? 8109 CA6081 JP Z,OPENERR ; 810C AF XOR A 810D 327F80 LD (FCBR2),A 8110 210085 LD HL,NMBRTBL 8113 E5 PUSH HL 8114 E1 LOOP:POP HL 8115 7E LD A,(HL) 8116 FEFF CP FF 8118 CA4E81 JP Z,CLOSE 811B 327D80 LD (FCBR0),A 811E 4F LD C,A 811F AF XOR A 8120 327E80 LD (FCBR1),A 8123 23 INC HL 8124 E5 PUSH HL ;data fill 8125 218080 LD HL,DMA 8128 0680 LD B,80 812A 71 LOOP2:LD (HL),C 812B 23 INC HL 812C 05 DEC B 812D C22A81 JP NZ,LOOP2 ; 8130 0E22 LD C,22;random write 8132 115C80 LD DE,FCB 8135 CD0580 CALL FCALL 8138 B7 OR A 8139 CA1481 JP Z,LOOP 813C E1 POP HL 813D F630 OR 30 813F F5 PUSH AF 8140 119381 LD DE,ERRT 8143 CD6981 CALL MSGOUT 8146 F1 POP AF 8147 5F LD E,A 8148 0E02 LD C,02 814A CD0580 CALL FCALL 814D C9 RET ; 814E 0E10 CLOSE:LD C,10;close 8150 115C80 LD DE,FCB 8153 CD0580 CALL FCALL 8156 3C INC A;if FFH? 8157 CA6681 JP Z,CLOSERR 815A 118C81 LD DE,OK 815D C36981 JP MSGOUT ; 8160 116F81 OPENERR:LD DE,CANTOPN 8163 C36981 JP MSGOUT 8166 117D81 CLOSERR:LD DE,CANTCLS 8169 0E09 MSGOUT:LD C,09 816B CD0580 CALL FCALL 816E C9 RET ; 816F 63616E27 CANTOPN:"can'" 8173 74206F70 "t op" 8177 656E21 "en!" 817A 0D DB 0D 817B 0A DB 0A 817C 24 DB 24;$ 817D 63616E27 CANTCLS:"can'" 8181 7420636C "t cl" 8185 6F736521 "ose!" 8189 0D DB 0D 818A 0A DB 0A 818B 24 DB 24;$ 818C 646F6E65 OK:"done" 8190 0D DB 0D 8191 0A DB 0A 8192 24 DB 24;$ 8193 65727220 ERRT:"err " 8197 24 DB 24;$ ; CANTCLS =817D CANTOPN =816F CLOSE =814E CLOSERR =8166 DMA =8080 ERRT =8193 FCALL =8005 FCB =805C FCBR0 =807D FCBR1 =807E FCBR2 =807F LOOP =8114 LOOP2 =812A MSGOUT =8169 NMBRTBL =8500 OK =818C OPENERR =8160 |
logfile nd80zlog\05021109.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >cm 8500 8500 FC-15 8501 CF-1F 8502 BD-13 8503 E7-10 8504 D7-07 8505 3B-03 8506 A7-ff 8507 DF- >dm 8d00,8dff 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 ................ >cm 8d80 8D80 03-ff 8D81 03-ff 8D82 03-ff 8D83 03-ff 8D84 03- >dm 8d80,8dff 8D80 FF FF FF FF 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 ................ >cm 8f80 8F80 07-ff 8F81 07-ff 8F82 07-ff 8F83 07-ff 8F84 07- >dm 8f80,8fff 8F80 FF FF FF FF 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 ................ > |
>/ld ftst20-4.bin,8100 loading FTST20-4.BIN ...0098(152)bytes loaded,from 8100 to 8197 >jp d233 a>dir A: FTST23 COM : TEST SAF : FTST24 COM : FTST24-2 COM a>save 1 ftst20-4.com a>ftst20-4 test.saf done a>^D end of CP/M > |
>dm 8800,88ff 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 20 .TEST SAF... 8830 02 03 04 05 0B 09 00 0A-00 00 00 00 00 00 00 00 ................ 8840 00 46 54 53 54 32 34 20-20 43 4F 4D 00 00 00 02 .FTST24 COM.... 8850 06 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 00 46 54 53 54 32 34 2D-32 43 4F 4D 00 00 00 02 .FTST24-2COM.... 8870 07 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8880 00 46 54 53 54 32 30 2D-34 43 4F 4D 00 00 00 02 .FTST20-4COM.... 8890 08 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 88A0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88B0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88C0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88D0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88E0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88F0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ > |
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 ................ 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 ................ 9A80 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9A90 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AA0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AB0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AC0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AD0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AE0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9AF0 15 15 15 15 15 15 15 15-15 15 15 15 15 15 15 15 ................ 9D80 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9D90 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DA0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DB0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DC0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DD0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DE0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9DF0 1F 1F 1F 1F 1F 1F 1F 1F-1F 1F 1F 1F 1F 1F 1F 1F ................ 9E00 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E10 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E20 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E30 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E40 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E50 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E60 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9E70 10 10 10 10 10 10 10 10-10 10 10 10 10 10 10 10 ................ 9F80 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9F90 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FA0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FB0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FC0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FD0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FE0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ 9FF0 13 13 13 13 13 13 13 13-13 13 13 13 13 13 13 13 ................ >0000 00C3 - リモート接続を終了しました logfile closed at Wed May 02 11:17:03 2012 |