プチコンで採用されているSmileBASICが実装されている。
pokitto 注文done
Pokitto - easy-to-learn and program Gaming Gadget! by Daniel deBeer — Kickstarter
Pokitto Gaming Gadget - EARLYBIRD kit! ($39) Shipping to Japan ($7) Estimated delivery Jul 2017
pokitto
最近、nintendo switch ゼルダの伝説にハマってます。
マップを埋めるのが面白すぎて電子工作どころではありません。
来月まで休業中です。
ところでpokittoのキックスターターがもうすぐ始まるそうです。
アーリーバードは39ドル。スペックは見ていただくとして、開発環境はmbed。
そしてgamebuinoとarduboyのゲームも動くという現状です。
初めて見た時はpocket chipのgpio、ゲームボーイを意識したボタン配置、
イメージキャラクターはどーも君でした(汗。
ディスプレイは220×176でしかもカラー。これは魅力的です。
さらにMicro SD付きとなると開発に制約があまり無くなり、
富豪プログラミングできてしまいます。
ウルフェンシュタイン3Dが動くってことはエミュ的なことも
いけるのかもしれないです。
んー、ただあんまり自由だと開発する側に負担がかかりますし、
あまりにリソース過多だとwindowsでいいのではないか
というジレンマも発生しそうです。
面白そうなのでしばらく追っかけしようと思います。
最後に1つ。
なぜ筐体の後ろに日本語使ってるのですか、って
ツッコミ入れさせていただきます。 :)
RustとGBA その2
電子書籍版が始まりました。勝手に宣伝です。
RustでGBAのプログラムを作ろう! - ひみつラボ - BOOTH
なんというか、2017年になって本でGBAとか、ブートケーブル、
モード3などの単語を見れるとは思いませんでした。
感涙ものです。
内容は「BareMetalで遊ぶ Raspberry Pi」と同じように、
ひたすらツールやアーキーテクチャの説明。
コマンドラインは挿絵!と言わんばかりのストイックさがあります。
(後半、線や四角形の描画スクリーンキャプチャがありますけど)
OSなし、標準ライブラリなしの環境で、どう料理しようかということに
特化した内容となっています。GBAとRust環境構築の話は6:4ぐらいかな。
特にrustup。今時のツールってこう使うんだと新鮮な気持ちになりました。
ただp20の「プログラムのロード時アドレス」のところ。
単純にカードリッジ用ROMを作ろうとリンカスクリプトを
0x02000000から0x08000000にしても、GBAヘッダ追加とセクション分けしてないから
ハマるような気もしないでもなく。
GNUツールで作ったGBAプログラムを白ロムに書き込む - Qiita
あとROMの生成について、build.rom.map、(細かくならない程度で)obj-dumpなど、
Rustで作るとどういう結果になるか説明ほしかったかなぁー。
GBAでゲーム作りというにはモード3まででちょっと弱いです。
Bare Metalに興味ありという方にいいように思いました。
RustとGBA その1
同人誌「RustでGBAのプログラムを作ろう!」のwindows版インストール手順書です。
devkitProを使って極力簡単にしてみました。
■devkitProのインストール
省略。
■Visual C++ 2015 Build Toolsのインストール
http://landinghub.visualstudio.com/visual-cpp-build-tools
Rustに必要です。普通に2, 3GB取られます。ひどすぎ。
■Rustのインストール
https://www.rust-lang.org/ja-JP/
rustup-init.exeを実行。
Current installation options: default host triple: x86_64-pc-windows-msvc default toolchain: stable modify PATH variable: yes
を
default host triple: x86_64-pc-windows-msvc default toolchain: nightly ← modify PATH variable: yes
nightlyに変えます。
インストール後、コマンドプロンプトで作業します。
最新のnightlyだとエラーになるので同人誌と同じ環境を作ります。
(arm-none-eabi.json内の何かのパラメータがよくないみたいです)
rustup install nightly-2016-11-24 rustup show Default host: x86_64-pc-windows-msvc installed toolchains -------------------- nightly-2016-11-24-x86_64-pc-windows-msvc nightly-x86_64-pc-windows-msvc (default) active toolchain ---------------- nightly-x86_64-pc-windows-msvc (default) rustc 1.18.0-nightly (3b5754e5c 2017-04-10)
cargo install xargo rustup component add rust-src rustup default nightly-2016-11-24-x86_64-pc-windows-msvc rustup component add rust-src rustup default nightly-x86_64-pc-windows-msvc
add rust-srcを2回しているのはそれぞれxargo、コンパイル時に必要な為です。
■サンプルプログラムのコンパイル
https://github.com/kotetuco/Rust-BareMetal-GBA-Sample
Rust-BareMetal-GBA-Sample-masterを解凍、フォルダに移動します。
Makefileの28行目
RUST_TARGET_PATH=$(PWD) rustup run nightly `which xargo` build -v \
を
RUST_TARGET_PATH=$(PWD) rustup run nightly-2016-11-24 `which xargo` build -v \
に変更。
set PATH=C:\devkitPro\devkitARM\bin;c:\devkitPro\msys\bin;%PATH% make
buildフォルダにrom.mbができます。
ただ、xargo使わない方がromの容量も小さく高速でした。
原因はよくわからず・・・というか調べてないです。
追記:
本にCargo.toml内opt-levelの違いです、と書いてありました。m(__)m
■xargoを使わない方法
まず、libcoreを作ります。
https://github.com/rust-lang/rust/releases
nightly-2016-11-24と合わせるため、バージョン1.15.0をダウンロードします。
解凍後(ごちゃごちゃある中の)libcoreフォルダをプロジェクトフォルダにコピー。
あとはおまじないを唱えます。
rustc --target=arm-none-eabi.json --crate-type=rlib -C opt-level=2 -C no-prepopulate-passes -Z no-landing-pads -o build/libcore.rlib libcore/lib.rs rustc --target=arm-none-eabi.json --crate-type=staticlib --emit=obj -C lto -C opt-level=2 -C no-prepopulate-passes -C relocation-model=static -Z verbose -Z no-landing-pads -o build/first.o src/lib.rs --extern core=build/libcore.rlib arm-none-eabi-ld -t -T rom.ld -o build/rom.elf build/crt.o build/first.o -Map build/rom.map arm-none-eabi-objcopy -O binary build/rom.elf build/rom.mb
どうしてそうなるの、って話は本を買ってください。(販売促進
TD4 製作 その10
・TD4(ICのみ)の電流値は20mA程度。LEDは1個に付き12mAです。
仮に全てのLEDが点灯した場合、20+12*10=140mAとなります。
・電流はArduino UNOの5Vピン(最大200mA)で十分でした。
アダプタとジャックは買う必要ありません。
・ROMはArduino UNOにまかせてよかった気もします。
https://hackaday.io/project/8442/gallery#9b10d6c3077fde6e4e7ec6aaad3083c8
・部品は調べていたらもっといいものがありました・・・。
タクトスイッチ
http://akizukidenshi.com/catalog/g/gP-08074/
トグルスイッチ
http://akizukidenshi.com/catalog/g/gP-02399/
・書籍は意図して必要な情報を抜いています。
「部品リスト」「配線図」「データシート」はどれも必須です。
・回路図は書籍からコピーします。3ページは忘れずに。
拡大するのもいいかも。本に癖がつくのが嫌な方は、図書館で借りるの手です。
・データシートは「ピン接続図」と「真理値表」をそれぞれ印刷します。
pdfでいいやと思っていると、デバッグのときファイルを開く操作で時間を取ります。
一回の操作どころか、数十回は見積もった方がいいです。やはり紙での作業こそ至高。
・配線図は自分で作ります。といってもデータシートの「ピン接続図」を画像コピーして、
wordなどに紙1枚につきIC2,3個貼り付けるだけです。印刷後、回路図を見つつ接続ピンを自分で書く。
自分用の資料なんだから見栄えはどうでもいいんです。
・全体の配線図はこちらをどうぞ。動作済みだから間違いないです。
超読みにくいですけど、書くの2回目なんで勘弁してください。
・作る順番は電源、クロック、リセット、ROM、CPU。
・「電源、クロック、リセット」を作ったら電源ON。
クロックとリセットにはLEDをそれぞれ付けます。
最悪、5VとGNDを逆にしてもコンデンサ、74HC14だけ壊れるだけです。
・誰得ATMEGA328PのROMソースコード。
/* IDE 物理ピン 名称 3 5 D0 4 6 D1 5 11 D2 6 12 D3 7 13 D4 8 14 D5 9 15 D6 10 16 D7 16 25 A0 17 26 A1 18 27 A2 19 28 A3 ※スケッチの書き込み用ピン - 1 RESET - 17 MOSI - 18 MISO - 19 SCK */ #define _A0 16 #define _D0 3 void setup() { for(int i=0; i<4; i++) { pinMode(_A0+i, INPUT); } for(int i=0; i<8; i++) { pinMode(_D0+i, OUTPUT); } } byte tmp = 0xff; void loop() { byte t = 0; byte d = 0; for(int i=0; i<4; i++) { if(digitalRead(_A0+i) == HIGH) { t |= (1 << i); } } if(tmp == t) { return; } t = 0; // 変化中に読み込んだ可能性があるのでリトライ for(int i=0; i<4; i++) { if(digitalRead(_A0+i) == HIGH) { t |= (1 << i); } } tmp = t; // ラーメンタイマー switch(t) { case 0x00: d = B10110111; break; case 0x01: d = B00000001; break; case 0x02: d = B11100001; break; case 0x03: d = B00000001; break; case 0x04: d = B11100011; break; case 0x05: d = B10110110; break; case 0x06: d = B00000001; break; case 0x07: d = B11100110; break; case 0x08: d = B00000001; break; case 0x09: d = B11101000; break; case 0x0a: d = B10110000; break; case 0x0b: d = B10110100; break; case 0x0c: d = B00000001; break; case 0x0d: d = B11101010; break; case 0x0e: d = B10111000; break; case 0x0f: d = B11111111; break; } for(int i=0; i<8; i++) { digitalWrite(_D0+i, (d & (1 << i)) ? HIGH : LOW); } }
・全てのICソケットと配線を済ませたら、ショートしていないかチェックをします。
DCジャックの横にある1kを外してやると確実。
・最初の動作テストはROMをすべて0にして、アドレスが一周することを確認。
問題なければラーメンタイマーをセットする。
・おかしい動きをしているアドレスを発見した場合、1つ前のアドレスを確認する。
補助にエミュレータとLEDを使う。
片方をGNDへ。もう一方をICの足にくっつけます。
・デバッグの進め方は大きく分けて2種類。
OUT用LED側か、ROM側か。ROMの方から出発すると発見しやすい。
・プリント基板なんだからショートはないっしょ、
と思っていたらありました。orz
あれですよ、注文10分前にビアがピンに近すぎるので配線変えて、
ベタGNDを変更しないままガバー作っちゃったって話です。
問題を見つけるだけで2,3時間パー。泣きたい。
・IC取り出し器具は買いましょう。
僕みたいにドライバーでやってぽっきりいかないように。
TD4は作るに当たっての情報収集能力が問われるというか、
よしやるぞっ!て決めてからの意識が違うと思います。
ミスも大量にして、人間間違いをして覚える生き物なんだなと
改めて痛感した次第です。
TD4 製作 その9 完成
画像多めでお送りします。ご注意ください。
続きを読む