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 程序集中的文本颜色,就像POKE 646,color在 BASIC 中一样?

编辑:我想我需要更清楚,我可以使用

lda #color
sta 646

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

是否有影响屏幕上所有字符的地址?

编辑:我想我知道答案,不。

4

1 回答 1

10

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

        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

好吧,我作为一个现代装配工的可信度很高!;-)

于 2015-02-19T03:12:53.347 回答