復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第54回]
●FILLFFプログラム
前回からの続きです。
COPYプログラムによって新規に作成されたファイルがDIRコマンドで表示されなかったのは、FCBのディレクトリ拡張bェ00になっていなかったためであることがわかりました。
COPYプログラムを直さなければならないのですが、それには、FCBのディレクトリ拡張bノプログラムで00を書き込むようにする、というのが最も安直な方法です。
しかし、もしもCP/MシステムによってCP/MシステムのFCBエリア(805CH〜807FH。本来は005CH〜007FH)にファイル名がインプットされるときに、このディレクトリ拡張bノも00がセットされるようになっているのでしたら、806CH〜の12バイトだけをFCBWK(803BH〜)にコピーするようにしていたところを、その後のデータ(8078H〜)も含めてコピーすればよいので、それをわざわざ後から00を書き込むというのは、いかにもみっともないプログラムだと思います。
いずれの方法にするのかを決めるためには、まず本当にそうなのか(CP/Mシステムによって8078H〜が00でクリアされるのか)、そうではないのかを確認する必要があります。
実はその確認作業はすでに[第44回]でやっております。
何もしないですぐにリターンするプログラム(test.com)を作って、それでパラメータをつけて実行したらどうなるかを確認しました。
そのときのメモリダンプリストを見ますと、ファイル名(および拡張子)の後の数バイトは00になっています。
しかしそれだけでは、ファイル名が書き込まれるときに同時に00が書き込まれたのか、もとから00であったのかは、はっきりしません。
そこで、もう一度[第44回]と同じテストをすることにしますが、ただし今回はtest.comを実行するよりも前に、FCBエリア(805CH〜807FH。本来は005CH〜007FH)にFFを書き込んでおくことにします。
ZB3BASICのCMコマンドで1バイトずつFFを書き込んでいってもよいのですけれど、[第48回]で作りましたFILL00プログラムをちょいと直せばできてしまいますから、そのようにしてみました。
FILLFFプログラムのソースリストです。
; FILL FF 805c-807c ; ORG $8100 FCB=$805C ; REENT=$1033 ; LD HL,FCB LD B,24 LD C,FF LOOP:LD (HL),C INC HL DEC B JP NZ,LOOP RET ; |
2012/3/7 9:40 fillff.txt END=810D ; FILL FF 805c-807c ; ORG $8100 FCB=$805C ; REENT=$1033 ; 8100 215C80 LD HL,FCB 8103 0624 LD B,24 8105 0EFF LD C,FF 8107 71 LOOP:LD (HL),C 8108 23 INC HL 8109 05 DEC B 810A C20781 JP NZ,LOOP 810D C9 RET ; FCB =805C LOOP =8107 REENT =1033 |
logfile nd80zlog\03070940.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld fillff.bin,8100 loading FILLFF.BIN ...000e(14)bytes loaded,from 8100 to 810D >jp d233 a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : a>save 1 fillff.com a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM a>fillff a> |
a>^D>a>^D> ERR:23 >dm 8000,80ff 8000 C3 62 D2 00 00 C3 06 C4-03 6A 45 68 42 88 51 E6 テbメ..テ.ト.jEhB.Q. 8010 FC DF 41 00 45 53 54 34-00 00 04 00 F8 DF 44 00 .゚A.EST4.....゚D. 8020 45 53 54 34 00 00 04 00-FC 32 A0 10 3F 3D 54 F2 EST4.....2.?=T. 8030 EF 86 20 08 3F 8F 15 BA-DA EC AF 00 54 45 53 54 .. .?..コレ.ッ.TEST 8040 44 41 54 41 54 58 54 B8-00 00 06 0D 0E 00 00 00 DATATXTク........ 8050 00 00 00 00 00 00 00 00-00 00 00 06 FF FF FF FF ................ 8060 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ................ 8070 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ................ 8080 00 00 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8090 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80A0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80B0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80C0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80D0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80E0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80F0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ > |
>jp d233 a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM a>test name1.txt name2.txt a> |
a>^D>a>^D> ERR:23 >dm 8000,80ff 8000 C3 62 D2 00 00 C3 06 C4-03 6A 45 68 42 88 51 E6 テbメ..テ.ト.jEhB.Q. 8010 FC DF 41 00 45 53 54 34-00 00 04 00 F8 DF 44 00 .゚A.EST4.....゚D. 8020 45 53 54 34 00 00 04 00-FC 32 A0 10 3F 3D 54 F2 EST4.....2.?=T. 8030 EF 86 20 08 3F 8F 15 BA-DA EC AF 00 54 45 53 54 .. .?..コレ.ッ.TEST 8040 44 41 54 41 54 58 54 B8-00 00 06 0D 0E 00 00 00 DATATXTク........ 8050 00 00 00 00 00 00 00 00-00 00 00 06 00 4E 41 4D .............NAM 8060 45 31 20 20 20 54 58 54-00 00 00 02 00 4E 41 4D E1 TXT.....NAM 8070 45 32 20 20 20 54 58 54-00 00 00 00 00 FF FF FF E2 TXT........ 8080 14 20 4E 41 4D 45 31 2E-54 58 54 20 4E 41 4D 45 . NAME1.TXT NAME 8090 32 2E 54 58 54 00 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 2.TXT........... 80A0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80B0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80C0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80D0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80E0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 80F0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ >0000 00C3 - リモート接続を終了しました logfile closed at Wed Mar 07 09:50:47 2012 |
; BDOS TEST5 COPY ;2012/3/4 3/7 ; ORG $8100 FCALL=$8005 FCBWK=$803B RECNO2=$805B FCB=$805C FCB2=$806C RECNO=$807C DMA=$8080 ; LD HL,FCB2 LD DE,FCBWK LD B,11;=17 LOOP1:LD A,(HL) LD (DE),A INC HL INC DE DEC B JP NZ,LOOP1 ; LD C,0F;open LD DE,FCB CALL FCALL INC A;if FFH? JP Z,NOFILERR ; LD C,13;delete LD DE,FCBWK CALL FCALL ; LD C,16;make file LD DE,FCBWK CALL FCALL INC A;if FFH? JP Z,DFULERR ; XOR A LD (RECNO),A LD (RECNO2),A ; LOOP2: LD C,14;read LD DE,FCB CALL FCALL OR A JP NZ,CLOSE;read end LD C,15;write LD DE,FCBWK CALL FCALL INC A;if FFH? JP Z,DFULERR JP LOOP2 ; CLOSE:LD C,10;close LD DE,FCBWK CALL FCALL INC A;if FFH? JP Z,CLOSERR LD DE,OK JP MSGOUT ; NOFILERR:LD DE,CANTOPN 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:"copy" " don" "e" DB 0D DB 0A DB 24;$ ; |
logfile nd80zlog\03071119.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst5cpy.bin,8100 loading FTST5CPY.BIN ...00af(175)bytes loaded,from 8100 to 81AE >jp d233 a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM a>save 1 copy.com a>copy ftest4-1.txt testdat2.txt copy done a>dir A: FILLE5 COM : FTEST1 COM : FTEST2 COM : DM COM A: TEST COM : FTEST4 COM : FTEST4-1 TXT : FTEST4-2 COM A: FTEST4-3 COM : COPY COM : TESTDATA TXT : FILLFF COM A: TESTDAT2 TXT a> |