カテゴリー
IchigoJam

IchigoJam RISC-V + 有機ELディスプレイ でイカジャンプゲームmini

RISC-V対応 IchigoJam BASIC と、有機ELディスプレイを使った「いかジャンプGAME」です。これまで、有機ELディスプレイでゲームを作るには、(一部に)マシン語が必要でした。RISC-Vプロセッサを搭載したIchigoJamを使えば、BASICだけでもスムーズ※に動かすことが出来るようになります。(※スムーズ=筆者の主観です。)

IchigoJam用マイコンボード上のボタンSW2を押すと、イカがジャンプする。
動画提供者:斎藤史郎さん https://www.ichigojaman.jp/

ゲームの内容

IchigoJam用マイコンボード上のボタンSW2を押すと、イカがジャンプします。障害物をジャンプでよけてください。

ハードウェアの製作方法

ハードウェアは、IchigoJam R (β版)のCN5に有機EL(OLED)ディスプレイを接続して製作します。有機ELディスプレイは、SSD1306搭載品かつ、端子配列がGND、VDD、SCL(SCK)、SDAの順になっているものを使用し、ピン名がIchigoJam側と合うように接続してください。

IchigoJam R (β版):
【β版】IchigoJam 組み立て済完成品 R (販売者=PCN)

有機ELディスプレイの市販例:
0.96インチ 128×64ドット有機ELディスプレイ(OLED): ディスプレイ・表示器 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

ご注意:RISC-Vは、従来のIchigoJam 初代、U、T、Sとは異なる新しいIchigoJam Rに搭載されているプロセッサです。

端子配列がGND、VDD、SCL(SCK)、SDAの順になっているものを使用し、ピン名がIchigoJam側と一致するように接続する

BASIC言語で書いたプログラム

ソフトウェアは、IchigoJam BASICで作成しました。行番号800以降が有機EL(OLED)ディスプレイ用のドライバ部です(後述)。

1 cls:?"イカ ジャンプ by クニノ / PCGキャラ フクノ サン";
2 clv:let[0],#3810,#FE7C,#3838,#5428,0,0,#7C10,#54FE:copy#700,#800,16:gsb800
3 Y=14:lc0,15:forI=0to7:?CHR$(RND(4)+1);:next

100 'MAIN
110 IF Y=14 && BTN() B=1:BEEP
120 IF B A=A+1 ELSE A=A-1
130 IF !BTN() B=0
140 IF !RND(8) LC 8,14:?".";
150 LC 1,Y:?" ";
160 LC 8,15:?CHR$(RND(4)+1);
170 SCROLL 3:Y=Y-A
180 IF Y>14 Y=14:A=0:BEEP 3
190 IF SCR(1,Y)=46 GOTO 300
200 LC 1,Y:? CHR$(224+B)
210 GSB 900:GOTO 100

300 'END
310 LC 1,Y:?"X";:GSB 900
320 BEEP 2,20:WAIT 120
330 IF !BTN() GOTO 330
340 RUN

800 let[85],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
810 W=i2cw(60,#8AA,1,#8B2,18)
900 W=i2cw(60,#8AA,1,#8AC,6):for[98]=0to7:for[99]=0to15:copy#8A2,vpeek(7-[98],[99])*8,8:W=i2cw(60,#8AB,1,#8A2,8):next:next:rtn
キャラクタのイカ(PCG)は、IchigoJamの開発者である福野さんのブログ(https://fukuno.jig.jp/1062)のものを使用しました。
プログラム更新:2021/1/30 PM1:50
(描画初期位置追加,障害物座標修正,床面変更)

OLED用ドライバ

下記は、有機EL(OLED)ディスプレイ用のドライバ部です。配列変数の[84]以降を使用します。行番号800をGSB(GOSUB)命令で実行するとディスプレイの初期化を行い、行番号900をGSB命令で実行するとテレビ画面に表示中のテキスト文字を有機ELディスプレイに表示します。

' OLED ドライバ CN5 ヨウ

800 let[85],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#DA00,#8112,#D9CF,#DBF1,#A440,#AFA6
810 ifi2cw(60,#8AA,1,#8B2,18)?"E

900 ifi2cw(60,#8AA,1,#8AC,6)?"E
910 for[98]=0to7:for[99]=0to15:copy#8A2,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8AB,1,#8A2,8)?"E
920 next:next:rtn

180°回転表示用ドライバ

IchigoJam R (β版)では、14ピンのCN3に取り付けることも出来るようになりました。こちらも、IchigoJam側とピン名が合うように接続してください。

IchigoJam R (β版)では14ピンのCN3に取り付けることも出来る(Facebook IchigoJam-FANグループ 前野さん、志賀さんからの情報)
写真はIchigoJam Uの基板を改造してIchigoJam R(β版)相当のピン配列にしたIchigoJam用マイコンボード

ドライバ部は、下記の180°回転表示対応版を使用してください。

' OLED ドライバ CN3 ヨウ 180゚ カイテン バン

800 let[84],#4000,33,#227F,#700,#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
810 ifi2cw(60,#8A8,1,#8B0,20)?"E

900 ifi2cw(60,#8A8,1,#8AA,6)?"E
910 for[98]=0to7:for[99]=0to15:copy#8A0,vpeek(7-[98],[99])*8,8:ifi2cw(60,#8A9,1,#8A0,8)?"E
920 next:next:rtn

有機ELディスプレイの詳しい使い方

より詳しい有機ELディスプレイの使い方や、従来のIchigoJamを使ったゲームの作り方は、以下のサイトで紹介しています。

ボクにもわかる IchigoJam用 I2C 有機ELディスプレイ OLED の接続方法 (bokunimo.net)


以下は、IchigoJam U基板の裏面にRISC-Vマイコンボードを接続する製作例です。


ボクのIchigoJam用RISC-Vマイコンボード

従来のIchigoJam Uの基板を流用して製作した、IchigoJam用RISC-Vマイコンボード。

表面は、一見すると従来のIchigoJamですが、裏面には、RISC-Vプロセッサを搭載した Seeed Studio (中国)製のマイコンボードWio Lite RISC-V(GD32VF103)を貼り付け、配線しました。

裏面のRSIC-Vプロセッサ搭載マイコンボード。Seeed Studio (中国)製Wio Lite RISC-V(GD32VF103)

本来、Wio Lite RISC-Vに搭載されているWi-Fiモジュールと、マイクロSDカードスロットは取り外しました。また、IchigoJam基板側のパターンと接触しないよう、耐熱性のあるポリイミドテープを基板の裏面に貼り、強力両面テープで取り付けました。

配線は、上図の通り、Wio Lite RISC-Vの両脇の端子から行いました。ただし、一部(VIDEO 1端子と、KBD1、KBD2、OUT 1、4)については、(基板の表側に端子がないので)マイコンの端子やチップ部品の端子などから配線しました。キーボード用のPS/2端子部にはUSB端子を取り付けます。もともとのKBD1端子にKBD2が来るように接続すると、極性が合います。

まるで本物のIchigoJamように見えるマイコンボードの完成です。

まるで本物のIchigoJamのような仕上がりになった。
IchigoJamはjig.jpの登録商標。
本ブログでは純正以外のボードをIchigoJam用マイコンボードと表現している

おわりに

製作のきっかけは、ピン配列を見て、多くのピンが近いことに気づいたことでした。類似の製作品も登場する中、比較的、容易に作れると思って取り組んでみました。
しかし、実際に配線してみると、のべ製作時間4時間程度(構想や情報収集を含めると8時間以上)と、それなりの労力が必要でした。
正直な感想は「買った方が早い」ですが、今回、得た自分だけの作品と、製作を通して得た知識は、お金では買えない貴重な財産です。

by ボクにもわかるIchigoJam用マイコンボード

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es