问题标签 [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 - 我可以通过一些 16 位魔术把它变成一个循环吗?
我现在开始使用 6502 Assembly,并且在处理需要处理大于 8 位的数字的循环时遇到了问题。
具体来说,我想遍历一些内存位置。在伪 c 代码中,我想这样做:
因此,从$44AD
我想写入$01
ram 的地址开始,然后向前跳转$28
,写入$01
该地址,然后$28
再次向前跳转,直到我完成了 20 次(最后写入的地址是$47A5
)。
我目前的方法是循环展开,这写起来很乏味(尽管我猜汇编器可以使它更简单):
我知道绝对寻址(使用累加器而不是 Y 寄存器 - sta $44AD, x
),但这只能给我一个 0 到 255 之间的数字。我真正认为我想要的是这样的:
基本上,从最高地址开始,然后向下循环。问题是 $14 * $28 = $320 或 800 dec,这比我实际存储在 8 位 X 寄存器中的要多。
有没有一种优雅的方式来做到这一点?
assembly - 如何为 MOS 6502 在 asm 中创建延迟
我是 ASM 的新手,我试图锻炼如何为以下代码创建延迟:
byte - 重新尝试 BASIC 6502 N 字节整数加法?
我最初(寻求帮助)并在 6502 宠物模拟器中编写了一个 BASIC 程序,它添加了两个 n 字节整数。但是,我的反馈是它只是添加两个 16 位整数(而不是添加 n 字节整数)。
任何人都可以通过查看我的代码来帮助我理解这个反馈并指出正确的方向来制作一个添加两个 n 字节整数的程序吗?
感谢您的合作!
文档:使用绝对索引寻址添加两个 n 字节整数。加数从内存位置 $0600、$0700 开始,答案是 $0800。整数的字节长度为 $0600 (¢ —> 256)
操作码、文档、变量:
assembly - 汇编打印缓冲区
我正在再做一次,但这次我已经接近了。使用 6502 芯片。
我正在编写一个程序集打印缓冲区的程序。
我遇到的一个问题是检查字符串是否为空。
到目前为止,这是我的代码:(人类可读)
我将如何检查字符串是否为空?
谢谢!
assembly - 6502 组装说明无效
我在 6502 组件中打印到屏幕上
在我写的监视器中
但是,当我在此行上按 Enter 时,它说指令无效?
有任何想法吗...?
assembly - 用结果填充 100 个内存位置
我正在尝试用 6502 处理器中先前操作的结果填充 100 个内存位置。
如何增加存储在寄存器中的内存位置并将结果存储在其中?
assembly - NMI 和 IRQ 中断
我正在尝试查找有关 6502 处理器如何处理中断的信息,但我很困惑。我看过一些关于它的例子,但它就像一个普通的子程序。
我对8086处理器有一些经验,我记得有一些代码可以处理不同的中断。
首先,如果有人能用一些代码解释 NMI 和 IRQ 之间的区别,我将非常感激。甚至更多,如果你得到我关于处理中断的更多信息(例如)处理键盘中断。
assembly - 为什么我的 Commodore 64 模拟器上的字符被 0x40 偏移?
清除屏幕后,我有一些 6502 代码可以将字符串打印到屏幕内存。不幸的是,如果我打印一个字符串,例如“HELLO WORLD”,它会出现乱码。我发现这是因为大写字符从 0x01 开始,而不是我从这里的 PETSCII 代码中想到的 0x41 。
我可以通过从我的字符串中减去 0x40 来解决这个问题,但是除了字母之外的所有内容都不正确,例如空格。我只是不确定为什么字符生成器将 0x01 变成字符“A”而不是 0x41。它将 0x41 变成了一个倒黑桃符号(就像一副纸牌上一样),它上面的所有东西似乎都是边框字符和奇怪的符号。
环顾了一会后,我在 PETSCII 的维基百科页面上找到了这句话,这似乎说明了我要解决的问题,但我不知道如何解决它,也无法在任何地方找到任何信息......
实际的字符生成器 ROM 使用了一组不同的赋值。例如,要通过直接戳屏幕内存在屏幕上显示字符“@ABC”,可以戳十进制值 0、1、2 和 3,而不是 64、65、66 和 67。
我在 Mac OS X 上的 VICE x64 模拟器上运行,并且正在使用 64tass 的 OS X 端口进行组装。
这是不减去 0x40 的汇编代码:
这是输出的屏幕截图
感谢评论里的每一个人!
帮助他人的旁注
您可以通过使用 PLOT 设置光标位置来设置 CHROUT 将输出到哪一行和哪一列
emulation - 有没有办法通过 6502 的操作码以编程方式确定寻址模式?
即在操作码中是否以某种方式编码了不同的寻址模式?是否可以通过编程方式提取它们,或者此信息是否仅存在于 6502 的文档中?我正在写一个模拟器,我不关心性能。如果可能的话,最好有一个接受操作码并返回寻址模式的函数。
到目前为止,我还没有发现任何迹象表明代码中有模式,除了所有零页指令似乎都设置了它们的第三位。
assembly - 6502 汇编将 2 位数字转换为 4 位数字
我有一个随机数(从 0 到 31)x 存储在 address $00
,另一个随机数(从 0 到 31) y 存储在 address $01
。我想用这两个数字作为坐标并推导出一个地址$xy
。例如,如果 x = 2, y = 10,则地址为$020a
. 我是初学者,有人可以分享一个有效的方法吗?
我想在派生地址中存储一些其他值$020a
,所以这就是我需要它的原因。