问题标签 [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.
assembly - 6502 组装移位位
我有一个号码1f
存储在 address 00
,我有另一个号码1e
存储在 address 01
。现在我想把1f
into1f00
和1e
into 001e
,然后把它们加起来得到1f1e
。我该怎么做呢?我知道说明asl
并lsr
处理这个问题,但我是 6502 初学者,所以我真的很感激有人能告诉我它是如何有效地完成的(最少的周期)。
assembly - 用于精灵运动的窦性功能的替代品
研究一些 C64 介绍的想法。我使用下面的代码和一个正弦表根据预先生成的正弦表移动精灵。
子程序
窦表
但我需要一些不同的东西。在循环路径中移动 x 和 y 方向的精灵。我还可以使用哪些其他功能?
assembly - Why some processors have unofficial codes and/or bugs?
Lately I am writing (or trying) an emulator for the 6502 NES CPU.
I am learning many many things, some of them really surprise me and I was wondering what's the explanation for those, in particular, two things came to my mind
- The existence of bugs, in particular the 6502 seems to have a bug in the indirect addressing mode, at least for the first processors (it affects the one used in the NES)
- Unofficial operation codes: Again, really surprising that there are codes not official yet usable, some of them seem to be totally useless (like DOP and TOP which are variations of NOP), and some of them seem to be composition of other operation codes (such SAX or DCP).
The question is, how is it possible that when manufacturing millions of those CPUs, they ended up with bugs (such the indirect addressing mode) and also, why on earth would you as a manufacturer include unofficial operation codes that may be removed in following revisions? Does this happen also with newer CPUs?
assembly - 如何在 6502 asm 中将 16 位数字除以 2?
我想将一个 16 位数除以二。我对该问题的解决方案如下
所有PHA/PLA
的诡计都是因为我的printDecimal
宏从 A 读取 MSB,从 X 读取 LSB。
当我在网上查看替代方案时,我发现 4 指令替代我简陋的除法例程。但我不明白。
这是如何工作的?
assembly - 6502 XASM 定义数据
我试图了解 DTA(定义数据)的事情。不幸的是,我遇到了这样的问题:
我真的找不到它是什么意思和做什么。上面网站上的例子对我来说也不清楚。有没有更好的地方可以了解有关 XASM 和 dta 的更多信息?如果有任何帮助,我将不胜感激。
assembly - 6502 地址的组装和表示
我试图理解程序集 6502 中的这种寻址模式。
例如我们在程序中有这样的指令:
我们知道''text''标签低于$ 2000-高字节是20,低字节是00在累加器中我们有数字30。现在第一个问题是:当我输入时发生了什么STA $80.
是否意味着我们存储的整个地址累加器是0080?现在假设我们将低于 80 00 美元的数字和低于 81 美元的数字 20。Y 为零。现在为什么当我使用它时:
我得到地址2000?这是怎么回事?在 0080 下,我们只有 00(字节)而不是整个地址(2 字节)2000。我知道(80 美元)意味着我们转到 80 美元指向的地址。但是我们只存储了 00 而不是整个地址 2000。我将不胜感激。
assembly - 组装 6502 在控制台中打印数字
假设我们有地址:
之后我们在汇编中执行了一些指令,我们得到了
2000: 30 31 30 31 30 31 31 31 00
;this are ASCII '0' and '1' number representation.
所以我想在我的 PC 控制台上打印这个 01010111。什么是最好的方法以及如何做到这一点?我们存储这些数字的地址是重要还是无关紧要?我正在使用 Xasm 编译器和 emu6502 来运行 .obx。如果有任何帮助,我将不胜感激!
6502 - 如何运行反汇编代码6502?
我必须在组装 6502 中进行编程。我被迫使用仿真器 Vice 128 我被告知 Commodore 128 与 6502 的指令兼容 我是新手,我做了一个实际演示,但我什么都不懂。有一个 80 列的接口,它通过一个命令(哪个?) 机器语言或汇编(程序)的指令直接输入到这个 80 列的矩阵上。数据也被输入到这个矩阵中。那么这个矩阵是内存吗?每条线代表什么?有人告诉我这是反汇编代码6502。但我不知道这是什么意思我很困惑
我想运行这个简单的程序来执行两个数字的总和。这两个数字分别存储在第一页的字零和字一中。我想将结果存储在第一页的第二个单词中。我想象第一行包含 80 个单词。那正确吗?所以我把数据以十六进制(3和2)放在这里。
但我有一个语法错误。我希望有人可以帮助我,因为它使我无法理解事情的运作方式。提前致谢
assembly - 自动填充以将某些指令组装到预定地址中
我想用 CA65 组装一个需要自己运行的 6502 ROM,即没有其他可用的内核。我希望我的程序从$C000
. 但这意味着我还需要$00 $C0
在$FFFC
. 有没有办法让 CA65 在程序结尾和重置向量之间用零填充我的程序?
即我想做的是写类似
并得到一个.prg
可以直接用作连续ROM区域的文件,从$C000
一路到$FFFF
.
我想我能做的一件事就是写
但这意味着每次我更改程序时都必须更新该数字。
assembly - 字节指令在 6502 汇编器中的作用是什么?
首先:对不起,如果这是一个骗局!我进行了一些搜索,但没有找到可以令人满意地解释这一点的资源。
n00bish问题在这里!
我试图了解.byte
指令的作用。不同的来源说不同的东西,其要点是:
.db、DB、.byte 等列出了您指定的确切字节,作为数据而不是指令 ( http://forum.6502.org/viewtopic.php?f=2&t=2374 )
cc65 手册给出了类似的模糊:
.byte:定义字节大小的数据。后面必须跟一系列(字节范围)表达式或字符串。
例子:
我不知道那是什么意思。我认为所有与定义数据相关的操作都是读写内存地址的变体。所以像这样的东西(来自NES开发的tut)
它到底在做什么?这一切都可以用操作码来解释,还是在做一些更有趣的事情?对我来说,它看起来可能是从零页开始写入顺序数据,像这样??:
我离这儿很远吗?我一直在阅读Leo Scanlon 的 6502 Software Design,但我没有看到对那个(或任何)指令的引用。我正在学习 6502 以进行 NES 开发,所有示例代码都充满了.byte
,.ascii
和其他几个指令。在尝试浏览用户贡献的 NES 教程世界之前,我真的很想尝试从像 Scanlon 书这样的学术文本中获得 6502 的坚实基础,但这成为我理解 NES 6502 的障碍。