gpt4 book ai didi

string - DASM 汇编器中的 ASCII 到 C64 屏幕代码

转载 作者:行者123 更新时间:2023-12-04 22:10:01 26 4
gpt4 key购买 nike

我正在通过 C64 模拟器学习 6502 micro 的汇编。目前正在尝试将字符串输出到屏幕。这是我的代码:

    processor 6502
org $1000

ldx #$00 ;using x register as column counter
print:
lda message,x;load a with x bit from message
sta $0400,x ;store this bit in row 0 col 0 address
inx ;x++
cpx #$05 ;is x >= 5?
bne print ;if not x >= 5, loop again
rts ;return from program


message dc "HELLO"
hexmsg dc $08,$05,$0c,$0c,$0f

因为我的编辑器(win 10 上的 Notepad++ )使用类似 ascii 的字符代码, "HELLO"message是位 48 45 4C 4C 4F。这会在屏幕的左上角提供以下输出:
enter image description here

我猜这是正确的,通过查看准将屏幕代码表 here .

如果我将第 6 行更改为 lda hexmsg,x然后我得到了我想要的词 HELLO .

我对 DASM 汇编程序还不是很熟悉,并且无法找到它的完整文档(如果存在)。我发现的大多数教程只是让你声明 message .byte "HELLO"或类似的东西,它只是有效,因为他们使用的汇编程序会自动将类似 ascii 的文本字符串自动转换为 commodore 字符串,但 DASM 似乎并没有这样做。

有谁知道我可以让 DASM 做到这一点的方法,或者推荐另一种方法来简单地将字符串输入到汇编程序中,而不是手动将我的字符串输入为一堆十六进制数据?

最佳答案

啊哈,ASCII 编码与 Commodore 屏幕代码。我们都去过那里。您有几个选择:

  • 不要直接写入屏幕内存,而是使用内核 CHROUT 例程(可能通过更高级别的字符串输出例程)。那么您只需要担心 ASCII 和 PETSCII 之间的差异,但这是另一个睡前故事。此外,这对文本很有用,但对游戏来说却很糟糕,因为与直接写入相比,内核是 s-l-o-w。
  • 编写一个小转换例程,在程序启动时运行,吃掉你的字符串表,并吐出转换后的屏幕代码等价物。快速且高效,前提是您的字符串都在一起并且您没有编写基于 ROM 的应用程序(该应用程序无法进行就地转换)。
  • 编写一个 DASM 预处理器,它在构建脚本中的 DASM 之前运行,并且基本上执行与上述 #2 相同的转换,但是在汇编程序看到它之前转换为源代码。这可能有点粗糙,您必须确保在修改之前备份原始源。
  • 获取 DASM 源代码并修补它以调用新数据类型(用于屏幕代码)的用户导出,该数据类型与#2 的功能相同,但在组装过程中即时运行。非常粗糙。
  • 在字符串中使用小写字母,这将在汇编期间转换为大写屏幕代码等效项。您可能忽略了这样一个事实,即您看到的是 转移 字符串中字符的表示,在默认显示模式下为图形符号。

  • 从所有 5 个选项的经验来看,我选择了 #2。

    另外:切换到 KickAssembler , 哪一个
  • 较新,并积极维护
  • 提供更强大的功能
  • 与 VICE 很好地集成用于调试
  • 关于string - DASM 汇编器中的 ASCII 到 C64 屏幕代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43498617/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com