2012.9.11
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第213回]


●ファンクションコール17H(ファイル名の変更)

ファンクションコール17Hは[第93回]でテストしました。
そこで作成したテストプログラムはFTST14です。
ファンクションコール17HはビルトインコマンドのREN(リネーム)とほぼ同じ働きをします。
ただ、[第93回]に書きましたようにコピー先のファイル名と同じファイルがすでに存在していてもエラーにならずに同じファイル名にしてしまいます。
ファンクションコール17Hを使う場合には、その点に注意する必要があります。

[第144回]ではRAMディスク版での動作テストをしています。
今回はFTST14を64KBフルRAM用に一部を書き換えてファイル名をVFTST14にしました。
下はそのソースプログラムリストです。

●ソースプログラムVFTST14.TXT

; BDOS TEST14 function17 (rename )
;2012/4/10 9/11
;
        ORG $0100
        FCALL=$0005
        FCB=$005C
;
        LD C,17
        LD DE,FCB
        CALL FCALL
        PUSH AF
        CALL B2HEXDP
        POP AF
        INC A
        RET NZ
;err
        LD DE,ERRMSG
        LD C,09
        CALL FCALL
        RET
;
;CL & LF
CRLF:LD A,0D
        CALL ADP
        LD A,0A
        JP ADP
;space disp
SPDP:LD A,20
;A disp
ADP:PUSH BC
        PUSH HL
        LD E,A
        LD C,02
        CALL FCALL
        POP HL
        POP BC
        RET
;
;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE
B2HEX4:LD A,H
        CALL B2HEX2
        EX DE,HL
        LD A,E
;binary to hex, 1byte data to ascii 2charactors,A to DE
B2HEX2:PUSH AF
        RRCA
        RRCA
        RRCA
        RRCA
        CALL B2HEX1
        LD D,A
        POP AF
        CALL B2HEX1
        LD E,A
        RET
;binary to hex, low 4bit to ascii 1charactor
B2HEX1:AND 0F
        ADD A,30
        CP 3A
        RET C;0-9
        ADD A,07;A-F
        RET
;hex to binary, ascii 1charactor to low 4bit 
HTOB1:CP 30;>="0"?
        RET C;no
        CP 3A;<="9"?
        JP C,HTOB1_2;yes,"0" to "9"
        CP 41;>="A" ?
        RET C;no
        CP 47;<="F"?
        JP C,HTOB1_1
        CP 61;>="a"?
        RET C;no
        CP 67;<="f"?
        CCF
        RET C;no
HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F
HTOB1_2:AND 0F
        RET
;HL(bynary 2bytes) to asckii 4bytes & disp
HEX4DP:PUSH BC
        PUSH HL
        CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes
        PUSH DE
        EX DE,HL
        CALL DEDP
        POP DE
        CALL DEDP
        POP HL
        POP BC
        RET
;A(binary) to asckii 2bytes HEX & disp
B2HEXDP:PUSH BC
        PUSH HL
        CALL B2HEX2
        CALL DEDP
        POP HL
        POP BC
        RET
;
;DE(asckii 2bytes) disp
DEDP:PUSH DE
        LD E,D
        LD C,02
        CALL FCALL
        POP DE
        LD C,02
        CALL FCALL
        RET
;
ERRMSG:"err"
        DB 24;$
;

●VFTST14の実行

[第144回]と全く同じテストをVFTST14を使って行ないました。
[第144回]では途中で何回かDIRコマンドを使ってディレクトリ表示を行なっていますが、今回はセーブされているファイル名が多くて、毎回DIRを実行すると表示がやたら長くなってしまうため、途中のDIRコマンドは省略することにしました。
そのほかは[第144回]と全く同じです。

[第144回]と同じくログファイルでお見せします。

logfile nd80zlog\09112150.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
can't open D.vfd
>jp d233

A>copy z:vftst14.bin

A>save 1 rentst.bin

A>vftst14 rentst.bin renam.com
00
A>vftst14 abc.xyz xxx.yyy
FFerr
A>save 1 renam2.com

A>vftst14 renam.com renam2.com
00
A>dir
A: F80      COM : HELL1    FOR : HELL1    REL : HELLO    FOR
A: HELLO    REL : HELL2    FOR : HELL2    REL : HELL3    FOR
A: HELL3    REL : M80      COM : MVFTST1  MAC : MVFTST1  REL
A: MVFTST1B MAC : MVFTST1B PRN : MVFTST1B REL : MVFTST1C MAC
A: MVFTST1C PRN : MVFTST1C REL : L80      COM : MVFTST1C COM
A: VFTST1   COM : FORLIB   REL : HELLO    COM : MVFTST1D MAC
A: MVFTST1D PRN : MVFTST1D REL : MVFTST1D COM : MVFTST1E MAC
A: MVFTST1E PRN : MVFTST1E REL : MVFTST1E COM : MVFTST1F MAC
A: MVFTST1F PRN : MVFTST1F REL : MVFTST1F COM : MVFTST1G MAC
A: MVFTST1G PRN : MVFTST1G REL : MVFTST1G COM : VFTST9   COM
A: VFTST2   COM : VFTST4   COM : VFTST5   COM : VFTST4-1 TXT
A: VFTST16  COM : TESTDATA TXT : VFTST14  COM : VFTST6   COM
A: VFTST7   COM : VFTST8   COM : VFTST10  COM : FNC0BT-2 COM
A: FNC06T-2 COM : FNC03T-2 COM : VFTST102 COM : VFTST105 COM
A: VFTST11  COM : VFTST12  COM : VFTST13  COM : VFTST18  COM
A: VFTST19  COM : VFTST15  COM : RENAM2   COM : RENAM2   COM

A>era renam2.com

A>dir
A: F80      COM : HELL1    FOR : HELL1    REL : HELLO    FOR
A: HELLO    REL : HELL2    FOR : HELL2    REL : HELL3    FOR
A: HELL3    REL : M80      COM : MVFTST1  MAC : MVFTST1  REL
A: MVFTST1B MAC : MVFTST1B PRN : MVFTST1B REL : MVFTST1C MAC
A: MVFTST1C PRN : MVFTST1C REL : L80      COM : MVFTST1C COM
A: VFTST1   COM : FORLIB   REL : HELLO    COM : MVFTST1D MAC
A: MVFTST1D PRN : MVFTST1D REL : MVFTST1D COM : MVFTST1E MAC
A: MVFTST1E PRN : MVFTST1E REL : MVFTST1E COM : MVFTST1F MAC
A: MVFTST1F PRN : MVFTST1F REL : MVFTST1F COM : MVFTST1G MAC
A: MVFTST1G PRN : MVFTST1G REL : MVFTST1G COM : VFTST9   COM
A: VFTST2   COM : VFTST4   COM : VFTST5   COM : VFTST4-1 TXT
A: VFTST16  COM : TESTDATA TXT : VFTST14  COM : VFTST6   COM
A: VFTST7   COM : VFTST8   COM : VFTST10  COM : FNC0BT-2 COM
A: FNC06T-2 COM : FNC03T-2 COM : VFTST102 COM : VFTST105 COM
A: VFTST11  COM : VFTST12  COM : VFTST13  COM : VFTST18  COM
A: VFTST19  COM : VFTST15  COM
A>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Tue Sep 11 22:09:55 2012

まずRENTST.BINというファイル名でセーブしたあと、そのRENTST.BINをVFTST14.COMを実行して、RENAM.COMに変更しました。

次に存在しないファイル名を指定して、VFTST14を実行してみました。
vftst14 abc.xyz xxx.yyy[Enter]の実行です。
結果はAレジスタの値としてFFが表示され、それに続いてerrが表示されました。

さらにテストをするため、
save 1 renam2.com[Enter]
を実行しました。
そのあと、
vftst14 renam.com renam2.com[Enter]
を実行しました。
結果を確認するため、そこでDIRコマンドを実行しました。

RENAM.COMがRENAM2.COMに名前が変更されたため、RENAM2.COMが2つできてしまいました。
ファンクションコール17Hを使うときはこういうことにならないように、事前にファイル名サーチをして、同一のファイル名が存在しないことを確認しておく必要があります。
VFTST14はそのようなチェックをしていないため、同じファイル名での二重登録が行なわれてしまいました。
このままにしておくと紛らわしいので、ERAコマンドで削除しました。

ワンボードマイコンでCP/Mを![第213回]
2012.9.11upload

前へ
次へ
ホームページトップへ戻る