...

NES Emulatorの設計と実装

by user

on
Category: Documents
61

views

Report

Comments

Transcript

NES Emulatorの設計と実装
NES Emulatorの設計と実装
CPUエミュレーション編
ARCH (Internet Architecture Research Team)
loginname: gucchan (B1)
mentor : macchan
14年12月6日土曜日
今期の活動
- コンピュータの構成についての理解を深めたい
- 電子工作を入門する事によってハードウェアの理解を深めたい
- ファミコンエミュレータの設計と一部の実装
- ROMカートリッジ吸い出し機の設計と一部の実装
1
14年12月6日土曜日
NES内部の構成
VM
PPU
Picture Processing Unit
OAM
MPU
I/O
6502
6502 (RP2A03)
(RP2A03)
Joypad, Sound etc.,
RAM
APU
VRAM
2
14年12月6日土曜日
Audio Processing Unit
MMC
iNES
Memory Manegement
Management Controller
Controller
Memory
iNES
(*.nes) Format
iNES-Format
(*.nes) Parser
Parser
ROM
iNES File Format (*.nes)
吸い出し機の構成
AVR
RS232C
UART(baud:9600)
PC
ATmega328P-PU
8bit-counter
74HC393AP
dumper.rb
8bit-counter
74HC393AP
3
14年12月6日土曜日
F
a
m
i
c
o
m
C
a
r
t
r
i
d
g
e
CPU 6502概要
- MOS Technology社の6502をRICOH社がカスタムして10進数モードを削
除、代わりに音源機能(2A03音源)を追加したカスタムチップを採用
- ゼロページ(0x0000 0x00ff), 豊富なアドレッシング など
- 6502はApple Ⅰ,Ⅱ, PCエンジンに用いられている事でも有名
- 工夫した所としてはそのままPCの処理能力で6502を動かすとすごい速さで動
いてしまうため、実機と同じように動かすため1/60毎にタイマ割り込みを掛け
て実行を意図的に遅延させた
- C++で実装 (509行程度)
4
14年12月6日土曜日
実装済み命令
5
14年12月6日土曜日
カートリッジの構成
Famicom Cartridge
PRG-ROM
addr(15pin)
②アドレス入力
6
14年12月6日土曜日
CHR-ROM
data(8pin)
CS(4)
③データ(1byte) ①PRG/CHR選択
吸い出し機
7
14年12月6日土曜日
CPUエミュレーションデモ
- 0+1+2+...+10 の総和を求めるプログラム
- 6502バイナリ
- メモリダンプでの実行結果(0x37=55)
8
14年12月6日土曜日
- CPU実行トレース
まとめ
- 電子工作がはじめてだったのでROMリーダの製作は非常に勉強になった
- 魔法のように見えていたエミュレータの構成,動作を把握できるようになった
- CPU命令やアドレッシングにバグ(トランジスタの数を減らそうとした仕様?)
があり、その部分まで再現するというのがエミュレータの性質を良く表してい
ると感じた
- ファイルフォーマットが標準化されておらず、カオスな状況下での開発だったので
標準化の重要性を身に染みて感じた
- WIP最終発表は実家に帰る都合で発表できないため、
2春のWIP中間辺りで商用ROMの動作のデモを行いたい。
9
14年12月6日土曜日
Fly UP