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

復活!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
 

ベースになっているのはZB3BASICですから、コメント記号はBASICの ’ および REM としました。
行の先頭に ’ または REM があると、その行は実行されません。
そのほかはキーボードから入力する代わりにファイルから読み込まれて実行されます。
最初に簡単なBASICプログラムを作成します。
10〜40の行です。
そのあとLISTコマンドとRUNコマンドを実行したあと、ZB3TEST1.TXTという名前でセーブします。
バッチ機能はBASICに限りません。
DMやCMなどのマシン語コマンドにも有効です。
ただCMコマンドの場合には使い方が少し特殊になります。
>は次のアドレスに進む、<は前のアドレスに戻る、/は処理終了の指示に使います。
このファイルにもありますように、バッチ処理はCP/M互換DOSやMBASICに対しても使うことができます。

下は上のバッチファイル(BATTEST1.TXT)を/BATコマンドで実行したときのログファイルです。
ZB3BASICを起動してすぐに
/BAT BATTEST1.TXT
を入力してから以後は最後までバッチファイルに書かれている通りに自動的に処理されたものです。

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
 

●バッチファイルサンプル2(パラメータの使用)

バッチファイルにはパラメータを使うことができます。
バッチファイル中で$$1〜$$5という文字列を使うと、その文字列が/BATコマンドを入力するときにファイル名に続けてパラメータとして入力した文字列に置き換えられて実行されます。
パラメータは5個まで設定可能で、パラメータの長さは12文字までです。
パラメータの区切りはスペースまたは ,(カンマ)です。

'  ***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

下の画像は上のバッチファイル(BATTEST2.TXT)をパラメータをつけて/BATコマンドで実行したところです。



●バッチファイルサンプル3(パラメータの使用)

上はZB3BASICでのパラメータの使用例ですが、パラメータはCP/M互換DOSやMBASICでも同じように使うことができます。

'  ***bat test 3
'
p     *** BAT TEST 3 ****
'
/CPM
z:
ren $$1 $$2
mbasic
load "$$2"
list
run
system
$$3
$$4
$$3
zb3
' *** end
'

上から3行目のように、行の先頭に p とスペースを置くと、その行は(pのみをスペースに置き換えて)画面に表示されます。

下は上のバッチファイル(BATTEST3.TXT)を実行したときの画像です。



画面では終わりのところしか見えませんので、ログファイルでお見せします。

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


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

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