我的项目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 register
7 6 5 4 3 2 1 0
N 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,看来必须一同实现了?

中断:

  待实现.

NES模拟器开发-CPU笔记的更多相关文章

  1. NES模拟器开发-PPU笔记

    20151008 占坑,暂时没弄清楚PPU数据如何初始化,绘制顺序等.

  2. 准备开发一款开源NES模拟器

    前几天无意见看到一些NES的开发资料,勾起了小时候暑假的无数美好回忆,做为一名码农,萌发了自己写一款模拟器的想法.一来可以加深自己对整个系统/游戏的理解,一来可以实现小时候的梦想:),希望可以坚持下来 ...

  3. WindowsPhone-GameBoy模拟器开发四--Gameboy显示系统分析

    这次说一下GB的显示系统,先从一幅Gb的内存分布图说起,请看图: 图中红色框框起来的部分就是这篇文章关注的部分,这一部分的内存地址从8000-9Fff,共8KB,这一部分是从来存储背景和游戏“精灵”的 ...

  4. Xamrin开发安卓笔记(一)

    http://www.cnblogs.com/minCS/p/4108133.html Xamrin开发安卓笔记(一)   安装篇 环境虽然搭建的不稳定,不过还是可以开发的,又加了两个环境变量不知道有 ...

  5. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  6. 《MFC游戏开发》笔记五 定时器和简单动画

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9332377 作者:七十一雾央 新浪微博:http:// ...

  7. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...

  8. Xamrin开发安卓笔记(二)

    http://www.cnblogs.com/minCS/p/4112617.html Xamrin开发安卓笔记(二)   安装篇 Xamrin开发安卓笔记(一) 昨天调理一天AAPT.EXE 被推出 ...

  9. cmodel模拟器开发

    cmodel模拟器开发 对于一个公司来说,产品的设计周期就是生命线,一般来说都会在设计功能级仿真的c-model后直接转向RTL设计. 在目前的技术下,做cycle-by-cycle的设计和直接RTL ...

随机推荐

  1. 【转】MaxScript.Net接收本地端口的消息执行

    MaxScript里开不了线程,但是可以用.Net的BackgroundWorker来做后台处理 BackgroundWorker Fn BackgroundTcpListenerDoWork the ...

  2. windows下的php rabbit mq安装、配置

    http://www.cnblogs.com/shanyou/p/4067250.html 这篇博文写的rabbit mq和erlang的安装以及rabbitmq可视化插件的一些操作 接下去开始安装P ...

  3. dubbo-monitor图标功能不显示

    原因有3: 1.需要创建目录 2.需要在consumer的配置文件中增加如下配置,使用zk为注册中心 <!-- 监控中心,需要配置以后dubbo-monitor才能生效 -->    &l ...

  4. Tomcat安装后,远程IP无法访问的问题。

    我在使用阿里云与聚石塔的时候,发现Tomcat启动后,本地可以访问,但是外网无法访问,即使关闭防火墙也无法访问. 原因是 云平台的网络拦截. 阿里云:有一个入网规则 和 出网规则 ,流入数据端口  流 ...

  5. 通过innobackupex实现对MySQL的增量备份与还原

    备份 增量备份是基于完整备份的,所以我们需要先做一次完整备份: innobackupex --password=test /backup/ 备注:test是我的MySQL服务的root用户的密码,/b ...

  6. WCF Misconfiguration: Insufficient Audit Failure Handling

    Abstract: The program is configured not to generate an exception when it fails to write to an audit ...

  7. 一个简单的synchronized多线程问题、梳理与思考

    一个程序,多个线程同时操作一个变量,给这个变量+1().功能很简单,可是怎么样去实现呢?这其中涉及到了哪些问题? 最基础想法 见代码: public class Test extends Thread ...

  8. Sql Server中不常用的表运算符之APPLY(1)

    写在这个系列的前面: 就像他们的名字一样,作为一个表运算,他们用来运算左表和右表.JOIN也是一个表运算符,不过他太常用了. APPLY: 将右表表达式应用在左表的每一行上. APPLY是Sql200 ...

  9. Android 在Canvas中实现画笔效果(一)--钢笔

    如题: 公司要求做一个涂鸦板,要有钢笔.毛笔等画笔效果,网上搜了很多,可是效果不怎么好,决定自己研究下.废话不多说,进入正题. 首先,赛贝尔曲线弄明白了,在画曲线的过程中就是一条条的向量. 第二,曲线 ...

  10. CSS3学习内容与心得

    今天2005年7月9号,博客这个东西还真不懂,以前吧我不认识它,它也不认识我.没辙,汤老要我们写,就写吧. 写什么好呢?那就写今天学习的css3的一些要点吧. css这门课程几乎都学完了.而我觉得我还 ...