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

自己組織化ゲーム
自己組織化ゲーム自己組織化ゲーム
自己組織化ゲームKiichi Kajiura
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことMASA_T_O
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたYasuharu Seki
 
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理DADA246
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
老害について
老害について老害について
老害についてKen SASAKI
 
Fpsにおけるレベルデザイン web u_pver
Fpsにおけるレベルデザイン web u_pverFpsにおけるレベルデザイン web u_pver
Fpsにおけるレベルデザイン web u_pverYoshihiko Nozawa
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
カンバンゲーム ルール説明
カンバンゲーム ルール説明カンバンゲーム ルール説明
カンバンゲーム ルール説明Yasui Tsutomu
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングYuma Ohgami
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介Takeo Imai
 
ゲームAIの中の数学(上)
ゲームAIの中の数学(上)ゲームAIの中の数学(上)
ゲームAIの中の数学(上)Youichiro Miyake
 
サムライスピリッツキャラクター制作事例 アニメーション編
サムライスピリッツキャラクター制作事例 アニメーション編サムライスピリッツキャラクター制作事例 アニメーション編
サムライスピリッツキャラクター制作事例 アニメーション編SNK
 
ゲームAIの基礎と事例
ゲームAIの基礎と事例ゲームAIの基礎と事例
ゲームAIの基礎と事例Tomoaki TSUCHIE
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
カンバンゲーム
カンバンゲームカンバンゲーム
カンバンゲームYasui Tsutomu
 
適度に弱い敵aiの作り方
適度に弱い敵aiの作り方適度に弱い敵aiの作り方
適度に弱い敵aiの作り方dodoyuzo
 
ゲームAI入門(後半)
ゲームAI入門(後半)ゲームAI入門(後半)
ゲームAI入門(後半)Youichiro Miyake
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装uchan_nos
 

What's hot (20)

自己組織化ゲーム
自己組織化ゲーム自己組織化ゲーム
自己組織化ゲーム
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
ソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみたソニーでElectronアプリをリリースしてみた
ソニーでElectronアプリをリリースしてみた
 
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
老害について
老害について老害について
老害について
 
Fpsにおけるレベルデザイン web u_pver
Fpsにおけるレベルデザイン web u_pverFpsにおけるレベルデザイン web u_pver
Fpsにおけるレベルデザイン web u_pver
 
Gpu vs fpga
Gpu vs fpgaGpu vs fpga
Gpu vs fpga
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
カンバンゲーム ルール説明
カンバンゲーム ルール説明カンバンゲーム ルール説明
カンバンゲーム ルール説明
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介TVMの次期グラフIR Relayの紹介
TVMの次期グラフIR Relayの紹介
 
ゲームAIの中の数学(上)
ゲームAIの中の数学(上)ゲームAIの中の数学(上)
ゲームAIの中の数学(上)
 
サムライスピリッツキャラクター制作事例 アニメーション編
サムライスピリッツキャラクター制作事例 アニメーション編サムライスピリッツキャラクター制作事例 アニメーション編
サムライスピリッツキャラクター制作事例 アニメーション編
 
ゲームAIの基礎と事例
ゲームAIの基礎と事例ゲームAIの基礎と事例
ゲームAIの基礎と事例
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
カンバンゲーム
カンバンゲームカンバンゲーム
カンバンゲーム
 
適度に弱い敵aiの作り方
適度に弱い敵aiの作り方適度に弱い敵aiの作り方
適度に弱い敵aiの作り方
 
ゲームAI入門(後半)
ゲームAI入門(後半)ゲームAI入門(後半)
ゲームAI入門(後半)
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 

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