はじめの一歩



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

テレビ・キーボード・電源を IchigoJam に接続し、電源スイッチを入れると、

間もなく下記の表示が現れます。すぐに表示されます。

IchigoJam BASIC 0.9.9 以前および IchigoJam BASIC RPi は表示が異なります。

 

 

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

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

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

 

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

 

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

 

 

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


はじめてのプログラム

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

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

 

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

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


入力が終わったら

 


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

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

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



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

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



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

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


ボタンの動作を確認する

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

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

 

 

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

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


キーの割り当て

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

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

 

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

Caps Lock 英数

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

Shift

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

↑ ↓ ← →

カーソル移動

Enter

改行、入力の確定

Shift + Enter F12

行分割 (改行+カーソルから左上を上にスクロール・1.0.0 beta14〜)

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〜)

カタカナ ひらがな | ローマ字

右 Alt (~1.2.3 / RPi 除く)

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

 

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

Ctrl+Shift+K(RPi)

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

英数

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

左 Alt

左 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 行削除
F11 行のカーソル位置以降の文字を削除
F12 SWITCH (1.2.2 beta 32〜)
¥・\ ¥ (〜0.9.7) 英数は \、カナは ¥ (0.9.8〜。モンゴル版も同じ)

左 Alt + [

右 Alt + [ (1.2.4〜 / 1.2b56〜 / RPi 除く)

_(1.2 beta 5〜)

左 Alt + ]

右 Alt + ] (1.2.4〜 / 1.2b56〜 / RPi 除く)

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

Alt もカナ入力切替にしてあるのは、US キーボードの考慮です。

カナ入力はローマ字入力です。0.8.2 から対応しています。

小文字入力は kyu→キュ の他、ltu→ッ など、頭に L を付けます。

(0.9.4 より X も対応しています。xtu→ッ)長音は - です。

 

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

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


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

IchigoJam BASIC でキーボードからカナ入力する場合は、
英語キーボードでもカナ入力ができるよう、カナはローマ字入力が採用されています。

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

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

 

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

() は 1.2.0 以前が非対応で、1.2 beta 27 (正式版 1.2.1) 以降で対応されています。

[] は 0.9.3 以前が非対応で、0.9.4 (正式版 0.9.7) 以降で対応されています。

 

ア 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 です。これを超える場合は正常な値を返しません。

 

A=1:PRINT A

LET B,2:PRINT B

 

文字・文字列は BASIC そのものでは対応していません。

その影響で INKEY$ (返り値が文字)はなく INKEY(返り値がコード)だったりします。


配列

[0]〜[100] の 101 の配列が使えます。

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

0.7.6 より実装されています。

 

[1]=1:PRINT [1]

LET [2],2:PRINT [2]

 

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

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

 

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

 

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


文字列

1.2 beta 2(正式版 1.2.0)より文字列に対応しています。

変数・配列に対して "" で囲った文字列を指定できます。必ずプログラムで行う必要があります。

 

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));

 

文字列の終わりは " 以外に CHR$(0) も対象です。

 

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

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

 

10 CLS

20 INPUT A

30 PRINT STR$(A)


関数

関数は 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〜)  

計算の優先順位

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

1.0.2 beta11(正式版では 1.1.1 より)で追加された && || については

& | と同じ 3〜4 と思われますが、正式に公開されていません。

 

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

 

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

 

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

16進数・2進数

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

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

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

 

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

 

1.1 beta までのバージョンで IF 文に 16 進数表記を用いたあと、

A〜F ではじまるコマンドを入れると 16 進数を誤解読する不具合が発見されています。

 

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

 

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

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

このバグは 1.1 beta12 で空白を認識する処理が追加され、解消されていましたが、

1.2b56(1.2.4 リリース候補)で空白を無視ようになり、再度発生しています。

 

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

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

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

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

 

共に正式版では 1.0.0 からの対応となります。


キャラクターコード

ASC、CHR$、INKEY、PEEK、POKE などで用いる事ができるキャラクターコードです。範囲は 0〜255(#00〜#FF)になります。

 

32〜126(#20〜#7E)の英数・記号、161〜213(#A1〜D5)のカタカナ部分は JIS 規格に同じで、

多くのパソコンで共通しています。

 

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

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

 

横に 2 種類ならべている場合、左が 10 進数、右が 16 進数です。

 

1.2〜


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

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 へ移動

1.2 モンゴル語版


1.2 ベトナム語版


1.0〜1.1


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

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

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

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

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

 

なお、初期の 0.9.9-RC では更にキャラクターコードが移動していますが、
これはバグで、0.9.9 の途中から修正されました。(224・#E0〜 からの ←→↑↓ がなく、4文字ずれていた)

 

1.1 モンゴル語版


〜0.9.7

0.9.7 までは上のとおりです。0.8.2 でカタカナが追加され、合わせて現在の英数・記号のフォントが定まっています。

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

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

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

参考 - MSX


参考に一部影響を受けている MSX のキャラクターコードを掲載します。フォントは MSX2 以降です。

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


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

0.9.8 RC2(正式版では 1.0.0)より 左 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

 

1.2.b56〜・1.2.4〜(1.2.4RPi を除く)では 左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 になります。


制御・特殊コード

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

コードを忘れた時はこの記載が便利です。

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

 

コード番号

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

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

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

20 (#14) Page Down (カーソルを左下へ)
21 (#15)

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

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

23 (#17) End (カーソルを行末へ)
24 (#18) F10 (行削除)
27 (#1B)

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

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

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

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

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

 

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

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

 

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

キーバッファ(長押しによるオートリピート)の影響を受けない現在のキー状態を得られます。
ゲーム用途では、BTN(値) を使用する事で理想的な操作を得られるでしょう。

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


ラベル

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.9.9〜 のデフォルト / VIDEO 1・2

IchigoJam BASIC 0.9.9-RC(正式版では IchigoJam BASIC 1.0.0)からは
横座標 0〜31、縦座標 0〜23 の 32×24 文字です。(文字数は MSX の SCREEN 1 に同じ)

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

各座標はこれを超える値も指定できますが、その場合は一番右(31)および一番下(23)の位置になります。

VIDEO 1 がこの表示となります。VIDEO 2 は白黒反転、VIDEO 0 は非表示です。

 

下記は縦横の座標が 5 の倍数で表示を変えてみたものです。

 

 

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

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

VIDEO 3・4 / IchigoJam BIG

1.2.0 で IchigoJam BIG が公開されています。

1.2 beta 34-5(正式版では 1.2.2)以降で VIDEO 3 を使用して同じ表示が可能となりました。VIDEO 4 で白黒反転します。

横座標 0〜15、縦座標 0〜11 の 16×12 文字です。 

 

VIDEO 5・6

1.2 beta 34-5(正式版 1.2.2)以降対応。

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

 

VIDEO 7・8

1.2 beta 34-5(正式版 1.2.2)以降対応。
横座標 0〜3、縦座標 0〜2 の 4×3 文字です。

 


〜0.9.8

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

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

この画面サイズでは文字が画面からはみ出す報告が耐えなかったため、画面サイズの縮小で対応しています。

POKE がないため、右下に PRINT で文字を表示するとスクロールしてしまうため、下の画像では空けています。
 

 

なお、IchigoJam 初期のファームウェアは 37×27 文字になっていましたが、
このフォームウェアが動作する IchigoJam で所有している人はごく少数と思われます。

また IchigoJam はファームウェアの更新が可能です。

そのため、37×27 文字対応の考慮は必要ないと思われます。


メモリマップ

POKE・PEEK を用いてアクセスできるメモリマップは下記のとおりです。
(0.9.9-RC6・正式版 1.0.0 以降。RC11 のみ一時的にメモリマップが変わっていますが、RC12 で戻されました)

16進数表記で記載していますが、10進数表記でも正常に動作します。1アドレスの単位は 0〜255(#00〜#FF) です。

メモリマップの範囲はバージョンによって異なります。

  • 0.99-RC6〜1.1 beta7 (正式版 1.0.0〜1.0.1): #000〜#FFF
  • 1.1 beta 8〜10: #000〜#100F
  • 1.1 beta 11〜1.2 beta  3 (正式版 1.1.1): #000〜#101F
  • 1.2 beta 4 以降 (正式版 1.2.0 以降) :#000〜#1083
アドレス 内容
#000 〜 #7FF キャラクターパターン
#800 〜 #8FF 配列・変数
#900 〜 #BFF 画面のキャラクター
#C00 〜 #1001 プログラム
#1002 キー状態
#1003〜#1083 キーバッファ

キャラクターパターン

CHR$(0) から CHR$(255) までの全キャラクターパターンです。

8アドレスで1キャラクターを構成します。上からです。

PCG として POKE で書き換えができるのは

#700〜#7FF(CHR$(224)〜CHR$(255)・CHR$(#E0)〜CHR$(#FF))の領域です。

#000〜#6FF(CHR$(0)〜CHR$(223))は PEEK で参照する事はできますが、POKE で変更する事はできません。

 

アドレス キャラクターコード 縦位置
#000 CHR$(0) ( CHR$(#00) ) 上から 1 行目
#001 CHR$(0) ( CHR$(#00) )
上から 2 行目
#002 CHR$(0) ( CHR$(#00) )
上から 3 行目
#003 CHR$(0) ( CHR$(#00) )
上から 4 行目
#004 CHR$(0) ( CHR$(#00) )
上から 5 行目
#005 CHR$(0) ( CHR$(#00) )
上から 6 行目
#006 CHR$(0) ( CHR$(#00) )
上から 7 行目
#007 CHR$(0) ( CHR$(#00) )
上から 8 行目
#008 CHR$(1) ( CHR$(#01) )
上から 1 行目
:
#7FE CHR$(255) ( CHR$(#FF) )
上から 7 行目
#7FF CHR$(255) ( CHR$(#FF) )
上から 8 行目

配列・変数

2アドレスで1つの配列または1つの変数を構成します。

頭が下位8ビット、次が上位8ビット(リトルエンディアン)の16ビットで、一番上位のビットが符号ビットになります。

 

アドレス 配列・変数 上位・下位
#800 配列 [0] 下位8ビット 
#801 配列 [0] 上位8ビット
#802 配列 [1] 下位8ビット
:
#8C9 配列 [100] 上位8ビット
#8CA 配列 [101] 下位8ビット
#8CB 配列 [101] 上位8ビット
#8CC 変数 A 下位8ビット
#8CD 変数 A 上位8ビット
#8CE 変数 B 下位8ビット
:
#8FD 変数 Y 上位8ビット
#8FE 変数 Z 下位8ビット
#8FF 変数 Z 上位8ビット

画面のキャラクター

左上から右へ向かってキャラクターの参照・配置を行います。

値はキャラクターコードです。(CHR$(0)〜(255) の 0〜255。実際には POKE で出力できるキャラクター)

 

アドレス 横座標 縦座標
#900 0 0
#901 1 0
:
#BFE 30 23
#BFF 31 23

 

VIDEO 3〜8 および IchigoJam BIG の場合も #900 を左上にして、右下まで順にアドレスが並んでいます。

  • VIDEO 3・4・IchigoJam BIG: #900〜#9BF
  • VIDEO 5・6: #900〜#92F
  • VIDEO 7・8: #900〜#90B

プログラム

例えば 10 CLS というプログラムではじまり、次が 20 になる場合、下記のようになります。


アドレス 解説
#C00 10 行番号 下位8ビット・10 の下位8ビットは 10
#C01 0 行番号 上位8ビット・10 の上位8ビットは 0
#C02 4 文字数 (終了コード 0 を含む)・4 文字
#C03 67 C
#C04 76 L
#C05 83 S
#C06 0 行の終了コード
#C07 0 アドレス調整
#C08 20 行番号 下位8ビット・20 の下位8ビットは 20
:

 

※ 文字数部分は「2 バイト」と公開されているところがありますが、正しくは「1 バイト」です。

 

行番号は必ず偶数のアドレスにあります。下位8ビット・上位8ビットの順(リトルエンディアン)です。

行の終了コードは #00 1バイトですが、

ここで次が奇数のアドレスになっている場合は、補正のためにもう1バイト #00 を含めます。

これは CPU が2バイトずつ処理しているため、調整を行っています。

この仕様により、?FREE() などで見る場合、必ず偶数のバイト数が返ってきます。

プログラム終了から #FFF までは #00 が続きます。

プログラムが 1023・1024 バイトになる場合、終了コードがはみ出します。

1.1 beta8 (正式版 1.1.1) よりこのコードは #1000〜#1001 に該当しますが、
EEPROM では保存・読み出しされない固定の値となります。

 

この領域は SAVE で #C00〜#FFF の内容がそのまま保存領域へ写され、

また LOAD・LRUN では保存領域から #C00〜#FFF へそのまま写されます。

プログラムの空き領域に POKE でデータなどを入れ、SAVE でプログラムと一緒に保存させる事が可能です。

IchigoJam BASIC RPi は #C00〜#FFF の内容がそのまま SD カードへファイル保存されます。

 

キー状態

#1002 は矢印キーとスペースキーの状態を検出します。キー同時押しによる検出が可能です。

 

キー
01 (`00001) ← カーソル左
02 (`00010) → カーソル右
04 (`00100) ↑ カーソル上
08 (`01000) ↓ カーソル下
16 (`10000) SPACE スペースキー

キーバッファ

#1003 以降はキーバッファとなっています。入力によりここへ文字を蓄えます。INKEY() などで消費します。

#1003 にバッファに入っている文字数が入り、#1004 以降が入力して入っているキーです。


IchigoJam BASIC 独特の記載

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

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

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

 

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

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

 

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

AND の代わりに * を用います。

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

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

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

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

 

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

OR の代わりに + を用います。

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

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

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 が対応しています。

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

C=A/B

変数は整数で扱うので、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]〜[100] 固定です。 

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 〜

 

90 GOTO 90+I*10 (0.9.4〜)

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

SWITCH〜CASE も使えません。

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

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 から "" 囲みで文字列に対応しています。
$ は付けない代わりに文字列処理命令を用います。

 

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

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

1文字であれば、A=ASC("A") としてコードで持つ事は可能です。


その他注意する事

  • 使用できる行番号は 1〜32767 です。
  • RENUM で行番号は 10 から 10 おきに更新されますが、GOTO・GOSUB は更新されません。
    1.0.0 より行番号の変更が必要な行を表示します。
  • 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)の違いで処理速度が異なるため、
    待ち時間を大きく変化させずに済みます。
  • 一つのプログラムで使用できる容量は 1K バイト(1022 バイト、0.9.9-RC2 より 1024 バイト)です。
    これは1行を30文字としておよそ34行=およそ1.3画面分、1行を20文字としておよそ51行=およそ2画面分となります。
    これで少なすぎる場合、LRUN を用いて他番号のプログラムを呼び出す事で長いプログラムにできます。
  • プログラムの文字数はそのまま容量に影響します。
    例えば LOCATE→LC、PRINT→? と短縮形にした方が容量を節約できます。
    ただし行番号部分は固定で 2 バイトのため、1 と 10000 で容量に変化はありません。
  • LRUN はプログラムでも使用できます。これを生かして長いプログラムを生成できます。
    ただし 0.9.3 まではプログラムを読み込む際に変数・配列は初期化されます。
    (値を文字で出力させ、先のプログラムで VPEEK・SCR で取り込む手法を用いていたプログラムがあります)
    0.9.4 からは CLV コマンドで初期化するようになりました。
    EEPROM や MixJuice でシーン毎にプログラムを作成して、ストーリー選択型のアドベンチャーゲームが作れそうです。
  • INKEY() ではオートリピートに対応しています。ゲーム用途の場合、長押しにより意図しない動作をする場合があります。
    その場合、INKEY() の代わりに BTN(値) (値=UP DOWN LEFT RIGHT SPACE 0・1.0.0 以降)を使用すると
    キーバッファの影響を受けずに現在のキー状態を得られます。 (MSX でいう INKEY$ の代わりに STICK・STRIG)
  • IchigoJam BASIC はプログラム実行中に順次プログラムを解読し、コマンドを実行しようとします。
    例えば IF で条件文に該当しない場合、THEN 以降のコマンドを一切無視します。
    これを用いて IF VER()>=対象バージョン コマンド という記載を行うと、
    対象バージョンより古いバージョンでは コマンド を無視するので、エラーにならずに処理できます。
    バージョンによって異なる処理を要する場合でもこの方法で分岐して処理可能です。