KM-BASIC 仕様

特に記載がなければ MachiKania・KM-BASIC web で共通の仕様になります。

KM-BASIC for MZ-80K/MZ-700 では仕様が異なる場合があります。


行番号・ラベル

行番号は付けても付けなくても記載できます。
これはプログラムで統一する必要はなく、一部に行番号を付ける形も有効です。

行番号はラベルと同じように扱います。

 

次のプログラムはいずれも動作し、同じ動作をします。

 

10 A$=INPUT$()

20 IF A$!="" THEN GOTO 10

30 END 

LABEL LOOP

A$=INPUT$()

IF A$!="" THEN GOTO LOOP

END

10 A$=INPUT$()

IF A$!="" THEN GOTO 10

END


 

LABEL コマンドに続く英数 6 文字までの文字をラベルとして扱います。

これを GOTO・GOSUB の飛び先、RESTORE の DATA 開始参照先として設定します。


変数・配列

変数は整数型変数 A〜Z と文字列型変数 A$〜Z$ が存在します。

KM-1200(MachiKania type Z)より実数型整数 A#〜Z# も対応しています。

A・A$・A# は同時に使用できません。 

整数型変数の範囲は -2147483648〜2147483647 です。

文字型変数は実際には CHR$(0)(16 進数 00)を後ろに付けます。

 

整数型で配列も使用できます。例えば D(15) などです。

DIM で設定を行います。文字型は配列で使用できません。

 

プログラム実行開始時に変数・配列は初期化されます。

実行中に CLEAR で初期化する事も可能です。

 

2017年8月公開の MachiKania type Z ファームウェア Ver Zoea 1.06

(KM BASIC KM-1204)より変数名を 6 文字まで使用する事が可能になりました。

予め使用する変数名を USEVAR で定義します。

例えば USEVAR BAL と定義します。
浮動小数点 BAL# や文字列 BAL$、
配列 BAL() もこれで有効です。

ローカル変数では VAR、配列は DIM で更に定義します。 


16 進数表記

数字のみの場合は 10 進数表記ですが、次の場合は 16 進数扱いになります。

  • 頭に $ を付ける($1250)
  • 頭に 0x を付ける(0x1250)

文字列

文字列は " で囲みます。("ABC")

実際には終端に CHR$(0) を付加します。

文字列の結合に + を使用できます。("AB"+"CDE")

 

" そのものを文字列に使用する場合は CHR$($22) などとして下さい。


演算子

対応している演算子は次のとおりです。

 

演算子 意味
−数式 符号を反転する (KM-1110〜)
加算
減算
掛算
除算の商(小数点以下切り捨て)※
除算の余り
<< 左シフト (KM-1200 より)
>> 右シフト (KM-1200 より)
等しい場合は 1・異なる場合は 0
!= 異なる場合は 1・等しい場合は 0
左<右の場合は 1
<=

左≦右の場合は 1

左>右の場合は 1
>= 左≧右の場合は 1
AND ビット毎の AND
OR ビット毎の OR
XOR ビット毎の XOR
文字列+文字列 文字列の連結

※ KM-BASIC web では小数点以下も含めてしまい、誤動作する場合があります。

 例えば (X/16) と除算部分を()で括る事で整数値にする事が可能です。

 

演算子の優先度は上が高い順で、次のとおりです。

  • − (符号の反転)  ※ 仕様上は + の単項演算子も含む
  • * / %
  • + − (加算・減算)
  • << >>
  • < <= > >=
  • = !=
  • XOR
  • AND
  • OR

キャラクターコード

0〜255(16進数 00〜FF)のコードが存在します。初期状態は下のとおりです。

MachiKania では 96(16進数 60)に ` が出力されます。

 


 

全てのキャラクターは変更可能です。(PCG)

8×8 ドットで生成します。これを上 4×8 と下 4×8 でまとめます。

上から 16 進数 11 22 33 44 55 66 77 88 として

上が 11223344 下が 55667788 となります。

MachiKania 40 文字モードでは右 2 ドットをなくして 6×8 ドットになります。

 

  8 4 2 1 8 4 2 1 0x0E 0x0E1F1F1F  
  8 4 2 1 8 4 2 1 0x1F   
  8 4 2 1 8 4 2 1 0x1F  
  8 4 2 1 8 4 2 1 0x1F  
  8 4 2 1 8 4 2 1 0x0E 0x0E0810E0  
  8 4 2 1 8 4 2 1 0x08  
  8 4 2 1 8 4 2 1 0x10  
  4 2 1 8 4 2 1 0xE0  

 

これを PCG コマンドで設定します。
16 進数 F8〜FF は空いているので、数が少なければここを使うのが良いでしょう。

 

PCG 0xF8,0x0E1F1F1F,0x0E0810E0

PRINT CHR$($F8)

I$=INPUT$()

 

実際の動作で確認してみて下さい。

 

 

PCG はプログラム実行時に初期化します。
従って PCG を変更したい場合はそのプログラム内で設定を行う必要があります。

また、MachiKania はプログラム終了の段階でも PCG を初期化します。


色・パレット

KM-BASIC は文字色を設定する COLOR と背景色を設定する BGCOLOR が存在します。

COLOR はパレット指定になっています。

 

COLOR パレット

COLOR 5

 

パレットの初期値は次のとおりです。

パレット
0 0 0 0
1 0 0 255
2 255 0 0
3  紫 255 0 255
4  緑 0 255 0
5  水色 0 255 255
6 黄色 255 255 0
7 以降 255 255 255

パレットの範囲は MachiKania が 0〜255、KM-BASIC web が 0〜15 です。

このパレット毎の色は PALETTE コマンドを用いて変更できます。

 

PALETTE 色,赤,緑,青

PALETTE 8,128,0,255

 

背景色を指定する BGCOLOR は赤・緑・青の値を直接指定します。

 

BGCOLOR 赤,緑,青

BGCOLOR 0,0,32

 

初期状態は黒(0,0,0)です。


テキスト画面

横が 0〜29 の 30 文字、縦が 0〜26 の 27 文字となっています。

CURSOR の指定では 0 が左および上です。

TVRAM のアドレスは左上が 0、その右が 1、下が 30 となります。

 

 

CLS した時の文字は KachiMania は CHR$(0)、

KM-BASIC Web は CHR$(32) で埋められています。


グラフィック画面

KM-1200 (MachiKania type Z) よりグラフィックに対応しています。

座標は横 0〜255、縦 0〜223、色は 0〜15 が使用できます。

テキストとの同時出力は行えません。文字の出力は GPRINT を用います。

USEGRAPHIC でグラフィックモードにして線画します。

 

 

終了時はテキスト画面に戻りますので、キー入力待ちのするなどの考慮が必要です。


ゲームボタンとキーボード

KachiMania・KM-BASIC web の特色として、ゲームボタンが存在している事があります。

このボタンは KEYS() で状態を取得できます。

KM-BASIC web ではキーボードでも操作できるように
カーソル・S・F キーにも割り当てられています。(KachiMania はゲームボタンのみ)

値は次のとおりです。複数のボタン押しにも対応しています。

 

ゲームボタン キーボード
1 カーソルキー 上 ↑
2 カーソルキー 下 ↓
4 カーソルキー 左 ←
8 カーソルキー 右 →
16 Start S キー
32 Fire F キー

 

KEYS() ですべてのボタンを対象に検出しますが、

例えば KEYS(15) とすると ↑ ↓ ← → のみが対象となります。

(8+4+2+1=15)

 

KM-BASIC web は INKEY() でカーソルキーの検出が行えません(違う値が返ります)

KEYS() は正常に取得する事が可能です。


KM-BASIC の独特のコマンドと注意

KM-BASIC で他の BASIC プログラミング言語と異なる
独特な仕様のコマンドがいくつか存在します。

また、注意を要するコマンドも記載します。

 

FOR / NEXT

NEXT には変数を付けないで下さい。

ループから抜ける条件は終了値が一致している場合のみとなります。

終了値を飛ばした場合はループを抜けずに動作し続けるので注意を要します。

例えば次の場合はループから抜けなくなります。
(... 12,14,16, ... となり終了値 15 にはならないため)

 

FOR I=0 TO 15 STEP 2

PRINT I

NEXT

 

KM-1200(含む MachiKanis type Z)では範囲外でも抜ける仕様に変更されています。

 

INPUT$()

INPUT 同様に入力を受け付けますが、関数の扱いです。文字列のみが対象です。
左の文字列表示(プロンプト)はないため、必要な場合は PRINT を用いて下さい。

 

INPUT A$

  ↓
PRINT "?";
A$=INPUT$()

 

数値を入力したい場合は INPUT$ で入力を行った文字列変数を

VAL で数値に変換します。

 

INPUT A$

A=VAL(A$)

 

MUSIC

曲データは ABC 記譜法(ABC notation)です。MML と仕様が異なるところがあります。

 

PLAY "L8O4CDEFGABO5C4"

MUSIC "L:1/8"

MUSIC "CDEFGABc2"

 

READ()・READ#()・READ$()

関数の扱いです。

 

READ A,B,C

  ↓

A=READ():B=READ():C=READ()

 

KM-1200 より実数型・文字型を扱える READ#・READ$ があります。

 

STRNCMP()

文字の比較を行います。

文字列を検索する INSTR に近いですが、比較するだけです。

 

IF INSTR("ABC","A")<>0 THEN 100

IF STRNCMP("ABC","A",1)=0 THEN GOTO 100

 

文字列変数$()

A$ などの後ろに () を付けると文字列の一部を取り出せます。
MID$ に近い動きですが、開始値は 0 からとなります。(MID$ は 1 から)

開始値を負の値にすると右からになります。
文字数を省略すると末尾まですべてとなります。

 

A$="KM-BASIC"

PRINT A$(1,3) → M-B が表示されます

PRINT A$(3) → BASIC が表示されます

PRINT A$(-4,3) → ASI が表示されます

 


MachiKania と KM-BASIC web の違い

MachiKania 1.0 と KM-BASIC web 0.5 では次の違いがあります。

  • 基本的に MachiKania の方が処理速度が速くなります。
    ウェイトを入れる場合は WAIT や DRAWCOUNT を用いて下さい。
  • / による割り算を行う場合、
    KM-BASIC web では小数が発生し意図しない動作をする場合があります。
    これを避けるためには割り算の式を () で囲って下さい。
  • KM-BASIC web では GOSUB() の使用が 1 行・1 コマンドとなります。
    1 行に 2 コマンド以上入れると意図しない動作になります。
  • KM-BASIC web で INPUT() を用いる場合は戻り値を変数に一度入れて下さい。
    例えば直接 PRINT に入れると同じ内容を何度も表示させます。
  • パレット番号は KM-BASIC web では 0〜15 です。MachiKania は 0〜255 です。
  • CLS を行った時の背景は MachiKania は CHR$(0)(16進数 00)、
    KM-BASIC web は CHR$(32)(16進数 20)で埋めます。
  • マシン語を実行する EXEC コマンドは MachiKania のみ有効です。
  • CHR$(96)(16進数 60)の ` が KM-BASIC web には表示されません。
  • KM-BASIC web では INKEY() で一部の特殊キーが正常に検出できません。

他にも動作の違いがある可能性があります。


その他

  • RUN の段階でコンパイル作業を行って実行します。(インタプリタではありません)
    そのため、エラーはコンパイル時での表示になります。
  • ダイレクトモードは備わっていません。
    プログラムからのコンパイル動作が必須となります。
  • : で区切って 1 行に複数のコマンドを動作可能です。(マルチステートメント)
  • コマンドには大文字・小文字は区別ありません。