问题标签 [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 投票
3 回答
956 浏览

assembly - 练习自修改内存复制例程,6502 ASM

下面是我在 Commodore 64 上进行内存复制的自我修改例程。

我在一个表中写了char codesnumber of repeats,并用这个例程填充了 screen_ram。

我正在寻找优化建议。在这种情况下,我的首要任务是记忆。

0 投票
2 回答
313 浏览

assembly - 在 6502 的组装中创建两个方波

我正在尝试使用 6502 微控制器指令集在汇编中生成两个输出:20Hz 方波和 30Hz 方波。到目前为止,我可以输出 20Hz 波:

根据我的理解,我可以做的是采用 60Hz 方波并用它来获得 30Hz 和 20Hz。如何将 20Hz 方波输出到 PortA 的第 5 位,将 30Hz 方波输出到 PortA 的第 6 位,而不影响端口中其他位的状态?换句话说,我如何从这里的 60 中得到 20 和 30?我是否让计数检查 7 并增加计数 2?任何帮助将不胜感激。

0 投票
1 回答
744 浏览

assembly - 使用中断对 6502 微控制器进行基本编程

我正在尝试使用中断作为 6502 Teensy 微控制器上计时动作的一种方式。我设法创建了一个计数器,通过触发中断来更快地添加位:

我要做的是每秒打印一次“你好”到控制台,并在按下 IRQ 时打印“那里”,触发中断。我会使用延迟循环,例如:

还是我需要一些由中断计时的东西?任何指导都会有所帮助。

0 投票
3 回答
1467 浏览

assembly - 6502 间接寻址问题

我在使用 6502 机器的以下代码时遇到了一些问题:

练习是存储从地址 2000 开始的数字 2、1 和 4,并说出 A、X 和 Y 的值是多少。

我正在用笔和纸“运行”我的代码,但由于以下原因我卡在了 C011:
LDA ($FE),Y
它在 A 中加载了存储在以这种方式计算的内存地址的值:

  1. 选择$FE值(最初是 00)
  2. 添加 Y 的值(第一次迭代时为 7)
  3. 我现在有07
  4. 用存储在 07 的值加载 A

这个对吗?我错过了什么吗?如果我不是,我在哪里使用存储在2000 2001and中的值2002

提前致谢..

0 投票
2 回答
160 浏览

loops - 如何退出循环?

我正在创建一个简单的程序,允许用户键入输入,然后在用户输入某个键时退出程序。但是,我不确定我目前拥有的代码在哪里:

谢谢你的帮助。

0 投票
2 回答
1313 浏览

java - 这是在 JAVA 中实现 6502 CPU 仿真器的“好”方法吗?

想要确保我不必返回并重做大量代码......我将每个操作码作为实现 Runnable 的枚举中的一个值。有没有更有效的方法我应该这样做,或者我是否在写轨道上以获得准确运行测试套件 rom 的东西?

0 投票
0 回答
94 浏览

assembly - 为什么6502处理器有一个降序堆栈?

我只是好奇。当我第一次开始了解 6502 处理器系列时,我很困惑,因为我从来没有听说过降序堆栈。

我还看到其他处理器可以选择以不同的方式实现堆栈(升序、降序等),并配有单独的汇编指令来处理每个实现。

那么这个技术决定背后的原因是什么?

0 投票
3 回答
1539 浏览

6502 - 在 6502 上的减法操作(sbc asm 指令)期间借用?

在NES使用的6502上的减法操作(sbc asm指令)期间发生借位(即进位标志被清除)时?每次结果都是负数(-1到-128)吗?

非常感谢!谢谢斯滕

0 投票
1 回答
412 浏览

emulation - Is it possible to procedurally determine the number of cycles a particular instruction takes on a 6502?

Most emulators store the number of cycles a particular instruction takes in a lookup table, and then add any conditional cycles if needed (when crossing page boundaries, for example).

I'm wondering if there is a way to procedurally determine the number of cycles an instruction will take based solely on addressing mode and memory reads/writes.

To give an example, I've noticed that all instructions that use immediate or relative addressing take 2 cycles.

All zero-page instructions take 3 cycles, plus an additional 2 cycles if altering memory in-place.

All indexed zero-page instructions take 4 cycles, plus an additional 2 cycles if altering memory in-place.

...And so on.

So, is there some fully documented, procedural way of determining the number of cycles for an instruction like the above? Are there exceptions that would break determinism in such a formula?

0 投票
2 回答
956 浏览

assembly - 如何在 Commodore 64 中更改内核 SCNKEY 例程行为

我正在尝试使用 Commodore 64 中的内核例程来实现游戏控制。

下面的代码有一个例外。每个按键都算作单个输入。eg: 一直按住按钮没有效果。每次移动都必须释放并再次按下。我怎样才能改变这种行为?只要按住键,我只想重复动作。