【IchigoJam】文字を拡大してみた|みけCAT https://t.co/uUmv8889cJ
— みけCAT (@mikecat_mixc) January 19, 2025
投稿しました。 #note #IchigoJam
IchigoJamのフォントは8x8のドットでできています。キャラクターコードの128から43の16文字は、4x4のドットで表現できる全パターン。
IchigoJam 1.3β8で4x4ドットサイズで点を描画できるPSETコマンドとして登場し、IchigoJam 1.3.2b19でDRAWとして実装したのが、ハーフグラフィクス機能です。
「キャラクターパターンとグラフィック文字でビットとドットの関係が逆方向」なのは、原点が左上となるハーフグラフィクスの座標系に合わせて絵文字の順番が設計されているため、4倍角する3つの方法のひとつ、DRAWコマンドを使うと比較的素直に表示できます。
5 C=ASC("A"):X=15:Y=12 10 FORI=0TO7:FORJ=0TO7:DRAWX*2+J,Y*2+I,PEEK(C*8+I)>>(7-J)&1:NEXT:NEXT
記事内の4倍角表示のプログラムを少し短縮してみました
100 C=#FF 110 FOR Y=0 TO 3 120 P=PEEK(C*8+Y*2) 130 Q=PEEK(C*8+Y*2+1) 140 FOR X=7 TO 1 STEP -2 160 D=P>>X&1|#80 170 D=P>>(X-2)&2|D 180 D=Q>>X&1<<2|D 190 D=Q>>(X-4)&8|D 200 PRINT CHR$(D); 210 NEXT 220 PRINT 230 NEXT 240 C=INKEY():IF !C CONT 250 GOTO110
IchigoJamの算術演算子の優先順位がシンプルなので、括弧は割と省略できます。
240-250行で、キーを押すたびに4倍角表示!
4倍角表示のみでよければ、VIDEOコマンドを使って、下記のようにもかけます。
100 C=#FF 105 VIDEO5 110 ?CHR$(C) 240 C=INKEY():IF !C CONT 250 GOTO110
VIDEO3で2倍角、VIDEO7で8倍角、VIDEO9で16倍角。3つの方法では、表示の遅さを別のメモリに一旦記憶させておいて、COPYすることですばやく表示させていましたが、マシン語を使って高速化する手はまだやっていないかも?
機能としてまとめてみましょう。IchigoJam BASICでは、GOSUB/RETURNコマンドを使ってサブルーチンとしてまとめることができます。
10 CLS 20 X=RND(30):Y=RND(20):C=236:GSB@PUT4:CONT 100 @PUT4:FORI=0TO15:N=#80:FORJ=0TO3:N=N+PEEK(C*8+I/4*2+J/2)>>(7-I%4*2-J%2)&1<<J:NEXT:LCX+I%4,Y+I/4:?CHR$(N);:NEXT:RTN
100行が4倍角表示サブルーチン。XとYに座標を、Cで表示したいキャラクターコードを設定し、GOSUB@PUT4と呼び出して使います。@マークはラベル、GOSUB100と書く代わりになります。
「RUN on IchigoJam web」
気をつけたいのは、サブルーチンの中で使う変数。外で使う変数と被ってしまうと、おかしな動作になるので注意しましょう。ここを注意しなくてよくする方法として有名なのは「スタック」。これをプログラミング言語レベルで実装したものが、「Wirth(ヴィルト)」などの構造化プログラミング言語というわけです。
テーマを決めて、いろいろ探求するのは楽しいですね!
- アフリカでも活躍、IchigoJamに欲しい機能は? 三角関数とグラフィクスを暫定実装 IchigoJam 1.3β8
- 地域連携とAI人材育成の2本柱、地方に高専あり! もっと手軽な組込み開発向けアップデート @ARUN for IchigoJam 1.4β
- メモリが分かればコンピュータが分かる! IchigoJamで4倍角表示する3つの方法とイカサマズンドコチェック
- IchigoJamで学ぶデータ構造「スタック」 / Stack on IchigoJam