开发日志
[v0.7.0] - 2025-11-30 - 游戏可运行 🎉
里程碑
新增
- 🎮 创建 NES 运行器 (nes_runner.cpp)
- 加载 iNES ROM 格式
- PRG/CHR ROM 接口
- 帧计数和统计
- Makefile 构建系统
测试结果
- ✅ nestest ROM: 成功运行,生成 120 帧/10秒
- ✅ Super Mario Bros: 成功运行,生成 180 帧/10秒
- ✅ CPU 执行正常
- ✅ PPU 接收数据正常
- ✅ 游戏初始化成功(不再卡死)
性能
- 帧率: ~12-18 FPS(受调试输出影响)
- 目标: 60 FPS(需要优化)
[v0.6.0] - 2025-11-30
新增
- ✨ 完成 6502 CPU 完整指令集实现 (100% 覆盖率)
- 新增 57 个指令,从 94/151 提升到 151/151
- 实现 BIT 绝对寻址 ($2C)
- 实现 INC/DEC 内存操作 (8 个操作码)
- 实现 ROL/ROR 循环移位 (8 个操作码)
- 实现 AND/ORA/EOR 所有寻址模式 (27 个操作码)
- 实现 LSR/ASL 内存操作 (8 个操作码)
- 实现 CMP/CPX/CPY 变体 (6 个操作码)
- 实现 ADC/SBC 间接寻址模式
- 📝 创建项目文档
- 指令依赖树 (instruction_dependency_tree.txt)
- 项目状态文档 (PROJECT_STATUS.md)
- 开发日志 (CHANGELOG.md)
- 🧪 扩展单元测试
- 添加 INC/DEC 测试
- 添加 ROL/ROR 测试
- 添加 AND/ORA/EOR 测试
- 添加 LSR/ASL 测试
修复
- 🐛 修复 CPU 指令集不完整导致的游戏初始化问题
- 根因:缺失 37.7% 的指令导致游戏无法正确执行
- 解决:实现完整的 151 条指令
改进
测试
- ✅ 所有单元测试通过 (6/6)
- test_cpu: PASS (包含新指令测试)
- test_ppu: PASS
- test_apu: PASS
- test_dma: PASS
- test_nmi: PASS (6820 次触发)
- test_ppu_render: PASS (61440 像素)
[之前的工作] - 2025-11-29 及更早
新增
- 🎮 实现 NES 系统架构
- CPU (6502) 基础实现
- PPU (2C02) 基础实现
- APU 脉冲波通道
- DMA 控制器
- 系统集成模块
- 🖼️ 创建帧捕获工具
- PPM 格式导出
- 可配置采样间隔
- PNG 转换脚本
- 🎨 创建 SDL2 GUI 模拟器
- 实时视频显示 (768x720)
- 音频播放 (44.1kHz)
- FPS 计数器
- 🔊 实现 APU 音频输出
- 脉冲波通道 1/2
- 占空比生成 (12.5%, 25%, 50%, 75%)
- 16-bit 立体声输出
- 🧪 创建单元测试套件
- CPU 测试
- PPU 测试
- APU 测试
- DMA 测试
- NMI 测试
- PPU 渲染测试
- 🔧 创建开发工具
- 指令覆盖率分析工具 (check_cpu_instructions.py)
- VBlank 测试工具
- PPUSTATUS 测试工具
修复
- 🐛 修复 VBlank 时序问题
- 添加 VBlank 保持计数器 (200 CPU 周期)
- 修复 PPUSTATUS 优先级逻辑
- 🐛 修复 CPU 状态机问题
- 修复 MEMORY 状态转换
- 修复 WRITEBACK 状态逻辑
分析
- 🔍 分析游戏初始化卡死问题
- 使用分治法隔离组件
- 创建 VBlank 流程测试
- 发现 CPU 指令集不完整是根因
版本说明
版本号规则
- 主版本号:重大架构变更
- 次版本号:功能新增
- 修订号:Bug 修复
当前版本
v0.6.0 - 核心功能完成,准备游戏测试
里程碑
贡献者
- tongxiaojun - 项目创建者和主要开发者
致谢
感谢以下资源和社区:
- NESDev Wiki 提供的详细技术文档
- 6502.org 提供的 CPU 参考资料
- Verilator 开源仿真工具
- SDL2 多媒体库