1000sp4 SNES EMU
-
Upload
ranha -
Category
Technology
-
view
1.990 -
download
2
description
Transcript of 1000sp4 SNES EMU
1
ゆとりでも作れるOS
筑波大学 1年
ranhaこと上里 友弥
2
自己紹介
泣く子も苦笑い 89世代花の ゆ と り
筑波大学無試験 (?)入学者えーしー
3
OSは天からの贈り物!
4
では断じてない!
5
おぺれーてぃんぐしすてむ
今日もどこかで誰かが書いている。
人が書いてる=>完全無欠じゃない
6
OS を書こう
自分の好きな言語で書こう!
7
プログラマの 3 大夢 (1)
OS を作る
8
プログラマの 3 大夢 (2)
言語を作る
9
プログラマの 3 大夢 (3)
CPU を作る
10
今日は OS を作ろうとしてみる
ゆとりなので、 Intelのマニュアルとか読めない!
もとい読みたくない
11
はじめて読む 486
これで i486の仕様を 漠然と掴めるよ!
12
まずブートローダから
手始めに ブートローダから書く
13
?!
14
どうせOS書くんだったら
15
IntelのアレとかAMDのアレとか
SPARCのアレとかそこから作る
16
そうだ
エミュレータを書こう!!
17
改 . ゆとりでも作れるエミュ
筑波大学 1年
ranhaこと上里 友弥
18
どういうわけでそういうわけ?
ハードウェア的には作れると思えない。
(電気回路論理回路なにそれ、半田とか見た記憶も無い )
19
というのは建前で
OS自作入門なんていう本も出た事ですし、ゆとり的には
他の人と被ってる事はやりたくない。
20
というのは冗談で
本当は
FinalFantasy4がやりたかっただけ
21
それだったら
ソフトウェア的に実現しる
22
でも i486 は嫌だ
エミュレータと言えばゲーム機
ゲーム機といえば・・・
23
スーパーファミコン!スーパーファミコン!
24
スーファミ最強 1スーパーマリオワールド ドラゴンクエスト V 天空の花嫁FZERO 真・女神転生ファイナルファイト ウィザードリィ Vシムシティ 餓狼伝説ファイナルファンタジー IV ファイナルファンタジー V超魔界村 …半熟英雄 ああ、世界よ半熟なれ !!悪魔城ドラキュラ エイリアン VS プレデター
ゼルダの伝説 神々のトライフォース スターフォックスダンジョンマスター シムアント高橋名人の大冒険島 ジョジョの奇妙な冒険
ロマンシング サ・ガ ドラゴンボール Z 超武闘伝弟切草 ブレス オブ ファイア 竜の戦士ファイナルファイト・ガイ スーパーボンバーマンストリートファイター II ファイナルファイト 23×3EYES 聖魔降臨伝 ヨッシーのクッキースーパーマリオカート エイリアン 3
25
スーファミ最強 2ストリートファイター II ターボ スーパーボンバーマン 2スーパーマリオコレクション スレイヤーズ聖剣伝説 2 MOTHER2 ギーグの逆襲
トルネコの大冒険 不思議のダンジョン サムライスピリッツ 超時空要塞マクロス スクランブルバルキリー 真・女神転生 if...
す~ぱ~ぷよぷよ 極上パロディウス ロマンシング サ・ガ 2 かまいたちの夜
ドラゴンボール Z 超武闘伝 2 スーパードンキーコングロックマン X ロックマン X2
スーパー・スター・ウォーズ 帝国の逆襲 クロノ・トリガードラゴンクエスト I ・ II ロマンシング サ・ガ 3
ファイアーエムブレム 紋章の謎 ドラゴンクエスト VI 幻の大地魔神転生 星のカービィ スーパーデラックス真・女神転生 II ファイアーエムブレム 聖戦の系譜スーパーメトロイド スーパードンキーコング 2 ファイナルファンタジー VI ときめきメモリアル 伝説の樹の下で
26
自分の作ったエミュレータで
かつての感動をもう一度・・・。
27
もとい
FinalFantasy4
28
出来るかどうかとかは二の次
取り敢えず仕様をググり始めた春先の夜中
29
そもそもエミュレートとは
ソフトウェア的に、CPU などのハードウェアレベルを
実現・模倣する事。
ゲームする事では無い。
30
取りかかり
0.ROM解析1.CPU部エミュレータ2.PPU部エミュレータ3.SPU部エミュレータ
31
そもそも SNES の中身って
CPU:65C816互換のカスタム 5A22RAM 128KB DRAM
PPU:Picture Processing Unit(CoProcessor)
SPU:Sound Processing Unit(CoProcessor)
32
65C816(1)レジスタは 9本
●A:Accumulator Regs(16bit)●X,Y:Index Regs(16bit)●D:Direct Pointer(16bit)●S:Stack Pointer(16bit)●PC:Program Counter(16bit)●PB:Program Bank Regs(8bit)●DB:Data Bank Regs(8bit)●P:Status Regs(8bit)
33
65C816(2)
メモリアドレス空間は 24bitHigh8bit = Bank
Lower16bit = Addressという分け方に成っている。
例えば現在の命令を取り出すにはexec(BANK(PB):ADDR(PC))
34
65C816(3)
命令数 256(0x00 〜 0xFF)本質的な命令は多くはない。
ADC,AND,EOR,ORA,Brunching,BIT,Status,CMP,Copy,INC,DEC,
Jumping,Load,Store,Stack,Shift,Interrupt とちょっとの etc
35
65C816(4)
割り込み (Interrupt):COP: コプロセッサ割り込み
BRK:BRK命令実行時割り込みABORT:ハードウェア特殊信号NMI:Non Maskable InterruptRESET:電源投入、リセット時
IRQ:ハードウェア信号
36
65C816(5)ステータスレジスタ
●P:NVMXDIZCE●N= ネガティブ (Accの bit7が 1)●V= オーバーフロー●M= メモリモード (0=16bit 1=8bit)●X= インデックスモード (0=16bit 1=8bit)●I=IRQの可否●Z=演算結果が 0の時にセット●C= キャリー発生時にセット●E=( エミュレーション | ネイティブ ) モード
37
65C816(6)
エミュレーションモード65C816は実際には
NESの CPU(6502)上位として捉えられ、下位互換として NES も実行出来る。
一方で 65C816専用モードとしては、 ネイティブモードがある。
38
PPU(1)
In Picture Processing Unit
VRAM 64KB : タイル , タイルマップOAM 544Byte : スプライトデータCG 512Byte :色情報 (B5G5R5)
39
PPU(2)
タイル (tile)SNESのグラフィック base
タイルの集合が BG
BGは 0,1,2,3これらが VRAM にストアされる2bytevhopppcc cccccccc
40
PPU(3)Sprite
キャラクタを表現Sprite データは X,Y座標にパレットデータ等を独立に含む。
4byteByte 1 xxxxxxxx x: X coordinateByte 2 yyyyyyyy y: Y coordinateByte 3 cccccccc c: starting character (tile) number p: palette numberByte 4 vhoopppc v: vertical flip h: horizontal flip o: priority bits
41
SPU
Sound Processing Unit良く分からない。
”The SPC 700 is a very stupid sound chip with about the worst handling
that you have seen in your lifetime.”けど凄い評価。
42
ROM 解析
大部分は
SMC
SuperMagiconの略
43
HiROM LoROM
この 2 タイプメモリマップが若干違う
今回は LoROM だけ
44
なんで LoROM?
ひとえに
FinalFantasy4
45
ROM フォーマット 32704byte ROM data 1byte License 21byte GameTitle 1byte Game Version 1byte ROM Makeup 2byte Inverse Rom CheckSum 1byte ROM Type 2byte ROM CheckSum 1byte ROM Size 0xFFFA NMI_Vector1byte SRAM Size 0xFFFC RESET_Vector 0xFFFE IRQ_Vector1byte CountryCode
46
目で見た方が早いfilename: FF4.smc This is Japan ROMthis rom file has SMC_HEADER License : Squareignore SMC_HEADER ROM Version [1]This rom's size is 1048576 EMU nmi_vector 0xffffsuccess : finish reading file EMU reset_vector 0x8000rom size:1048576 EMU irq_vector 0xffffLo ROM Native nmi_vector 0x200rom_title : [FINAL FANTASY 4 ] Native irq_vector 0x204This ROM is SLOW_ROM sum=accc,check= accc,comp=5333This rom is ROM&SRAM This ROM'S Check SumOKThis rom size is [8]MegaBits start reset cpu_registerThis rom have [64]KiloBits end reset cpu_register
47
最初は RESET から
ROM を読み込んだられっつら SNESの世界。
最初の命令は、PB=0,PC=RESET_VECTOR
48
この後
オペレーションコードとオペコード
と
戯れる。
49
白熱するエミュレータ
50
その 1デバッグが
熱い!
51
喜びの声
52
友達は機械語
53
dump解析至上主義!
54
デバッグログサイズも特厚!
ls lh output rwrr 1 ranha ranha 2.8G outputls lh output rwrr 1 ranha ranha 3.1G outputls lh output rwrr 1 ranha ranha 3.6G output
55
dump して diff
56
その 2
低レイヤー思考
57
CPUの気持ちとかも分かる!
58
高いレベルで推測して、低いレベルで実装する。
59
その 3
マゾ度どんどん上がる
60
その 4
過去のアーキテクチャに触れる感動
61
当時のプログラマの魂も伝わる
62
デモ
63
今後
皆さんのエミュレータに期待
64
しつつ、少なくとも SPU以外はちゃんと動くようにする。
(出来れば違う言語でも書きたい )
65
関係無いけど
この後は、Purely Functional Operating Systemとかも考えなしにやってみたい。
66
重要な問題点
カートリッジ保持でも、ROMの使用はグレーゾーン行為なので
自重。
blog に上がってるのとかは妄想。
自作 ROM に切り替えるしかない。
67
参考と謝辞http://en.wikibooks.org/wiki/Super_NES_Programming
wikibooks
http://hp.vector.co.jp/authors/VA042397/snes/index.html重要な日本語資料とサンプルプログラム提供
http://www.snes9x.com/相当強い SNES エミュレータ ソースコードおいしいです
http://www.westerndesigncenter.com/wdc/datasheets/Programmanual.pdf65816の命令群
インテル ® アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル的な何か