2015.1.10

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

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第98回]


●/BATのテスト

/BATコマンドは「ワンボードマイコンでCP/Mを!」[第390回]で説明をしました。
/BATはZB3BASICのコマンドですが、ND80Z3.5(ND80ZV)に付属しているZB3BASICにはありません。
ZB3DOS(CP/M互換DOS)システムのZB3BASICに追加された機能です。
バッチファイルを実行します。

/BAT バッチファイル名 パラメータ

という使い方をします。
バッチファイルはテキストファイルですが、拡張子は任意です。
動作のベースはZB3BASICですがバッチファイル中で/CPMコマンドを使ってCP/Mを起動することもできますから、CP/Mを含むバッチ動作が可能です。

「ワンボードマイコンでCP/Mを!」[第390回]でいくつかのサンプルを使って説明をしていますので、MYCPU80でも同じサンプルプログラムを使ってテストを行ないました。

●バッチファイルサンプル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
 


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

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

logfile mycpu80log\01092056.txt open
mzbdos3L 2014.12.29 by Chunichidenko

MYCPU80に接続しました(19200bps)
0001 001E - z
1000 00C3 - 
*** mycpu80 zb3basic ****
>/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
>/SAVE ZB3TEST1.TXT
....
save 4 lines
>DM 8000,807F
8000  20 46 41 49 4C 55 52 45-20 48 41 4D 50 45 52 53   FAILURE HAMPERS
8010  FC DF 41 00 00 FF CD C6-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 54-53 20 54 4F 20 46 49 52  .......TS TO FIR
>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
drive D ................................
drive C ................................
drive B ................................
drive A ................................

A>z:
Z>dir
Z: FNC03T-2 BIN : FNC05T2  BIN : FNC06T-2 COM : FNC06T   COM
Z: FNC0BT-3 COM : RAFTDOUT COM : STARTREK BAS : VFTST0-2 COM
Z: VFTST1   COM : VFTST10  COM : VFTST102 COM : VFTST105 COM
Z: VFTST107 COM : VFTST11  COM : VFTST12  COM : VFTST13  COM
Z: VFTST14  COM : VFTST15  COM : VFTST16  COM : VFTST17  COM
Z: VFTST18  COM : VFTST19  COM : VFTST2   COM : VFTST20B COM
Z: VFTST20C COM : VFTST21  COM : VFTST22  COM : VFTST25  COM
Z: VFTST4   COM : VFTST5   COM : VFTST6-2 COM : VFTST6-2 TXT
Z: VFTST6   COM : VFTST6   TXT : VFTST7   COM : VFTST8   COM
Z: VFTST9   COM : VFTST92  COM : MBASIC   COM : PIP      COM
Z: ESC4     MAC : VFDUMP1  COM : VFDUMP   COM : VFD05    COM
Z: VFDUMP2  COM : STARTRK2 BAS : TREKINST BAS : STARTRK1 BAS
Z: MBSTST2  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
Ok
system

Z>dir
Z: FNC03T-2 BIN : FNC05T2  BIN : FNC06T-2 COM : FNC06T   COM
Z: FNC0BT-3 COM : RAFTDOUT COM : STARTREK BAS : VFTST0-2 COM
Z: VFTST1   COM : VFTST10  COM : VFTST102 COM : VFTST105 COM
Z: VFTST107 COM : VFTST11  COM : VFTST12  COM : VFTST13  COM
Z: VFTST14  COM : VFTST15  COM : VFTST16  COM : VFTST17  COM
Z: VFTST18  COM : VFTST19  COM : VFTST2   COM : VFTST20B COM
Z: VFTST20C COM : VFTST21  COM : VFTST22  COM : VFTST25  COM
Z: VFTST4   COM : VFTST5   COM : VFTST6-2 COM : VFTST6-2 TXT
Z: VFTST6   COM : VFTST6   TXT : VFTST7   COM : VFTST8   COM
Z: VFTST9   COM : VFTST92  COM : MBASIC   COM : PIP      COM
Z: ESC4     MAC : VFDUMP1  COM : VFDUMP   COM : VFD05    COM
Z: VFDUMP2  COM : STARTRK2 BAS : TREKINST BAS : STARTRK1 BAS
Z: MBSTEST1 BAS : MBSTST2  BAS
Z>zb3
end of ZBDOS
>/LOAD ZB3TEST1.TXT
....data end

load 4 lines
>LIST
    10 '*** ND80Z3 test program ***
    20 FOR A=0 TO 10
    30 PRINT "a=";A,"sqrt(a)=";SQR(A)
    40 NEXT A
>/EXIT
0000 00C3 - 
リモート接続を終了しました
logfile closed at Fri Jan 09 20:58:44 2015


CP/Mの動作も問題なく実行できました。

●バッチファイルサンプル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)もMYCPU80で実行してみました。
下はそのログです。

logfile mycpu80log\01062205.txt open
mzbdos3L 2014.12.29 by Chunichidenko

MYCPU80に接続しました(19200bps)
0001 001E - z
1000 00C3 - 
*** mycpu80 zb3basic ****
>/bat battest2.txt 10,20,"abcXYZ",5,ZB3TEST2.TXT
>10 FOR A=10 TO 20
>20 PRINT A,
>30 NEXT A
>40 B$="abcXYZ"
>50 PRINT B$,SQR(5)
>LIST
    10 FOR A=10 TO 20
    20 PRINT A,
    30 NEXT A
    40 B$="abcXYZ"
    50 PRINT B$,SQR(5)
>/SAVE ZB3TEST2.TXT
.....
save 5 lines

/BAT end


これも全く問題なく実行できました。

●バッチファイルサンプル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)もMYCPU80で実行してみました。
下はそのログです。

>/bat battest3.txt MBSTEST1.BAS MBSTST2.BAS dir a:
      *** BAT TEST 3 ****
>/CPM
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: FNC03T-2 BIN : FNC05T2  BIN : FNC06T-2 COM : FNC06T   COM
Z: FNC0BT-3 COM : RAFTDOUT COM : STARTREK BAS : VFTST0-2 COM
Z: VFTST1   COM : VFTST10  COM : VFTST102 COM : VFTST105 COM
Z: VFTST107 COM : VFTST11  COM : VFTST12  COM : VFTST13  COM
Z: VFTST14  COM : VFTST15  COM : VFTST16  COM : VFTST17  COM
Z: VFTST18  COM : VFTST19  COM : VFTST2   COM : VFTST20B COM
Z: VFTST20C COM : VFTST21  COM : VFTST22  COM : VFTST25  COM
Z: VFTST4   COM : VFTST5   COM : VFTST6-2 COM : VFTST6-2 TXT
Z: VFTST6   COM : VFTST6   TXT : VFTST7   COM : VFTST8   COM
Z: VFTST9   COM : VFTST92  COM : MBASIC   COM : PIP      COM
Z: ESC4     MAC : VFDUMP1  COM : VFDUMP   COM : VFD05    COM
Z: VFDUMP2  COM : STARTRK2 BAS : TREKINST BAS : STARTRK1 BAS
Z: MBSTST2  BAS
Z>A:
A>DIR
A: MBASIC   COM : STARTREK BAS : PIP      COM : ESC4     MAC
A: VFTST6   TXT : VFDUMP1  COM : VFDUMP2  COM : VFDUMP   COM
A: VFD05    COM : STARTRK2 BAS : TREKINST BAS
A>zb3
/BAT end

end of ZBDOS
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Tue Jan 06 22:18:18 2015


以上3つのバッチテストファイルをMYCPU80で実行させてみましたが、いずれもND80Z3.5(ND80ZV)用のZB3DOSでの実行結果と全く同じになりました。

MYCPU80でCP/Mを![第98回]
2015.1.10upload

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