#author("2023-04-14T20:01:22+09:00","","")
* Doc.9 マルチブート [#u4adedb2]
マルチブートとは、カードリッジの入っていない状態でプログラムを動かす仕組みのことです。元々はカードリッジの持っていない友達と対戦ゲームをすることを想定していたように思います。そう考えると大昔、初代ゲームボーイのテトリス対戦はかなり白熱していたことでしょう。今では対戦のため、というより自作プログラムを単体で動かすという趣旨に代わってきてるように思います。解析が進みプラットフォームも多様化を極めておりぶっちゃけますと3.3vでGPIO出来ればなんでも動きます。~
#freeze
#author("2023-05-30T00:07:21+09:00","","")
* マルチブート [#u4adedb2]
マルチブートとは、カードリッジの入っていない状態でプログラムを動かす仕組みのことを指します。元々は初代ゲームボーイのテトリスの2台接続対戦から発展していって、自作プログラムを単体で動かすという趣旨にスライドしていったのかなあと個人的に思っています。時代が進んだおかげで敷居もだいぶ低くなり、ぶっちゃけますと5v or 3.3v電源のGPIOを使えるハードウェアならなんでもかまいません。

** raspberry pi [#sa745a2a]
IoTの覇者とえいば[[raspberry pi:https://ja.wikipedia.org/wiki/Raspberry_Pi]]。情報も豊富で使い方は様々、売上台数は累計4,600万台(2022年2月28日時点)とのことです(因みにGBAは世界で8,151万台)。世界に対して売りさばいているシングルボードコンピュータでこの分野に叶う相手はそうそういないでしょう。まだ使ったことのない方(特に学生さん)がもしいらっしゃるのでしたら早めに触っておくことをお勧めします。ここではセットアップの説明を大幅に省略してraspberry pi上のコンパイル環境やwiringPiライブラリが導入済みであることを想定して書いています。~
IoTの大御所とえいば[[raspberry pi:https://ja.wikipedia.org/wiki/Raspberry_Pi]]一択です。情報も豊富で使い方は多様化を極めています。売上台数は累計4,600万台(2022年2月28日時点)で、すでに販売を終えたGBAの8,151万台と比べるとすごさを実感できると思います。シングルボードコンピュータでこの分野に叶う相手はそうそういないかもしれません。まだ使ったことのない方(特に学生さん)がもしいらっしゃるのでしたら、早めに触っておくことをお勧めします。

** 用意するもの [#m83ea1fa]
- raspberry pi
- ゲームボーイアドバンス専用通信ケーブル(AGB-005)もしくは互換ケーブルでも可
- raspberry pi b+(b+以外でも可)
- ゲームボーイアドバンス専用通信ケーブル(AGB-005)(海外製の互換ケーブルでも可)
- ブレッドボード
- ブレッドボード用のケーブル(オス-オス)
- ニッパ
- 半田ごて
- 絶縁テープ
- テスター

** 通信ケーブル製作 [#v9a54d31]
通信ケーブルについてはAGB-005以外でも問題ないです。ポイントはGBAのシリアルポートに刺さるコネクタ部品と、そこから伸びている4本の線がmbedとspi通信できれば大丈夫です。配線は以下のとおり。~
通信ケーブルについてはAGB-005以外でも問題ないです。ポイントはGBAのシリアルポートに刺さるコネクタ部品と、そこから伸びている4本の線がraspberry piとspi通信できれば大丈夫です。配線は以下のとおり。左がGBA本体、右がケーブルプラグの拡大写真となっています。

 GBA   --- raspberry pi b+
 
 6-GND     GND
 3-SI      GPIO 10 (SPI_MOSI)
 2-SO      GPIO  9 (SPI_MISO)
 5-SC      GPIO 11 (SPI_SCLK)

#ref(1.png,nolink)

** 製作例 [#qe6d2fba]
#ref(2.png,nolink)
#ref(3.png,nolink)

** 使い方 [#u3a2f4b0]
-[[https://github.com/akkera102/gba_01_multiboot]]にアクセスしてzipファイルを入手してください。
ここからはraspberry piのコンパイル環境、wiringPiライブラリが導入済みであることを想定して書いています。別途、他所から勉強してきてください。まず[[github:https://github.com/akkera102/gba_01_multiboot]]にアクセスします。画面中央の緑色アイコンの「code」をクリックしてDownload ZIPしてください。

** mbed [#q0a1bf87]
#ref(3.png,nolink)

#ref(clip_1.png,nolink)
解凍後、以下のコマンドでコンパイルします。

 $ gcc multiboot.c -lwiringPi -o multiboot

実行前にケーブルを接続してGBAを電源ONのみにします。

 $ ./multiboot

左がGBA本体、右がケーブルプラグの拡大写真となっています。ちなみにspi通信が16bit単位であり、モード3でないとダメっぽいです。~
実行ファイルを起動すれば上記の製作例のように画面が表示されます。ちなみに仕様的な話をすると通信はspiが16bit単位であり、モード3でないとダメっぽいようです。


[[Dev'rs GBA Dev FAQs:http://www.devrs.com/gba/files/gbadevfaqs.php#PCGCable]]
- Dev'rs GBA Dev FAQs
 Can you modify a GBA link cable to connect to a COM serial port to support multiboot?
 
 There are many reasons you can't easily do this.
 The first reason is that a standard serial COM port uses 1/8/1 format
 but GBA multiplayer / multiboot link mode uses 1/16/1 format. (format = Start bit/Data Bits/Stop Bit)

** Raspberry pi [#l4a9b287]
mbedのコードを流用して作りました。~
セーブデータのバックアップ、リストアにも対応しています。~
https://github.com/akkera102/gba_01_multiboot
** mbed [#yfb8ecfb]
mbedバージョンもあります。

** Arudino [#l0964ca5]
Arudinoでも動作報告を頂きました(thanks kos-さん!)。~
インターネットアーカイブからの発掘でしたので検索に引っかからず?~
ロストテクノロジー寸前だったかもしれないです。~
- https://os.mbed.com/users/kek/code/gba_multiboot/

簡単な流れは以下のとおりとなっています。~

 GBA --- Arudino --- Linux PC(or Raspberry pi)

- SPI通信(GBA~Arudino)
- UART通信(Arudino~Linux PC)
- Linux PCからgbaファイルを転送

ソースコードはArudinoと、Linux PC用の2つがあります。~


** 履歴 [#c4d9ece6]
- 2017/09/13
- 2014/12/25
- 2023/04/14
- 2014/11/10


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS