はじめの一歩


このページでのバージョン表記はバージョン数字のみで、IchigoJam BASIC のバージョンを表します。

「RPi」を含むバージョンは IchigoJam BASIC RPi のバージョンです。

IchigoCake BASIC は特筆していなければ IchigoJam BASIC 共通です。
IchigoCake BASIC の正式初バージョンは 1.3.2 で、IchigoJam BASIC 1.3.1 直後のベータ晩がベースになっています。 

 

仮想メモリの領域は BASIC/メモリマップ で記載しています。ページの記載量が多くなったので、ページ分割しています。


正常に動作しているかを確認する

起動する(通常電源を入れる)と、間もなく下記の表示が現れます。すぐに表示されます。

下は IchigoJam BASIC 1.0.0 以降での表示です。

IchigoJam BASIC 0.9.9 以前・IchigoJam BASIC RPi・IchigoCake BASIC は表示が異なります。

 

 

表示されていない場合は、接続がおかしいところがあったり、

組み立てを行っていたのであれば、どこか断線している可能性があります。確認してみましょう。

画面は黒背景・白い文字で正常です。キーボードを入力し、文字が入力できる事を確認して下さい。

 

注意: 「0」に斜線 / が入っているのは数字の 0(れい・ゼロ)、ないのは英大文字の O(オー)です。 

 

ランプは通常起動した場合、消灯の状態で正常です。

 

 

LED 1 でランプが付き、LED 0 でランプが消える事を確認します。これが動作するなら、まず正常でしょう。

SkyBerryJAM では一番左のランプ、IchigoJam BASIC RPi(Raspberry Pi)では ACT ランプが変化します。

SkyBerryJAM では OUT 127 ですべてのランプが付き、OUT 0 ですべてのランプが消えます。


はじめてのプログラム

それでは BASIC のプログラムにチャレンジです。

次のように入力してみます。1行入力した後は Enter (return) キーですよ。

 

上記画像に記載するプログラム(文)は、不特定多数の人が公開し、事実上のパブリックドメイン状態にあります。

そのため、このプログラム(文)に対し CC0 ライセンス を明示し、この内容に関する全権利を放棄します。


入力が終わったら

 


として、入力したプログラムが表示されるか確認してみて下さい。

誤りがあるようなら、修正します。

大丈夫そうであれば、これを入れましょう。



? が出てくるので数字を入力して Enter(return)、もう一つ ? にも数字を入れます。

すると2つの数字を足し算した結果と「OK」が表示されます。



こんな感じに動作すれば良いです。

Error が表示された場合はどこかが誤っています。確認してみましょう。


ボタンの動作を確認する

IchigoJam 本体にはボタンが付いています。この動作を確認してみましょう。

上のプログラムを入力した後であれば NEW としてプログラムをなくしてから入力して下さい。

SkyBerryJAM は基板の左下(ランプの左)にあるボタンが BTN になります。

Raspberry Pi にはボタンがありません。IchigoJam BASIC RPi では BTN() を BTN(SPACE) に変更して実行できます。

BTN(~) では押した状態が 1、押していない状態が 0 となりまず。これは LED と共通です。

 

 

RUN を行ったら、ボタンを押して下さい。押してる間ランプが光ります。離すと消えます。これで正常です。

ずっとプログラムが実行されている状態になるので、Esc キーで止めて下さい。

 

KumaJam には IN1、SkyBerryJAM にば IN1・IN4 のボタンもあります。

10 LED !IN(1) で IN1 ボタン、10 LED !IN(4) で IN4 ボタンの確認が可能です。

(IchigoJam BASIC 1.0.0 以降 IN では押していない状態が 1、押している状態が 0 と逆になるので、! を付けて反転します)


キーの割り当て

BASIC の特殊キー割り当ては下記のとおりです。記載がない特殊キーは一部を除きスペースと同等に動作します。

IchigoJam PC・IchigoJam ap・IchigoJam web では一部機能しないキーが存在します。

 

キー 動作
Esc プログラム実行の中断

Caps Lock 英数

大文字・小文字の切り替え

Shift

一時的な大文字・小文字切り替え、記号入力

↑ ↓ ← →

カーソル移動

Enter

改行、入力の確定

Shift+Enter (1.0.0b14~)

行分割(カーソル部に改行を入れ、カーソルより右を下の行へ)

Tab

スペース2文字 (1.0.0 beta13〜)

Insert
Shift+右 Alt (1.0.2 b3〜11/1.1 b2~1.2.3)

Ctrl+Alt (1.1 beta3〜/RPi 除く)

Ctrl+Alt+I(RPi)

上書き・挿入の切り替え

Shift + スペース

スペースの挿入 (1.0.2 beta7(1.1 beta)〜)

Delete

カーソルにある文字を削除

Back Space

カーソルに前にある文字を削除

Home

カーソルを行頭へ移動 (0.9.9 RC3〜)
End カーソルを行末へ移動 (0.9.9 RC3〜)
Page Up カーソルを左上へ移動 (0.9.9 RC3〜)

Page Down

カーソルを左下へ移動 (0.9.9 RC3〜)

カタカナ ひらがな | ローマ字(web 除く)

右 Alt (~1.2.3/RPi・Web 除く)

右 Alt+K(~1.2.4RPi/~1.2b19RPi)

Ctrl+Shift(1.1 beta3〜/RPi 除く)

Ctrl+Shift+K(RPi)

Ctrl+SPACE(1.4.0b10~)

カナ(国際文字)入力の切り替え (0.8.2〜)

英数

英数モードへ切り替え (0.9.4〜)

左 Alt
右 Alt + ] (1.2.4〜/1.2b56〜/1.2.5RPi~)

左 Alt+(Shift+)0〜9・A〜V でキャラクターを入力 (0.9.8〜)

F1

CLS (画面クリア)
F2 LOAD (ファイルの読み込み。後ろにファイル番号を入れる事が可能)
F3 SAVE (ファイルの保存。後ろにファイル番号を入れる事が可能)
F4 LIST (0.9.4 より LIST[Enter] で全プログラム一覧)
F5 RUN (プログラムの実行)
F6 ?FREE() (空き容量を表示)
F7 OUT 0 (ポート出力の OFF 化、0.9.4〜)
F8 VIDEO 1 (画面を表示、0.9.6〜) 1.1 beta は一時 VIDEO のみ
F9 FILES (1.0.0 beta14〜)
F10 行削除 (~1.2.3)・SWITCH (1.3 0~)
F11 行のカーソル位置以降の文字を削除
F12 SWITCH(1.2 ベータ版の一部)
¥ \ ¥ (〜0.9.7) 英数は \、カナは ¥ (0.9.8〜)

左 Alt + [

右 Alt + [ (1.2.4〜/1.2b56〜/1.2.5RPi~)

_(1.2 beta 5〜)

左 Alt + ]

右 Alt + ](1.2.4〜/1.2b56〜/1.2.5RPi~)

英数は \、カナは ¥ (1.2 beta 5〜)

1.2.4〜/1.2b56〜/1.2.5RPi~ の変化は左 Alt・右 Alt の機能を共通化しています。
コンパクトなキーボードでは片方の Alt しか存在していない場合があるため、その考慮です。

 

カタカナ ひらがな | ローマ字 以外にカナ入力の切替が割り当ててあるのは、US キーボードの考慮です。

また、カナ印字がない US キーボードの考慮で、カナ入力はローマ字入力です。

 

ファンクションキーは特に F4 で LIST、F5 で RUN に割り当てているパソコンが多かったため、

違和感なく操作できるのではないでしょうか。


カナ入力 (ローマ字入力)

BASIC 0.8.0 よりカナが入っています。英語キーボードでもカナ入力ができるよう、ローマ字入力が採用されています。

日本語キーボード(JIS キーボード)でキーボード印字されている文字ではない事に注意が必要です。

シリアル経由では関係ありません。USB-シリアルの場合は使用する OS の設定に依存します。

 

ローマ字の英→カナ変換は次のとおりです。

  • () 1.2 beta 27 (正式版 IchigoJam BASIC 1.2.1) 以降対応、1.2.0 以前非対応
  • [] 0.9.4 (正式版 IchigoJam BASIC 0.9.7) 以降対応、0.9.3 以前非対応 
ア A イ I ウ U エ E オ O
カ KA キ KI ク KU ケ KE コ KO
サ SA

シ SI (SHI)

ス SU セ SE ソ SO
タ TA チ TI CHI ツ TU TSU テ TE ト TO
ナ NA ニ NI ヌ NU ネ NE ノ NO
ハ HA ヒ HI フ HU FU ヘ HE ホ HO
マ MA ミ MI ム MU メ ME モ MO
ヤ YA   ユ YU   ヨ YO
ラ RA リ RI ル RU レ RE ロ RO
ワ WA   ヲ WO   ン NN (N)
ガ GA ギ GI グ GU ゲ GE ゴ GO
ザ ZA ジ ZI JI ズ ZU ゼ ZE ゾ ZO
ダ DA ヂ DI ヅ DU デ DE ド DO
バ BA  ビ BI ブ BU ベ BE ボ BO
パ PA ピ PI プ PU ペ PE ポ PO
ァ LA [XA] ィ LI [XI] ゥ LU [XU] ェ LE [XE] ォ LO [XO]
    ッ LTU XTU 子音続ける    
ャ LYA XYA   ュ LYU XYU   ョ LYO XYO
  ウィ WI   ウェ WE  
キャ KYA キィ KYI キュ KYU キェ KYE キョ KYO
シャ SYA (SHA) シィ SYI シュ SYU (SHU) シェ SYE (SHE) ショ SYO (SHO)
チャ TYA CHA チィ TYI チュ TYU CHU チェ TYE CHE チョ TYO CHO
テャ (THA) ティ (THI) テュ (THU) テェ (THE) テョ (THO)
ニャ [NYA] ニィ [NYI] ニュ [NYU] ニェ [NYE] ニョ [NYO]
ヒャ HYA ヒィ HYI ヒュ HYU ヒェ HYE ヒョ HYO
ファ FA フィ FI (FYI)   フェ FE (FYE) フォ FO
フャ (FYA)   フュ (FYU)   フョ (FYO)
ミャ MYA ミィ MYI ミュ MYU ミェ MYE ミョ MYO
リャ RYA リィ RYI リュ RYU リェ RYE リョ RYO
ヴァ(ウァ) VA ヴィ(ウィ) VI ヴ(ウ) VU ヴェ(ウェ) VE ヴォ(ウォ) VO
ギャ GYA ギィ GYI ギュ GYU ギェ GYE ギョ GYO
ジャ ZYA JA ジィ ZYI ジュ ZYU ジェ ZYE ジョ ZYO
ヂャ DYA ヂィ DYI ヂュ DYU ヂェ DYE ヂョ DYO
デャ (DHA) ディ (DHI) デュ (DHU) デェ (DHE) デョ (DHO)
ビャ BYA ビィ BYI ビュ BYU ビェ BYE ビョ BYO
ピャ PYA ピィ PYI ピュ PYU ピェ PYE ピョ PYO

 

なお、ッ の LTSU XTSU など、最新版でもメモリの都合上対応していないものがあります。


変数

アルファベッド1文字 A〜Z が変数扱いで、数値を入れるものになります。

小数は扱えず整数のみです。範囲は -32768〜32767 です。この範囲外では正常な値を返しません。
(初期のバージョンでは -32768 を扱えず、-32767~32767 の範囲)

 

A=1:PRINT A

LET B,2:PRINT B


配列

BASIC では [0]〜[101] の 102 の配列が使えます。IchigoCake BASIC は [0]~[357] の 358 です。

変数同様に数値を入れられます。入れられる値は変数同様に -32768〜32767の整数です。

BASIC 0.7.6 より実装されていますが、当初は [0]~[100] の 101 で、
BASIC 0.9.9-RC6 の #FFF まで  メモリマップ が定まると共に [101] が追加されています。

 

[1]=1:PRINT [1]

LET [2],2:PRINT [2]

 

2種類の異なる配列が必要な場合は一方を [50] からはじめる等の考慮をすると良いです。

[50+I] という感じに変数や計算式で配列の番号を定める事もできます。

 

BASIC 0.9.4 からは LET コマンドを用いて連続して値を入れる事ができるようになりました。
下記は [0]〜[5] に 0〜5 を入れています。

 

LET [0],0,1,2,3,4,5


文字列

BASIC 1.2.0・1.2 beta 2 より文字列に対応しています。

変数・配列に対して "" で囲った文字列を指定できます。

必ずプログラムで行う必要があります。ダイレクトモードでは使用できません。

 

A="ABC"

LET [0],"IchigoJam"

 

文字列に対応する命令は ASC・INPUT・LEN・LET・PRINT・PLAY・STR$ です。

例えば次のように使用します。

 

10 D="IchigoJam"

20 PRINT STR$(D)

 

10 M="CDEFGAB<C"

20 PLAY M

 

1 文字ずつ処理した場合はこうなります。

 

10 D="IchigoJam"

20 FOR I=0 TO LEN(D)-1

30 PRINT CHR$(ASC(D+I));

40 NEXT

50 PRINT

 

変数・配列に入る値は、文字列の先頭(開始する " の次にある文字)にある

仮想アドレスの番地そのものになります。

多くの場合プログラム中にあるので、#C00〜#FFF を直接返す事になります。

この事より、30 の ASC を PEEK に変更しても動作します。

 

30 PRINT CHR$(PEEK(D+I));

 

PRINT の後に何もなく改行となる場合は、末尾の " を省略できます。
(プログラムの管理上では CHR$(0) を行の終わりに付加していて、" 以外に CHR$(0) も文字列の終端扱いです)

 

INPUT は通常数値を受け付けるため、文字列を入れる場合は "" で囲う必要があります。
(実際には末尾 " を省略できるので、頭に " を入れる事で文字列扱いとなります)
この時返される文字列の開始値は画面位置の番地(#900〜#BFF)です。
そのため、スクロールすると番地が変わってしまい、取得できなくなることにご注意下さい。

次のプログラムを実行し、"ABC" などと " を含めて入力して下さい。

 

10 CLS

20 INPUT A

30 PRINT STR$(A)

 

INPUT の前に POKE #1003,1,34(IchigoCake BASIC では #1E03,1,34)を実行し、
INPUT のタイミングで " を自動入力する方法があります。


関数

関数は BASIC を触れていた人であればほぼ当時のまま扱えるでしょう。

変数の値が整数の数値のみなので、割り算の影響がある位です。

他の言語で使用されている記載も一部採用されています。

 

関数 意味 補足・注意
+ 足し算 |(OR)の代わりに使用可能
- 引き算  
* 掛け算(×) &(AND)の代わりに使用可能
/ 割り算(÷)の商(小数点以下は切り捨て) (INT(●/●))
% 割り算(÷)の余り (MOD)
( ) 優先して計算する  
= == 等しい場合に 1  
<> != 等しくない場合に 1 >< はエラー
<= 以下の場合に 1 =< はエラー
< 未満(より小さい)場合に 1  
>= 以上の場合に 1 => はエラー
> より大きい場合に 1  
& && 論理積 (& 0.7.2〜・&& 1.0.2 beta 11) (AND)
| || 論理和 (| 0.8.3〜・|| 1.0.2 beta 11) (OR) 入力は日本語キーボードが Shift+¥、
英語キーボードが Shift+\
^ 排他的論理和 (0.7.2〜) (XOR)
! 論理否定 (0.9.9-RC2〜)  
>> 右シフト (0.7.2〜) 1.1 beta6 より右の値がマイナス時は左シフト
1.1 beta10 まで算術シフト(負の値を考慮)
1.1 beta11 より論理シフト(シフトした分は0を入れる)
<< 左シフト (0.7.2〜) 1.1 beta6 より右の値がマイナス時は右シフト
~ ビット否定・全ビット反転 (0.9.9-RC2〜) ~0 (`0000000000000000 の全ビット反転)
 → -1 (`1111111111111111) 
AND 左右の条件が共に 1 の場合に 1 (0.9.4〜) 0.9.3 以前の IF は代わりに * や & を使用可能
この時の条件文は () で括る
OR 左右の条件がどちらか 1 の場合に 1 (0.9.4〜) 0.9.3 以前の IF は代わりに + や | を使用可能
この時の条件文は () で括る
NOT 条件が異なる場合に 1 (0.9.9-RC2〜)  

計算の優先順位

BASIC での計算による優先順位は下記のとおりです。(BASIC 1.0.0〜・1.0.0 beta 4〜)

 

順位 演算子の種類 内容
1 ( ) カッコ 
2 - ~ ! NOT 否定
3 * / % MOD << >> & ^ 掛け算・除り算(商・余り)・シフト・論理積・排他的論理和(ビット)
4 + - | 足し算・引き算・論理和(ビット)
5 = == <> != < > <= >= 比較
6 AND 論理積
7 OR 論理和

 

BASIC 0.9.9 RC6〜1.0.0 beta3 では下記のとおりです。それ以前のバージョンでは異なる可能性があります。

 

順位 演算子の種類 内容
01 ( ) カッコ 
02 - ~ ! 否定
03 * / % 掛け算・除り算(商・余り)
04 + - 足し算・引き算
05 << >> シフト(ビット)
06 & ^ 論理積・排他的論理和(ビット)
07 | 論理和(ヒット)
08 = == <> != < > <= >= 比較
09 AND 論理積
10 OR 論理和

16進数・2進数

BASIC 1.0.0・0.9.8 RC2 から 16 進数表記に対応しました。頭に # を付けます。

  • #5 → 5
  • #05 → 5
  • #5F → 95
  • #FF → 255
  • #FFFF → -1

PRINT で 16 進数表示にする場合は HEX$ を用いて下さい。

 

PanCake が 16 進数でコマンド送信を行う仕組みなので、これが役に立つでしょう。

 
IF 文に 16 進数表記を用いたあと、A〜F ではじまるコマンドを入れると 16 進数を誤解読してしまいます。

IchigoJam BASIC では空白(スペース)を無視し、
次の 0~9・A~F 以外の文字が出てくるところまで判断する仕様になっているためです。

 

IF A=#10 BEEP → IchigoJam BASIC では IF A=#10BEE P と解読されます。

 

回避策として : や THEN などを加えて、16進数の区切りが分かるようにして下さい。

または #10 → 16 と10進数にしたり、#10=A と左右を変更するのも有効です。

この問題は IchigoJam BASIC 1.1 beta12 で空白(スペース)を認識する処理が追加されていましたが、

空白(スペース)区切りの判別による別の問題が発生し、それを解決するために

IchigoJam BASIC 1.2b52(正式版 IchigoJam BASIC 1.2.4)より空白を完全無視する仕様になり、再度発生しています。

 

また、IchigoJam BASIC 1.0.0・IchigoJam BASIC 0.9.9 RC2 から 2 進数表記も対応しています。頭に ` を付けます。

` は JIS キーボードの Shift+@、US キーボードは通常 1 の左です。

  • `101 → 5
  • `0101 → 5
  • `1011111 → 95
  • `11111111 → 255
  • `1111111111111111 → -1

PRINT で 2進数表示にする場合は BIN$ を用いて下さい。


キャラクターコード

ASC、CHR$、INKEY、PEEK、POKE などで用いる事ができるキャラクターコードです。

範囲は 0〜255(#00〜#FF)になります。

 

32〜126(#20〜#7E)の英数・記号は ASCII 規格に同じで、現在の UTF-8 などでも共通です。

 

ただし 92 は途中から ¥ から \ に変化していて、この辺は国際規格準拠になっています。

 

現在 160~224(#A0~#DF)は国によって可変される部分で、160 は通貨記号で固定となっています。

カナ版の場合、161〜224(#A1〜#DF)は JIS 規格に同じで、シフト JIS の半角カナに共通で、

また 1980 年代に出ている日本発のパソコンなどでも共通しています。

 

BASIC 0.9.8-RC6・1.0.0 以降のコード 5〜31(#05〜#1F)および 127(#7F)の一部は
PRINT CHR$ では出力できず、POKE を用いる必要があります。

これは CHR$ ではコントロールコードに変わっているためです。 

 

BASIC 0.9.7 以前を除き、横に 2 種類ならべている場合、左が 10 進数、右が 16 進数です。

 

PDF にして紙面印刷し使用できるようにした IchigoJam キャラクターコード一覧 を公開しています。ご利用下さい。

 

BASIC 1.4.0b9


BASIC 1.4.0b8~1.4.0b9 で次のキャラクターに変更が入りました。

更に他のキャラクターも変更される可能性があります。

  • 040・#28 (
  • 041・#29 )
  • 060・#3C <
  • 062・#3E >
  • 099・#63 c
  • 123・#7B {
  • 125・#7D }
  • 202・#CA ハ (カナフォントのみ)

BASIC 1.2〜1.3


BASIC 1.2 beta 20 までに変更されたフォントで正式版 BASIC 1.2.0 以降の採用となっています。

BASIC 1.1 までのフォントとの変更は次のとおりです。

  • 英数と ¥ を 1 ドット右へ移動(カナの並びと揃うように)
  • , と ; は 1 ドット上へ移動(下に空白を空け、他の文字と重ならないように)
  • カナ のキャラクターフォントを変更
  • 2・#02〜12・#0C、15・#0E〜31・#1F、127・#7F、156・#9C、157・#9D、234・#EA を変更
  • 2・#02 のハーフトーンを 3・#03 へ、156・#9C の \ を 26・#1A へ、157・#9D の / を  25・#19 へ移動

BASIC 1.2~1.3 モンゴル語版


BASIC 1.2~1.3 ベトナム語版


BASIC 1.0〜1.1


BASIC 0.9.8 RC6〜1.2 beta 14(正式版 BASIC 1.0.0〜1.1.1)のフォントです。

 

27 までのフォントは 0.9.7 以前に含まれていましたが、
コントロールコード割り当てに順次変更されているため、実際には POKE を使用する必要があり、互換性はほぼなくなっています。

一方 128(#80)以降のキャラクターは一部を除き 1.2 以降でも共通です。

そのため、同じキャラクターが存在するキャラクターは、数字の大きい方を用いる事が推奨されます。

例えば CHR$(5) と CHR$(239) が同じキャラクターですが、 CHR$(239) を使用するようにして下さい。

 

なお、初期の BASIC 0.9.9-RC では更にキャラクターコードが移動していますが、
これは不具合で、BASIC 0.9.9-RC の途中から修正されました。

(224・#E0〜 からの ←→↑↓ がなく、4文字ずれていた)

 

BASIC 1.1 モンゴル語版


BASIC 0.8.0~0.9.7

BASIC 0.7.4~0.7.7


BASIC 0.8.0 でカタカナが追加され、合わせて現在の英数・記号のフォントが定まっています。

その前 BASIC 0.7.4~0.7.7 では英数が現在と若干異なったものになっていました。
現在も採用されているキャラクターのいくつかがこの時にできています。

16 進数は非対応だったため、10 進数必須となります。

存在していないキャラクター、場所が異なっているキャラクターがあります。

  • ¥ は 92(BASIC 0.9.8 以降の \)にあります。
  • 126 の 〜 は上にずれたものです。(MSX に同じ)
  • このバージョンでは 27 以前のコードも PRINT CHR$ で出力します。
    BASIC 0.7.4 で CHR$ が追加されています。POKE はまだ存在しませんでした。
    7〜31 の空いている部分の一部はコントロールコードが入っています。

参考 - MSX


参考に一部影響を受けている MSX のキャラクターコードを掲載します。

フォントは MSX2+ 以降です。(ひらがなが変更されています)

数値は VPOKE 使用時で、0〜31(16 進数 &H00〜&H1F)を CHR$() で出力する場合は 2 バイト使用して出力します。

 

MSX は株式会社MSXライセンシングコーポレーションの登録商標です。

MSX is a registered trademark or trademark of the MSX Licensing Corporation


キャラクターコードの入力

BASIC 1.0.0・0.9.8 RC2 より
左 Alt キー+英数 または 左 Alt+Shift+英数 でキャラクターコードを直接入力できるようになっています。

割り当ては下記のとおりです。(Shift+ は Shift も押しながら)

 


16進数表記と比較すると分かりやすいです。


コード番号 割り当てキー
#80〜#8F (128〜143・仮想グラフィック) 左Alt+Shift+0〜F
#90〜#9F (144〜159・罫線など) 左Alt+Shift+G〜V
#E0〜#EF (224〜239・矢印・丸など) 左Alt+0〜F
#F0〜#FF (240〜255・イチゴなど) 左Alt+G〜V

 

BASIC 1.3.0〜・1.2b56〜 および BASIC 1.2.5RPi~・RPi 1.2b20RPi~ では
左Alt の代わりに 右Alt も使用できます。

また Alt+(Shift+)W〜Z で Alt+(Shift+)0〜3 の文字を出力します。

 

0〜31・127 のキャラクターは直接入力する事はできません。POKE を使用する必要があります。

次の2つがほぼ同等の動作になりますが、

LOCATE・PRINT ではコントロールコードになるところが、POKE ではキャラクターになります。

 

LOCATE X,Y:PRINT CHR$(C)

POKE #900+Y*32+X,C

 

VIDEO 3・4 および IchigoJam BIG では 32 を 16 に変更して下さい。

VIDEO 5・6 では 8、VIDEO 7・8 では 4 になります。

BASIC 1.4.0~・1.3b8~ では横幅を POS(3) で得る事ができます。 


制御・特殊コード

一部のコードは制御用に用意されています。INKEY でのキー判定、CHR$ での出力などで使用できます。

28〜32(#1C〜#20)の代わりに LEFT・RIGHT・UP・DOWN・SPACE が使えます。

 

コード番号

意味
008 (#08) Back Space (カーソル左の文字を削除)
009 (#09) Tab (空白2つ)
010 (#0A) Enter (LF コード)
011 (#0B) 水平タブ ※ 1.2 beta 15 までで廃止
012 (#0C) F11 (行のカーソル位置以降の文字を削除)
左上にカーソルがある時は画面消去(CLS)
013 (#0D) (改行・CR コード)
014 (#0E) Shift+スペース (スペースの挿入)
015 (#0F) かな (カナ入力モードの切り替え)
016 (#10) Shift+Enter (行分割)
017 (#11) Ins・ShIft+右Alt (上書き・挿入モード切り替え)
018 (#12) Home (カーソルを行の頭へ)
019 (#13)

Page Up (カーソルを左上へ)

<19><12> で画面消去(CLS)

020 (#14) Page Down (カーソルを左下へ)
021 (#15)

<21><28〜31> で左右上下への画面スクロール(SCROLL)

<21><32+X座標><32+Y座標> でカーソル移動(LOCATE)

023 (#17) End (カーソルを行末へ)
024 (#18) F10 (行削除)
027 (#1B)

Esc (プログラム実行の中断)

028 (#1C) LEFT ←・左矢印 (カーソルを左へ移動)
029 (#1D) RIGHT →・右矢印 (カーソルを右へ移動)
030 (#1E) UP ↑・上矢印 (カーソルを上へ移動)
031 (#1F) DOWN ↓・下矢印 (カーソルを下へ移動)
032 (#20) SPACE スペース・空白
127 (#7F) Delete (カーソル(右)の文字を削除)

5PRINT で 28〜31(#1C〜#1F)も使用できますが、

BASIC 1.1 beta12 までは文字が存在しない場合(0(#00)の場合)は左へ移動してしまうので、
意図しない動作をするかもしれません。

BASIC 1.1 beta13 で改修され、28〜31 も使えるようになりました。

 

これ以外に INKEY では 0(#00)を用います。何も押されていない時です。

BASIC 1.2 以降、シリアルから CHR$(0) を送出している場合、INKEY では 256(#100)になります。

 

BASIC 1.0.0 以降 28・LEFT 29・RIGHT 30・UP 31・DOWN 32・SPACE は
INKEY の代わりに BTN(値) を使用する事によって

キーバッファ(長押しによるオートリピート)の影響を受けない現在のキー状態を得られます。
また、BTN(-1) で複数キーの同時検出も可能です。
これは PEEK(#1002)、IchigoCake BASIC は PEEK(#1E02) と同じ値です。メモリマップ も参照して下さい。

BASIC 1.4.0b5 以降、X キーの 88 も割り当てが増えています。

ゲーム用途では、BTN(値) を使用する事で理想的な操作を得られるでしょう。

また、CLK を用いてキーバッファをなくす方法もあります。


ラベル

BASIC 1.2.0・1.2 beta 8 より
行番号に代わってラベルを使用する事ができます。ラベルは @ラベル名 です。

: と ' 以外をラベル名として有効としていて、多くの記号やカナも有効ですが、

ラベル名の推奨は 英大・数 の組み合わせとなっています。後に変更される可能性があります。

 

次のプログラム2種類は同じ動作をします。

 

10 '

20 PRINT "IchigoJam ";

30 GOTO 10

10 @LOOP

20 PRINT "IchigoJam ";

30 GOTO @LOOP



画面構成

LOCATE(LC)や VPEEK(SCR)で指定する座標は 横座標,縦座標(X 座標,Y 座標)の順です。

左上が 0,0 となります。これはすべての画面モードで共通です。 


VIDEO 0・1 は BASIC 0.9.4 以降、

VIDEO 2 は BASIC 1.2.0・1.2 beta 9 以降、
VIDEO 3~8 は BASIC 1.2.2・1.2 beta 34-5 以降で対応します。

IchigoJam BASIC RPi では BASIC RPi 1.2.5RPi・1.2b17RPi より
これらの VIDEO コマンドが対応しています。

 

PRINT で末尾に ; を入れずに出力し、縦座標一番下にカーソルがある場合は1行上にスクロールします。

 

また右下で文字を出力した場合も1行上にスクロールします。
POKE で出力した場合はスクロールしません。

縦座標・横座標は画面サイズを超えた値も指定できますが、その場合は一番右および一番下の位置になります。 

 

VIDEO を実行した際、画面サイズが異なる場合は画面がクリアされます。
反転処理や VIDEO 0 による非表示では画面クリアされません。

 

VIDEO の画面モードを一覧すると、次のとおりです。
ビデオ出力(SWITCH 0)以外に液晶モジュール(SWITCH 1・下項目参照)での表示も含めました。

 

画面モード 画面サイズ 文字・背景  
VIDEO 0 非表示 BASIC 0.9.4 以降対応
VIDEO 1・SWITCH 0 32 ✕ 24 文字 白文字・黒背景 BASIC 0.9.9-RC 以降のデフォルト
VIDEO 2・SWITCH 0 32 ✕ 24 文字 黒文字・白背景  
VIDEO 3・SWITCH 0 16 ✕ 12 文字 白文字・黒背景 IchigoJam BIG 画面サイズ
VIDEO 4・SWITCH 0 16 ✕ 12 文字 黒文字・白背景  
VIDEO 5・SWITCH 0 08 ✕ 06 文字 白文字・黒背景  
VIDEO 6・SWITCH 0 08 ✕ 06 文字 黒文字・白背景  
VIDEO 7・SWITCH 0 04 ✕ 03 文字 白文字・黒背景  
VIDEO 8・SWITCH 0 04 ✕ 03 文字 黒文字・白背景  
VIDEO 1・SWITCH 1 16 ✕ 08 文字 液晶モジュール BASIC 1.2.2 以降対応
VIDEO 2・SWITCH 1 16 ✕ 08 文字 液晶モジュール・反転 BASIC 1.4.0b3 以降対応

 

BASIC 1.4.0~・1.3b8~ では横幅を POS(3)、縦幅を POS(4) で得る事ができます。 

 

下の各画像では、縦横の座標が 5 の倍数で表示を変えてみています。

 

VIDEO 1・2

横座標 0〜31、縦座標 0〜23 の 32×24 文字です。

左上が 0,0、右下が 31,23 となります。

VIDEO 1 は白文字・黒背景。VIDEO 2 は白黒反転です。

 

VIDEO 1 は BASIC 0.9.9-RC
(正式版では BASIC 1.0.0)以降のデフォルトです。
文字数は MSX の SCREEN 1 に同じになっています。

 

VIDEO 3・4

横座標 0〜15、縦座標 0〜11 の 16×12 文字です。
左上が 0,0、右下が 15,11 になります。

VIDEO 3 は白文字・黒背景、VIDEO 4 で白黒反転します。

 

BASIC 1.2.0 で公開されていた
IchigoJam BIG が VIDEO 3 と同じ表示になります。


VIDEO 5・6

横座標 0〜7、縦座標 0〜5 の 8×6 文字です。

左上が 0,0、右下が 7,5 になります。

VIDEO 5 が黒背景・白文字、VIDEO 6 で白黒反転します。

VIDEO 7・8

横座標 0〜3、縦座標 0〜2 の 4×3 文字です。

左上が 0,0、右下が 3,2 になります。

VIDEO 7 が黒背景・白文字、VIDEO 8 で白黒反転します。


 

LPC1114 使用の IchigoJam BASIC・IchigoCake BASIC では
バージョンによりカーソルの点滅似合わせて画面が左右に振れる場合があります。

PRINT がループ状態になっている場合、表示に変化がない場合は PRINT しないようにすると振れを軽減できます。

また、IchigoJam BASIC RPi・IchigoJam web では発生しません。IchigoJam BASIC RPi を使用するのも解決手段です。

 

BASIC 0.9.8 以前

BASIC 0.9.8 までは横座標が 0〜35、縦座標が 0〜26 の 36×27 文字となっています。

左上が 0,0、右下が 35,26 となります。

この画面サイズでは文字が画面からはみ出す報告が耐えなかったため、
仮想メモリのメモリマップ対応と共に画面サイズの縮小で対応しています。
 

 

なお、IchigoJam BASIC の初期は 37×27 文字になっていましたが、
この IchigoJam BASIC が動作する IchigoJam を所有している人はごく少数と思われます。
現在公開されているファームウェアで最も古い IchigoJam BASIC 0.7 の段階で、すでに 36✕27 文字になっています。

この当時はまだ IchigoJam 初代プリント基板が公開される前で、ユニバサール基板やブレッドボードなどで作られています。

また IchigoJam BASIC は更新が可能です。そのため、37×27 文字対応の考慮は必要ないと思われます。


液晶モジュール

BASIC 1.2.2 より ST7567 および ST7565 を用いた

128×64 ピクセルの液晶モジュールに対応しています。

(現在 ST7567 が多く採用されています。ST7565 は運営者が動作確認できています)

IchigoJam フォントで表示するため、液晶モジュールのフォントなしで動作します。

IchigoCake BASIC も対応していますが、IchigoJam BASIC RPi は非対応です。

 

表示できる文字数は 16×8 文字となります。
VIDEO でのビデオ出力と同じようにプログラムを表示・入力できます。

関数電卓やポケットコンピュータのように使用する事ができます。

この液晶は表示・非表示の切り替えで残像が残るため、
素早い画面の変化には不適合です。これを考慮する必要があります。

 

液晶モジュールと IchigoJam を次のように接続します。

液晶モジュールによって端子の表記が異なりますが、共通した 8 端子が存在しているようです。

 

液晶モジュール - IchigoJam
SDA・SDI・SI - VIDEO2
SCK・SCL・SCLK・SDL - IN1
A0・D/C・D/I・RS - IN2
RES・RESET・RST・RSTB - IN4
VCC・VDD - VCC・3.3V・5V ☆
BLED・LA・LED・LEDA -★- VCC・3.3V・5V ☆
GND・VSS - GND
CS・CSB - GND

★ LED 端子は外しても使用可能です。外すと液晶のバックライトが光らなくなります。

☆ 液晶モジュールによって 3.3V の場合と 5V の場合があります。どちらも使用できる場合もあります。

 

電源を入れた後 SWITCH を実行して下さい。F10 に割り当てられています。(ベータ版では一時的に F12 割り当て) 

再度 SWITCH を実行してビデオ画面に戻せます。SWITCH 1 で液晶、SWITCH 0 でビデオ画面へ戻す事も可能です。
VIDEO 0 による非表示、VIDEO 1 の再表示も可能です。1.4.0b3 より VIDEO 2 で反転表示ができるようになっています。

 

BASIC 1.3.2b12(正式版 1.4.0)より液晶のコントラストが追加されています。SWITCH 1,5 などと値を加えます。

値は 0~63 です。(0 が最も薄い・63 が最も濃い)デフォルトは 14 になっています。

液晶モジュールによって最適なコントラストの値が異なるため、この値は可変できるようにするのが良いでしょう。

液晶モジュールによってはデフォルト値ではかなり薄く表示される場合もあります。

よく見ると薄く表示されている場合があり、この場合はコントラスト値を調整して使用できます。


IchigoJam BASIC・IchigoCake BASIC 独特の記載

変数やコマンドの制限から、IchigoJam BASIC・IchigoCake BASIC では独特の記載をしなければいけない場合があります。

IF は BASIC 0.9.4 より AND・OR・ELSE に対応しただめ、他の BASIC と同じように記載が可能となっていますが、

旧バージョン対応で *・+ も残ると思われます。

IF~THEN の THEN はここでは表記していますが、実際には省略可能です。

 

他の BASIC でよく用いられる記載 IchigoJam・Cake BASIC での記載 解説
IF A=1 AND B=1 THEN C=0

IF (A=1)*(B=1) THEN C=0

AND の代わりに * を用います。THEN は省略可

0.7.2 以降は & も使用可能です。

0.9.4 から IF に AND が対応しています。

IF (A=1)&(B=1) THEN C=0 (0.7.2〜)

IF A=1 AND B=1 THEN C=0 (0.9.4~)

IF A=1 OR B=1 THEN C=0

IF (A=1)+(B=1) THEN C=0

OR の代わりに + を用います。THEN は省略可

0.8.3 以降は | も使用可能です。

0.9.4 から IF に OR が対応しています。

IF (A=1)|(B=1) THEN C=0 (0.8.3〜)

IF A=1 OR B=1 THEN C=0 (0.9.4~)

200 IF A=1 THEN B=1 ELSE C=1

200 IF A=1 THEN B=1:GOTO 220

210 C=1

0.9.3 までは IF 文に ELSE がないため、
次の行で処理していました。
0.9.4 から IF の ELSE が対応しています。

200 IF A=1 THEN B=1 ELSE C=1
(0.9.4~) 

C=INT(A/B) C=FIX(A/B)
C=A¥B C=A\B

C=A/B

変数は整数で扱うので、INT・FIX は外します。

小数点以下切り捨てなので FIX の仕様です。
負の値では INT と変わってくる事にご注意下さい。

I$=INKEY$:IF I$="5" THEN A=0

I=INKEY():IF I=ASC("5") THEN A=0 変数は数値で扱うので、文字は ASC で変換します。

I$=INKEY$:IF I$=CHR$(32) THEN A=0

I=INKEY():IF I=32 THEN A=0 コードであれば CHR$ を用いる必要はありません。

I=&H5B

I=#5B (0.9.8〜) 0.9.8 より16進数表記に対応し # を頭に付けます。

I=&B10101111

I=`10101111 (0.9.9〜) 0.9.9 より2進数表記に対応し ` を頭に付けます。

A(0)=1

[0]=1 配列は [0]〜[101] 固定です。 

10 FOR I=0 TO 100

20 〜

30 NEXT I

10 I=0

20 〜

30 I=I+1: IF I<=100 GOTO 20 

0.9.7 までは FOR〜NEXT は使えないので、
IF で代用します。
0.9.8 より FOR〜NEXT に対応しています。
NEXT に変数は付けません。

10 FOR I=0 TO 9:READ D(I):NEXT I

20 DATA 0,1,2,3,4,5,6,7,8,9

10 LET [0],0,1,2,3,4,5,6,7,8,9
(0.9.4〜)

READ・DATA は使えないので直接入れます。
0.9.4 から LET で複数の配列へ代入できます。

90 ON I GOTO 100,110,120

100 IF I=1 THEN 〜

110 IF I=2 THEN 〜

ON〜GOTO は使えないので、IF で代用します。

SWITCH〜CASE も使えません。

0.9.4 からは GOTO に変数を使用し分岐可能です。

90 GOTO 90+I*10 (0.9.4〜)

90 ON I GOSUB 100,110,120

90 GOSUB 90+I*10 (0.9.6〜)

0.9.6 からは GOSUB に変数を使用し分岐可能です。

10 B$="BASIC"

20 PRINT B$

10 B="BASIC"

20 PRINT STR$(B) (1.2 beta 2〜)

1.2 から "" 囲みで文字列に対応しています。
$ は付けない代わりに文字列処理命令を用います。

MID$(B$,3,2)

STR$(B+3,2) (1.2 beta 2~)

STR$ で MID$ のように扱う事ができます。

 

その他、変数が A〜Z のみで整数の数値でしか扱えない事に注意して下さい。

XX=0、Y=5.5 などは IchigoJam BASIC で扱えません。


エラー

IchigoJam BASIC・IchigoCake BASIC では次のエラーが表示されます。バージョンによって表示が異なります。

 

出力 意味
Break プログラムを中断した ※
Complex expression 式が複雑すぎる。例えば () が多すぎる
Divide by zero 0 で割ろうとした
File error ファイルエラー。ファイル番号の指定・EEPROM アクセス関連のエラー
Illegal argument 引数指定に誤りがある。例えば FOR I=1 TO 0
Index out of range 配列で使用できる範囲以外を指定している
Out of memory 領域の範囲を超えた。例えばプログラムの空き容量がなくなった
Not match 組み合わせがおかしい。例えば FOR がないのに NEXT が出てきた
Segmentation fault 式が複雑過ぎる。スタックの許容範囲からあふれた
Stack over flow スタックの許容を超えた。例えば GOSUB のサブルーチンが深すぎる
Syntax error コマンド等を解読できない。通常は文法の誤り
Too long 長過ぎる。1 行が長過ぎる

Undefined line・Line error

行の指定に誤りがある。存在しない行を指定した

※ IchigoJam BASIC・IchigoCake BASIC では処理を中断する一つのエラーとして扱っています。


その他注意する事

  • 使用できる行番号は 1〜32767 です。
    BASIC 1.2.2 より 16385~32767 は通常の LIST では表示されない隠し状態になります。
  • RENUM で行番号は 10 から 10 おきに更新されますが、GOTO・GOSUB は更新されません。
    BASIC 1.0.0 より行番号の変更が必要な行を表示します。
    BASIC 1.3.0 より一部を除き GOTO・GOSUB の行番号も変更します。
  • PRINT で出力していない時は CHR$(0) になっています。一方でスペース・空白は CHR$(32) です。
    これは VPEEK・SCR・PEEK で影響を受けます。(多くの BASIC は CHR$(32) です)
  • 条件判断に対して、真は 1、偽は 0 を返します。多くの BASIC では真が -1 です。
    そのため論理式は X=X-(I=ASC("4"))+(I=ASC("6")) と、他とは +・ー 逆になります。
  • ウェイト(一定時間停止)を行う場合は WAIT や TICK を用いて下さい。
    バージョンや実行環境(IchigoJam web や IchigoJam BASIC RPi)の違いで処理速度が異なるため、
    待ち時間を大きく変化させずに済みます。
  • IchigoJam BASIC で一つのプログラムで使用できる容量は 1K バイトです。
    (初期は 512 バイト、BASIC 0.8.6 より 1022 バイト、BASIC 0.9.9-RC2 より現在 1024 バイト)
    これは1行を30文字としておよそ34行=およそ1.3画面分、1行を20文字としておよそ51行=およそ2画面分となります。
    これで少なすぎる場合、LRUN を用いて他番号のプログラムを呼び出す事で長いプログラムにできます。
    IchigoCake BASIC は 4096 バイトに拡張されています。これは EEPROM の扱いにも影響があります。
  • プログラムの文字数はそのまま容量に影響します。
    例えば LOCATE→LC、PRINT→? と短縮形にした方が容量を節約できます。
    ただし行番号部分は固定で 2 バイトのため、1 と 10000 で容量に変化はありません。
    詳細は BASIC/メモリマップ の プログラム を参照して下さい。
  • 最新版で 1 行の最大文字数は 200 文字です。これは行番号とその右の空白を含みます。
    またプログラム以外にダイレクトモードで入力する場合の文字数も共通で 200 文字です。
  • LRUN はプログラムでも使用できます。これを生かして長いプログラムを生成できます。
    ただし BASIC 0.9.3 まではプログラムを読み込む際に変数・配列は初期化されます。
    (値を文字で出力させ、先のプログラムで VPEEK・SCR で取り込む手法を用いていたプログラムがあります)
    BASIC 0.9.4 からは CLV コマンドで初期化するようになりました。
    EEPROM や MixJuice でシーン毎にプログラムを作成して、ストーリー選択型のアドベンチャーゲームが作れそうです。
  • IchigoJam BASIC・IchigoCake BASIC はプログラム実行中に順次プログラムを解読し、コマンドを実行しようとします。
    例えば IF で条件文に該当しない場合、THEN 以降のコマンドを一切無視します。
    これを用いて IF VER()>=対象バージョン コマンド という記載を行うと、
    対象バージョンより古いバージョンでは コマンド を無視するので、エラーにならずに処理できます。
    バージョンによって異なる処理を要する場合でもこの方法で分岐して処理可能です。

IchigoCake BASIC と IchigoJam BASIC の違い

2019年4月より IchigoCake BASIC が製品発売されました。IchigoCake BASIC は IchigoJam BASIC と次の点が異なります。

  • プログラムサイズが 4k バイトになっています。IchigoJam BASIC は 1k バイトなので、領域が 4 倍です。
  • 配列が [0]~[357] になっています。IchigoJam BASIC は [0]~[101] なので、約 3.5 倍です。
  • 本来へのプログラム保存は 0~5、EEPROM は 100~131(1024k EEPROM の場合)となっています。
    EEPROM 保存も 4k バイト単位なので、IchigoJam BASIC とは別に EEPROM を用意する事をおすすめします。
  • 上記の拡張により、IchigoCake の仮想メモリは IchigoJam BASIC とは一部異なります。メモリマップ も参照して下さい。
    仮想メモリへアクセスしているプログラムは変更が必要な場合があります。
  • PanCake を操作する IchigoCake 独自の PC.~ コマンドが追加されています。
    IchigoJam+PanCake では PRINT で出力する必要があり、通常は IchigoJam BASIC の画面はコマンドで埋まりますが、
    PC.~ コマンドを使う事で、IchigoCake BASIC も使用でき、2 画面表示を実現できます。
  • キーボード切り替えは KBD コマンドが使用できます。IchigoJam BASIC RPi と同じ仕様です。