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

資源の活用が鍵!ERPsimセッション@鯖江 by SAP&Hana道場、こどもERP GAME on IchigoJam

2018/10/20
#opendata #game #IchigoJam #hanadojo 

MS、Adobeと共にオープンデータ推進を発表した、SAP社とHana道場コラボで、経営とデータを学ぶワークショップ「ERPsimセッション」鯖江で開催!

ERPとは、Enterprise Resources Planning(企業資源計画)の略。多様化・複雑化する社会、データを活かした素早い判断が重要。


講師・サポートは、遠路東京から駆けつけてくれたSAPジャパンのみなさん!


SAPはドイツ本社、グローバルで売上約3兆円、全従業員は1万人に迫る勢い。SAPジャパン社長は福田さん! 企業をいい感じにするソフトを提供する会社です。


会社にはいろんな役割があります。ゲームで一通りやってみるっていいですね!
シミュレーション=ゲーム=学習。


参加者全員ノートパソコンを使ってERPsimにログイン、市場価格や、売れ行きなどいろいろデータを見ながら発注したり、値段を決めたり、最終利益額を争うシミュレーション。


1日が1分で進むシミュレーション20分で1ラウンド、ラウンド終了ごとに成績発表して作戦会議し3ラウンド。優勝は学生団体withチーム! 優勝賞品は、ダブル鯖江ご当地IchigoJam「MeganeJam」セット!

状況把握に手間取り、良い成績が残せなかったものの、コンピューターを使ったシリアスボードゲーム的に楽しみました。 学生はもちろん、企業研修にも良さそうですね。

もっとシンプルに商売の基本を遊びで学ぶ、こどもERP GAMEをIchigoJamでつくってみました。
所持金100円でスタート。商品は1種類、1つ原価10円。
販売価格を決め、宣伝し、売上で再度仕入れて12ターン終了後の利益を競うシミュレーション。


12ターン終わって73円の利益、という成績でした。

ERP GAME on IchigoJam のプログラムはこちら

1 'ERP GAME 10 G=100:S=0:P=10:R=50:T=1:E=12 20 CLS:LC0,5:?"ERP GAME":?:?"TURN:";T;"/";E:? 30 ?"NEDAN:";P:?"ZAIKO:";S:?"MONEY:";G:? 40 ?"1:NEDUKE":?"2:SHIIRE":?"3:SENDEN":?"0:NEXT":INPUT N 50 IF N=1 INPUT"P YEN:",P:IF P>100 P=100 60 IF N=2 INPUT"GENKA 10YEN N:",M:IF M*10<=G G=G-M*10:S=S+M 70 IF N=3 INPUT"KOKOKU YEN:",M:IF M<=G R=R+M:G=G-M 80 IF N!=0 GOTO 20 90 A=(15-P)*R/50+RND(R/10) 100 IF A<0 A=0 ELSEIF A>S A=S 110 ?"SALES ";A:WAIT30:?"URIAGE ";A*P;"YEN":WAIT60 120 G=G+A*P:S=S-A 130 IF T<E T=T+1:GOTO 20 140 ?:?"RIEKI ";G-100;"YEN"

コアは、90行の売れる個数を決めるアルゴリズム。
価格Pと知名度Rでベースが決まり、知名度Rを上限にしたランダムで売れる数を決めています。

アルゴリズムから乱数を排除したり強めたり、推移をグラフ化したり、自動発注化したり、商品増やしたり、倉庫代を徴収したり、あれこれ改造して遊んだり、遊んでもらったりしてみましょう。

IchigoSodaを使ったり、スマホ対応して、みんなで遊べるゲームにしたり、1ターンをリアルな1日とし、毎日ちょこちょこ遊ぶゲームにするのも楽しそう。

SAPのみなさん、楽しい時間、ありがとうございました!!

links
- SAPのERPが凄かった。リアルタイム経営シミュレーション体感セミナー開催しました | きらきら星のつぶやき☆
- SAPのERPが凄かった②!体感型ビジネスコンペディション開催! | きらきら星のつぶやき☆

映画の10倍、普通の4倍、秒間240回描画! 革新的ディスプレイに備える軽量ゲームフレームワーク sq-game.js

2018/10/13
#js #game 

4Kや8K、映像の進化は画面解像度だけでなく、時間解像度も進化してました。
通常、秒間60回、60Hzで更新される画面、なんと4倍の240Hzにも達しています。(実験では480Hzも!)

レースゲームなど、動きが激しいアクションゲームでのフレームレートはとても大事。
処理が重たいゲームで30fps(frame per second、秒間更新回数)なものは、操作の遅れが最大33ミリ秒(1秒/30)発生し、見た目にもカクカクぎこちなく見えて幻滅です。

初代ファミコンも60fps(正確には59.97fps?)のなめらかなでクイックな反応が楽しい。ゲームによっては敵が多く出すぎて「処理落ち」と呼ばれるフレームレートの低下も当時でも、よく知られた現象でした。

そんな重要な要素、フレームレートが4倍にもなった世界、ゲームに限らず未来を感じます。ブラウザ上でも手軽に実験できそうなので、JS用かんたんゲームフレーム「sg-game.js」を作って、その実現の時を待つことにしました。

サンプルアプリ「FPSChecker」は、その環境でのリフレッシュレートを表示しながら、ぐるぐる色を自身の角度を色相としながら回る円、タップまたはクリックするほどに回転周波数が変わります。 10Hzにしたときに残像で見える円の数、通常の環境では6ですが、12コ、14コ、24コと増えるはず。(480Hz環境なら48コ!)


FPSChecker」(スクリーンショットは60fps環境を模したもの)

IO-DATA製24.5インチ240Hz対応モニター「KH2500V-ZX2」を買って試してみます!
(「EX-LDGC251UTB」と同じ仕様のパッケージ違い)

今回、新設した正方形ゲーム用シンプルフレームワーク「sg-game.js」、ゲームづくりに、JavaScript言語によるプログラミング学習に、活用ください。


こちら、最小サンプル「min.html」をコピペし、min.htmlとして保存、ブラウザで開けば動きます!
PC、iPhone、iPad、Android、いずれもOK!

<!DOCTYPE html><html><head><meta charset="utf-8"/> <title>min</title> <script src="http://taisukef.github.io/sq-game/sq-game-r1.js"></script> <script>"use strict"; var gamemain = function(game) { game.loop = function(g, ts, dt, vw) { g.setColor(255, 0, 0); g.fillCircle(500, 500, ts % 1000); }; }; </script> </head></html>

正方形ゲーム専用フレームワーク sq-game.js の使い方
- gamemain メソッドをつくる
- 受け取った、game オブジェクトに 描画用ループ loop メソッドを設定する
- g は canvas、ts は時間、dt は時間差分、vw はバーチャル幅と高さ1000
- 必要なら、タップされた時の操作用に tap メソッドを設定する

こちらが、sg-game.js を使った、上記、FPSCheckerのプログラム!

<!DOCTYPE html><html><head><meta charset='utf-8'/> <title>FPSChecker</title> <meta name="apple-mobile-web-app-capable" content="yes"/> <meta property="og:image" content="ss.png"/> <link rel="apple-touch-icon" href="icon.png"/> <script src="sq-game-r1.js"></script> <script>'use strict'; var gamemain = function(game) { game.tap = function() { if (hz == 10) hz = 0.1; else if (hz < 0.95) hz += 0.1; else hz++; }; var hz = 1; var th = 0; game.loop = function(g, ts, dt, vw) { g.setColor(0, 0, 0); var fh = 60; g.setFontSize(fh); var s = "" + fixfloat(hz + 0.05, 1) + "Hz"; g.fillText(s, 10, 10 + fh); var s = "FPS: " + Math.floor(1000 / dt) + " / " + fixfloat(dt, 2) + "ms"; g.fillText(s, vw - g.measureText(s).width - 20, 10 + fh); th += dt / 1000 * Math.PI * 2 * hz; var r = vw / 4; var x = vw / 2 + Math.cos(th) * r; var y = vw / 2 + Math.sin(th) * r; var cr = 90; var rgb = hsv2rgb(th / (Math.PI * 2) * 360 + 90, 0.8, 0.8); g.setColor(rgb[0], rgb[1], rgb[2]); g.fillCircle(x, y, cr); g.setColor(255, 255, 255); var fh = 80; g.setFontSize(fh); var s = "" + fixfloat(hz, 1); g.fillText(s, x - g.measureText(s).width / 2, y + fh / 4); }; }; </script> <style> a { color: gray !important; } </style> </head> <body> <div id="src"> FPSChecker<br> APP: CC BY <a href=http://fukuno.jig.jp/1686 target=_blank>fukuno.jig.jp</a><br> LIB: CC BY <a href=sq-game-r1.js target=_blank>sq-game.js</a><br> </div> </body> </html>

ちなみに、映画のフレームレートは秒間24コマ、CGはきれいになってもなかなか変わりませんね。
8Kで秒間240コマの映画とか、未知の体験も楽しみです。

平成最後の国体障スポ、福井にて今週末開会! ゲーム会場マップアプリ with 国体競技会場オープンデータ

2018/09/27
#fukui #opendata #game 

国民の健康は、富の源泉。スポーツ推進事業、国体。平成最後の国体が、今週末福井で開会式!
・・・といっても、すでにいろいろと競技が始まっている不思議。
ハンドボール会場への永平寺シャトルバスでもオープンデータとIoTが活躍!


福井国体 ゲーム会場マップ
福井国体障スポの全競技会場(福井県提供のオープンデータによる)をマッピング!
せっかくの機会、お近くの競技会場をチェックするのもいいかもですね!


しあわせ元気 お役立ち情報アプリ / 福井国体障スポ」もあわせてどうぞ!


鯖江駅に設置された福井高専学生開発のカウントダウン、いよいよあと1日(9/28朝)


福井県内各地でいろんな「はぴりゅうくん」を見ます(こちら鯖江駅前)


鯖江といえば、メガネ、つつじ、レッサーパンダ!
つつじは咲いていませんが、レッサーパンダがかわいい西山公園と、鯖江のメガネが数千本!めがね会館はオススメです!

links
- 2018「福井しあわせ元気」国体・障スポ
- 福井県オープンデータ(福井国体関係含む、その他)
- 国体と障害者スポーツの初融合!福井国体・障スポ やわらか競技一覧アプリ

オープンソースプロジェクトで学ぶプログラミング、IchigoJam x ベーマガ編、ゲーム「イチゴトラブル」改造例

2018/09/21
#IchigoJam #KidsIT #game 

オープンソース文化の源流、ベーマガこと、マイコンBASICマガジン、最新号が届きました!
ゲームがしたい、打ち込む、遊ぶ、改造、遊ぶ、と、繰り返しているうちに自然と身についたプログラミング。
写経は歴史ある勉強法です!

おもしろそうなオープンソースプロジェクトを発見!
多量に囲んで高得点「イチゴトラブル by KF」(ベーマガ2018年11月号 / 電子工作マガジン内)

打ち込みます。BASICのみで書かれた、30行ちょっとのプログラム。
打ち込みながら、ここはどういう機能をしているのかな?と自然と想像できるようになっていきます。

できあがったら、SAVEして、F5でRUN!
Syntax error などが出がちなので、見比べて直します。
なんかゲームの様子がおかしいな?と思ったら、きっとどこか打ち間違いがあるので該当しそうなところを探してチェック!

オープンソースの醍醐味は、改造!
解説を頼りに、自分好みに変更しましょう。

囲んだときの点数が大きすぎる気がしたので、面積連動の変数Mを使わず、囲んだ数だけどんどん足すように変更。

270 IF(D>=A)*(D<=X)*(E<=Y)THEN [I*3]=0:LC D,E:?C;:S=S+C:B=B-1:C=C+1:WAIT15

めいいっぱい囲んだもの勝ちになってしまうので、囲んだらNGなキャラクター「猫」を登場させてみます。

10 CLV:CLS:A=7:N=16:L=3:B=N:X=15:Y=13 20 FOR I=0 TO N:LET[I*3],#ED-(I<L),RND(20)+6,RND(10)+5:NEXT 110 LC [I*3+1],[I*3+2]:?CHR$([I*3]);

猫の数は、Lで調整。全体のキャラの数Nの内、Lコが猫になります。LETコマンドを使って配列へのまとめて代入を使ってプログラムをコンパクト化!

猫を囲ってしまったら「CAT INSIDE」と表示して強制ゲームオーバー!

270 IF(D>=A)*(D<=X)*(E<=Y)THEN IF[I*3]=#EC ?"CAT INSIDE!":END ELSE [I*3]=0:LC D,E:?C;:S=S+C:B=B-1:C=C+1:WAIT15

スコアを100倍にインフレさせてみます。

130 LC 0,0:?S;"00" 300 LC 9,12:?"SCORE=";S;"00"

遊ぶ!

ゲームしている様子。

こどもから大人まで楽しめる簡単で楽しい電子工作も満載、復刻ベーマガ内蔵の電子工作マガジン、オススメです!

links
- 電子工作マガジン(オフィシャル)
- 電子工マガジン2018年11月号 ベーマガ付き! on Amazon

426byteの迷路ゲーム、ローカル対戦&IchigoSodaでネット対戦への改造法

2018/08/15
#IchigoJam #game 

人気ゲームのひとつ、迷路。
意外と単純なアルゴリズム(考え方)で作れるので、ベースを作っていろいろ改造してみましょう。
元ネタ「『ゲームは自分で作るんだ!』MSX検定第2弾BASICプログラム編:MSX30周年 - 週刊アスキー

ゴールまでの道筋が見えてしまわないように、歩いたところだけが見えるようにします。
真っ白のキャラクターは、キャラクターコード1の他に、143があるので歩いていない道として使います。

10 CLS:W=29:H=21:L=143 20 FORI=0TOW+1:LCI,0:?CHR$(1,28,31,L);:LCI,H+1:?CHR$(1);:NEXT:FORI=1TOH:LC0,I:?CHR$(1,L);:LCW+1,I:?CHR$(1);:NEXT 30 FORI=2TOWSTEP2:FORJ=2TOHSTEP2:LCI,J:?CHR$(1,L,28,28,31,L,L);:D=RND(4):LCI+(D=0)-(D=2),J+(D=1)-(D=3):?CHR$(1);:NEXT:NEXT

10行 準備
20行 枠描画
30行 迷路描画(棒倒し法)
W,H: 迷路の大きさ(右端ゴールの位置)
L: 歩いていない道のキャラクターコード(L=2とすると動作がよくわかります)


カーソルキーで歩いて、ゴールまでたどり着くまでくりかえし!

40 X=1:Y=1:LCW,H:?CHR$(246) 50 LCX,Y:?"o";:IFX=W&&Y=HEND 70 K=INKEY():IF!KCONTELSEA=X-(K=28)+(K=29):B=Y-(K=30)+(K=31):IFSCR(A,B)!=1?CHR$(28,0);:X=A:Y=B 80 GOTO50

以上で迷路ゲームのできあがり、合計426byte!意外とシンプルにできたので、いろいろ拡張できますね!


10行、W=11:H=11 とすると迷路生成が速くなっていろいろ改造に便利!

最小の迷路(?)は、W=5:H=5 です。

乱数列を初期化する SRNDコマンド を使うと、毎回同じ迷路が出せます。

15 SRND 1

ステージ番号を入力するようにすれば、友達と競争できますね!

15 INPUT"STAGE?",N:SRND N

タイムを計測したくなったら、CLT/TICK()を使いましょう。

45 CLT 50 LCX,Y:?"o";:IFX=W&&Y=H ?TICK():END

IchigoSoda(+IoTファームβ)を使えば、ネットから出題されるステージに対して、ハイスコアランキングも簡単!

15 N=IoT.IN():IF N=0 CONT ELSE SRND N 50 LCX,Y:?"o";:IFX=W&&Y=H N=TICK():IoT.OUT N:END

小学生の頃、好きだったMSXの投稿ゲーム「Monochrome Venus by TEIJIRO」(レビュー)のように敵を登場させて、RPG風に仕上げるのもきっと楽しいですよ。

古典ゲームとIoT、ネット対戦、モーター・センサーとの組み合わせ、新しい展開見えるかも!?

カナダ銀行でも使える世界一の愛され裏コマンドを組み込む、IchigoJamかわくだりゲーム改造法

2018/08/14
#IchigoJam #game 

ギネスにも載ってる世界一有名な裏コマンド「上上下下左右左右BA」こと、コナミコマンド(英、Konami Code

IchigoJamでの人気ゲーム「かわくだりゲーム」にも実装してみました。

12行で裏コマンドを準備し、39行で判定!

ひとつでも間違ったら、PをUにして最初から。上下左右の絵文字のコードを196引けばキーコード。 終わり判定はダブルクォートのコード、34かどうかとしているので、自在にオリジナルコマンドを設定して遊べます。 Pを0にしなければ、何度でも使えるようになりますよ。

時々、1段余計にスクロールする問題の対処方法
原因は LC RND(32),23 で画面右下で表示すると強制スクロールしてしまうこと。RND(31)として右端を使わないようにして、38行で X=(X+31)%31 と端判定を変更します。

スペースでも当たってしまう問題の対処方法
40行の当たり判定に &31 といれることで、スペースのキーコード32など32の倍数の場合でも0と判定するようにします。%32と32で割ったあまりを使ってもOK。

ネコ多すぎ問題の対処方法
ネコの隊列でかわをくだる、かわくだりゲーム。ネコを1匹にしたい場合は、WAITの後で、描いたネコを消す処理を追加しましょう(36行 LC X,4:?" ")

おまけ、簡単お手軽「ボム」追加法
スペースキーを押したらボム

34 IF BTN(32) CLS

アプリづくりの基本が詰まった「かわくだりゲーム」!
改造して遊ぶほどにいろいろ身につきますよ!
困ったときは、辞書「IchigoJam BASICリファレンス」に立ち返ろう。

Wikipediaのコナミコマンドで発見、カナダ建国150周年を記念する、カナダの中央銀行「カナダ銀行」の特設サイト「Explore the New $10 Note - Bank of Canada」でも使えることに驚き!

毎週月曜日深夜24時放送「Innovative Tomorrow
次週は、ITインフラのイノベーター、さくらインターネット、田中邦裕さん!(舞鶴高専出身)

先日収録した、プログラミングミニコーナーもある模様


楽しみです。

除雪をモチーフにしたパズルゲーム「除雪番 / JOSETSUBAN」 for IchigoJam

2018/02/13
#IchigoJam #game #fukui 

大雪、一晩で30cm以上積もると除雪しないと車も動かせない。
雪は簡単に解けてなくなるわけではないので、どける場所が必要。
除雪は戦略が大事です。

除雪から着想得たパズルゲーム「除雪番 / JOSETSUBAN」。
大掃除をテーマにした「掃除番」に続くオリジナルパズル第二弾。


除雪番 on IchigoJam web

除雪番(JOSETSUBAN)のルール

1. ゴールにたどり着けばクリアです
2. 雪は1つだけ押すことができます
3. 動かす先に雪の積む余地があれば詰めます(最大4段)

除雪番 for IchigoJam 操作説明

上下左右キーで動きます
スペースキーでリトライします

' JOSETSUBAN 10 VIDEO3:S=1:LET[0],1,0,4,3,3,4,4,3,1,0,4,2,2,4,4,2,3,4,3,3 20 CLS:T=S*4-4:SRND[T]:FORI=1TO62:LC1+I%8,2+I/8:?CHR$([T+1+RND(3)]):NEXT:LC1,0:?"STAGE:";S;"-";[T] 30 X=1:Y=2:D=0:LC8,9:?CHR$(11) 40 LCX,Y:?CHR$(253-D*2) 50 IFBTN(32)GOTO20 60 A=BTN(29)*(X<8)-BTN(28)*(X>1):B=BTN(31)*(Y<9)-BTN(30)*(Y>2):D=D-BTN(28)*D+BTN(29)*!D 70 IF!A&&!B:GOTO50 80 IFX+A=8&&Y+B=9:LC2,11:?"GOAL!";:WAIT60:S=S+1:IFS=6ENDELSEGOTO20 90 N=SCR(X+A,Y+B):IF!N:GOTO120 100 LCX+A*2,Y+B*2:M=SCR():IFM=11GOTO40ELSEIF!MM=NELSEM=M+N-5:IFM<1GOTO40 110 ?CHR$(M) 120 LCX,Y:?CHR$(0):X=X+A:Y=Y+B:GOTO40

10行の配列がステージデータです。1ステージ配列の要素を4つ使い、最初がランダムの初期化値(SRND)、後3つがランダムにステージにおく雪種。
ちゃんとステージを考えてつくると、おもしろいパズルゲームとなるはず!

スペースを置く毎にステージを生成するには次のように改造してください

50 IFBTN(32):[T]=[T]+1:GOTO20

タイトル画面もつけたい場合は次の行を追加!

25 LC10,4:?"JOSE":LC10,5:?"TSUBAN"

除雪が落ち着いたら、雪で埋まった消火栓、掘り返しておきましょう。
高校生、宝探しのようでおもしろかったとのこと!
プログラミングには、不便を楽しみに変える力もあります。

links
- 倉庫番 - 1982年生まれの名作、押しモノゲーム!
- 掃除番 - 2015年大掃除をテーマに作成
- 平成30年2月大雪に関する情報 | 福井県ホームページ

Kawaii Programmable Game Machine 'Pokitto' - フィンランド生まれのArm Cortex-M0+搭載モバイルゲーム機でかわくだりゲーム

2018/01/29
#arm #game 

Maker Faire Bay Area 2017、お向かいで展示していたかわいいゲーム機、Pokittoが到着!
I got a cute game machine Pokitto exhibited our other side at Maker Faire Bay Area 2017.

IchigoJamのかわくだりゲームを移植してみました。
I translated the KAWAKUDARI (rafting) GAME program from IchigoJam.


It's nice work with game controller - 10字キーの操作感がいい感じ!

main program of KAWAKUDARI GAME on POKITTO - かわくだりゲームPokitto版

int main() { pkt.begin(); pkt.display.setColor(1); cls(); int x = 12; while (pkt.isRunning()) { if (pkt.update()) { if (scr(x, 5)) { wait(1); x = 12; cls(); } if (pkt.buttons.rightBtn()) { x++; } else if (pkt.buttons.leftBtn()) { x--; } lc(x, 5); print(CHAR_ME); lc(random(sw), sh - 1); print(CHAR_ENEMY); scrollUp(); draw(); } } }

for Mbed LPC11U68 using PokittoLib (tutorial and API)


It's works! - 動きました!


Just pressing C button to load and run your program if you put your bin file to the micro SD card. マイクロSDカードにbinファイルを入れておけば、起動後にスタートボタン的場所にあるCボタンを押してローダーから起動可能!


Cute document! - 付属のドキュメントもかわいい!
My favorite game 'CRABATOR' - お気に入りのミニRPG


How cute this PCB is! - なんとかわいいプリント基板!


Arm Cortex-M0+ / LPC11U68 RAM36KB ROM256KB!

all program of KAWAKUDARI GAME on POKITTO for Mbed - かわくだりゲームPokitto版

#include "Pokitto.h" Pokitto::Core pkt; const int sw = 27; const int sh = 24; uint8_t buf[sw * sh]; void cls() { for (int i = 0; i < sw * sh; i++) buf[i] = 0; } int lx, ly; void lc(int x, int y) { lx = x; ly = y; } void print(char c) { buf[lx + ly * sw] = c; } void scrollUp() { for (int i = sw; i < sw * sh; i++) buf[i - sw] = buf[i]; for (int i = sw * sh - sw; i < sw * sh; i++) buf[i] = 0; } void draw() { for (int i = 0; i < sw * sh; i++) { int x = i % sw; int y = i / sw; pkt.display.bufferChar(x * 8 + 4, y * 8, (char)buf[i]); } } int scr(int x, int y) { return buf[x + y * sw]; } #define CHAR_ME 32 #define CHAR_ENEMY 10 int main() { pkt.begin(); pkt.display.setColor(1); cls(); int x = 12; while (pkt.isRunning()) { if (pkt.update()) { if (scr(x, 5)) { wait(1); x = 12; cls(); } if (pkt.buttons.rightBtn()) { x++; } else if (pkt.buttons.leftBtn()) { x--; } lc(x, 5); print(CHAR_ME); lc(random(sw), sh - 1); print(CHAR_ENEMY); scrollUp(); draw(); } } }

links
- POKITTO
- Pokitto - easy-to-learn and program Gaming Gadget! by Daniel deBeer — Kickstarter
- 十字キー+ABボタンでゲームを自作——ARMマイコン搭載ゲームコンソール「Pokitto」 | fabcross
- IchigoJam - BEST IN CLASS at Maker Faire Bay Area 2017 / メイカーフェアで教育優秀賞受賞!

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

2017/08/16
#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
#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

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