戻る
BASIC LEVEL 3
SC-3000 : セガ (SEGA)

BASIC LEVEL 3

BASIC LEVEL 3はMITECが開発したSEGA SC-3000(SG-1000)用のBASICである。
(MITECはワンボードマイコン時代にBASICボードを開発しており、その流れと思われる)

ROMカートリッジで提供されており、種類もLV2A、LV2B、LV3A、LV3Bが存在し、それぞれRAM容量が異なる。
(全く別系統でHOME BASICや、同じMITEC開発の拡張FDユニット用ディスクBASICもある)

今回はBASIC LEVEL 3(A/B)を取り扱うこととする。

BASIC LEVEL 3 簡易リファレンス
コマンド
表記凡例使用例説明
AUTOAUTO [行番号][,増分]AUTO 100,5先頭に自動的に行番号を発生させる(増分を省略した場合は10)
DELETEDELETE 行番号[-[行番号2]]DELETE 100
DELETE 100-200
指定した行番号を削除する
指定した範囲の行番号を削除する
LISTLIST [行番号]
LIST [行番号][-[行番号2]]
LIST
LIST 100-200
メモリ上のプログラムを表示する
指定した範囲の行番号を表示する
LLISTLLIST [行番号]
LLIST [行番号][-[行番号2]]
LLIST
LLIST 100-200
メモリ上のプログラムを印字する
指定した範囲の行番号を印字する
RENUMRENUM [新行番号][,[旧行番号],[増分]]RENUM 1000,10,100新行番号を先頭に行番号をつけ直す
NEWNEWNEWプログラムを全て消去し、変数を初期化する
CONTCONTCONTSTOPやBREAKキーで終了したプログラムの実行を再開する
RUNRUN [行番号]RUN 100指定した行番号からプログラムを実行する(行番号を省略した場合は先頭から実行する)
SAVESAVE "ファイル名"SAVE "test"カセットテープにプログラムを保存する
LOADLOAD ["ファイル名"]LOAD "test"カセットテープからプログラムを読み込む(ファイル名を省略した場合は最初に見つかったプログラムを読み込む)
VERIFYVERIFY ["ファイル名"]VERIFY "test"カセットテープのプログラムを照合する(ファイル名を省略した場合は最初に見つかったプログラムを照合する)
[戻る]
ステートメント:プログラム制御
表記凡例使用例説明
ENDENDENDプログラムを終了する
STOPSTOPSTOPプログラムを一時停止する
REMREMREM TEST注釈を入れる(実行には無関係)
FOR...TO...STEP〜NEXTFOR 変数=開始値 TO 終了値 [STEP 増分]〜NEXT [変数][,変数2][,...]FOR I=0 TO 10 STEP 2〜NEXT IFORからNEXTまでの処理を繰り返す
GOSUBGOSUB 行番号GOSUB 1000サブルーチンを呼び出す
RETURNRETURN [行番号]RETURNサブルーチンから復帰する
GOTOGOTO 行番号GOTO 1000指定した行番号から実行する
IF...THENIF 論理式 THEN {文 | 行番号}IF A=0 THEN 10論理式の条件判断をする
ON...GOTOON 式 GOTO 行番号[,行番号2][,...]ON A GOTO 100,200式の値に応じて指定された行番号へ分岐する
ON...GOSUBON 式 GOSUB 行番号[,行番号2][,...]ON A GOSUB 100,200式の値に応じて指定された行番号のサブルーチンを呼び出す
[戻る]
ステートメント:変数関連
表記凡例使用例説明
INPUTINPUT [文字列{; | ,}]変数[,変数2][,...]INPUT "X=";Xキーボードから入力した値を変数に代入する
LETLET 変数=式LET A=1変数に値を代入する(LETは省略できる)
DATADATA 定数[,定数2][,...]DATA "TEST",765READで読み込むデータを定義する
READREAD 変数[,変数2][,...]READ A$,BDATAで定義したデータを変数に代入する
RESTORERESTORE [行番号]RESTORE 1000READで読み込むDATAの先頭行を設定する
DEFFNDEFFN関数名(パラメータ[,パラメータ2][,...]=定義式DEFFNTEST(X,A,B)=X^2+AX+Bユーザ定義関数を定義する
DIMDIM 変数名(最大値[,最大値2][,...])[,...]DIM A(100,10),B$(100)配列変数の定義をする
ERASEERASE 変数名[,変数名2[,...]]ERASE A,B$配列変数を消去する
[戻る]
ステートメント:マシン語関連
表記凡例使用例説明
CALLCALL 変数CALL A指定したアドレスのマシン語を実行する
POKEPOKE アドレス,数式POKE &HD000,&HC9指定したアドレスに値を書き込む
VPOKEVPOKE アドレス,数式VPOKE &H4000,&HFF指定したVRAMアドレスに値を書き込む
[戻る]
ステートメント:画面関連
表記凡例使用例説明
CLSCLSCLS画面を消去する
CURSORCURSOR X,YCURSOR 10,10表示位置を指定する
テキスト : X(0〜37),Y(0〜24)
グラフィック : X(0〜255),Y(0〜192)
PRINTPRINT [式[{, | ;}[式2[,...]]]]PRINT "HELLO,WORLD"画面上に表示する
LPRINTLPRINT 式LPRINT "HELLO,WORLD"プリンタに印字する
COLORCOLOR [ビット1の色(0〜15)][,ビット0の色(0〜15),(X1,Y1)-(X2,Y2),バックグラウンド色(0〜15)]COLOR 15,1,7文字などの色を指定する
範囲指定時は指定された範囲のバックグラウンドを指定する
CONSOLECONSOLE [スクロール開始行][,[スクロール終了行]][,[キークリック音モード(0〜1)]][,[CAPモード(0〜1)]]CONSOLE 0,20,1,1テキスト画面を設定する
SCREENSCREEN 描画画面(1〜2),表示画面(1〜2)SCREEN 1,1画面のモードを設定する
・画面モード
0:テキストモード
1:グラフィックモード
PATTERNPATTERN {C#文字コード(32〜255) | S#スプライトコード(0〜31)},文字列式PATTERN {C#32 | S#0},C${テキスト | スプライト}のパターンを定義する
POSITIONPOSITION (X,Y),X方向(0〜1),Y方向(0〜1)POSITION(0,0),0,1グラフィックの中心点を定義する
LINELINE [(X1,Y1)]-(X2,Y2),[カラーコード(0〜15)][,{B | BF}LINE (0,0)-(100,100),4,BF直線(B:四角形,BF:塗りつぶした四角形)を描画する
BLINEBLINE [(X1,Y1)]-(X2,Y2),[カラーコード(0〜15)][,{B | BF}BLINE (0,0)-(100,100),4,BF直線(B:四角形,BF:塗りつぶした四角形)を消去する
CIRCLECIRCLE (X,Y),半径,[カラーコード(0〜15)],[比率],[開始角度(0〜1)],[終了角度(0〜1)][,{B | BF}CIRCLE (0,0),100,2円を(B:線を入れて,BF:塗りつぶして)描画する
BCIRCLEBCIRCLE (X,Y),半径,[カラーコード(0〜15)],[比率],[開始角度(0〜1)],[終了角度(0〜1)][,{B | BF}BCIRCLE (0,0),100,2円を(B:線を入れて,BF:塗りつぶして)消去する
PAINTPAINT (X,Y),カラーコード(0〜15)PAINT (100,100),7指定した領域を塗る
PSETPSET (X,Y),カラーコード(0〜15)PSET (100,100),2指定した座標にドットを表示する
PRESETPRESET (X,Y)PRESET (100,100)指定した座標のドットを消去する
SPRITESPRITE スプライトコード(0〜31),(X,Y),パターンコード(0〜255),カラーコード(0〜15)SPRITE 0,(100,100),255,5スプライトを表示する
MAGMAG サイズ(0〜3),(X,Y)MAG 0,(100,100)スプライトのサイズを指定する
0 : 8×8
1 : 16×16
2 : 8×8 (拡大)
3 : 16×16 (拡大)
[戻る]
ステートメント:サウンド関連
表記凡例使用例説明
BEEPBEEPBEEP 2BEEP音を出力する
0 : 音を停止する
1 : 音を出力する
2 : 短い音を2回出力する
SOUNDSOUND チャンネル(0〜5),周波数,音量(0〜15)SOUND 1,440,15周波数と音量を指定してサウンドを出力する
[戻る]
ステートメント:その他
表記凡例使用例説明
OUTOUT ポート番号,数式OUT &HD0,10ポートに値を出力する
HCOPYHCOPYHCOPY画面を印字する
[戻る]
文字列関数 ※変数型
表記凡例使用例説明
ASCASC(文字列式)ASC("TEST")文字列先頭のキャラクタコードを返す
VALVAL(文字列式)VAL("123")文字列を数値に変換する
CHR$CHR$(数式)CHR$(41)指定したキャラクタコードの文字を返す
STR$STR$(数式)STR$(A)数値を文字列に変換する
SPCSPC(数式)SPC(A)指定した長さの空白を返す(出力文字式内でのみ使用)
TABTAB(数式)TAB(A)指定した位置まで空白を返す(出力文字式内でのみ使用)
TIME$TIME$TIME$="12:34:56"時刻文字列変数を操作する
HEX$HEX$(数式)HEX$(255)10進数を16進数文字列に変換する
LENLEN(文字列式)LEN(A$)文字列の文字数を返す
LEFT$LEFT$(文字列式,式)LEFT$(A$,2)文字列の左側から式で指定した桁数の文字列を返す
MID$MID$(文字列式,式1[,式2])MID$(A$,2,1)文字列の式1で指定した位置から式2で指定した桁数の文字列を返す
RIGHT$RIGHT$(文字列式,式)RIGHT$(A$,2)文字列の右側から式で指定した桁数の文字列を返す
[戻る]
数値関数 ※演算子
表記凡例使用例説明
INTINT(数式)INT(A)数式の整数値を返す(数式の値を超えない整数値)
SGNSGN(数式)SGN(A)数式の符号を返す
RNDRND(数式)RND(A)0以上1未満の乱数を返す
 1 : 次の乱数を発生する(省略した場合も同様)
-1 : 乱数係数を変更する
 0 : 同じ乱数を生成する
[戻る]
数学関数
表記凡例使用例説明
PIPIPI円周率(3.1415926536)を返す
ABSABS(数式)ABS(-1000)絶対値を返す
SINSIN(数式)SIN(PI)正弦(サイン)の値を返す
COSCOS(数式)COS(PI)余弦(コサイン)の値を返す
TANTAN(数式)TAN(PI)正接(タンジェント)の値を返す
ACNACN(数式)ACN(PI)逆正弦(アークサイン)の値を返す
ACSACS(数式)ACS(PI)逆余弦(アークコサイン)の値を返す
ATNATN(数式)ATN(PI)逆正接(アークタンジェント)の値を返す
RADRAD(数式)RAD(1)ラジアンを返す
DEGDEG(数式)DEG(1)角度を返す
EXPEXP(数式)EXP(1)自然対数の低(e)に対する指数関数の値を返す
LOGLOG(数式)LOG(1)自然対数の値を返す
LGTLGT(数式)LGT(1)常用対数の値を返す
LTWLTW(数式)LTW(1)2を底とする対数の値を返す
SQRSQR(数式)SQR(2)平方根の値を返す
[戻る]
その他関数
表記凡例使用例説明
INKEY$INKEY$INKEY$押されたキーの値を返す
STICKSTICK(スティック番号)STICK(1)ジョイスティックの方向の値を返す
STRIGSTRIG(スティック番号)STRIG(1)ジョイスティックのボタンの値を返す
INPINP(ポート番号)INP(100)指定したポート番号の入力値を返す
PEEKPEEK(アドレス)PEEK(&HD000)指定したアドレスの値を返す
VPEEKVPEEK(アドレス)VPEEK(&H2000)指定したVRAMアドレスの値を返す
FREFREFREフリーエリアの値を返す
[戻る]

※ RENUMの不具合
動作に不具合があり、行番号が乱れてしまってプログラムが壊れてしまうことがあるため、実行前には必ず記録しておくこと

[戻る]

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

[戻る]

※ カラーコード

0Clear
1Black
2Green
3Light Green
4Dark Blue
5Light Blue
6Dark Red
7Cyan
8Red
9Light Red
10Dark Yellow
11Light Yellow
12Dark Green
13Magenta
14Gray
15White

[戻る]

※ PATTERN定義
定義用の文字列は16進数
定義には16bytesが必要だが、テキスト画面では文字表示は6×8であるため、上位2bitは無視される
(グラフィック画面では8×8なのでそのまま表示される)
定義文字列には16進数のほかに「*」が使用可能で、3byte目からの奇数byteに置くと以降は「&H00」で定義される
定義文字列のbyte数が奇数だとエラーとなるが、「*」が末尾であればエラーではなくなる

[戻る]

※ サウンド
このBASICでのサウンド出力は少々変わっており、音階ではなく周波数での指定となる
周波数は110Hzから指定可能(O1A〜相当)
(一応数値限界まで指定できるが20000Hzくらいでそもそも聞こえないし、25000Hzあたりで出力がおかしくなる)
音長指定はない
(演奏をしたい場合はREAD...DATAとFOR...NEXTを使うなどして頑張るしかない)

チャンネル
0 : 音を消す
1〜3 : PSGチャンネル
4 : ホワイトノイズ
5 : 周期ノイズ

音階 O1 O2 O3 O4 O5
C1312625231047
C#1392775541109
D1472945871175
D#1563116221245
E1653306591319
F1753496981397
F#1853707401480
G1963927841568
G#2084158311661
A1102204408801760
A#1172334659321864
B1232474949881976

※ 音階は1オクターブ上がるごとに倍音になるのでそのまま倍々していけばよい

[戻る]

※ ジョイスティック
STICK(n) : n=1〜2
0 : 中立状態
1 : 上
2 : 右上
3 : 右
4 : 右下
5 : 下
6 : 左下
7 : 左
8 : 左上
STRIG(n) : n=1〜2
0 : 中立状態
1 : トリガ1押下
2 : トリガ2押下
3 : トリガ1・2押下

[戻る]

※ 定数型・変数型
数値の精度別型はなく、±9.9999999999E-99〜±9.9999999999E+99までが指定できる範囲である

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

[戻る]

※ 演算子
+   : 加算・結合(A+B、A$+B$)
-   : 減算(A-B)
*   : 乗算(A*B)
/   : 除算(A/B)
MOD : 整数の剰余(A MOD B)
^   : べき算(A^B)
=   : 等号・代入(A=3、A=B+C)
> < : 不等号・比較(A>3、A<=2)
NOT : 否定(NOT 2)
AND : 論理積(2 AND 1)
OR  : 論理和(2 OR 1)
XOR : 排他的論理和(2 XOR 1)

[戻る]

※ エラーメッセージ一覧

エラーメッセージ一覧
表記意味
Systemインタプリタ内部のエラー
Syntaxコマンド、またはステートメントの書き方が間違っている
NEXT without FORNEXTに対応したFORがない
FOR nestingFORの入れ子が8を超えた
FOR variable nameFORのループ変数が数値変数ではない
RETURN without GOSUBRETURNに対応したGOSUBがない
GOSUB nestingGOSUBの入れ子が15を超えた
Out of DATAREADに対応したDATAがない
Function Parameter関数の引数が間違っている
Command Parameterコマンドの引数が間違っている
Statement Parameterステートメントの引数が間違っている
Overflow値が許容範囲を超えた
Stack over flow括弧の数が多すぎる
PAINTが複雑すぎる
ユーザ定義関数が自分を呼び出している
Out of memoryメモリが不足している
Illegal line number異常な行番号を指定した
Undefined line number未定義の行番号を指定した
Number of Subscripts添字の個数が異常
Valve of Subscripts添字の値が異常
Array nameDIMのパラメータが配列ではない
Redimensioned array未定義の配列をERASEしようとした
N-Formula too Complex数値式が複雑すぎる
S-Formula too Complex文字式が複雑すぎる
Division Zero除算の分母が0
Type mismatch変数または定数の型が合わない
Undefined function未定義のユーザ定義関数を呼び出そうとした
Can't continueCONTによるプログラムの再開ができない
Illegal directダイレクトステートメントが実行できない
Redo from startINPUTへの入力がおかしい (再入力)
Extra ignoredINPUTへの入力がおかしい (余分なデータは破棄)
No programプログラムがないのにSAVEしようとした
Memory writingLOAD時のメモリ書込みエラー
VerifyingテープのVERIFYエラー
Device not readyプリンタが接続されていない
Unprintable未定義エラー

[TOPに戻る]