SlideShare a Scribd company logo
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

CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
shigeki_ohtsu
 
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
Netwalker lab kapper
 
ホットな日本語技術の(ちょっとした)お勉強。
ホットな日本語技術の(ちょっとした)お勉強。ホットな日本語技術の(ちょっとした)お勉強。
ホットな日本語技術の(ちょっとした)お勉強。
Masahiko Hashimoto
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介
sounakano
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
憲昭 村田
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターン
Takashi Komada
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
Yuma Ohgami
 

What's hot (20)

CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
 
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作   Beginner for UserLAnd a...
はじめての980円ジャンクガラホ改造, UserLAndとTermuxでUbuntuなどLinux動作  Beginner for UserLAnd a...
 
ホットな日本語技術の(ちょっとした)お勉強。
ホットな日本語技術の(ちょっとした)お勉強。ホットな日本語技術の(ちょっとした)お勉強。
ホットな日本語技術の(ちょっとした)お勉強。
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
ゲーム開発とデザインパターン
ゲーム開発とデザインパターンゲーム開発とデザインパターン
ゲーム開発とデザインパターン
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 

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

OSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUGOSC Tokyo 2013 Spring JRPUG
OSC Tokyo 2013 Spring JRPUG
Hideki 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 beginners
Kenichi Ohwada
 
Arduino jenkins
Arduino jenkinsArduino jenkins
Arduino jenkins
Kiro Harada
 
20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)20110724 WIZDOM:知識ゼロからのArduino(1)
20110724 WIZDOM:知識ゼロからのArduino(1)Atsushi ENTA
 
Takep lpc1114-190614
Takep lpc1114-190614Takep lpc1114-190614
Takep lpc1114-190614
たけおか しょうぞう
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
Imaoka Micihihiro
 
配布用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 Things
Rainmaker 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
 
150130 edison-ug
150130 edison-ug150130 edison-ug
150130 edison-ug
Takehiko Tomiyama
 
20181117 arduino basicbeta1
20181117 arduino basicbeta120181117 arduino basicbeta1
20181117 arduino basicbeta1
Chiehwun
 
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
 
第1回電子制御講習
第1回電子制御講習第1回電子制御講習
第1回電子制御講習
Koshiro Miyauchi
 

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