SHIROのIchigoJam日記

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

IchigoLED64

マトリックスLEDとジョイスティック・ボタンを載せた、IchigoJam用のオリジナルシールド基板です。
プレイ動画はこちら。

【IchigoJam】IchigoLED64

f:id:shiro0922:20191030215037j:plain


ワンキーゲーム機「IchigoDotS」と同様に、IchigoJamと同じIC・LPC1114をマトリックスLED制御用に使っていて、IchigoJamからシリアル(TX)でコマンドを送っています。
基板は大きいLPC1114にも対応しています。大きいICなら子どもでもはんだ付けできますし、あらかじめファームウェアを焼いておくこともできるので、工作教室のネタにしても面白いと思います。

基板データ

*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。

(C) 2019 Shiro Saito (https://www.ichigojaman.jp)

ファームウェア

基板のLPC1114に、マトリックスLED表示用のファームウェアを書きこむ必要があります。
上記のサイトからダウンロードして、書庫の中のファイル「MATLED-R1.hex」を、10ピンのピンソケット経由で書きこんでください。
マトリックスLEDを制御する命令のリファレンスも、PDFで入っています。

プログラム

ローダー

起動すると1~3の数字が表示されます。ジョイスティックで数字を変更して、ボタンを押して決定すると、スロット1~3のプログラムを選択起動します。
IchigoJamのスロット0に入れて、自動起動させるといいでしょう。

10 @ARUN:'*Loader64
20 UART 1:CLV:CLS:?
30 OUT 1,-1:OUT 2,-1:OUT 5,-2:OUT 6,-2
40 LET [10],#1F,#11,#1F
50 LET [13],#00,#00,#1F
60 LET [16],#1D,#15,#17
70 LET [19],#15,#15,#1F
80 LET [22],#07,#04,#1F
90 LET [25],#17,#15,#1D
100 LET [28],#1F,#14,#1C
110 LET [31],#01,#01,#1F
120 LET [34],#1F,#15,#1F
130 LET [37],#07,#05,#1F
140 N=1
150 @LOOP
160 I=(ANA(5)-512)/256:J=(512-ANA(6))/256
170 N=N+I+J
180 IF N<1 N=1
190 IF N>3 N=3
200 GSB@PRTN
210 WAIT 10
220 IF !IN(10) && !IN(11) GOTO @LOOP
230 BEEP
240 SRND TICK()
250 LRUN N
260 @PRTN
270 FORX=0TO2:[5+X]=[10+N*3+X]:NEXT
280 ?"MATLED SHOW ";
290 FORB=0TO7:?HEX$([B],2);:NEXT
300 ?:RTN

IchigoJamロゴ

文字表示のサンプルプログラムです。IchigoJamのロゴを流して表示します。

10 '*IchigoJam Logo
20 UART 1:CLV:CLS:?
30 [0]=`01011111
40 [1]=`01000000
50 [2]=`01011100
60 [3]=`01010100
70 [4]=`01010100
80 [5]=`01000000
90 [6]=`01011111
100 [7]=`01000100
110 [8]=`01011100
120 [9]=`01000000
130 [10]=`01011101
140 [11]=`00000000
150 [12]=`01011100
160 [13]=`01010100
170 [14]=`01111100
180 [15]=`00000000
190 [16]=`01011100
200 [17]=`01010100
210 [18]=`01011100
220 [19]=`01000000
230 [20]=`01010000
240 [21]=`01010000
250 [22]=`01011111
260 [23]=`01000000
270 [24]=`01011100
280 [25]=`01010100
290 [26]=`01011100
300 [27]=`01010000
310 [28]=`01000100
320 [29]=`01011100
330 [30]=`01000100
340 [31]=`01011100
350 [32]=`01000100
360 [33]=`01011100
370 @LOOP
380 FOR B=0 TO 41
390 ?"MATLED PUSH ";[B]
400 WAIT 10
410 NEXT
420 GOTO @LOOP

連打ゲーム

「3,2,1」とダウンカウントした後、64個のドットが表示されます。どちらかのボタンを連打して、ドットを全部消してください。
全部消すとタイムが表示されます。10秒以上かかった場合、10の位が左下のドットで表示されます。ボタンを押すとリプレイします。

1 '*Renda64
2 UART 1:CLS:?
3 OUT 5,-2:OUT 6,-2
4 CLV:?"MATLED SHOW 00A7F46210F51403":PLAY "L8RGREFG":WAIT 120
5 LET [10],#1F,#11,#1F
6 LET [13],#00,#00,#1F
7 LET [16],#1D,#15,#17
8 LET [19],#15,#15,#1F
9 LET [22],#07,#04,#1F
10 LET [25],#17,#15,#1D
11 LET [28],#1F,#14,#1C
12 LET [31],#01,#01,#1F
13 LET [34],#1F,#15,#1F
14 LET [37],#07,#05,#1F
15 FOR N=3 TO 1 STEP -1:GSB @SET1:GSB @PRTMAT:BEEP 20,10:WAIT 60:NEXT
16 ?"MATLED SHOW FFFFFFFFFFFFFFFF":BEEP 20,30:CLT:P=#FF
17 FOR Y=0 TO 7:P=P<<1:FOR X=0 TO 7
18 IF IN(10) && IN(11) CONT
19 BEEP 10,5:?"MATLED PUSH ";P
20 IF !IN(10) || !IN(11) CONT
21 NEXT:NEXT
22 T=TICK()/6:IF T>899 T=899
23 N=T%100:GSB @SETN
24 [4]=#20
25 N=T/100:IF N>0 FOR B=0 TO N-1:[B]=[B]+#80:NEXT
26 GSB @PRTMAT
27 BEEP 30,60:WAIT 60
28 IF !IN(10) || !IN(11) RUN ELSE CONT
29 @SETN
30 M=N/10
31 FOR B=0 TO 2:[1+B]=[10+M*3+B]:NEXT
32 @SET1
33 M=N%10
34 FOR B=0 TO 2:[5+B]=[10+M*3+B]:NEXT
35 RTN
36 @PRTMAT
37 ?"MATLED SHOW ";:FOR B=0 TO 7:?HEX$([B],2);:NEXT:?:RTN

落ち物パズルゲーム「イチリス」


プログラムの都合で、基板を横向きにしてプレイしてください。
上から落ちてくるブロックを、ジョイスティックで左右に動かして積んでください。横1列が揃うとその列は消えます。
Bボタン(IN10)を押すと、ブロックの上下反転ができます。
ブロックが上まで積まれてしまうとゲームオーバーです。消せた列数がドットで表示されます。Bボタンを押すとリプレイします。

1 WAIT60:UART1:CLS:?:OUT1,-1:OUT5,-2
2 CLV:?"MATLED SHOW 26CF4244AFA22649":PLAY"L8RGECD":WAIT99:GSB26:W=40
3 M=RND(4):N=RND(3)+1:IF!(M%2+N%2)M=M/2:N=N/2
4 X=3:Y=9:M=M<<X:N=N<<X:W=W-(W>1):GSB22:IFRGOTO12
5 O=0:K=(ANA(6)-512)/300:IFKGSB17:O=1
6 IF!IN(10)&&MGSB20:O=1
7 IFOGOTO5
8 G=G+1:IFG<WELSEG=0:GSB22:IF!RY=Y-1:GSB26 ELSEGOTO10
9 GOTO5
10 BEEP40,5:GSB30:FORZ=Y-1TOY:IF[Z]=#FFGSB25:Z=Z-1
11 NEXT:GOTO3
12 BEEP30,30:GSB30:WAIT99:IFS>64S=64
13 FORY=0TO7:[Y]=0:NEXT:IF!SGOTO15
14 FORB=0TOS-1:Y=B/8:[Y]=[Y]+(1<<(B%8)):NEXT
15 GSB26
16 IFIN(10)CONTELSEGOTO2
17 C=24<<(K*4):IF(M|N)&CRTN
18 D=M<<K:E=N<<K:V=Y:GSB23:IFRRTN
19 X=X+K:M=D:N=E:GSB26:RTN
20 D=N:E=M:V=Y:GSB23:IFRRTN
21 M=D:N=E:GSB26:RTN
22 V=Y-1:D=M:E=N:IFY<2R=1:RTN
23 R=0:IF[V]&D||[V-1]&ER=1
24 RTN
25 [Z]=0:GSB26:S=S+1:BEEP9,9:WAIT30:FORV=ZTO7:[V]=[V+1]:NEXT:[7]=0:GSB26:RTN
26 ?"MATLED SHOW ";:FORB=7TO0STEP-1:C=[B]:IFB=YC=C|M
27 IFB=Y-1C=C|N
28 IFC<16?0;
29 ?HEX$(C);:NEXT:?:RTN
30 [Y-1]=[Y-1]|N:[Y]=[Y]|M:N=0:M=0:RTN