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

54byteのスーファミコントローラドライバ、IchigoJam BASICとマシン語でつなぐ極上のコントローラ

2017/08/16 23:55:00
#IchigoJam #asm #game 

IchigoJamにスーファミコントローラがつながりました!
個人的コントローラランキング、ナンバーワンのスーファミコントローラ、konashiでiPhoneにつないだこともありました。

接続に便利だった、Raspberry Piのスーパーファミコン化プロジェクトのコントローラ変換器!(official site)

こちら先日のコミケC92で入手! (スーファミコスプレな @ichigonosaatan さぁたん)

配線は本の記述とはちょっと違っていて、CLKの上にある3.3V、P/Sの下にあるGNDを使っていました。
スーファミのコントローラ3.3Vでも動くようです!

ファミコンもスーファミも、コントローラとの通信はYMF825と同じ、おなじみSPI。
ファミコンは8bit、スーファミはボタンが増えた分、上位8bitが追加されて16bitでの通信となります。

ひとまず、下記のようにつないで、IchigoJam BASICで動作確認。
OUT1 P/S(LATCH)
OUT2 CLK
IN1 1PAD

10 OUT1,1:OUT2,1 20 GSB@SPIR:?BIN$(N,16):CONT 100 @SPIR:OUT1,0:N=0:FORI=0TO15:OUT2,0:N=IN(1)<<I|N:OUT2,1:NEXT:OUT1,1:RTN

これだけで動きました!感動!

ただ、ゲームなどに使うには動作が遅すぎるので、マシン語でSPIテクニックを使って、高速化します。

@SPIR PUSH {LR,R4} R3=#50 ' R3=#50010000 GPIO1 R3=R3<<8 R4=R3 ' R4=#50000000 + (1<<(10+2)) IN(1) R4=R4<<16 R3=R3+1 R3=R3<<16 R2=1 R2=R2<<12 R4=R4+R2 R2=0 [R3+`0001]L=R2 ' OUT1,0 R1=0 @LOOP R2=0 [R3+`0010]L=R2 ' OUT2,0 R2=[R4]L ' IN(1) R2=R2>>10 R2<<=R1 R0=R0+R2 R2=2 [R3+`0010]L=R2 ' OUT2,1 R1+=1 R1-16 IF !0 goto @LOOP @END R2=1 [R3+`0001]L=R2 ' OUT1,1 POP {LR,R4}

マシン語入門その4を参考にIN1を調べるとピンの名前はPIO0_10、GPIO0のベースアドレスが#50000000と分かります。

できあがった、マシン語のスーファミコントローラドライバ(ファミコンにも使えます)を組み合わせたテストプログラムがこちら

1 POKE#700,16,181,80,35,27,2,28,70,36,4,91,28,27,4,1,34,18,3,164,24,0,34,90,96,0,33,0,34,154,96,34,104,146,10,138,64,128,24,2,34 2 POKE#728,154,96,1,49,16,41,244,209,1,34,90,96,16,189 10 OUT1,1:OUT2,1 20 N=USR(#700,0):?BIN$(N,16):CONT

マシン語は一度メモリに書き込んでおけばOKなので、メインプログラムを広々使っていろいろつくれますね!

BASICとマシン語の動作速度の違いが分かる動画がこちら!

IchigoJamでスーファミコントローラを読む(BASICとマシン語でSPI)

スーファミコントローラ接続、真の狙いは、FM音源モジュールYMF825Boardと合わせた楽器づくり!

鯖江産パソコン「IchigoJam」 meets 仮面女子@めがねフェス2017、Chromeに対応したWebAssembly版! - Made in Sabae PC, IchigoJam x KamenJoshi at MeganeFes and WebAssembly version on Chrome

2017/06/11 23:55:00
#megane #IchigoJam #game #sabae #PCN 


2日目のめがねフェスでは、PCN鯖江に通う若きエンジニア2人の姿。
There are 2 young engneers at Ichigo-Glass booth.


展示デモプログラムはPCN鯖江エンジニアMASAHARU作の「ネオジム磁石 - MASAHARUの魂のプログラム」 - Demo "Neodymium magnet - MASAHARU's Program" by PCN Sabae engneer MASAHARU


PCN鯖江、新商品開発中。 Under developping by PCN Sabae.


ついに歩いた、カニロボ! Crab Robot Walks!


テスト中のPCN鯖江オリジナル基板。 Original PCB by Kids of PCN Sabae.


未来のエンジニア育成、IchigoJamはんだづけ体験するこども。 Future engneer!? Kid tries to solder IchigoJam.


自分で作ったパソコンが動いた! It's works!


"IchigoJam web by WebAssembly"
IchigoJamが気になっている方へ、PC/Macなどのブラウザでお試しできるIchigoJam WebAssembly版Chromeにも対応しました!ポイントは、JavaScriptのWorkerスレッドで動作させることでした。
IchigoJam WebAssembly version works on Chrome also! The problem solved by JavaScript Worker.

動いた記念の「めがねくだりゲーム」 Glass Rafting Game!

10 CLS:X=15 20 LC X,5:?"V" 30 LC RND(29),23:?"O-O" 35 WAIT 5 36 X=X-BTN(28)+BTN(29) 37 IF SCR(X,5) 40 GOTO20


めがねのまちさばえ大使となった仮面女子。 KamenJoshi inaugurated Ambassador of Glass City Sabae.


鯖江市とコラボする、最強の地下アイドル「仮面女子」と。Ichigoメガネブースにて。 with KamenJoshi at our Ichigo-Glass booth.


めがねフェス、いい天気! MeganeFes with good weather!


京都、三重、金沢、仙台、福井、集まったPCNクラブ! PCN club's members!

links
- PCN
- めがねフェス / MeganeFes
- 仮面女子 / KamenJoshi
- IchigoJam

こどもビルチカ&めがねルーレットの裏側 めがねフェス2017 - The back of the Big LED Blink & Sabaean Roulette at MeganeFes2017

2017/06/10 23:55:00
#megane #IchigoJam #game #maker 

ついに実現「世界最大のエルチカプログラミング at めがね会館/めがねフェス
At last! "The World's Largest Blinking LED by Programming at Megane-Kaikan, Meganefes!"


世界最大エルチカとめがねルーレット - The Largest LED Blink and Sabaean Roulette


システム図(ネット接続は sakura.io) - System Diagram with sakura.io


めがね会館をプログラミングするこども - The kid program Megane-Kaikan


スイッチを入りきりするロボットをつないだ制御パネル - Control Panel with the Robot to Switch!


ロボットの要、強力サーボ!とレゴ - Powerful Servo with Lego


今日のプログラムはこんな形でした - Today's program

10 GOSUB@1:WAIT180 20 GOSUB@0:WAIT180 30 GOTO10

3秒ごとにエルチカ - LED blink every 3 sec

10 GOSUB@1 20 INPUT N 30 GOSUB@0 40 INPUT N 40 GOTO 10

エンター押す毎に付いたり消えたり - Enter to Switch the Megane

10 GOSUB@1 20 IF INKEY()=0 GOTO 20 30 IF RND(3)=0 GOSUB@0 40 GOTO 20

めがねルーレット - Sabaean Roulette

めがねフェスは日曜日も! Megane-Fes until Sunday!


めがねピンポン - Megane Ping Pong


メガネアイス - Megane Ice


鯖缶 - Savacan!


Cutie Pai まゆちゃん、ライブ日曜日も! Mayu-chan, Cutie Pai will live on Sunday!

Welcome to Megane-Fes!
めがねフェス2017 「めがね、出会い、めがね。」 めがねに出会い、めがねを楽しむ、めがねづくしの2日間。

links
- 成功時動画
- 目撃談 by 原秀一さん
- Succeeded in Building-Blinking by IchigoJam! PCN will progresses to the next stage! – about yrm

最強のIchigoJamを探せ!CPUの固有IDで戦う「イチゴバトラー」 IchigoDake発売! - IchigoBattler by UID of CPU, IchigoDake released!

2017/06/07 23:55:00
#IchigoJam #KidsIT #game 

IchigoJamで使っているCPU、LPC1114には固有の128bitのIDが振ってあります。マシン語を使って、そのIDを読み出して、懐かしのバーコードバトラー風に戦わせてみましょう!
Play on the IchigoBattler using UID of IchigoJam's CPU LPC1114.

固有IDの取得方法 - How to get UID of CPU

100 POKE#700,128,181,140,176,0,175,248,96,185,96,122,96,59,96,20,35,251,24,58,34,26,96,251,104,186,104,211,24,251,98,7,75,187,98,249,106,20,35,250,24,187,106,16,0,152,71,251,106 110 POKE#730,4,51,27,104,24,0,189,70,12,176,128,189,241,31,255,31 120 Y=USR(#700,#800) 130 FOR I=9 TO 2 STEP-1:?HEX$([I],4);:NEXT:? RUN F50000035485EA695334000012121246

イチゴバトラーにするための続き - Additional program of IchigoBattler

130 ?"YOU ID ";Y 140 INPUT"INPUT ENE ID?",E 150 H=Y/100:A=Y%10+5 160 P=E/100:B=E%10+5 170 IF A>B GOTO 200 180 ?"HP:";H;" ENE:";P:WAIT60 185 IF P<=0 ?"YOU WON!":END 190 D=RND(B):H=H-D:?"ENE ATTACK ";D:BEEP10:WAIT60 200 ?"HP:";H;" ENE:";P:WAIT60 205 IF H<=0 ?"YOU LOST...":END 210 D=RND(A):P=P-D:?"YOU ATTACK ";D:BEEP5:WAIT60 220 GOTO 180

プログラムをいろいろいじってみよう! Let's Hack!


最強のIchigoJamを探せ! - Find a strongest IchigoJam!


早速ゲットした新IchigoDake! - Latest IchigoDake! (IchigoJam version)


IchigoDake parts (IchigoLatte version)


IchigoDake Set (IchigoJam version)


IchigoDake IchigoLatte version works!

links
- IchigoDake
- IchigoJam (IchigoJam BASIC version)
- IchigoLatte (JavaScript version)

Game programming under the blue sky "HELI SHOOT" - 青空ゲームプログラミング「ヘリシュート」

2017/06/04 23:55:00
#IchigoJam #game 

今日は運動会。運動とカメラ撮影とプログラミングを楽しみました。IchigoJamの新しい良い点発見。砂埃を気にしなくていい!
Today is sports day. I enjoyed excercising, photo shooting and programming! I found a good point of IchigoJam. I don't worry about dust.


横スクロールシューティングゲーム「HELI SHOOT」
襲いかかる宇宙人を避けつつ、可能な限り生き延びるゲーム。スペースで打てるミサイルは5発のみ。時々でてくるアイテムで補充が可能。だんだんスピードと敵出現頻度がアップする。
Horizontal scroll shooting game "HELI SHOOT"
The game to avoid invaders. You can shoot 5 missiles to defeat the enemy.

1 'HELI-SHOOT 10 CLS:Y=3 20 LC 0,Y:?CHR$(243) 30 IF RND(10)=0 LC 15,RND(7):?CHR$(237); 33 K=INKEY() 35 Y=Y-(K=30)*(Y>0)+(K=31)*(Y<6) 40 WAIT 5 50 SCROLL LEFT 55 IF !SCR(0,Y) GOTO 20

はじめのいっぽの人気ゲーム「かわくだり」から横スクロールへの発展例
An example to make horizontal scroll shooting game.

1 'HELI-SHOOT 10 CLS:Y=3:X=0:P=0:M=5:CLT 15 FOR I=0 TO M-1:LCI,7:?CHR$(245);:NEXT 20 LC 0,Y:?CHR$(243) 30 IF RND(10-TICK()/60)=0 LC 15,RND(7):IF RND(16)=0 ?CHR$(245);ELSE?CHR$(237); 31 IF M LC M-1,7:?CHR$(245); 32 IF X GSB200 33 K=INKEY() 35 Y=Y-(K=30)*(Y>0)+(K=31)*(Y<6) 40 WAIT 5-TICK()/600 43 IF M IF X=0 IF K=32 M=M-1:X=1:Z=Y 50 SCROLL LEFT 55 H=SCR(0,Y):IF H=245 M=M+1:LC0,M:?CHR$(245);:H=0 56 IF !H GOTO 20 100 LC0,7:?"SCORE:";TICK()/60:END 200 Q=(SCR(X+1,Z)!=0)+(SCR(X+2,Z)!=0) 205 LC X,Z:?CHR$(0,0);:X=X+1:IF Q OR X>14 X=0:P=P+Q ELSE ?"=";:RTN 210 IF Q ?CHR$(0):Q=0 220 RTN

いろいろ要素を加えた完成形。Completed version.

*CHR$(245) = item to add missile ミサイル補充アイテム
*CHR$(243) = helicopter ヘリ
*CHR$(237) = invader うちゅうじん


もっと子供と触れ合うためには、GPSとか使った大きな遊びが必要。
I'll make new plays with GPS to spread fun of programming to kids.

GACHA simulation / IchigoJam print

2017/03/24 23:55:00
#IchigoJam #KidsIT #game #english 

Past day kids create games outside.
Now kids just play games created by adults on mobile game machines.

Let's share to kids that creating games is more fun than playing games.

This IchigoJam print introduce the backside of collection games "GACHA".

"ガチャシミュレーション - IchigoJam print" on GitHub

Enjoy creating!

Binary Room Puzzle Game on IchigoJam - Akihabara Moku-Moku-Meeting Report

2017/03/18 23:55:00
#IchigoJam #KidsIT #game #english 

Thank you for participating to Moku-Moku-Meeting at PCN Akihabara Assemblage!

Junior high school girls made the IchigoJam kit!


Let's discovery the programming world!


The first step with CutleryCard! You did it!


The first try to move the servo motor!


8 age kid try the first soldering!


Try to modify Family Computer by Nintendo!


Today's staffs.


This is a puzzle game "Binary Room" result of MokuMoku on my brain.
I like the game "Binary Land" puzzle game 2 game character controlled by 1 player.
Interpose by charaters A and B to get the numbers in ascending order.
Use the cusor key (A is normal movement, B is millor movement).

1 'BINARY ROOM 10 S=1 15 CLS:LC4,0:?"STAGE:";S 20 FOR I=0 TO 15 30 LC8+I,2:?"#":LC8+I,17:?"#" 50 LC8,2+I:?"#":LC23,2+I:?"#" 70 NEXT 80 SRNDS:FOR I=1 TO S*3 90 X=RND(12)+10:Y=RND(12)+4:IF SCR(X,Y) CONT 100 LCX,Y:IF I%3 ?"#" ELSE ?I/3 110 NEXT 120 X=15:Y=16:V=16:W=16:C=1:CLT 125 K=INKEY() 130 A=-(K=28)+(K=29):B=-(K=30)+(K=31) 140 IF SCR(X+A,Y+B)=0 LCX,Y:?CHR$(0):X=X+A:Y=Y+B 150 IF SCR(V-A,W+B)=0 LCV,W:?CHR$(0):V=V-A:W=W+B 160 LCX,Y:?"A":LCV,W:?"B" 165 LC(X+V)/2,(Y+W)/2:IF SCR()-48=C IF Y=W AND ABS(X-V)=2 OR X=V AND ABS(Y-W)=2 ?CHR$(0);:C=C+1:IF C=S+1 LC4,20:?"CLEAR!":WAIT30:IF S=9 END ELSE S=S+1:GOTO 15 170 LC16,0:?"TIME:";TICK()/60:WAIT3:GOTO 125


See you next Moku-Moku-Meeting!

OPENDATA Card Game / Start 5-star OPENDATA in Kyoto!

2017/02/04 23:55:00
#game #opendata #kyoto #english 

Kyoto prefecture and Kyoto city had an OPENDATA & ROBOT event!
"オープンデータ・ロボット活用イベントin京都 - Impact Hub Kyoto"

My roll was facilitator of the OPENDATA Ideathon with about 50 people.
This weapon is "OPENDATA Cards"!
Each card is written a name of dataset of Kyoto in the front.
And there are URL and QR code to access from the smartphone in the back.

OPENDATA Card Game (for 2-8 players)
1. Write 3 problem cards each.
2. Shuffle the cards and flip to back
3. Draw a OPENDATA card each
4. Call if you came up with an idea to solve your problem by some OPENDATA card (+3 point)
5. Another player can add a idea of function by their OPENDATA card (+1 point!)
6. Repeat to the step 3 until a player gone all of the problem cards
7. Discuss the best idea on the table


Ideathon with Cards!


Kyoto Impact Hub, it's nice place!


Where is your bus "君のバスは。"
Bus is important in Kyoto also. I want to link the Bus IoT at Sabae.


Treasure Hunter "お宝ハンター"
Social making 3D Opendata, looks very fun!


Great Kyoto lunch!


Thank you Kyoto! It was so excited!

Grareco (graphic recording) of my presentation!


For developers, see "5-star OPENDATA Kyoto sample web application"
"Find Facility" and "SPARQL Knocker"
Be semantic!

link
- 京都でオープンデータ・ロボット活用イベント 府と市が共催、司会は「Pepper」 /京都 (みんなの経済新聞ネットワーク) - Yahoo!ニュース

Presentation Shield & simple 3x3 puzzle for IchigoJam

2017/01/31 23:55:00
#game #KidsIT #IchigoJam #sabae #english 

I showed presentation about programs of the club of Sabae Junior Highschool (鯖江中学校).
It's very fun! Thank you!!


One of presentations. I understood students like to combine games!


I made a presentaiton shield for IchigoJam for quick preparations.


It was made by IchigoJam parts without CPU and long pin socket.


I was asked a question to make puzzle.

So I made a sample 3x3 puzzle.

10 CLS:FOR I=0 TO 7:LC I%3,I/3:?I+1:NEXT 20 X=2:Y=2:FOR I=1 TO 200:K=RND(4)+28:GOSUB 60:NEXT:CLT 30 LC X,Y:?"*" 40 F=0:FOR I=0 TO 7:F=F+(SCR(I%3,I/3)=I+49):NEXT:IF F=8 LC0,4:?"CLEAR! TIME:";TICK()/60;"s":PLAY"O5E16E":END 50 K=INKEY():GOSUB 60:GOTO 30 60 LC X,Y 70 X=X-(K=28)*(X>0)+(K=29)*(X<2):Y=Y-(K=30)*(Y>0)+(K=31)*(Y<2) 80 ?CHR$(SCR(X,Y)):RETURN

Let's try!

IchigoJam beta supported Wii Nunchuck via I2C

2017/01/25 23:55:00
#IchigoJam #KidsIT #game #english 

I love Wii Remocon & Wii Nunchuck! It's great usability!
At last IchigoJam supports Wii Nunchuck via I2C pins.

This is a sample program.
Let's make games, robots and tools using Wii Nunchuck!

100 GSB @NCINIT 110 @LOOP 120 GSB @NCGET 130 ?DEC$(X,3),DEC$(Y,3),Z,DEC$(A,4),DEC$(B,4),DEC$(C,4) 140 GOTO @LOOP 400 @NCINIT 410 POKE#700,#F0,#55:IF I2CW(#52,#700,2,#700,0) ERR 420 POKE#700,#40,0:IF I2CW(#52,#700,2,#701,0) ERR 430 RTN 500 @NCGET 510 IF I2CW(#52,#701,1,#701,0) ERR 520 IF I2CR(#52,#701,0,#702,6) ERR 530 X=PEEK(#702):Y=PEEK(#703):Z=PEEK(#707)&3 540 A=PEEK(#704)<<2+Z>>2&3 550 B=PEEK(#705)<<2+Z>>4&3 560 C=PEEK(#706)<<2+Z>>6&3 570 RTN

3 accelerometers are 10bit.
But if it's enough just 8bit, it becomes simpler.

100 GSB @NCINIT 110 @LOOP 120 GSB @NCGET 130 ?DEC$(X,3),DEC$(Y,3),Z,DEC$(A,4),DEC$(B,4),DEC$(C,4) 140 GOTO @LOOP 400 @NCINIT 410 POKE#700,#F0,#55:IF I2CW(#52,#700,2,#700,0) ERR 420 POKE#700,#40,0:IF I2CW(#52,#700,2,#701,0) ERR 430 RTN 500 @NCGET 510 IF I2CW(#52,#701,1,#701,0) ERR 520 IF I2CR(#52,#701,0,#702,6) ERR 530 X=PEEK(#702):Y=PEEK(#703):Z=PEEK(#707)&3 540 A=PEEK(#704):B=PEEK(#705):C=PEEK(#706) 550 RTN

Wii Nunchuck has 2 versions. If yours doesn't work, try this patch

510 POKE#700,#FB,#00:IF I2CW(#52,#700,2,#700,0) ERR

I use the adapter to connect IchigoJam and Wii Nunchuck.

Or connect directly without any adapters!?
"Wii拡張コネクタ - ネットワーク管理者の憂鬱な日常"

links
- IchigoJam-FAN - you can dowload this beta version firmware
- Wii Nunchuk Interface
- IchigoJam

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