SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

AmabieDakeでバーサライタ

PCN公式サイトで、疫病退散のアマビエを象ったIchigoDake「AmabieDake」が発売されました。
hello002.stores.jp

予約分が私の手元にも届きました。基板、単4電池電源基板、ストラップなどが付いた完成品です。
LEDスティックをはんだ付けして、おなじみのバーサライタをやってみました。


【IchigoJam】AmabieDakeでバーサライタ

プログラム

こちらのプログラムのほぼそのままですが、LEDスティックが上下逆になるので、文字表示も逆になるように改造しています。

100 @ARUN:'*POV
110 CLV:VIDEO 0:CLS:P=#900
120 [80]=`00001110
130 [81]=`00011111
140 [82]=`00111111
150 [83]=`01111110
160 [84]=`11111100
170 [85]=`01111110
180 [86]=`00111111
190 [87]=`00011111
200 [88]=`00001110
210 L=9
220 FOR C=0 TO L
230 FOR B=0 TO 7
240 M=1<<B
250 D=[80+C]&M
260 A=P+C*48+B*6
270 POKE A,5*(D>0)
271 POKE A+2,100*(D>0)
272 POKE A+4,10*(D>0)
280 NEXT
290 NEXT
300 FOR C=0 TO L
310 COPY #800,P+C*48,48
320 WS.LED 8
330 NEXT
340 GOTO 300

紙芝居4コマ「イチゴ太郎 vs コロナ星人」

先日作ったお絵かきツール
www.ichigojaman.jp
を使って、4コマの紙芝居を作ってみました。
動画はこちら。

【IchigoJam】イチゴ太郎 vs コロナ星人

作り方

(1)絵を描く

お絵かきツールで、IchigoJamの画面に絵を描いて保存します。

(お絵かきツール)

10 CLV:CLS
15 COPY #900,#D00,768
20 LC X,Y:?CHR$(!SCR(X,Y));
30 WAIT 3
40 K=INKEY()
50 LC X,Y:?CHR$(!SCR(X,Y)^(K=32));
60 X=X-(K=28)+(K=29)
70 Y=Y-(K=30)+(K=31)
80 IF K=8 CLS
100 IF K!=10 GOTO 20
110 COPY #D00,#900,768:SAVE

(2)パソコンへ絵を転送

IchigoJamとパソコンをUSBシリアルでつなぎます。
下のシリアル転送ツールを、パソコンからIchigoJamへ転送します。
(IJUtilitiesのプログラム転送を使う場合、転送前にNEWコマンドで絵のデータが消されてしまうので、シリアルウインドウにプログラムをペーストしてください)
ツールを起動すると、絵の表示用データがパソコン側に出力されます。
終了したら「UART 1,1」でシリアル設定を元に戻しておいてください。
(シリアル転送ツール)

10 CLV:CLS
15 COPY #900,#D00,768
20 UART 9,1:L=10
30 FOR A=#900 TO #B80 STEP 128
40 ?L;" LET [";(L-10)/10*8;"]";:D=0
50 FOR C=0 TO 7
60 FOR B=0 TO 15
70 D=D<<1:D=D+PEEK(A+C*16+B)
80 NEXT
90 ?",#";HEX$(D);
100 NEXT
110 ?:L=L+10:NEXT

(絵データの出力例)

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0

画面全体をそのままPOKEするプログラムだととても1kバイトに収まらないので、絵のドットの有無を0,1の1ビットにして、配列変数[0]~[47]にセットしています。

(3)表示プログラムを追加

転送された絵データに、表示プログラムを追加します。
(表示プログラム)

100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
170 IF !INKEY() CONT

(追加した例)

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
170 IF !INKEY() CONT

これで絵を表示するプログラムが完成します。

「イチゴ太郎 vs コロナ星人」プログラム

4コマの絵を描いて保存・出力し、ストーリー表示を追加しました。
IchigoJamのファイル0~3に保存して、「LRUN 0」で順番に読めます。何かキーを押すと次のコマへ移ります。

コマ0

f:id:shiro0922:20200529110028p:plain

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウ ハ キョウモ タノシク プログラミング."
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ1

f:id:shiro0922:20200529111335p:plain

10 LET [0],#0,#0,#0,#30,#F,#48,#10,#8084
20 LET [8],#4820,#41FE,#3029,#40A8,#3020,#4000,#481F,#8000
30 LET [16],#9,#0,#19,#8000,#900,#0,#600,#2400
40 LET [24],#612,#1800,#90C,#1800,#C,#2400,#12,#0
50 LET [32],#0,#0,#0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"コロナセイジンガ セメテキタ!"
215 ?"[オマエタチヲ ウイルスニンギョウニ シテヤル!]";
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ2

f:id:shiro0922:20200529111418p:plain

10 LET [0],#0,#12,#0,#8C,#0,#20C,#C,#812
20 LET [8],#1F,#A100,#1F,#B440,#200D,#800,#7C0C,#8289
30 LET [16],#F412,#406,#6A12,#106,#5612,#49,#6B1E,#0
40 LET [24],#3500,#0,#F1F,#C000,#830,#4000,#1C35,#4000
50 LET [32],#2A15,#4000,#810,#4000,#141F,#C000,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウノ ハンゲキ!"
215 ?"[ジドウ ショウドク スプレー!]";
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ3

f:id:shiro0922:20200529111449p:plain

10 LET [0],#0,#4000,#3,#E002,#1002,#F000,#85,#6020
20 LET [8],#6,#A000,#D,#6000,#80A,#C200,#F,#10
30 LET [16],#1,#0,#103,#8000,#8005,#4001,#1,#40
40 LET [24],#2,#8000,#F,#E000,#70,#1C00,#180,#300
50 LET [32],#239,#3880,#448,#4440,#934,#3C20,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウノ プログラミングデ"
215 ?"チキュウハ マモラレタ!  END";
220 IF !INKEY() CONT

お絵かきツールを作ろう

オンライン教室用に作ったスライドですが、こちらでも紹介します。
IchigoJamの画面に絵をかく、お絵かきツールです。

www.slideshare.net

f:id:shiro0922:20200527213142p:plain

使い方

  • 矢印キーの上下左右でカーソルが移動、スペースキーでドットを描画/消去します。
  • BackSpaceキーで画面をクリアします。
  • 絵が描けたらEnterキーを押すと、プログラムと絵を一緒にSAVEします。SAVEしたプログラムをLOAD・RUNすると絵が再現されます。

プログラム

キャラクタ描画バージョン

10 CLV:CLS
15 COPY #900,#D00,768
20 LC X,Y:?CHR$(!SCR(X,Y));
30 WAIT 3
40 K=INKEY()
50 LC X,Y:?CHR$(!SCR(X,Y)^(K=32));
60 X=X-(K=28)+(K=29)
70 Y=Y-(K=30)+(K=31)
80 IF K=8 CLS
100 IF K!=10 GOTO 20
110 COPY #D00,#900,768:SAVE

web版はこちら。

プログラム本体を256バイト以内に収めて、それ以降のプログラムエリア768バイトに画面(絵)をコピーして保存しています。

グラフィック描画バージョン

キャラクタ描画バージョンを2行改造。ファームウェア1.4やIchigoJam web用です。2倍高精細な絵が描けます。
f:id:shiro0922:20200527214230p:plain

10 CLV:CLS
15 COPY #900,#D00,768
20 DRAW X,Y,2
30 WAIT 3
40 K=INKEY()
50 DRAW X,Y,!POINT(X,Y)^(K=32)
60 X=X-(K=28)+(K=29)
70 Y=Y-(K=30)+(K=31)
80 IF K=8 CLS
100 IF K!=10 GOTO 20
110 COPY #D00,#900,768:SAVE

web版はこちら。

テキスト

十勇士パソコンクラブのページに、プログラムやテキストがあります。
www.white.umic.jp