SlideShare a Scribd company logo
1 of 20
Download to read offline
Arduino を使った GAMEBOY カードリッジの DUMP
工学部情報科学科 勝亦利宗
自己紹介
●
工学部情報科学科 2 年 勝亦利宗
●
Twitter @___106___
●
Github https://github.com/106-/
– 今回のプログラム https://github.com/106-/gbdumper
必要なもの
● Arduino Leonard
●
シフトレジスタ SN74HC595N
●
ブレッドボード
●
ジャンパーケーブル多数
●
ジャンパーピン多数
●
10KΩ の抵抗 4 本
●
ゲームボーイ用カードリッジコネクタ
●
IDE ケーブル
なぜゲームボーイからデータを取り出すのか ?
●
セーブデータの保存 ( データ保持用の電池が切れる )
●
エミュレータで使う
カードリッジのしくみ
●
ピン配置
カードリッジのしくみ
●
VCC : 5V 電源
●
CLK : Arduino の GND に接続
– ポケットカメラの出力がおかしくなるため
●
WR, RD, MREQ : Arduino の任意のピンに接続
– 上線は否定の意味 ( 使わないときは常に HIGH)
– 抵抗を挟んでおく ( フェイルセーフ )
– 読み込み / 書き込み / メモリ書き込みのスイッチ
●
A0-A15 : ( 読み込み | 書き込み ) たいアドレスを指定する
●
D0-D7 : アドレスに指定したデータが読み出せたり書き込めたり
カードリッジのしくみ
●
RESET : 抵抗を挟んで 5V 電源
●
AUDIO : 用途不明
●
GND : Arduino の GND に接続
→ 基本的に A0-A15 ピンにアドレスを指定し ,
それに対するデータを D0-D7 ピンに指定していく
シフトレジスタとは
●
カードのピンが 27 本なのに対して ,Arduino のピンは 18 本しかない
– シフトレジスタを使って解決する
シフトレジスタとは
●
シフトレジスタ :
– パラレル信号をシリアル信号に変換したり , その逆もできる IC
– Arduino には簡単に使える関数が存在するので便利
– 今回はシリアル→パラレル変換ができるものを使う
– 山形の秋葉原で買えます
→ アドレス指定部分に必要だった 16 本のピンを一つに集約できる !
– ラッチピン , クロックピン , シリアルピンの 3 本
シフトレジスタとは
// シフトレジスタでアドレスを指定する .
void setaddress(unsigned int addr)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, (addr>>8));
shiftOut(dataPin, clockPin, MSBFIRST, (addr&0xFF));
digitalWrite(latchPin, HIGH);
}
こんな感じでアドレスを指定できる
シフトレジスタとは
●
接続例 ( シフトレジスタが一つの場合 )
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2369
回路完成図
プログラム部を DUMP する
●
DUMP 時の動作
– ROM のヘッダを読み込み ,MBC(MBC とは ?→ あとで ) を調べる
– RD ピンを LOW にして , アドレスを変えながらデータを一つ一つ送信する
– MBC を切り替えてゆく
MBC とは
●
Memory Bank Controller の略
– GB の ROM サイズは最大で 16KByte
– ROM を複数積むことで容量不足分を補う
– 複数積んだ ROM を切り替える ( バンク切り替えという ) のが MBC
– 切り替えは特定のアドレスに書き込んで行う
– MBC にはいくつかのタイプがある
●
MBC によって書き込むアドレスが違ったりするので面倒
ROM のヘッダ
●
0x0100 から 0x014F の範囲には , そのゲームの様々な情報が記録されている
– ゲームのタイトル ,MBC のタイプ , データのサイズなど
– データチェック用に任天堂のロゴも
●
MBC の判定に使うのは 0x147, ROM/RAM のサイズは 0x148 と 0x149
クライアント
●
送られてきたデータを PC に保存するプログラムを Python で書く
●
ヘッダ部を読み込み ,MBC の情報などを表示する
●
とくに複雑なことは無いので詳しい説明は省きます
DUMP してみる
●
BGB で動作確認
そのほかにも…
●
セーブデータを読み込んだり , 書き込んだり
– サイズやアドレスが ROM とは違うが , 基本的な考え方は ROM と同じ
そのほかにも…
●
ポケットカメラの画像を抽出する
– PocketSaver というソフトをつかう
参考
● GBCartRead: Arduino based Gameboy Cart Reader
https://www.insidegadgets.com/2011/03/19/gbcartread-arduino-based-gameboy
-cart-reader-%E2%80%93-part-1-read-the-rom/
●
いまさら聞けないゲームボーイ
http://matsu-world.qee.jp/gameboy/index.html
● Memory Bank Controllers
http://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers

More Related Content

What's hot

CPUの創りかた
CPUの創りかたCPUの創りかた
CPUの創りかたfumi_maker
 
とあるCocos2dxアプリのチート編
とあるCocos2dxアプリのチート編とあるCocos2dxアプリのチート編
とあるCocos2dxアプリのチート編kumin1030
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使うAtsushi Hayakawa
 
200611material ozaki
200611material ozaki200611material ozaki
200611material ozakiRCCSRENKEI
 
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...Deep Learning JP
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカットTsubasa Hirakawa
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Race condition
Race conditionRace condition
Race conditionhama7230
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究についてMasahiro Suzuki
 
生存時間分析数理の基礎
生存時間分析数理の基礎生存時間分析数理の基礎
生存時間分析数理の基礎Koichiro Gibo
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門Toru Matsuoka
 
最近(2020/09/13)のarxivの分布外検知の論文を紹介
最近(2020/09/13)のarxivの分布外検知の論文を紹介最近(2020/09/13)のarxivの分布外検知の論文を紹介
最近(2020/09/13)のarxivの分布外検知の論文を紹介ぱんいち すみもと
 
Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術Toshiki Teramura
 
避けては通れないバイナリ地獄 - NDEFってなんだろう -
避けては通れないバイナリ地獄 - NDEFってなんだろう -避けては通れないバイナリ地獄 - NDEFってなんだろう -
避けては通れないバイナリ地獄 - NDEFってなんだろう -Tomoki YAMASHITA
 
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ智啓 出川
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】Hiro H.
 

What's hot (20)

CPUの創りかた
CPUの創りかたCPUの創りかた
CPUの創りかた
 
とあるCocos2dxアプリのチート編
とあるCocos2dxアプリのチート編とあるCocos2dxアプリのチート編
とあるCocos2dxアプリのチート編
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
 
200611material ozaki
200611material ozaki200611material ozaki
200611material ozaki
 
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...[DL輪読会]Diffusion-based Voice Conversion with Fast  Maximum Likelihood Samplin...
[DL輪読会]Diffusion-based Voice Conversion with Fast Maximum Likelihood Samplin...
 
自然言語処理
自然言語処理自然言語処理
自然言語処理
 
初めてのグラフカット
初めてのグラフカット初めてのグラフカット
初めてのグラフカット
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Race condition
Race conditionRace condition
Race condition
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
 
生存時間分析数理の基礎
生存時間分析数理の基礎生存時間分析数理の基礎
生存時間分析数理の基礎
 
レイトレ空間構造入門
レイトレ空間構造入門レイトレ空間構造入門
レイトレ空間構造入門
 
最近(2020/09/13)のarxivの分布外検知の論文を紹介
最近(2020/09/13)のarxivの分布外検知の論文を紹介最近(2020/09/13)のarxivの分布外検知の論文を紹介
最近(2020/09/13)のarxivの分布外検知の論文を紹介
 
Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術
 
避けては通れないバイナリ地獄 - NDEFってなんだろう -
避けては通れないバイナリ地獄 - NDEFってなんだろう -避けては通れないバイナリ地獄 - NDEFってなんだろう -
避けては通れないバイナリ地獄 - NDEFってなんだろう -
 
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
2015年度GPGPU実践プログラミング 第15回 GPU最適化ライブラリ
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
 

Similar to Arduinoを使ったgameboyカードリッジのdump

OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGHideki Aoshima
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムJunichi Kakisako
 
Osc hokkaido2015 arduinoで温度を測るところまで
Osc hokkaido2015 arduinoで温度を測るところまでOsc hokkaido2015 arduinoで温度を測るところまで
Osc hokkaido2015 arduinoで温度を測るところまでrarere
 
20140910 Arduino for beginners
20140910 Arduino for beginners20140910 Arduino for beginners
20140910 Arduino for beginnersKenichi Ohwada
 
20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)Atsushi ENTA
 
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!Kazuhiro Abe
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介Kenta IDA
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習ksk sue
 
Internet of Things
Internet of ThingsInternet of Things
Internet of ThingsRainmaker Ho
 
Big Raspberry JAM TOKYO 2013 Hardware
Big Raspberry JAM TOKYO 2013 HardwareBig Raspberry JAM TOKYO 2013 Hardware
Big Raspberry JAM TOKYO 2013 HardwareHideki Aoshima
 
20181117 arduino basicbeta1
20181117 arduino basicbeta120181117 arduino basicbeta1
20181117 arduino basicbeta1Chiehwun
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話Masawo Yamazaki
 
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたMovidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたNISHIMOTO Keisuke
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料Kenichi Yoshida
 

Similar to Arduinoを使ったgameboyカードリッジのdump (20)

OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUG
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
 
Cuda
CudaCuda
Cuda
 
Osc hokkaido2015 arduinoで温度を測るところまで
Osc hokkaido2015 arduinoで温度を測るところまでOsc hokkaido2015 arduinoで温度を測るところまで
Osc hokkaido2015 arduinoで温度を測るところまで
 
20140910 Arduino for beginners
20140910 Arduino for beginners20140910 Arduino for beginners
20140910 Arduino for beginners
 
Arduino jenkins
Arduino jenkinsArduino jenkins
Arduino jenkins
 
20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)
 
Takep lpc1114-190614
Takep lpc1114-190614Takep lpc1114-190614
Takep lpc1114-190614
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
 
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
 
ESP32特集の内容紹介
ESP32特集の内容紹介ESP32特集の内容紹介
ESP32特集の内容紹介
 
組込みAndroid入門実習
組込みAndroid入門実習組込みAndroid入門実習
組込みAndroid入門実習
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 
Big Raspberry JAM TOKYO 2013 Hardware
Big Raspberry JAM TOKYO 2013 HardwareBig Raspberry JAM TOKYO 2013 Hardware
Big Raspberry JAM TOKYO 2013 Hardware
 
150130 edison-ug
150130 edison-ug150130 edison-ug
150130 edison-ug
 
20181117 arduino basicbeta1
20181117 arduino basicbeta120181117 arduino basicbeta1
20181117 arduino basicbeta1
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話
 
Movidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみたMovidius Neral Compute Stickを使ってみた
Movidius Neral Compute Stickを使ってみた
 
イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料イチからはじめるADK北海道支部勉強会発表資料
イチからはじめるADK北海道支部勉強会発表資料
 
第1回電子制御講習
第1回電子制御講習第1回電子制御講習
第1回電子制御講習
 

Arduinoを使ったgameboyカードリッジのdump