復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第106回]
●大きなランダムファイルを作る
前回の検討によって、複数のFCBエリアが作成されるような大きなランダムファイルを作成するためには、1ブロックのセクタ数を現行の4セクタから8セクタにしなければだめらしい、ということがわかりました。
しかし現行の仮RAMディスクはもともと12KBしかないところを、さらにAドライブとBドライブに分割しましたから、ドライブの容量はわずか6KBしかありません。
1ブロックが8セクタということは、1セクタが128バイトですから、1ブロックは1KBになります。
ですから、AドライブにもBドライブにも、それぞれ6ブロックしか割り当てることができません。
いくらなんでもそれではテストにならないだろう。
とてもムリ、と思ったのですが。
まてまて。
ここは一番、よーく考えて…。
それで。
よーく考えてみましたら。
いけるじゃないの。
かなりムリムリではありますが、まるで映画のセットみたいなものです。
そこのところだけに注目してテストをするだけならば、ホンモノのようになんとかできそうです。
●テストプログラムの変更
今までのテストではあらかじめ用意したレコードcfータは1バイトの数でした。
しかし今回はもう少し大きい数でテストをしますから、本来と同じ2バイトの数を用意します。
そういうことになりますと、テストプログラムを直さなければなりません。
下は1バイトのレコードb入力していたところを2バイトに変更したテストプログラム(FTST20−2.TXT)のソースリストです。
; BDOS TEST20-2 function22 random write ;2012/3/4 3/7 4/16 4/17 4/27 ; ORG $8100 FCALL=$8005 NMBRTBL=$8300 FCB=$805C FCBR0=$807D FCBR1=$807E FCBR2=$807F DMA=$8080 ; 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;$ ; |
2012/4/27 12:26 ftst20-2.txt END=81A8 ; BDOS TEST20-2 function22 random write ;2012/3/4 3/7 4/16 4/17 4/27 ; ORG $8100 FCALL=$8005 NMBRTBL=$8300 FCB=$805C FCBR0=$807D FCBR1=$807E FCBR2=$807F 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 CA6481 JP Z,DFULERR ; 810C AF XOR A 810D 327F80 LD (FCBR2),A 8110 210083 LD HL,NMBRTBL 8113 E5 PUSH HL 8114 E1 LOOP:POP HL 8115 7E LD A,(HL) 8116 327D80 LD (FCBR0),A 8119 4F LD C,A 811A 23 INC HL 811B 7E LD A,(HL) 811C FEFF CP FF 811E CA5281 JP Z,CLOSE 8121 327E80 LD (FCBR1),A 8124 47 LD B,A 8125 23 INC HL 8126 E5 PUSH HL ;data fill 8127 218080 LD HL,DMA 812A 1640 LD D,40 812C 71 LOOP2:LD (HL),C 812D 23 INC HL 812E 70 LD (HL),B 812F 23 INC HL 8130 15 DEC D 8131 C22C81 JP NZ,LOOP2 ; 8134 0E22 LD C,22;random write 8136 115C80 LD DE,FCB 8139 CD0580 CALL FCALL 813C B7 OR A 813D CA1481 JP Z,LOOP 8140 E1 POP HL 8141 F630 OR 30 8143 F5 PUSH AF 8144 11A481 LD DE,ERRT 8147 CD6D81 CALL MSGOUT 814A F1 POP AF 814B 5F LD E,A 814C 0E02 LD C,02 814E CD0580 CALL FCALL 8151 C9 RET ; 8152 0E10 CLOSE:LD C,10;close 8154 115C80 LD DE,FCB 8157 CD0580 CALL FCALL 815A 3C INC A;if FFH? 815B CA6A81 JP Z,CLOSERR 815E 119D81 LD DE,OK 8161 C36D81 JP MSGOUT ; 8164 118181 DFULERR:LD DE,DFULL 8167 C36D81 JP MSGOUT 816A 118E81 CLOSERR:LD DE,CANTCLS 816D 0E09 MSGOUT:LD C,09 816F CD0580 CALL FCALL 8172 C9 RET ; 8173 63616E27 CANTOPN:"can'" 8177 74206F70 "t op" 817B 656E21 "en!" 817E 0D DB 0D 817F 0A DB 0A 8180 24 DB 24;$ 8181 6469736B DFULL:"disk" 8185 2066756C " ful" 8189 6C21 "l!" 818B 0D DB 0D 818C 0A DB 0A 818D 24 DB 24;$ 818E 63616E27 CANTCLS:"can'" 8192 7420636C "t cl" 8196 6F736521 "ose!" 819A 0D DB 0D 819B 0A DB 0A 819C 24 DB 24;$ 819D 646F6E65 OK:"done" 81A1 0D DB 0D 81A2 0A DB 0A 81A3 24 DB 24;$ 81A4 65727220 ERRT:"err " 81A8 24 DB 24;$ ; CANTCLS =818E CANTOPN =8173 CLOSE =8152 CLOSERR =816A DFULERR =8164 DFULL =8181 DMA =8080 ERRT =81A4 FCALL =8005 FCB =805C FCBR0 =807D FCBR1 =807E FCBR2 =807F LOOP =8114 LOOP2 =812C MSGOUT =816D NMBRTBL =8300 OK =819D |
logfile nd80zlog\04271227.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >cm 8300 8300 26-a2 8301 0F-01 8302 22-b5 8303 27-03 8304 29-9e 8305 0E-00 8306 11-44 8307 12-00 8308 16-b6 8309 03-03 830A 0D-a7 830B 3F-01 830C 40-9f 830D FF-00 830E CA-9a 830F FF-00 8310 80-b3 8311 10-03 8312 21-a5 8313 00-01 8314 90-98 8315 02-00 8316 01-47 8317 14-00 8318 2B-42 8319 00-00 831A 39-ff 831B 50-ff 831C 08- >dm 8300,831f 8300 A2 01 B5 03 9E 00 44 00-B6 03 A7 01 9F 00 9A 00 「.オ...D.カ.ァ...D. 8310 B3 03 A5 01 98 00 47 00-42 00 FF FF 08 01 01 10 ウ.・...B...9P.... > |
; D259 1000 DPTOP:DEFW 16 ;sectors per track from bios. D25B 02 DEFB 2 ;block shift.sector in a block 128*2^n D25C 03 DEFB 3 ;block mask.sector no. in a block - 1 D25D 00 DEFB 0 ;extent mask. D25E 0B00 DEFW 11 ;disk size (number of blocks-1). D260 0F00 DEFW 15 ;directory size.(max file name no.-1) D262 8000 DEFW 80H ;storage for first bytes of bit map (dir space used). D264 0000 DEFW 0 D266 0000 DEFW 0 ;offset. first usable track number. ; |
>cm d25b D25B 02-03 D25C 03-07 D25D 00- D25E 0B-05 D25F 00- D260 0F-1f D261 00- D262 80- > |