create every day - 福野泰介の一日一創

キーボード一体型「IchigoJam X」の作り方&落ちゲーCLMS

2016/06/12 23:55:00
#IchigoJam #maker 

マイはじめてパソコンMSXは、キーボード一体型でした。
すでに実現されている方(ichigojamをキーボードPCにしてみた。)を参考に、テレビのUSBから電源をとる方針でキーボードにIchigoJamを内蔵する「IchigoJam X」を作ってみました。


IchigoJamはキーボードの内部にあって見えません。外部I/Oをすっぱり諦めてます。
ビデオ出力とSOUNDピンからの音声出力ピンがUSBケーブルの途中から分離しているのが特徴です。


USB差込口がついたテレビがあれば、他に何もいりません!


つないだら即起動、LED1、エンターでキーボードのCAPS LOCKのLEDが光ります(IchigoJam PCと同様)


材料
- aitendoのミニキーボード(USキー配置)
- IchigoJam BASIC USキーボード用を書き込んだ LPC1114
- 抵抗(470Ω、100Ω、330Ω) 1本ずつ
- ビデオケーブル(黄、白)
- クリスタル 12MHz


つくりかた
1. ミニキーボードの裏蓋外す(ドライバーでねじ3本)
2. 電池ボックスをニッパーで破壊(IchigoJamを入れる場所確保)
3. LPC1114のVIDEO1に470Ω、VIDEO2に100Ωをはんだづけして両端をつなぐ
4. キーボードの線を5cmほど剥き、緑線と白線をカット
5. キーボードからの緑線をLPC1114のKBD1へはんだづけ
6. キーボードからの白線をLPC1114のKBD2へはんだづけ
7. 配線側の緑線をLPC1114のVIDEO1+2へはんだづけ
8. 配線側の白線をLPC1114のSOUNDへはんだづけ
9. キーボード5V、GNDに三端子レギュレーターをはんだづけ
10. 3.3V出力をLPC1114のVCC(右)へはんだづけ
11. GNDをLPC1114のGND(右)へはんだづけ
12. LPC1114のXTAL位置(IchigoJam by jig.jpの位置)にクリスタルをはんだづけ(写真は未実装)
13. キーボードCAPS LOCKのLEDの+側、GND側をパターンカット
14. CAPS LOCKのLEDの+へ330Ωをはんだづけ
15. LPC1114のLEDをCAPS LOCKの330Ωの先へはんだづけ
16. CAPS LOCKのLEDの-をGNDへはんだづけ
17. キーボードの裏蓋を戻す(きれいに戻すには写真より配線を長く、右の方に配置するといい)
18. USBの先端5cmあたりでカット
19. 黄色ビデオケーブルをカットし、信号線をUSBケーブルキーボード側の緑と接続(熱収縮チューブが便利)
20. 白色ビデオケーブルをカットし、信号線をUSBケーブルキーボード側の白と接続
21. USBケーブルキーボード側の青、プラグ側の青、ビデオケーブル2本のGNDを接続
22. USBケーブルキーボード側とプラグ側のオレンジ同士を接続


ケーブルづくりが肝!


神経をつなぎ合わせる手術な気分


熱収縮チューブの太さが足りず、完全に覆えなかったのが残念!


MSXでゲームづくりに夢中になった頃を思い出しつつ、コラムス風落ちゲー「CLMS」をつくってみました。

10 CLS:?"CLMS SCORE:":P=0 30 FOR I=5TO18:LC 12,I:?CHR$(3);:LC 18,I:?CHR$(3);:IF I<11 LC 7+I,18:?CHR$(3); 31 NEXT:GOSUB200 40 FOR I=0TO2:LC X,Y+I:?CHR$(0);:NEXT 43 K=INKEY() 44 Z=X:X=X+(K=RIGHT)-(K=LEFT):S=0:FOR I=0TO2:S=S+SCR(X,Y+I):NEXT:IF S X=Z 45 IF K=SPACE T=[2]:[2]=[1]:[1]=[0]:[0]=T 47 Y=Y+1:IF SCR(X,Y+2) Y=Y-1:F=1 48 FOR I=0TO2:LC X,Y+I:?CHR$([I]);:NEXT 50 LC16,0:?P:WAIT10 52 IF F IF Y<5 END ELSE F=0:GOSUB200 60 GOTO40 200 FOR I=0 TO 2:[I]=228+RND(3):NEXT:X=15:Y=1:F=0 210 FOR I=13TO17:FOR J=5TO17:C=SCR(I,J):IF !C GOTO 300 220 S=0:FOR K=0TO10:IF SCR(I+K,J)=C S=S+1 ELSE K=10 230 NEXT:IF S>2 FOR K=0 TO S-1:LC I+K,J:?CHR$(0);:NEXT:P=P+S 240 S=0:FOR K=0TO10:IF SCR(I,J+K)=C S=S+1 ELSE K=10 250 NEXT:IF S>2 FOR K=0 TO S-1:LC I,J+K:?CHR$(0);:NEXT:P=P+S 300 NEXT:NEXT 310 T=0:FOR I=13TO17:S=0:FOR J=5TO17:IF SCR(I,J) S=J:J=17 311 NEXT:IF !S GOTO 410 315 FOR J=17 TO S STEP-1:C=SCR(I,J):IF C GOTO 400 320 T=1:FOR K=J TO S STEP -1:LCI,K:?CHR$(SCR(I,K-1));:NEXT:J=J+1:S=S+1 400 NEXT 410 NEXT:IF T GOTO 210 420 RETURN

10行 メモリが足りずコメントが書けない時はプログラム名をPRINT!
30-31行 フィールドを表示(メモリが足りない場合、別プログラムにするのもあり)
44行 左右キーで動かし
45行 スペースキーで絵柄を回転
50行 スコア表示、落下速度調整
200行 ランダムに3つの絵柄を使います(PCGで書き換えておくと楽しい!)
220-250行 縦横、3つ以上そろったものが消えます(同時に揃った場合は横が優先)
310-410行 消えたら上から落とし、更に揃っていたら連鎖!(変数T)

これでほぼ1KB使いきった1022byteですが、スペース削ったり、GOSUB→GSB/RETURN→RTNなど省略形を使うことでもう少し空けられます。 徐々に落ちてくる速度を速くしたり、連鎖した時の得点を思い切って高くすると楽しくなります。BGM、効果音をつけるのもいいですね!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image