在C64/Assembly中更改没有颜色记忆的文本颜色

5 assembly c64 ca65

我有一个像下面的代码,它工作正常.它清除屏幕,在屏幕上的前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!"
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果有更简单的方法来改变C64程序集中的文本颜色,就像POKE 646,color在BASIC中一样?

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

lda #color
sta 646
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mik*_*ike 9

现在有一个问题,我从未想过会被问到!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
Run Code Online (Sandbox Code Playgroud)

嗯,作为一个现代装配工人,我的信誉!;-)

  • 在我上次使用它之后的30年里,这种情况一直困扰着我.您可能希望熟悉操作系统.在http://www.ffd2.com/fridge/docs/c64-diss.html上有完整的反汇编,内核向量起始于$ FF81,并简要描述了每个人的工作. (2认同)