在搞模拟器开发的过程中,查资料是很重要的,随着阅读更多资料来理解NES的设计,完善自己的模拟器,修复BUG是必经之路。于是我把自己查阅的重要资料做个记录,帮助同样在制作模拟器过程中踩坑的人快速出坑。
开发流程:
1、写出框架
2、编写自己的指令执行模块和指令结构
3、编写简单的图形绘制模块
4、实现简单的GUI,反汇编查看、内存查看、调色板查看等
4、从【指令中文介绍及实现】中摘取指令实现代码,并实现其中的一些必要函数
5、从【标准指令集】中格式化出自己定义的指令结构
6、跑出自己写的简单demo,照着【NESASM教程】写一个demo
7、必须跑通的【NES dev网站】demo:
- Commando
- Fighter F-8000
- NEStress (PPU测试、指令测试等,哪里ERROR就读哪里的源代码)
8、正常运行【超级马里奥】
9、修复渲染问题
10、增加Mapper支持
11、优化绘图性能
目前我已经进行到第9步了:
NESASM教程:
http://blog.csdn.net/kkk584520/article/details/40375219
NES dev网站:
http://nesdev.com/archive.html#NESPrograms
如何制作nes模拟器:
http://chaofan.io/archives/%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9Cnes%E6%A8%A1%E6%8B%9F%E5%99%A8
标准指令集:
http://e-tradition.net/bytes/6502/6502_instruction_set.html
指令介绍:
http://blog.sina.com.cn/s/blog_450c7f590100tn9u.html
指令中文介绍及实现:
修正及注意事项:
1、IF_DECIMAL模式的代码全部去掉(感觉实现有误,跑错,去掉不影响功能)
2、PLA没有操作A寄存器,需要增加一句:AC = src;
PPU相关:
2C02:http://www.fceux.com/web/help/fceux.html?PPU.html
PPU寄存器:https://wiki.nesdev.com/w/index.php/PPU_registers
调色板:https://wiki.nesdev.com/w/index.php/PPU_palettes#Backdrop_color_.28palette_index_0.29_uses
调色板镜像:http://rebeldancer.blog.163.com/blog/static/2221911142013102392059724/
镜像:https://wiki.nesdev.com/w/index.php/Mirroring
谈镜像:http://wiki.nesdev.com/w/index.php/Talk:Mirroring
滚动:https://wiki.nesdev.com/w/index.php/PPU_scrolling
硬件:https://wiki.nesdev.com/w/index.php/Visual_2C02
NES图形如何工作:https://opcode-defined.quora.com/How-NES-Graphics-Work-Nametables
CPU相关:
中断:https://wiki.nesdev.com/w/index.php/CPU_interrupts
内存映射:https://wiki.nesdev.com/w/index.php/CPU_memory_map
栈:https://wiki.nesdev.com/w/index.php/Stack (栈指针必须支持 [0,255] 的上下溢出)
状态标记:https://wiki.nesdev.com/w/index.php/Status_flags
B标记:https://wiki.nesdev.com/w/index.php/CPU_status_flag_behavior (未正常实现会造成SP指针的出入栈错误,造成中断返回错误)
IRQ:https://wiki.nesdev.com/w/index.php/IRQ
INES
https://wiki.nesdev.com/w/index.php/INES
How It Works
https://n3s.io/index.php?title=How_It_Works
NES模拟器笔记
https://ewind.us/2015/nes-emu-2-system-architure/