create every day - 福野泰介の一日一創

MSXユーザーのためのIchigoJam入門 - MSX Advent Calendar 2015

2015/12/13 10:20:00
#MSX #IchigoJam 

この記事は「MSX Advent Calendar 2015 - Adventar」の13日目の記事です。

MSX-BASIC の1画面プログラミング技術 - nagix」を拝見し、参加しました!
MSX-FANという投稿雑誌で見た「8192階建ての塔」のエラーメッセージを利用したエンディングというスゴ技、今でもその感動を鮮明に覚えてます。

小3からのMSX育ちで、30周年を機に修理したMSXturboRで、BASICを見直し、MSXリスペクトでつくったIchigoJam。 RAM4KB、FlashROM32KB、1つのBASICプログラムは1KBまでというMSX1以上に厳しい環境を使うので、MSX時代の技が活かせます!

ということで、今回はnagixさん記事をなぞった、MSXユーザーのためのIchigoJam入門です。

・初級

変数を1文字にする
MSXは2文字まで使えた変数名ですが、TinyBasicをベースにしているIchigoJamでは変数1文字しか使えません!

行番号を1文字にする
10から始まって20、30と増やしていき、途中の行追加に備えるという古のテクニックはIchigoJamでも有効です。 ラベルの対応も検討中ですが、ラベル名を考える手間、ラベルに必要なメモリ、ラベルを探すための処理時間を考えるとさほど優先度は高くないかも。 画面ではなく1KBまでのIchigoJamですが、中間コードを使わないテキスト保存なので、行番号短縮は有効です! ちなみに、MSXで使えた行番号0は、IchigoJamでは使えません。(追記、ver1.2でラベル対応

空白は全て削除
こちらも有効です。字句解析で後述の16進数表記以外での空白は無視しています。

演算子の優先順位を把握して括弧を削減
プログラム領域節約のため、ぐっとシンプルにした演算子の優先順位。ビット演算を含めて掛け算割り算系を1つの優先順位にまとめています。 同一優先順であれば左から順に実行されるので、それを見越したカッコづかいがポイントです。 また、カッコが多いとスタックがあふれてしまい、Complex expressionエラーがでるので、その点でも有効です。

リプレイはRUN
GOTO1より短い!有効です。ちなみに、LRUN(=LOAD & RUN)というコマンドを使って、別のプログラムに連携起動して、1KBの壁を超えることもできます。

・中級

1行の文字数を40文字の倍数に近づける
IchigoJamでは横文字数32文字なので、1画面でカメラでとって共有する際は有効かも。メモリ内容的にはできるだけ長くが基本です。

比較演算子の結果を制御または計算に利用
とても有効です。Java/JavaScript言語などでいう三項演算子的なBASICならではの記述方法が懐かしい!

10 K=INKEY() 20 IF K=RIGHT X=X+1 30 IF K=LEFT X=X-1

と書くところを

10 K=INKEY() 20 X=X+(K=RIGHT)-(K-LEFT)

と短くかけます。比較演算子が真なら1を偽なら0を返すからです。MSXでは真の時-1だったので注意です。 C言語的にもTRUEは1で、プチコンでも真は1を採用しているようです。

スプライトパターンの定義
スプライトはありませんが、代わりにキャラクターパターンを簡単に定義できます。

POKE224*8,0,1,2,4,8,#10,#20,#40

#で始めると16進数です。MSXでいう&Hですね。ちなみに2進数は&Bの代わりに`を使います。 コンマで区切って連続して書き込めるのがいいでしょう!ちなみに、配列も連続代入できます。

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

NEXTの変数の省略
有効・・・というか、NEXTの後に変数はつけられません。

キーの入力待ち
有効です。

FORI=0TO1:I=INKEY()<>0:NEXT

でキー入力待ちができます。

LINE ではなく DRAW
無効、グラフィックス命令はないので使えません。ただし、ハーフグラフィクスが定義されているので自前でLINEコマンドなどをつくると楽しめます。 マシン語を使って速度アップも!

命令の省略形を使う
有効です。
PRINT → ?
LOCATE → LC
GOSUB → GSB (ver1.1)
RETURN → RTN (ver1.1)

・上級

スプライト操作にVPOKEを使う
スプライトはありませんが、画面描画はVRAM直接変更が有効です。

エスケープシーケンスの利用
エスケープシーケンスの代わりに、いくつかのキーコードをカーソル移動など特殊な画面操作に割り当ててあります。

?"AB";CHR$(LEFT,LEFT,DOWN);"CD";

・変態級

マシン語直書き
USRコマンドでARM Thumb マシン語を直接呼び出せます。詳しくは「IchidoJamでARMマシン語入門」へ!
また、プログラム領域1KBはそのままバイナリを書いておけば、保存読み出し可能なので、一見プログラムが無いように見えても実はマシン語で動くゲームとかはつくれるはず!

おまけ

8192階建ての塔風の画面を紹介しておきます。
ぜひ1KB以内でつくってみてください!

おわりに
nagixさんはじめ、たくさんの憧れのMSXプログラマーさん達に育ててもらえたこと、本当に感謝です!
MSXのような楽しいプログラミングを今度は自分が次世代のこどもたちに伝えてあげる番だと思ってつくったのがIchigoJamです。 小学生MASAHARUを始め、ソフトコンペでのこどもの活躍がうれしい限りです!

IchigoJamは、プログラミングの入り口なだけでなく、RaspberryPiやArduinoなどと同様、流行りのIoT電子工作など、シンプルでフィジカルなハードウェアいじりが楽しいコンピューター。 FacebookグループIchigoJam-FANでは大人な投稿も多数あります。

懐かしのテクニック、ぜひ周りのこどもたちにもご披露ください!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image