我有一个如下代码,它工作正常。它清除屏幕,在屏幕上的前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,color
?
编辑:我认为我需要更清楚,我可以使用
lda #color
sta 646
但它不会影响1024 +中汇编代码放在屏幕上的文字。
是否有影响屏幕上所有字符的地址?
编辑:我想我知道答案,不。
答案 0 :(得分: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
嗯,作为一个现代装配工人,我的可信度! ; - )