Comments
Description
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日土曜日