首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >6502 CPU仿真

6502 CPU仿真
EN

Stack Overflow用户
提问于 2008-09-21 18:50:06
回答 7查看 6.8K关注 0票数 20

现在是周末,所以我通过写一个业余项目来放松整个星期的编程。

昨天我编写了一个MOS 6502 CPU仿真器的框架,实现了寄存器、堆栈、内存和所有操作码。(链接到下面的源)

我可以在我编写的调试器中手动运行一系列操作,但是我想加载一个NES rom并将程序计数器指向它的指令,我认为这将是找到有缺陷操作码的最快方法。

我编写了一个快速的NES加载程序,并将rom库加载到CPU内存中。

问题是我不知道操作码是如何编码的。我知道操作码本身遵循一种模式,每个操作码一个字节,唯一地标识操作码,

代码语言:javascript
复制
0 - BRK
1 - ORA (D,X)
2 - COP b

然而,我不知道我应该在哪里找到操作码参数。是直接跟在后面的字节吗?在绝对内存中,我想它可能不是一个字节,而是一个短字节。

有人熟悉这个CPU的内存模型吗?

编辑:我意识到,这可能是在黑暗中拍摄,但我希望有一些老苹果和商品黑客潜伏在这里。

编辑:谢谢大家的帮助。在我实现了适当的更改以对齐每个操作之后,CPU可以加载并运行Mario。除了循环等待开始,它什么也不做,但这是一个好迹象:)

我上传了消息来源:

https://archive.codeplex.com/?p=cpu6502

如果有人想知道仿真器是如何工作的,那么它很容易跟踪。至少没有经过优化,但我还是在模拟2.4ghz机器上以2 2mhz运行的CPU :)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-21 18:59:56

操作码为一个字节,操作数为以下字节。例如,查看字节大小列这里

票数 13
EN

Stack Overflow用户

发布于 2008-09-21 19:03:49

如果您查看像http://www.atarimax.com/jindroush.atari.org/aopc.html这样的引用,您将看到每个操作码都有一个指定为:

代码语言:javascript
复制
HEX LEN TIM

HEX是你的1字节操作码.紧随其后的是它的参数的LEN字节。请参阅参考资料,看看这些论点是什么。TIM数据对于仿真器很重要--这是指令执行所需的时钟周期的数目。你将需要这个来使你的时间正确。

这些值(LEN,TIM)不是在操作码本身中编码的。您需要将这些数据存储在程序加载程序/执行程序中。只是一张大的查表。或者可以定义一种迷你语言来编码数据和读取器。

票数 4
EN

Stack Overflow用户

发布于 2008-09-21 18:57:54

这本书也许会有帮助:http://www.atariarchives.org/mlb/

另外,试着检查其他任何6502实例/模拟器/调试器,看看程序集是如何被编码成机器语言的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/111700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档