戻る
LEVEL-2 BASIC
Basic Master Level 2/Jr. : 日立 (Hitachi)

LEVEL-2 BASIC

LEVEL-2 BASICはHitachiが開発したものである。
(Basic Master Level 3以降はMS系になるので、Level 1/2とLevel 3に直接の互換性はない)

Basic Master Level 2及びJr.に搭載されている。
Level 2はVer1.0、Level2 II/Jr.はVer1.1となる。
(機能に大きな差はない)

表記が独特な部分があるのと、マシン語を利用しないと性能は引き出せないので玄人好みではある。

LEVEL-2 BASIC簡易リファレンス
コマンド
表記省略形凡例使用例説明
SEQSEQ [行番号][,増分]SEQ 100,5先頭に自動的に行番号を発生させる(増分を省略した場合は10)
DELDEL [行番号][,[行番号2]]DEL 10,100指定した範囲の行番号を削除する
(行番号を指定しない場合はエラー)
LISTL
LIST[#] [行番号][,[行番号2]
LIST
LIST 10,100
プログラムを表示する
指定した範囲の行番号を表示する
「#」を付加した場合はプリンタに印字する
RESEQRESEQ [新行番号][,増分]RESEQ 100,10新行番号を先頭に行番号をつけ直す
NEWNEWNEWプログラムを全て消去し、変数を初期化する
CONTIUNECONT
C
CONTIUNECONTIUNESTOP,BREAKで停止したプログラムの実行を再開する
RUNRRUN [行番号]RUN指定した行番号からプログラムを実行する(行番号を省略した場合は先頭から実行する)
SAVESAVE ファイル名SAVE TESTカセットテープにプログラムを保存する
(CALL $E400の後に続けると1200baudでの動作となる)
LOADLOAD [ファイル名]LOAD TESTカセットテープからプログラムを読み込む
ファイル名を省略した場合は最初に見つかったプログラムを読み込む
(CALL $E400の後に続けると1200baudでの動作となる)
VERIFYVERIFY [ファイル名]VERIFY TESTカセットテープのプログラムを照合する
ファイル名を省略した場合は最初に見つかったプログラムを照合する
(CALL $E400の後に続けると1200baudでの動作となる)
MERGEMERGE ファイル名MERGE TESTカセットテープからプログラムを読み込んで、メモリ上のプログラムとマージする
MONITORMONMONITORMONITORモニタコマンドモードにする
SIZESSIZESIZEプログラムエリアの現在アドレスと残りメモリサイズを表示する
[戻る]
ステートメント:プログラム制御
表記省略形凡例使用例説明
ENDENDENDプログラムを終了する
STOPSTOPSTOPプログラムを一時停止する
REMREM [注釈]REM TEST注釈を入れる(実行には無関係)
FOR...TO...STEP〜NEXTFOR 変数=開始値 TO 終了値 [STEP 増分]〜NEXT [変数][,変数2][,...]FOR I=0 TO 10 STEP 2〜NEXT IFORからNEXTまでの処理を繰り返す
GOSUBGOSGOSUB 行番号GOSUB 1000サブルーチンを呼び出す
RETURNRETRETURNRETURNサブルーチンから復帰する
GOTOGOGOTO 行番号GOTO 1000指定した行番号から実行する
IF...THENIF 論理式 [THEN] {文 | [GOTO] 行番号}IF A=0 {THEN END | 100}論理式の条件判断をする
THEN以降が省略形以外の場合はTHENを省略可能(GOTOの場合はGOTOの省略不可)
ON...GOTOON...GOON 式 GOTO 行番号[,行番号2][,...]ON A GOTO 100,200式の値に応じて指定された行番号へ分岐する
ON...GOSUBON...GOSON 式 GOSUB 行番号[,行番号2][,...]ON A GOSUB 100,200式の値に応じて指定された行番号のサブルーチンを呼び出す
[戻る]
ステートメント:変数関連
表記省略形凡例使用例説明
INPUTININPUT [文字列,]変数[,変数2][,...]INPUT "X=",Xキーボードから入力した値を変数に代入する
LETLET 変数=式LET A=1変数に値を代入する(LETは省略できる)
DATADATA 定数[,定数][,...]DATA "TEST",765READで読み込むデータを定義する
READREAD 変数[,変数][,...]READ A$,BDATAで定義したデータを変数に代入する
RESTORERESTORE [行番号]RESTORE 1000READで読み込むDATAの先頭行を設定する
RANDOMIZERNDMRANDOMIZERANDOMIZE乱数発生列を変更する
DEF FNDEF FN関数名[(定義式内変数)]=定義式DEF FNA(X)=X^2ユーザ定義関数を定義する
関数名はA〜Z,A0〜Z9が使用可能
DIMDIM 変数名(最大値[,最大値2][,...])[,...]DIM A(100,10),B$(100)配列変数の定義をする
[戻る]
ステートメント:データ関連
表記省略形凡例使用例説明
OPENOPEN ファイル番号,デバイス番号,ファイル名,先頭アドレスOPEN 2,3,"TEST"ファイルをデータ入出力用にOPENする
PRINT #PR #
? #
PRINT #ファイル番号,式[,...]OPENしたデバイスにデータを出力する
ファイル番号を省略した場合はプリンタに印字する
INPUT #IN #INPUT #ファイル番号,変数INPUT #1,A$OPENしたデバイスからデータを入力する
CLOSECLOSE ファイル番号CLOSE 1OPENしたファイルをCLOSEする
[戻る]
ステートメント:マシン語関連
表記省略形凡例使用例説明
CALLCALL アドレスCALL $D000指定したアドレスのマシン語サブルーチンを実行する
POKEPOKE アドレス,数式[,数式2][,...]POKE $D000,$C9指定したアドレスに値を書き込む
[戻る]
ステートメント:画面関連
表記省略形凡例使用例説明
CURSOR=CUR
!
CURSOR=X,YCURSOR 10,10指定した位置にカーソルを移動する
CLEARCLRCLEARCLEAR画面を消去する
PRINTPR
?
PRINT [式][{, | ;}[式2[,...]]]PRINT "HELLO,WORLD"画面上に表示する
PLOTPLOT X,Y,モードPLOT 0,0,1指定した座標にセミグラフィックを描画する
・モード(0:消去/1:描画)
[戻る]
ステートメント:その他
表記省略形凡例使用例説明
MUSICMUMUSIC MML文字列MUSIC "C"音楽を演奏する
[戻る]
文字列関数
表記省略形凡例使用例説明
ASCASC(文字列式)ASC("TEST")文字列先頭のキャラクタコードを返す
VALVAL(文字列式)VAL("123")文字列を数値に変換する
CHR$CHR$(数式[,...])CHR$(41)指定したキャラクタコードの文字を返す
STR$STR$(数式)STR$(A)数値を文字列に変換する
SPC$SPC$(数式)SPC$(A)指定した長さの空白文字列を返す
LEFT$LEFT$(文字列式,式)LEFT$(A$,2)文字列の左側から式で指定した桁数の文字列を返す
MID$MID$(文字列式,式1[,式2])[=文字列]MID$(A$,2,1)文字列の式1で指定した位置から式2で指定した桁数の文字列を返す(=文字列を指定した場合はその文字列と置換する)
RIGHT$RIGHT$(文字列式,式)RIGHT$(A$,2)文字列の右側から式で指定した桁数の文字列を返す
LENLEN(文字列式)LEN(A$)文字列の文字数を返す
HEXHEX(数式)SPC(A)指定した数値を4桁の16進数表記文字列に変換する(出力文字式内でのみ使用)
TABTAB(数式)TAB(A)指定した位置まで空白を返す(出力文字式内でのみ使用)
[戻る]
数値関数
表記省略形凡例使用例説明
INTINT(数式)INT(A)数式の整数値を返す(数式の値を超えない整数値)
SGNSGN(数式)SGN(A)数式の符号を返す
RNDRND(数式)RND(A)0以上指定値未満の乱数を返す
正数: 次の乱数を発生する
0,負数: 0を返す
[戻る]
数学関数
表記省略形凡例使用例説明
PAIPAIPAI円周率(9桁)を返す
ABSABS(数式)ABS(-1000)絶対値を返す
SINSIN(数式)SIN(3.14)正弦(サイン)の値を返す
COSCOS(数式)COS(3.14)余弦(コサイン)の値を返す
TANTAN(数式)TAN(3.14)正接(タンジェント)の値を返す
ATNATN(数式)ATN(3.14)逆正接(アークタンジェント)の値を返す
EXPEXP(数式)EXP(1)自然対数の低(e)に対する指数関数の値を返す
LOGLOG(数式)LOG(1)自然対数の値を返す
SQRSQR(数式)SQR(2)平方根の値を返す
[戻る]
その他関数
表記省略形凡例使用例説明
PEEKPEEK(アドレス)PEEK($D000)指定したアドレスの値を返す
TIMETIMETIME時刻変数を返す(0を基準とした1秒単位の数値:0〜32767)
($000Cの値を1/60することで1/60s単位を得られる)
INKEY$INKEY$INKEY$押されたキーの値を返す
CURSORCUR
!
CURSOR=数値変数
数値変数=CURSOR
CURSOR=A
A=CURSOR
カーソル位置を変数に格納する
カーソル位置を変数の値にする
CURSOR$CUR$
!$
CURSOR$CURSOR$カーソル位置にある文字コードを返す
[戻る]

※ モニタコマンド
D : Display - ダンプリストの表示
M : Memory - メモリ内容の表示、編集
F : Fill - メモリブロックに定数を格納
T : Transfer - メモリブロックを別ブロックに転送
G : Go - マシン語プログラムを実行
S : Step - マシン語プログラムをステップ実行
R : Registor - MPUレジスタ内容の表示、編集
B : Break - ブレークポイントの設定
P : Punch - マシン語プログラムを保存(パンチカードからの連想)
L : Load - マシン語プログラムの読込
V : Verify - マシン語プログラムをメモリ上のものと比較
E : Escape - BASICに復帰([RESET]押下も同様)

[戻る]

※ スクロール
スクロール中にキー入力で速度をコントロール可能

高 速 : 入力なし
中高速 : [英数]
中 速 : [英記号]
中低速 : [カナ記号]
低 速 : [カナ]

[戻る]

※ PRINT
; : 式を続けて表示する(A;B) 例 1;2
1 2
, : 式をTABで区切って表示する(A,B) 例 1,2
1         2

CHR$
コード機能
$01次に$01〜$0F($04を除く)を指定して、グラフィック文字を出力する
$02画面スクロールアップ
$03画面スクロールダウン
$04何もしない($01の後に指定不可能→中間コードで区切りとして使用しているため)
$05カーソルをBlink表示
$06カーソルを消去
$07BELL
$08カーソルを左移動
$09カーソルを右移動
$0Aカーソルを下移動
$0Bカーソルを上移動
$0C画面をクリアし、カーソルをHOMEへ移動
$0Dカーソルを次行先頭へ移動
$0E画面を白地に黒文字にする
$0F画面を黒地に白文字にする
$7FDEL

[戻る]

※ 高解像度グラフィック
GRAMに対して直接書き込むことで256x192の画面に対してグラフィックを表示することが可能

・GRAM領域定義
CALL $E37E : 1ページのみを使用
CALL $E383 : 2ページ使用

・GRAMアドレス
$0900 : 1ページ目先頭アドレス
$2100 : 2ページ目先頭アドレス
それぞれのアドレスのデータ(ビット)が画面上のドットに対応する
(アドレス1つが8ドット分に対応)

・表示モード切替
1ページ目 : POKE $EFE0,$C0
2ページ目 : POKE $EFE0,$CC
テキスト  : POKE $EFE0,$00

・GRAMクリア
1ページ目 : CALL $E38D
2ページ目 : CALL $E39C

[戻る]

※ OPEN
OPEN ファイル番号,デバイス番号,ファイル名,先頭アドレス

・ファイル番号 : 1〜15
・デバイス番号
1 : 画面
2 : キーボード
3 : CMT(OUT) - 300baud
4 : CMT(IN)
5 : CMT2(OUT) - 1200baud
6 : CMT2(IN)
7〜15 : ユーザ定義
・ファイル名 : CMTに対して使用する場合に必要
・先頭アドレス : ユーザ定義時必要(以下のように定義)
N : $7E(JMP)
N+1,+2 : OPENサブルーチン先頭アドレス
N+3 : $7E(JMP)
N+4,+5 : ドライバサブルーチン先頭アドレス
N+6 : $7E(JMP)
N+7,+8 : CLOSEサブルーチン先頭アドレス

[戻る]

※ MML
MMLは文字列変数か直接記述する
(直接記述では""で括らなくてよいが、文字列変数と合成する場合は括る)

音階 : トレミフソラシ
# : 半音上げる
B : 半音下げる
U : オクターブ上げる(次の音階にのみ有効)
D : オクターブ下げる(次の音階にのみ有効)
R : 休符(長さはPnで指定)
Pn : 音長(n:0[32分〜9[全])
Vn : 音量(n:1〜5でV5を1として、1つ下がるごとに1/2)
Mx : 移調(x:音階に応じた音調となる[ex.Mト : ハ長])
Qn : 音色(n:0〜4で波形が変化する)
Tn : テンポ(n:1〜7)
(1:200/2:133/3:100/4:80/5:63/6:57/7:50)

初期値:Mト P5 V4 Q0 T4

[戻る]

※ プリンタ
専用プリンタ(MP-1041)に対してリスト出力時行モードの切替を行うためには、以下のマシン語サブルーチン呼び出しが必要な場合がある
(CALL先が処理となっているので、CALLすればよい)

・プログラムリスト印字
132行 : CALL $E02B
 80行 : LIST # (デフォルト)
 40行 : CALL $E02D
・データ出力(ユーザ定義デバイスになるため、各マシン語サブルーチンを用意する必要がある)
132行 : OPEN #ファイル番号,#デバイス番号(7〜15),$E009
 80行 : OPEN #ファイル番号,#デバイス番号(7〜15),$E000
 40行 : OPEN #ファイル番号,#デバイス番号(7〜15),$E012
・ハードコピー
CALL $E021

[戻る]

※ 変数型・定数型
数値型に違いはなく、表記法が異なるのみ

整数表記 : 0〜±999999999
小数表記 : ±0.000000001〜±99999999.9
指数表記 : ±2.93873588E-39〜±1.70141183E+38
(表示桁数9/有効桁数9)

A$ : 文字列型(A$="TEST")
$  : 16進数形式($FFFF)

[戻る]

※ 演算子
+   : 加算・結合(A+B、A$+B$)
-   : 減算(A-B)
*   : 乗算(A*B)
/   : 除算(A/B)
^   : べき算(A^B)
=   : 等号・代入(A=3、A=B+C)
> < : 不等号・比較(A>3、A<=2)

関係演算子の成立を1、非成立を0として、論理和に「+」、論理積に「*」を使って論理演算が可能

[戻る]

※ エラーメッセージ一覧

エラーメッセージ一覧
番号表示意味
1SYNTAX ERRORコマンド、またはステートメントの書き方が間違っている
2LINE NUMBER ERROR未定義の行番号を指定した
3OVERFLOW ERROR値が許容範囲を超えた
4MEMORY FULL ERRORメモリが不足している
5ERROR 1変数定義が多すぎる(およそ128個まで)
6ERROR 2ステートメントが長すぎる(79文字まで)
7ERROR 3ファイル名が長すぎる(6文字まで)
8ERROR 4除算の分母が0
9ERROR 5関数やステートメントの引数が間違っている
10ERROR 6OPEN時のエラー
11ERROR 7配列変数の使い方が間違っている
12ERROR 8NEXTに対応したFORがない
13ERROR 9RETURNに対応したGOSUBがない
14ERROR 10文字列変数に対して文字列以外を代入しようとしている
15ERROR 11FOR〜NEXTのネストが深すぎる(15まで)、または式が複雑すぎる
16ERROR 12サブルーチンのネストが深すぎる(30まで)
17ERROR 13未定義の変数が使用された
18ERROR 14配列が二重宣言された
19ERROR 15配列の添字が指定した範囲外
20ERROR 16未定義配列を参照した
21ERROR 17配列の添字が定義を超えた
22ERROR 18文字列変数に対して結合以外の演算を行おうとした
23ERROR 19未定義関数を参照した
24ERROR 20未定義ユーザ関数を参照した
25ERROR 21READに対応したDATAがない
26ERROR 22DATAの区切りが異常
27ERROR 23数値変数に対して数値以外を代入しようとした
28ERROR 24ダイレクトモードで使えないステートメントを使った
29ERROR 25プログラム中にダイレクトステートメントが存在した
30PRINTER NOT READYプリンタが動作可能状態ではない

[TOPに戻る]