问题标签 [6502]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
6594 浏览

emulation - 6502 CPU 仿真

这是周末,所以我通过编写一个爱好项目来放松整个星期的编程。

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

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

我编写了一个快速的 NES ROM 加载器并将 ROM 库加载到 CPU 内存中。

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

ETC

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

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

编辑:我意识到这可能是在黑暗中拍摄的,但我希望有一些老派的 Apple 和 Commodore 黑客潜伏在这里。

编辑:感谢大家的帮助。在我实施适当的更改以对齐每个操作后,CPU 可以加载和运行马里奥兄弟。它除了循环等待开始之外什么都不做,但这是一个好兆头:)

我上传了源码:

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

如果有人想知道模拟器是如何工作的,那么它很容易理解。至少没有优化,但话又说回来,我正在模拟一个在 2.4ghz 机器上以 2mhz 运行的 CPU :)

0 投票
7 回答
13377 浏览

low-level - CPU 仿真和锁定到特定的时钟速度

如果您阅读了我的另一个问题,您就会知道我在这个周末花了一个 6502 CPU 仿真器作为编程练习。

CPU 模拟器大部分是完整的,从我有限的测试来看似乎相当准确,但是它运行得非常快,我想将它降低到机器的实际时钟速度。

我当前的测试循环是这样的:

如您所知,每个操作码都需要特定的时间才能完成,因此在倒计时 CPU 周期时钟之前,我不会运行下一条指令。这提供了操作码之间的适当时间,只是整个事情运行得很快。

目标 CPU 速度是 1.79mhz,但是我想要解决时钟问题的任何解决方案,以将速度保持在 1.79mhz,即使我增加了复杂性,所以我不必调整它。

有任何想法吗?

0 投票
2 回答
6330 浏览

assembly - 如果小于,哪个是正确的分支指令

我昨天写了一个答案: 你见过或做过的最酷的黑客是什么? 而且我非常努力地记住我的 6502 组件,我一生都无法记住如果小于...

有人知道指令是什么吗?BNE 和 BEQ 相等,BCC 用于进位,CMP 基本上是 SBC,会影响进位,但我不确定它是否适用于这种情况。

0 投票
3 回答
1398 浏览

java - 模拟器框架

有没有什么好的开源框架来开发计算机系统模拟器?我对用 Python 或 Java 编写的东西特别感兴趣,它们可以减少为 8 位处理器(例如 6502、6510 等)开发模拟器所涉及的工作量。

0 投票
1 回答
497 浏览

hardware - 如何在真实硬件上测试我的自制任天堂娱乐系统软件?

几年前,我实现了一个NES游戏作为一个类项目,用6502汇编编写。我只在 NES 模拟器上运行过它,但我希望看到它在真正的硬件上运行。有没有开发板可以做到这一点?我知道使用映射器芯片等有点棘手,但我愿意仅限于一个普通的映射器(比如 MMC3)。

0 投票
11 回答
1374 浏览

assembly - 不使用 x86 的经典汇编语言文本?

我正在寻找详细处理汇编编程原则并且不使用 x86 作为目标架构的文本。我最近没有找到任何类似的书,但我希望在 1970 年代和 1980 年代有一些好的书,当时整个应用程序仍然是用汇编语言编写的。使用的架构也应该是更简洁的设计之一,例如 6502 或 VAX。

0 投票
1 回答
1610 浏览

assembly - 基本 NES 仿真理论 - 我被卡住了

在此之前,我为这个问题的开放性和一般性的虚弱表示歉意,因为老实说,我对该主题的了解非常不完整,我什至发现很难描述我的问题。我真的不想发帖,但我完全被卡住了。

我已经启动了一个NES模拟器。它被解释(所以没有动态重新计算)。

Atm 它可以加载和映射 roms(mapper 0 roms)并执行初始化代码直到我必须处理中断和 PPU 的地方。这就是我卡住的地方。

这是我的emu atm的示例输出。执行从 8000 开始,我在 800a 遇到了一个无限循环,我不知道如何从那里开始。

所以我的问题是,有人可以为我解释一下通过 PPU 渲染进行 1 次迭代的基础知识,包括循环计数、中断等(即绘制一个完整的 240 扫描线屏幕并移至下一个)。

0 投票
4 回答
17478 浏览

loops - 在汇编中编写一个while循环

我正在尝试使用 6502 处理器在汇编中编写一个 while 循环,但我无法弄清楚如何编写十六进制代码。我已经看到使用速记编写的示例,其中有一个循环应该开始和结束的标签,但我没有看到任何实际的十六进制代码。

我认为有用的两个代码是:

  1. 将内存中的一个字节与 X reg 进行比较(速记:CPX,十六进制:EC)。这会将 Z 标志设置为零,如果相等并且
  2. 如果 Z 标志 = 0,则转移 X 字节(简写:BNE,十六进制:D0)
0 投票
2 回答
2233 浏览

assembly - 比较击键 - 装配 CCS64

我想比较汇编中的击键(CCS64)。如果我连续输入相同的键,我想做一些事情例如:A A= 这样做

但是如果我输入这个:A B=做其他事情

建议?

0 投票
3 回答
1154 浏览

lisp - 对 8 位系统上类似 lisp 语言的 VM 感兴趣

我正在寻找可以在 8 位微处理器上运行并支持动态语言的推荐虚拟机。我想要一个 VM 解决方案,因为我认为在代码密度、可移植性和拥有更小的解释器的能力方面有好处,从而为更大的程序留出了更多空间。

我的目标是在 6502 微处理器之类的东西上运行一个完整的 LOGO 解释器,遵循“Apple II 的 LOGO”语法。

我已经看到对PyMite、Java“微型版”的引用,当然现在可以使用 1970 年代的 UCSD p-System 源。

欢迎提出建议。