在C64/Assembly中改变文本颜色但不使用颜色存储

7
我有下面这段代码,它能够正常运行。它会清屏,将前12个字符的颜色存储到颜色内存中,并在屏幕上打印出一段文本。
         jsr $e544
         ldx #$00
         lda #3
loopclr: sta $d800,x
         inx
         cpx #$0c
         bne loopclr
         ldx #$00
         lda #0
loop:    lda message,x
         sta $0400,x
         inx
         cpx #$0c
         bne loop
         rts
message: .byte "Hello "
         .byte "World!"

我想知道,在C64汇编中是否有更简单的方法来改变文本颜色,类似于BASIC中的POKE 646,颜色
编辑:我认为我需要更清楚,我可以使用<CHR$>来生成文本。
lda #color
sta 646

但是它不会影响1024+汇编代码在屏幕上显示的文本。

是否有一个地址可以影响放置在屏幕上的所有字符?

编辑:我认为我知道答案,没有。

1个回答

10

现在有一个问题,我从未想过会被问到!sta $0286(646十进制)设置在使用系统打印例程($FFD2)时要使用的背景颜色,我建议使用该例程而不是直接访问视频RAM,因为它考虑了光标位置。

        lda #$00     ; Black letters
        sta $0286    ; Set color
        ldx #$00
msgloop:
        lda message,x
        beq msgdone  ; Zero byte sets z flag - end of string - shorter than checking x value
        jsr $ffd2    ; print a to current device at current position (default: screen)
        inx
        bne msgloop  ; pretty much always unless you have a string > 255
msgdone:
        rts

message: .byte "Hello "
         .byte "World!"
         .byte 0

唉,这下我作为现代汇编程序员的信誉就没了!;-)


为什么你的信誉会受到影响?我认为你的回答很棒。我不知道$ffd2技巧,谢谢。 - user4516901
2
即使我最后一次使用它已经有30年了,但这个仍然深深地印在我的脑海中。你可能想要熟悉操作系统。在http://www.ffd2.com/fridge/docs/c64-diss.html上有一个完整的反汇编,内核向量从$FF81开始,并简要描述了每个向量的作用。 - Mike
哇,30年了!我也在30年前尝试编程C64,但当时在我国无法获得任何编程资源。 30年后,我决定学习C64汇编语言。有像你这样的人存在,似乎变得可能了。 - user4516901
你也一样!作为我更深奥的项目之一,我正在尝试弄清楚如果旧的C64上有一个像样的C编译器和类Unix操作系统,未来会是什么样子。 - Mike
1
这将是非常棒的。我想我会在c64之后立即开始使用Linux,并且不会把我的青春浪费在Windows上。 - user4516901

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接