高度なテクニック


IchigoJam 向けのより高度なテクニックをまとめています。

 

ブレッドボードへ組み立てるIchigoJam 内へ移動しました。


CHR$()

IchigoJam では、CHR$(0) が初期状態で埋まっている空白、CHR$(1) が ■ になっています。

そのため、ビット処理した結果の 0・1 をそのまま CHR$() に入れる事で
空白と ■ による線画を行う事ができます。

0.9.4 からは CHR$() で , 区切りで複数の文字を出力できるようになりました。

? CHR$(0,1,2,3,4)

この方法を用いる事で、容量が少なくなり、線画も高速化しています。

擬似グラフィック

0.9.8 より擬似グラフィックに対応しました。

キャラクターコード 128〜143(16進数表記で #80〜#8F )に1文字を2×2に分けたキャラクターが入っています。

これによって 横72×縦54、0.9.9 からは 横64×縦48 の大きさで描く事ができます。
(0.9.9 以降は MSX SCREEN 3 のブロック数に同じ。ただし2色しかない)

ただし縦座標一番下は PRINT で出力するとスクロールしてしまう場合がある点にご注意下さい。POKE ではスクロールしません。

 

128(#80) に下記の該当する部分を加えた値が CHR$() および POKE で表示するコードとなります。

また、左Alt+Shift+0〜F でも入力が可能です。



配置をまとめると下記になります。



CHR$() による線画では、1画面描ききれませんが、?(PRINT の短縮形)で直接 左Alt+Shift+0〜F の表示を行うと、

BASIC プログラムからでも1画面出力する事が可能です。

ただし、右下に出力するとスクロールしてしまうため、ここを空けるか、代わりに POKE を使用して下さい。

 

更に高度な手段として、#900〜#BFF の画面状態をそのまま EEPROM に入れておき
I2CR を用いて、EEPROM から直接画面出力する方法もあります。

1画面をそのまま保存する場合に必要なサイズは 768 バイトで、1プログラム(最新は 1024 バイト)の4分の3になります。


なお、128(#80) のキャラクターコードは PanCake でバイナリーコマンドの開始コードに割り当てられているため、

PanCake を接続している場合に誤動作する恐れがあります。
これを留意するなら 128(#80) を 32(#20) や 0(#0) へ変更して下さい。


配列の拡張

0.9.9-RC6 より [0] から [101] の 102 個が配列となっていますが、もっと必要に思う場合があるでしょう。


配列・変数の領域 #800〜 を POKE・PEEK で使用する事で、
値は 0〜255 ですが、配列部分だけでも 202 個に倍増します。
変数は Z に近い部分を使う事で、更にこの数を増やす事ができます。


プログラムが短ければ、#FFF に近い領域も空いていますので、ここも使う事ができます。


値の範囲が短かければ、数は増やせます。0 と 1 でよければ1つの仮想番地に8つ入ります。

PanCake 版 GIVE UP! はこの方法で仮想の画面状態を配列・変数の領域に保持しています。


シリアル信号の仕組み

IchigoJam では PRINT などで出力している内容をそのままシリアル信号の RXD で送出します。

また、TXD で受信したデータをキーボードで入力した状態と同じように扱います。これは INPUT や INKEY() も含みます。


TXD・RXD は PC 接続 で接続するだけではなく、IchigoJam 同士をつないだりもできます。
TXD がデータ送信、RXD がデータ受信です。

IchigoJam 同士を接続してプログラムの転送を行う場合は、
そのままだと受信側が処理しきれないため、BPS 300 位まで通信速度を落として下さい。

 

マルチメディアボード PanCake は、この仕組みを利用し、PRINT で出力させたデータでグラフィックを描きます。

 

0.9.4 からは LOCATE 0,-1 として、画面出力を行わず、シリアル信号の送信のみにする事ができます。

1.1.0 からは LOCATE・CLS・SCROLL などをコード化して送出を行います。UART コマンドで無効化可能です。 


LED を出力ポート、BTN を入力ポートの代わりに使用する

LED にもソケットがあり、出力ポートの一つとして使用する事ができます。
LED 1・LED 0 がそのままオン・オフです。OUT の代わりになります。

 

また BTN もソケットがあり、入力ポートの一つとして使用する事ができます。

BTN() の状態でオン・オフを判断する事ができ、IN の代わりになります。

 

逆にいうと、OUT に LED を付ける事ができ、IN にボタンを付ける事ができます。

IN 4つを上下左右、更に BTN でゲームパッドには使えそうですね。

 

1.1.0 から IN5 に BTN、OUT7 に LED の割り当てが行われていますので、

IN・OUT で BTN・LED の対応も可能になっています。


電源を入れた時に自動でプログラムを実行させる

IchigoJam では IchigoJam に付いているボタンを押しながら電源を入れる事で、

プログラム番号 0 番のプログラムを実行する仕様になっています。(LRUN 0)

これは 0.7 から対応しているため、多くの IchigoJam で使用可能です。

 

これを生かし、GND 端子と BTN 端子をジャンパワイヤなどで接続した状態にしておくと

いつも自動起動する事が可能です。

 

今のところ EEPROM のプログラムは自動起動できません。
例えばプログラム番号 0 から LRUN する事で起動して下さい。


シリアル信号で制御する

シリアルで何か IC などの接続を行い制御を行う場合、次のコマンドを実行して下さい。

  • BPS - 通信速度の設定(初期設定 0=115200bps)
  • UART - シリアル信号の設定(1.1.0 以降。初期設定 2=LOCATE や SCROLL などのコントロールコードも送出する)

8ビット・ノンパリティ・ストップビット1ビット・フロー制御なし となります。

1.1.0 以降では特に UART11 としないと正常に送出できない事にご注意下さい。VER() を用いて、下記を行うのが便利です。


IF VER()>11000 UART1


通常の改行コードは CHR$(10)=LF を送りますので、CHR$(13) 付加させる必要があります。


ビデオ出力を非表示にして処理を高速にする

IchigoJam BASIC はビデオ出力信号も生成しています。

そのため、VIDEO 0 にして非表示にすると、ビデオ出力信号の生成を行わない分処理が高速化します。

VIDEO 1 にして表示状態に戻す事を忘れないで下さい。F8 キーに割り当てられています。