【IchigoJam】文字を拡大してみた
今週も日曜日の終わりが迫っているのだ。
なにか書かないとstreakが切れるのだ。
頭が悪いから、また IchigoJam のプログラムを書いて文字数を稼ぐのだ。
※IchigoJamはjig.jpの登録商標です。
今回やること
文字を拡大してみる。
1倍・2倍・4倍・8倍・16倍で表示してみる。
拡大してみる
1倍
文字をそのまま出力するだけ。
10 C=#41
20 PRINT CHR$(C)
2倍
文字の1ドットを、2ドットで描画する。
キャラクターパターン領域に拡大結果を書き込み、書き込んだキャラクターを出力する。
10 C=#41
20 FOR Y=0 TO 7
30 S=PEEK(C*8+Y)
40 P=0
50 FOR X=0 TO 7
60 IF (S>>X)&1 THEN P=P|(3<<(X*2))
70 NEXT
80 POKE #700+Y*2,P>>8,P>>8
90 POKE #710+Y*2,P,P
100 NEXT
110 PRINT CHR$(#E0,#E2)
120 PRINT CHR$(#E1,#E3)
4倍
文字の1ドットを、4ドットで描画する。
#80~#8F のグラフィック文字を用いて描画を行う。
キャラクターパターンとグラフィック文字でビットとドットの関係が逆方向なので、単純に2ビットをまとめて文字コードに入れることはできない。
10 C=#41
20 FOR Y=0 TO 3
30 P=PEEK(C*8+Y*2)
40 Q=PEEK(C*8+Y*2+1)
50 FOR X=0 TO 3
60 D=#80
70 IF (P>>(7-X*2))&1 THEN D=D|1
80 IF (P>>(6-X*2))&1 THEN D=D|2
90 IF (Q>>(7-X*2))&1 THEN D=D|4
100 IF (Q>>(6-X*2))&1 THEN D=D|8
110 PRINT CHR$(D);
120 NEXT
130 PRINT CHR$(10);
140 NEXT
8倍
文字の1ドットを、1文字で描画する。
10 C=#41
20 FOR Y=0 TO 7
30 P=PEEK(C*8+Y)
40 FOR X=0 TO 7
50 IF (P>>(7-X))&1 THEN PRINT CHR$(#8F); ELSE PRINT CHR$(#80);
60 NEXT
70 PRINT CHR$(10);
80 NEXT
16倍
文字の1ドットを、4文字 (2×2文字) で描画する。
10 C=#41
20 FOR Y=0 TO 15
30 P=PEEK(C*8+Y/2)
40 FOR X=0 TO 7
50 IF (P>>(7-X))&1 THEN PRINT CHR$(#8F,#8F); ELSE PRINT CHR$(#80,#80);
60 NEXT
70 PRINT CHR$(10);
80 NEXT
まとめてみる
キーボードまたは UART から入力された文字を、1倍~16倍で1画面にまとめて表示する。
キャラクターパターン領域を用いる処理があるため、指定された文字のキャラクターパターンをまず配列にコピーし、これを処理に用いる。
10 ' モジ カクダイ
20 CLS
30 C=INKEY():IF C=0 WAIT1:GOTO30
40 CLS:CLP:C=C&#FF:FOR I=0 TO 7:[I]=PEEK(C*8+I):NEXT
45 ' 1 バイ
50 FOR I=0 TO 7:POKE#720+I,[I]:NEXT:LOCATE1,14:PRINT CHR$(#E4);
55 ' 2 バイ
60 FOR Y=0 TO 7:S=[Y]:P=0:FOR X=0 TO 7:IF (S>>X)&1 P=P|(3<<(X*2))
70 NEXT:POKE #700+Y*2,P>>8,P>>8:POKE #710+Y*2,P,P:NEXT
80 LOCATE3,13:PRINT CHR$(#E0,#E2);:LOCATE3,14:PRINT CHR$(#E1,#E3);
85 ' 4 バイ
90 FOR Y=0 TO 3:P=[Y*2]:Q=[Y*2+1]:LOCATE1,16+Y:FOR X=0 TO 3:D=#80
100 IF (P>>(7-X*2))&1 D=D|1
110 IF (P>>(6-X*2))&1 D=D|2
120 IF (Q>>(7-X*2))&1 D=D|4
130 IF (Q>>(6-X*2))&1 D=D|8
140 PRINT CHR$(D);:NEXT:NEXT
145 ' 8 バイ
150 FOR Y=0 TO 7:P=[Y]:LOCATE6,12+Y:FOR X=0 TO 7
160 IF (P>>(7-X))&1 PRINT CHR$(#8F); ELSE PRINT CHR$(#80);
170 NEXT:NEXT
175 ' 16 バイ
180 FOR Y=0 TO 15:P=[Y/2]:LOCATE15,4+Y:FOR X=0 TO 7
190 IF (P>>(7-X))&1 PRINT CHR$(#8F,#8F); ELSE PRINT CHR$(#80,#80);
200 NEXT:NEXT
205 ' ツギ ノ ニュウリョク ヲ マツ
210 LOCATE0,20
220 GOTO30
OneFiveCrowd で実行 (高速、非公式)
IchigoJam web で実行 (公式、低速)
以下に、いくつかの文字を表示してみた結果を示す。
結論
IchigoJam で、文字を色々な大きさで画面に表示することができた。
ライセンス
この記事のプログラムは、CC0 1.0 でライセンスする。