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

PCNサミットでも講演いただいた、「ドアドアmkII」MSX版の移植開発者でもある行徳さんから、IchigoJamへのアドバイス、画面の白黒反転。 メモリとスピードに制限ある環境でも、手軽にインパクトある表現ができるナイスアイデア!

課題はLPC1114に収めること。すでにほぼ容量いっぱいなので、いろいろと最適化して削りながら、最小限のサイズでの実装が必要。 MONOやINVERTなど、新コマンド案がありつつも、テレビ出力をON/OFFするVIDEOコマンドに2が渡されたら反転モードと、省エネ実装で実現。

VIDEO2 と打つだけで雰囲気ががらっと変わる。
VIDEO2:WAIT1:VIDEO1 で画面がフラッシュ!

その他、いろいろと更新。

- キー/シリアル入力バッファ拡大
従来、切り詰めて32文字までだったシリアル通信の受信バッファを、128文字まで拡大!
PLAY文用に使っていたバッファを解放したため確保できた。
パソコン、WiFi3Gなど外部機器との接続時に便利!

- IO設定を初期化するCLO追加
OUT1,-1 など、出力ポートを入力ポートへ切替などしたものを初期状態に戻すコマンド

- FORの最大ネスト4から6へ拡大
FOR I=0 TO 1:FOR J=0 TO 1: ... :NEXT:NEXT これで2段ネスト。
I,J,K,L,M,Nなど、最大6重ループできるよう拡大、GOSUB内での3重ループとメインループ他を想定。
ちなみに、GOSUBネストは最大10で変更なし。

- PLAYのMML仕様変更(暫定)
・音域拡大:O1C〜O5D→O1C〜O5B(高音域拡大、但し#が効かない)
・+に加え#での半音上げ対応
・デファルトオクターブ変更:O4→O3(音域の中心へ)
・オクターブ変更記号変更:><→<> (MSX仕様からモダン仕様へ)
・音程微調整(音痴がちょっと直った!?)
ver1.1以前との互換性にも影響する変更、オクターブの相対変更はMSXに合わせたが直感的に反しているのでいつも間違ってしまう。 プチコン3号のリファレンスを見ると、MSXのMMLと反対。 他のMMLでも記号を反転するコマンドがあったりとみんな悩んでいる様子。

- WAITにマイナス値指定で走査線分待つ
WAITはフレーム(=画面の垂直同期)の描画を待つ命令、WAIT1で1/60秒、WAIT60で1秒待つ。
ただ、微妙な速度調整には荒すぎるので、更に細かい時間分解能で待つ機能を追加。
WAIT-1で1/15720秒=(1/(60*262)秒)待つ。WAIT-262で1/60秒とほぼWAIT1相当。
テレビの画面を262行分の信号を送って描画している水平同期信号のタイミングを利用している。

- テキストファイルをバイナリ化する、bas2bin提供
IchigoJamのBASICプログラムをファームウェアとまとめて書き込むためのツールを提供
bas2bin for IchigoJam
ファームウェア(IchigoJam BASIC OS for LPC1114)のバイナリサイズをちょうど24KBにした。
起動時にFlashの最後8KB両方書かれていても消さないよう変更した。
これによって、バイナリファイルに最大1KB*4のプログラムと、4KBのデータをつなげ、まとめて書き込めます。

仮想メモリではなく、実メモリアクセスにアクセスするArmマシン語

LET[0],#7800,#4770 'SECTION 6 ?USR(#800,#6000) 10 'SECTION 7 ?USR(#800,#7000) 255

※何も書かれていないメモリ領域を読むと255が返ります

β版なので、変更される可能性もあります。
要望などはぜひ「IchigoJam-FAN」までお寄せください。

IchigoJam BASIC を書き込み、第三者に提供するライセンスプログラムもあります!
どうぞ、いろいろご活用ください!

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