復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第93回]
●ファンクションコール17H(ファイル名の変更)
ファイル名の変更はRENコマンドを使って行なうことができます。
RENコマンドはCP/Mに最初から組み込まれているビルトインコマンドです。
ファンクションコール17Hを使うと、RENの機能をユーザープログラム内で実現することができます。
●MSDOSのRENコマンド
RENコマンドはMSDOSにもあります。
下の画像はWindows7のコマンドプロンプトでの、RENコマンドの実行例です。
MSDOSのRENコマンドは、
REN もとのファイル名 新しいファイル名
のように使います。
なおMSDOSのRENコマンドはもともとRENAMEの省略形なので、REN、RENAMEのどちらでも使えます。
ファイル名だけではなくて拡張子も含めて変更することができます。
しかし拡張子を変更してもファイルの中味そのものは変わりませんから不用意に拡張子を変更すると、ファイルが開けなくなってしまう可能性があります。
またアプリケーションによっては特別のファイル名規則によって名前をつけているものもありますから、ファイル名を変更すると、そのファイルが使えなくなってしまう可能性もあります。
そのような場合でも、再びRENコマンドを使ってもとのファイル名、拡張子に戻せばもとの通りになります。
同じフォルダ(ディレクトリ)に、新しいファイル名と同じファイル名がすでに存在するときは、新しいファイル名に変更はできません。
上の画像では、テストですから、拡張子も含めて変更をしています。
REN IMGTEST.JPG IMGTEST2.BIN[Enter]
と入力して、IMGTEST.JPGファイルをIMGTEST2.BINに名前を変更したあと、ペイントでIMGTEST2.BINを開いてみました。
拡張子を変更しても、ファイルの中味はもとのJPGのままですから、ご覧の通りペイントで開けました。
●CP/MのRENコマンド
今度はCP/MのRENコマンドを使ってみます。
logfile nd80zlog\04120859.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >jp d233 a>dir b: B: FNC0E-0 COM a>rename b:fnctest.bin=fnc0e-0.com RENAME? a>ren b:fnctst.bin=b:fnc0e-0.com a>dir b: B: FNCTST BIN a> |
; BDOS TEST14 function17 (rename ) ;2012/4/10 ; ORG $8100 FCALL=$8005 FCB=$805C ; 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;$ ; |
2012/4/12 9:55 ftst14.txt END=8197 ; BDOS TEST14 function17 (rename ) ;2012/4/10 ; ORG $8100 FCALL=$8005 FCB=$805C ; 8100 0E17 LD C,17 8102 115C80 LD DE,FCB 8105 CD0580 CALL FCALL 8108 F5 PUSH AF 8109 CD7B81 CALL B2HEXDP 810C F1 POP AF 810D 3C INC A 810E C0 RET NZ ;err 810F 119481 LD DE,ERRMSG 8112 0E09 LD C,09 8114 CD0580 CALL FCALL 8117 C9 RET ; ;CL & LF 8118 3E0D CRLF:LD A,0D 811A CD2481 CALL ADP 811D 3E0A LD A,0A 811F C32481 JP ADP ;space disp 8122 3E20 SPDP:LD A,20 ;A disp 8124 C5 ADP:PUSH BC 8125 E5 PUSH HL 8126 5F LD E,A 8127 0E02 LD C,02 8129 CD0580 CALL FCALL 812C E1 POP HL 812D C1 POP BC 812E C9 RET ; ;binary to hex, 2bytes data to ascii 4charactors,HL to HL,DE 812F 7C B2HEX4:LD A,H 8130 CD3581 CALL B2HEX2 8133 EB EX DE,HL 8134 7B LD A,E ;binary to hex, 1byte data to ascii 2charactors,A to DE 8135 F5 B2HEX2:PUSH AF 8136 0F RRCA 8137 0F RRCA 8138 0F RRCA 8139 0F RRCA 813A CD4481 CALL B2HEX1 813D 57 LD D,A 813E F1 POP AF 813F CD4481 CALL B2HEX1 8142 5F LD E,A 8143 C9 RET ;binary to hex, low 4bit to ascii 1charactor 8144 E60F B2HEX1:AND 0F 8146 C630 ADD A,30 8148 FE3A CP 3A 814A D8 RET C;0-9 814B C607 ADD A,07;A-F 814D C9 RET ;hex to binary, ascii 1charactor to low 4bit 814E FE30 HTOB1:CP 30;>="0"? 8150 D8 RET C;no 8151 FE3A CP 3A;<="9"? 8153 DA6781 JP C,HTOB1_2;yes,"0" to "9" 8156 FE41 CP 41;>="A" ? 8158 D8 RET C;no 8159 FE47 CP 47;<="F"? 815B DA6581 JP C,HTOB1_1 815E FE61 CP 61;>="a"? 8160 D8 RET C;no 8161 FE67 CP 67;<="f"? 8163 3F CCF 8164 D8 RET C;no 8165 C609 HTOB1_1:ADD A,09;41 to 46 -> 4A to 4F,or 61 to 67 -> 6A to 6F 8167 E60F HTOB1_2:AND 0F 8169 C9 RET ;HL(bynary 2bytes) to asckii 4bytes & disp 816A C5 HEX4DP:PUSH BC 816B E5 PUSH HL 816C CD2F81 CALL B2HEX4;binary 2 bytes to ascii HEX 4bytes 816F D5 PUSH DE 8170 EB EX DE,HL 8171 CD8681 CALL DEDP 8174 D1 POP DE 8175 CD8681 CALL DEDP 8178 E1 POP HL 8179 C1 POP BC 817A C9 RET ;A(binary) to asckii 2bytes HEX & disp 817B C5 B2HEXDP:PUSH BC 817C E5 PUSH HL 817D CD3581 CALL B2HEX2 8180 CD8681 CALL DEDP 8183 E1 POP HL 8184 C1 POP BC 8185 C9 RET ; ;DE(asckii 2bytes) disp 8186 D5 DEDP:PUSH DE 8187 5A LD E,D 8188 0E02 LD C,02 818A CD0580 CALL FCALL 818D D1 POP DE 818E 0E02 LD C,02 8190 CD0580 CALL FCALL 8193 C9 RET ; 8194 657272 ERRMSG:"err" 8197 24 DB 24;$ ; ADP =8124 B2HEX1 =8144 B2HEX2 =8135 B2HEX4 =812F B2HEXDP =817B CRLF =8118 DEDP =8186 ERRMSG =8194 FCALL =8005 FCB =805C HEX4DP =816A HTOB1 =814E HTOB1_1 =8165 HTOB1_2 =8167 SPDP =8122 |
logfile nd80zlog\04121000.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >/ld ftst14.bin,8100 loading FTST14.BIN ...0098(152)bytes loaded,from 8100 to 8197 >jp d233 a>save 1 ftst14.com a>dir A: FNC0E-1 COM : FTST10 COM : FTST10-2 COM : FTST10-4 COM A: FTST10-5 COM : FTST11 COM : FTST12 COM : FTST13 COM A: FTST14 COM a> |
a>dir b: B: FNCTST BIN a>ftst14 b:fnctst.bin fnctst2.com 00 a>save 1 b:rentst.com a>dir b: B: FNCTST2 COM : RENTST COM a>ftst14 b:rentst.com rename.com 00 a>dir b: B: FNCTST2 COM : RENAME COM a> |
a>b: b>dir B: FNCTST2 COM : RENAME COM b>rename test.com test2.com FFerr b>rename fnctst2.com rename.com 00 b>dir B: RENAME COM : RENAME COM b>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Thu Apr 12 10:41:54 2012 |
logfile nd80zlog\04121043.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >jp d233 a>b: b>dir B: RENAME COM : RENAME COM b>ren test.com=rename.com b>dir B: TEST COM : TEST COM b> |
b>^D end of CP/M >dm a000,a07f A000 00 54 45 53 54 20 20 20-20 43 4F 4D 00 00 00 02 .TEST COM.... A010 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ A020 00 54 45 53 54 20 20 20-20 43 4F 4D 00 00 00 02 .TEST COM.... A030 02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ A040 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ A050 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ A060 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ A070 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ >cm a025 A025 20-31 A026 20- >jp d233 |
a>b: b>dir B: TEST COM : TEST1 COM b>ren test1.com=test.com File exists b>^D end of CP/M >0000 00C3 - リモート接続を終了しました logfile closed at Thu Apr 12 10:47:59 2012 |