はじめの一歩



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

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

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


 

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

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

画面は黒背景・白い文字で正常です。

 

「1.x.x(Xx)」「0.x.x」はファームウェアのバージョンによって記載が異なります。

キーボードを入力し、文字が入力できる事を確認して下さい。

 

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

 

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

 


でランプが付き、


 

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

 

IchigoJam T でこれらの動作・操作に問題がある場合は、不良品(LPC1114FDH28 の半田付け不良)の可能性があります。
PCN へお問い合わせ下さい。

 

PCN プログラミング クラブ ネットワーク - 2016/08/08 現在 IchigoJam T で発生している不具合についてのお詫びとお知らせ

 

同じ基板になっている ai.Jam-T でも同じ問題が発生している可能性があります。

問題があった場合は aitendo へお問い合わせ下さい。


はじめてのプログラム

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

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

 

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

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


入力が終わったら

 


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

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

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



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

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



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

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


ボタンの動作を確認する

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

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

 

 

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

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


キーの割り当て

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

 

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

Caps Lock 英数

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

Shift

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

↑ ↓ ← →

カーソル移動

Enter

改行、入力の確定

Shift + Enter F12

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

Tab

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

Insert
Shift+右 Alt (1.0.2 beta3〜11 / 1.1 beta2)

Ctrl+Alt (1.1 beta3〜)

上書き・挿入の切り替え

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

Ctrl+Shift(1.1 beta3〜)

カナ(国際文字)入力の切り替え (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 + [ _(1.2 beta 5〜)
左 Alt + ] 英数は \、カナは ¥ (1.2 beta 5〜)

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

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

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

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

 

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

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


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

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

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

シリアルは関係ありません。使用するパソコン 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) 入力は JIS が Shift+¥、US が 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〜)  
AND 左右の条件が共に 1 の場合に 1 (0.9.4〜)  
OR 左右の条件がどちらか 1 の場合に 1 (0.9.4〜)  
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 で空白を認識する処理が追加され、解消されています。

 

また、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 を用いる必要があります。

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

 

横に 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.1 beta2 (正式版 1.1.1) よりモンゴル語対応版が公開されました。(起動時の表示は IchigoJam BASIC mn)

160〜223(#A0〜DF)がカタカナに代わってモンゴル語になっています。他は一緒です。

 


多くはキリル文字ですが、次の記号も入っています。

  • 160(#A0)= トゥグルグ ₮ (モンゴルの通貨単位。¥ の場所に対応)
  • 190(#BE)= No. № (モンゴル語のキーボードでは一つの記号として用意されている)
  • 191(#BF)= ケル (モンゴル遊牧民の移動式住居。仮で入れているもので後に変更される可能性あり)
  • 192(#C0)= 円 ¥ (モンゴル語入力 ¥ キーで入力。一部のキーボードで入力可能だった)

なお、1.2.0 ではカナ版同様の変更が行われている以外に 222(#DE) よ 223(#DF) が追加されています。

 

1.2 ベトナム語版

1.2.0 より新たにベトナム語版が追加されました。(起動時の表示は IchigoJam BASIC vi)

 


クオック・グーによるラテン文字・アルファベットと補助記号を用いた表示を行います。
声調記号(168(#A8)〜172(#AC)・200(#B8)〜204(#BC))は別途 1 文字で扱われていて、必要な場合は文字の上下に付けます。
次の通貨単位記号も入っています。

  • 160(#A0)= ドン ₫ (ベトナムの通貨単位。¥ の場所に対応)
  • 192(#C0)= 円 ¥ (ベトナム語入力 ¥ キーで入力)

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 モンゴル語版

モンゴル語版は 1.1 beta 2 より追加されています。

1.2 との違いはカナ版同等ですが、このバージョン固有の情報として 222(#DE)・223(#DF) は定義がなく、空白になっています。

 


〜0.9.7

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

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

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

カタカナは 0.8.2 から採用されています。このバージョンで現在の英数・記号などのフォントが定まっています。

 

参考 - MSX

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

 



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

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

 

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

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

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

 

LOCATE X,Y:PRINT CHR$(C)

POKE #900+Y*32+X,C

 

IchigoJam BIG では 32 を 16 に変更して下さい。


制御・特殊コード

一部のコードは制御用に用意されています。

INKEY でのキー判定、CHR$ での出力などで使用できます。

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

 

コード番号

意味
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.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(正式版では 1.0.0)からは横座標 0〜31、縦座標 0〜23 の 32×24 文字です。

(文字数は MSX の SCREEN 1 に同じ)左上が 0,0、右下が 31,23 となります。

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

 

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

 

 

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

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

 

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

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

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

 

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

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

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

 

1.2.0 より IchigoJam BIG が公開されています。横座標 0〜15、縦座標 0〜11 の 16×12 文字です。

 


メモリマップ

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

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

 

アドレス 内容
#000 〜 #7FF キャラクターパターン
#800 〜 #8FF 配列・変数
#900 〜 #BFF 画面のキャラクター
#C00 〜 #FFF プログラム

 

1.1 beta8 よりアドレスは #100F まで拡張され、
1.1 beta11(正式版 1.1.1) では #101F まで拡張されました。

 

アドレス 内容
#000 〜 #7FF キャラクターパターン
#800 〜 #8FF 配列・変数
#900 〜 #BFF 画面のキャラクター
#C00 〜 #1001 プログラム
#1002 〜 #100F キー状態

 

1.2 beta 4 (正式版 1.2.0) では更にキー状態が拡張され、アドレスは #1083 までになっています。

 

アドレス 内容
#000 〜 #7FF キャラクターパターン
#800 〜 #8FF 配列・変数
#900 〜 #BFF 画面のキャラクター
#C00 〜 #1001 プログラム
#1002 〜 #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

 

IchigoJam BIG は次のとおりです。

 

アドレス 横座標 縦座標
#900 0 0
#901 1 0
:
#9BE 30 23
#9BF 31 23

プログラム

例えば 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 でプログラムと一緒に保存させる事が可能です。

 

キー状態

#1002〜#100F は 1.1 beta8 (正式版 1.1.1) 以降で対応しています。

 

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

 

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

 

#1003 以降はキーバッファとなっています。

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

1.1 beta 8〜10 は #100F、1.1 beta 11〜1.2 beta  3 (正式版 1.1.1) は #101F、

1.2 beta 4 以降 (正式 1.2.0) は #1083 までとなっています。


IchigoJam 独特の記載

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

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 を用いて下さい。
    バージョンの違いで処理速度が異なるため、待ち時間を大きく変化させずに済みます。
  • 一つのプログラムで使用できる容量は 1K バイト(1022 バイト、0.9.9-RC2 より 1024 バイト)です。
    これは1行を30文字としておよそ34行=およそ1.3画面分、1行を20文字としておよそ51行=およそ2画面分となります。
  • プログラムの文字数はそのまま容量に影響します。
    例えば LOCATE→LC、PRINT→? と短縮形にした方が容量を節約できます。
    ただし行番号部分は固定のため、1 と 10000 で容量に変化はありません。
  • LRUN はプログラムでも使用できます。これを生かして長いプログラムを生成できます。
    ただし 0.9.3 まではプログラムを読み込む際に変数・配列は初期化されます。
    (値を文字で出力させ、先のプログラムで VPEEK・SCR で取り込む手法を用いていたプログラムがあります)
    0.9.4 からは CLV コマンドで初期化するようになりました。
    EEPROM や MixJuice でシーン毎にプログラムを作成して、ストーリー選択型のアドベンチャーゲームが作れそうです。
  • IchigoJam はプログラム実行中に順次プログラムを解読し、コマンドを実行しようとします。
    例えば IF で条件文に該当しない場合、THEN 以降のコマンドを一切無視します。
    これを用いて IF VER()>=対象バージョン コマンド という記載を行うと、
    対象バージョンより古いバージョンでは コマンド を無視するので、エラーにならずに処理できます。
    バージョンによって異なる処理を要する場合でもこの方法で分岐して処理可能です。