NES模拟器开发-CPU笔记

news/2025/2/22 16:03:06/

  我的项目XNES已经开始动手编码了,目前的进度大概是cpu的模拟完成了大概10~20%左右.简单记录一下CPU模拟过程中遇到的问题和思考.

原理:

  cpu模拟实际就是模拟cpu处理opcode的过程,通过每条指令,来计算CPU的pc,寄存器,栈来实现软件对硬件的模拟.

寄存器:

  主要有A,X,Y,C,Z,I,D,B,V,N这么几个状态/标志寄存器,我看到其他几款模拟器和一个调试器中有在中间插入一个U(Unused)寄存器?难道只为了状态补齐?目前从资料中还未发现为什么要在中间插入个U,目前我的做法是在最后补了一个Reserved(内存对齐).

2015-09-15:

/*********************************status register7 6 5 4 3 2 1 0N V   B D I Z C
*********************************/

  最终还是插入了一个U.

指令/操作码:

  6502是个8位cpu,理论来说因该只有不超过58种指令,目前我记录到的是57种(在头文件def.h中定义).cpu有13种寻址方式,不同的指令和寻址方式两者组合就有很多种操作码(00-FF,定义在__ops数组中).目前完成了大约10条指令的模拟.

调试:

  因为是从零开始实现,因此一个良好的调试器是必备的,否则第一条指令是写对了还是写错了都无法知道,只能盲写.对比了几个调试器发现FCEUX不错,主要是它可以停在入口点(FFFC),从第一条指令开始单步.强烈推荐.调试的过程中发现前几条指令我都模拟正确了,运行了大概10条指令后程序就进入了一个循环(LDA->BPL),调试器运行到这里循环点运行能过去,我猜测是过程中触发了某个中断,下一步就是模拟中断的实现.

2015-09-15:

  继续往下走了,有没有触发中断不确定,LDA指令读的是0x2002地址,查了一下这个地址是ppu的状态地址,看来那几条指令是在等ppu状态同步.暂时手工往内存里写点状态字让程序往下执行.本来计划模拟完cpu在处理ppu,看来必须一同实现了?

中断:

  待实现.

 

转载于:https://www.cnblogs.com/Red_angelX/p/4806332.html


http://www.ppmy.cn/news/371902.html

相关文章

nes模拟器不支持多点触控问题修复

nes模拟器不支持多点触控问题修复: 原因:触屏事件屏蔽了多点处理,因此修改如下: public boolean onTouch(MotionEvent event, boolean flip) { int pointerUpId -1; int states 0; int action event.getAction() & MotionE…

进程管道:pipe调用

在看过高级的popen函数之后&#xff0c;我们再来看看底层的pipe函数。通过这个函数在两个程序之间传递数据不需要启动一个shell来解释请求的命令。它同时还提供了对读写数据的更多控制。pipe函数的原型如下所示&#xff1a; #include <unistd.h> int pipe(int pipefd[2])…

C\C++ Qt开发的动态桌面壁纸程序

这个程序可以实现把图片、动图、视频当成壁纸显示在图标图层之下&#xff0c;软件会保存上一次关闭时的选择 重启时恢复&#xff0c;有什么问题评论区看到会回复 有问题欢迎指出&#xff0c;需要编译好的程序 可以私信或留下联系方式发送 废话不多说先上效果再上代码&#xf…

python小制作 tkinter 简单音乐播放器

MusicPlayer2.1版本_死非死的博客-CSDN博客 ------------------------------------------------------------------ 这是另一篇音乐播放器的升级版本【MusicPlayer2.0版】,额,就是代码进行了优化,另外背景图片在打开的时候会随机 原版本【MusicPlayer 1.0版本】: tkinter 简单…

win10动态壁纸怎么设置_酷狗也能设置动态壁纸???

今天更新完酷狗音乐我无意中发现了酷狗支持桌面动态壁纸&#xff0c;所以来分享 一波。我现在使用的版本为V9123版本&#xff0c;分享的话就不需要了吧&#xff0c;又不是什么破解版&#xff0c;浏览器或者软件里面可以正常下载。 话不多说上图片 点击图片上我框出来的地方即可…

【Ubuntu】如何在Ubuntu系统上设置好看的动态壁纸(Komorebi)

前言&#xff1a; 最近闲来无事&#xff0c;装了Ubuntu的双系统玩玩。但是很快就发现了Ubuntu的壁纸实在太过单调了&#xff0c;对于一个重度动态壁纸爱好者来讲简直是令人抓狂。于是很快就想到了Wallpaper Engine&#xff0c;果断下载Steam。 然而&#xff0c;一行Available…

音乐桌面

用桌面听歌 基于Qt Demo 【spectrum】&#xff0c;结合桌面壁纸效果&#xff0c;能够识别WAV格式的歌曲&#xff0c;在桌面描绘频谱方块。 源代码

获取网易云音乐封面图片

前言 前段时间边敲代码边听歌&#xff0c;突然听到一首很好听的歌。然后就切了过去。   相信有相当一部分同学在用网易云音乐听歌的时候总会不由自主的去看那个转动的封面。   为了看清封面上的字&#xff0c;我硬是跟着转了好几圈。 感谢网易云&#xff0c;治好了我的颈…