あーさん日記

https://akkera102.sakura.ne.jp/gbadev/ の中の人

デアボ めも

 52,604,176 DIABO_GA.ALD
101,038,608 DIABO_GB.ALD
  1,399,568 DIABO_SA.ALD
  4,028,944 DIABO_WA.ALD
 30,274,988 tr_002.wav
 35,122,460 tr_003.wav
 15,709,052 tr_004.wav
 19,923,836 tr_005.wav
 17,910,524 tr_006.wav
 26,182,508 tr_007.wav
 24,780,716 tr_008.wav
 25,269,932 tr_009.wav
 26,697,596 tr_010.wav
 18,797,228 tr_011.wav
 28,398,092 tr_012.wav
 25,714,460 tr_013.wav
 12,604,412 tr_014.wav
 14,681,228 tr_015.wav
 21,586,700 tr_016.wav
 16,863,884 tr_017.wav
 16,090,076 tr_018.wav
 21,022,220 tr_019.wav
 17,096,732 tr_020.wav
 12,940,748 tr_021.wav
 21,330,332 tr_022.wav
  5,783,612 tr_023.wav
 23,134,316 tr_024.wav

 32,269,680 test.gbfs
 32,746,352 diabo.gba

吸出しはCD2WAVを使用。

xxケーブル

要望により今更ながらbackup restoreに対応しました。
アプローチは時間と心の余裕の兼ね合いにより大雑把です。
https://github.com/akkera102/gba_01_multiboot


Chishmさん作のSendSaveのmbファイルはそのまま使用して、
raspberry piGBA間通信部分を自作しました。


技術的に興味のある方はlibgbaのxboo関連のコードと
Chishmさんのコードを読んでください。


ツールは1日半で適当にやっつけたので動作不安定です。
時々ベリファイチェックにミスります。ご了承ください。
GBA開発はやっぱり面白いです。

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ができます。
f:id:akkera102:20170412002538p:plain


ただ、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

どうしてそうなるの、って話は本を買ってください。(販売促進