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

アプリをケータイする文化は、日本から始まった!

2001年、世界初のアプリ対応ケータイとして発売された docomo F503i/P503i。 低速で高額な2Gネットワークのため、初搭載された「iアプリ」の最大容量は10kbyte(わずか約1万文字)。 この10KBになんとか納めてリリースしたパケット通信料を節約するブラウザアプリが「jigブラウザ」のベースです。

Javaのクラスを使わないのはもちろん、メソッド数を減らし、バイトコードを後処理で減らし、圧縮の最小化を図るなどなど。 いかに誰もやってなさそうな削減テクニックを編み出すか? 楽しく、あれこれ工夫できたのは、すべて利用者の喜びのため。 できた達成感と共に、一利用者としての楽しみもあって一石二鳥。 使っている内に、またやりたいことが増えるので、容量ダイエットに励み、機能アップ、というサイクル。

あれから18年、舞台はArmマイコン上のC言語でOSとして実装する、IchigoJam BASIC。 衝撃価格、100円 32bit CPU、LPC1114の容量は32KB。 8KBをユーザープログラムの保存領域として使うので、残り24KBがOSに許された容量です。

IoT、ローマ字対応を終え、いよいよ完成が見えてきた新バージョン 1.3 リリースを目前に、100byte単位の大減量に成功。勢いに乗って実装したのが RENUM コマンド!


RENUM(リナンバー、リナム)コマンドは、行番号を振り直すコマンド。
今まではプログラム内で指定してある行番号は手で変更する必要がありましたが、1.3からは自動で振り直しされます!(一部、制限あり)

1 LED1:WAIT10 2 LED0:WAIT10 3 GOTO1

とLEDを点滅させるプログラム、2と3の間にキーを押したら止めるプログラムを追加したい。 そんな時に RENUM コマンド。

RENUM OK LIST 10 LED1:WAIT10 20 LED0:WAIT10 30 GOTO10 OK

3行のGOTO1がGOTO10へと書き換わるようになりました。これで25として新たな行が追加できます。

25 IF INKEY() END

RENUMのパラーメータで1から1ずつにも振り直せます。

RENUM1,1 OK 1 LED1:WAIT10 2 LED0:WAIT10 3 IF INKEY() END 4 GOTO 1

ここで制限、RENUM100と、100行から10ずつにすると、このように一部欠けます。(GOT100、Oが欠けた)

RENUM100 OK 100 LED1:WAIT10 110 LED0:WAIT10 120 IF INKEY() END 130 GOT100

これはプログラム量が変化して、容量オーバーやプログラム領域外を破壊してしまわないように、加えて、容量不足で対策困難なための制限です。 動かせば Syntax error が起きるので手動で修正してください。行番号を1から10000など大きく変化させると、元がGSBだったかGOTOだったか分からなくなるので注意です。

実際使ってみると思いの外、快適です。今まで、ご不便おかけし、すみませんでした。

RENUM対応ベータ版、ダウンロードはこちら
IchigoJam 1.3b03.zip

IchigoJam web」 でも、体験いただけます!

IchigoJam 1.3、MacやWindowsでも動くアプリ版も準備中。

IchigoJam ver 1.3b3 メモリマップ

* ver 1.2.3との互換性を取る形で1.3b2から変更 (keybuf 126byteへ戻す、i2cbuf 54byteへ拡大)

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