見出し画像

【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

以下に、いくつかの文字を表示してみた結果を示す。

画像
「A」の拡大
画像
「ネ」の拡大
画像
「コ」の拡大
画像
イチゴマークの拡大 (Alt+V で入力できる)

結論

IchigoJam で、文字を色々な大きさで画面に表示することができた。

ライセンス

この記事のプログラムは、CC0 1.0 でライセンスする。


いいなと思ったら応援しよう!

コメント

ログイン または 会員登録 するとコメントできます。
【IchigoJam】文字を拡大してみた|みけCAT
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1