復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第390回]
●/BATコマンド
やっと。
隠し玉についての説明です。
CP/Mにはバッチ処理を行なうためのSUBMITというトランジェントコマンドがありました。
「ありました」と書きましたが、私は実際に使ったことがありませんので、「あったそうです」と書くべきでしょう。
バッチ処理というのは、通常はキーボードから入力して実行するコマンド処理を、あらかじめテキストファイルに記述しておいて、そのファイルを読み込ませることで、一連のコマンドを自動的に処理することをいいます。
MSDOSにもその機能はあって、バッチファイルは拡張子に.BATを使うこととされています。
Windows9XやWindowsXPの時代からパソコンを使い込んでいる方でしたらAUTOEXEC.BATという名前を聞いたことはあると思います。
さてそのバッチ機能なのですが、CP/M全盛の昔ならばともかく、今となってはSUBMITと言っても、なんのこっちゃ?と聞かれるのがオチでありましょう。
ま、上にも書きましたように、SUBMITはシステムに組み込まれたビルトインコマンドではなくて、ディスクから読み込んで実行されるトランジェントコマンドということでもありますし、COPYコマンドなどに比べますと、必要度もそれほど高いとは思われません。
ですから実装しなければならない、というほどのものではありませんけれど。
1ヶ月ほども前に、ふと、できるのじゃないかな?
と思いついてしまいましたので、その時点で大体の骨子になるところは作り上げてしまいました。
その後はまた多忙な日々が続きましたものですから、そのままになっていたものなのですが、ここに来ましてせっかく作りかけた機能ですから、この際完成させてしまおうということで、ここ数日その作業をしておりました。
CP/M互換DOSではありますが、いくら何でも今更SUBMITのネーミングはいかがなものかと思いましたので、今回のタイトルにもありますように、/BATというコマンドにしました。
/BAT バッチファイル名 パラメータ
という使い方です。
/BATも他のコマンドと同じように最初からシステムに組み込まれたビルトインコマンドです。
バッチファイルはテキストファイルですが、拡張子は任意です。
SUBMITはCP/Mのコマンドですが/BATは実はZB3BASICのコマンドとして用意しました。
せっかくの機能ですから、CP/Mに限定せずベースになっておりますZB3BASICのもとで機能するほうがより使いでがあるのでは、と考えたからです。
何はともあれ、実際の使用例を見ていただくことにいたします。
とは言いましても、バッチ処理としては余り意味のある使い方ではありません。
こんな使い方ができますよ、というサンプルとして見てください。
●バッチファイルサンプル1
'**** batch test *****
' ***remark
REM *** remark
'
PRINT SQR(10):'basic direct
'
'BASIC make program
10 '*** ND80Z3 test program ***
20 FOR A=0 TO 10
30 PRINT "a=";A,"sqrt(a)=";SQR(A)
40 NEXT A
'
LIST
RUN
/SAVE ZB3TEST1.TXT
'
DM 8000,807F
CM 8030
>>>>><<123456>>ABCDEF<<<<<<<<</
'
'CP/M entry
'
/CPM
z:
dir
'
'mbasi entry
'
mbasic
print sqr(10):'basic direct
10 '*** mbasic test ***
20 for b=0 to 10
30 print "b=";b,"sqrt(";b;")=";sqr(b)
40 NEXT b
list
run
save "MBSTEST1",A
'return to CP/M
system
dir
'return to ZB3BASIC
zb3
'
/LOAD ZB3TEST1.TXT
LIST
RUN
/EXIT
'end
|
logfile nd80zlog\05061752.txt open
ND80ZVに接続しました
0001 0000 - z
1000 00C3 -
*** nd80z3 basic ****
>/bat battest1.txt
>PRINT SQR(10):'basic direct
3.16228
>10 '*** ND80Z3 test program ***
>20 FOR A=0 TO 10
>30 PRINT "a=";A,"sqrt(a)=";SQR(A)
>40 NEXT A
>LIST
10 '*** ND80Z3 test program ***
20 FOR A=0 TO 10
30 PRINT "a=";A,"sqrt(a)=";SQR(A)
40 NEXT A
>RUN
a=0 sqrt(a)=0
a=1 sqrt(a)=1
a=2 sqrt(a)=1.41421
a=3 sqrt(a)=1.73205
a=4 sqrt(a)=2
a=5 sqrt(a)=2.23607
a=6 sqrt(a)=2.44949
a=7 sqrt(a)=2.64575
a=8 sqrt(a)=2.82843
a=9 sqrt(a)=3
a=10 sqrt(a)=3.16228
>/SAVE ZB3TEST1.TXT
10 '*** ND80Z3 test program ***
20 FOR A=0 TO 10
30 PRINT "a=";A,"sqrt(a)=";SQR(A)
40 NEXT A
>DM 8000,807F
8000 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ................
8010 FC DF 41 00 00 FF FF FF-14 00 04 00 0A 00 1D A2 .゚A............「
8020 2A 2A 2A 20 4E 44 38 30-5A 33 20 74 65 73 74 20 *** ND80Z3 test
8030 70 72 6F 67 72 61 6D 20-2A 2A 2A 0D 20 14 00 0D program ***. ...
8040 84 F0 0C 00 9A FA 00 00-98 FA 0A 00 0D 10 1E 00 ................
8050 1C 81 22 61 3D 22 3B F0-0C 00 2C 22 73 71 72 74 .."a=";...,"sqrt
8060 28 61 29 3D 22 3B DE 28-F0 0C 00 29 0D 1F 28 00 (a)=";゙(...)..(.
8070 05 85 F0 0C 00 0D 08 FF-FF FF FF FF FF FF FF FF ................
>CM 8030
8030 70->
8031 72->
8032 6F->
8033 67->
8034 72->
8035 61-<
8034 72-<
8033 67-12
8034 72-34
8035 61-56
8036 6D->
8037 20->
8038 2A-AB
8039 2A-CD
803A 2A-EF
803B 0D-<
803A EF-<
8039 CD-<
8038 AB-<
8037 20-<
8036 6D-<
8035 56-<
8034 34-<
8033 12-<
8032 6F-/
>/CPM
loading zbds3e.bin ...19d1(6609)bytes loaded,from CC00 to E5D0
drive D ................................
drive C ................................
drive B ................................
drive A ................................
A>z:
Z>dir
Z: VFTST92 COM : VFTST9 COM : VFTST0 COM : VFTST25 COM
Z: VFTST24 COM : VFTST6-2 COM : VFTST205 COM : VFTST204 COM
Z: VFTST22 COM : VFTST21 COM : VFTST203 COM : VFTST202 COM
Z: VFTST107 COM : VFTST17 COM : VFTST14 COM : VFTST16 COM
Z: VFTST15 COM : VFTST19 COM : VFTST18 COM : VFTST13 COM
Z: VFTST12 COM : VFTST11 COM : VFTST105 COM : VFTST102 COM
Z: VFTST10 COM : VFTST8 COM : VFTST7 COM : VFTST6 COM
Z: VFTST4 COM : VFTST2 COM : VFTST5 COM : VFTST1 COM
Z: VFTEST1 COM : MBASIC COM : VFTST23 COM : STRTRK2 BAS
Z: SQRTEST BAS : SQRTEST2 BAS : SQRTEST3 TXT : TEST1 COM
Z: VFTST0-2 COM : MBSTEST1 BAS
Z>mbasic
BASIC-80 Rev. 5.21
[CP/M Version]
Copyright 1977-1981 (C) by Microsoft
Created: 28-Jul-81
28728 Bytes free
Ok
print sqr(10):'basic direct
3.16228
Ok
10 '*** mbasic test ***
20 for b=0 to 10
30 print "b=";b,"sqrt(";b;")=";sqr(b)
40 NEXT b
list
10 '*** mbasic test ***
20 FOR B=0 TO 10
30 PRINT "b=";B,"sqrt(";B;")=";SQR(B)
40 NEXT B
Ok
run
b= 0 sqrt( 0 )= 0
b= 1 sqrt( 1 )= 1
b= 2 sqrt( 2 )= 1.41421
b= 3 sqrt( 3 )= 1.73205
b= 4 sqrt( 4 )= 2
b= 5 sqrt( 5 )= 2.23607
b= 6 sqrt( 6 )= 2.44949
b= 7 sqrt( 7 )= 2.64575
b= 8 sqrt( 8 )= 2.82843
b= 9 sqrt( 9 )= 3
b= 10 sqrt( 10 )= 3.16228
Ok
save "MBSTEST1",A
erase z\MBSTEST1.BAS ... done
Ok
system
Z>dir
Z: VFTST92 COM : VFTST9 COM : VFTST0 COM : VFTST25 COM
Z: VFTST24 COM : VFTST6-2 COM : VFTST205 COM : VFTST204 COM
Z: VFTST22 COM : VFTST21 COM : VFTST203 COM : VFTST202 COM
Z: VFTST107 COM : VFTST17 COM : VFTST14 COM : VFTST16 COM
Z: VFTST15 COM : VFTST19 COM : VFTST18 COM : VFTST13 COM
Z: VFTST12 COM : VFTST11 COM : VFTST105 COM : VFTST102 COM
Z: VFTST10 COM : VFTST8 COM : VFTST7 COM : VFTST6 COM
Z: VFTST4 COM : VFTST2 COM : VFTST5 COM : VFTST1 COM
Z: VFTEST1 COM : MBASIC COM : VFTST23 COM : STRTRK2 BAS
Z: SQRTEST BAS : SQRTEST2 BAS : SQRTEST3 TXT : TEST1 COM
Z: MBSTEST1 BAS : VFTST0-2 COM
Z>zb3
end of ZBDOS
>/LOAD ZB3TEST1.TXT
10 '*** ND80Z3 test program ***
20 FOR A=0 TO 10
30 PRINT "a=";A,"sqrt(a)=";SQR(A)
40 NEXT A
data end
>LIST
10 '*** ND80Z3 test program ***
20 FOR A=0 TO 10
30 PRINT "a=";A,"sqrt(a)=";SQR(A)
40 NEXT A
>RUN
a=0 sqrt(a)=0
a=1 sqrt(a)=1
a=2 sqrt(a)=1.41421
a=3 sqrt(a)=1.73205
a=4 sqrt(a)=2
a=5 sqrt(a)=2.23607
a=6 sqrt(a)=2.44949
a=7 sqrt(a)=2.64575
a=8 sqrt(a)=2.82843
a=9 sqrt(a)=3
a=10 sqrt(a)=3.16228
>/EXIT
0000 00C3 -
リモート接続を終了しました
logfile closed at Mon May 06 17:53:33 2013
|
' ***bat test 2 10 FOR A=$$1 TO $$2 20 PRINT A, 30 NEXT A 40 B$=$$3 50 PRINT B$,SQR($$4) LIST RUN /SAVE $$5 ' *** end |

' ***bat test 3 ' p *** BAT TEST 3 **** ' /CPM z: ren $$1 $$2 mbasic load "$$2" list run system $$3 $$4 $$3 zb3 ' *** end ' |
logfile nd80zlog\05061806.txt open
ND80ZVに接続しました
0001 0000 - z
1000 00C3 -
*** nd80z3 basic ****
>/bat battest3.txt MBSTEST1.BAS MBSTST2.BAS dir a:
*** BAT TEST 3 ****
>/CPM
loading zbds3e.bin ...19d1(6609)bytes loaded,from CC00 to E5D0
drive D ................................
drive C ................................
drive B ................................
drive A ................................
A>z:
Z>ren MBSTEST1.BAS MBSTST2.BAS
rename z\MBSTEST1.BAS MBSTST2.BAS done
Z>mbasic
BASIC-80 Rev. 5.21
[CP/M Version]
Copyright 1977-1981 (C) by Microsoft
Created: 28-Jul-81
28728 Bytes free
Ok
load "MBSTST2.BAS"
Ok
list
10 '*** mbasic test ***
20 FOR B=0 TO 10
30 PRINT "b=";B,"sqrt(";B;")=";SQR(B)
40 NEXT B
Ok
run
b= 0 sqrt( 0 )= 0
b= 1 sqrt( 1 )= 1
b= 2 sqrt( 2 )= 1.41421
b= 3 sqrt( 3 )= 1.73205
b= 4 sqrt( 4 )= 2
b= 5 sqrt( 5 )= 2.23607
b= 6 sqrt( 6 )= 2.44949
b= 7 sqrt( 7 )= 2.64575
b= 8 sqrt( 8 )= 2.82843
b= 9 sqrt( 9 )= 3
b= 10 sqrt( 10 )= 3.16228
Ok
system
Z>DIR
Z: VFTST92 COM : VFTST9 COM : VFTST0 COM : VFTST25 COM
Z: VFTST24 COM : VFTST6-2 COM : VFTST205 COM : VFTST204 COM
Z: VFTST22 COM : VFTST21 COM : VFTST203 COM : VFTST202 COM
Z: VFTST107 COM : VFTST17 COM : VFTST14 COM : VFTST16 COM
Z: VFTST15 COM : VFTST19 COM : VFTST18 COM : VFTST13 COM
Z: VFTST12 COM : VFTST11 COM : VFTST105 COM : VFTST102 COM
Z: VFTST10 COM : VFTST8 COM : VFTST7 COM : VFTST6 COM
Z: VFTST4 COM : VFTST2 COM : VFTST5 COM : VFTST1 COM
Z: VFTEST1 COM : MBASIC COM : VFTST23 COM : STRTRK2 BAS
Z: SQRTEST BAS : SQRTEST2 BAS : SQRTEST3 TXT : TEST1 COM
Z: VFTST0-2 COM : MBSTST2 BAS
Z>A:
A>DIR
A: MBASIC COM : STRTRK2 BAS : MBSTEST1 BAS
A>zb3/BAT end
end of ZBDOS
>/exit
0000 00C3 -
リモート接続を終了しました
logfile closed at Mon May 06 18:08:44 2013
|