在 C64/Assembly 中更改没有颜色记忆的文本颜色
Change color of text without color memory in C64/Assembly
我有如下代码,它运行良好。它清除屏幕,将一些颜色放入屏幕前 12 个字符的颜色记忆中,然后在屏幕上打印文本。
jsr $e544
ldx #[=11=]
lda #3
loopclr: sta $d800,x
inx
cpx #[=11=]c
bne loopclr
ldx #[=11=]
lda #0
loop: lda message,x
sta 00,x
inx
cpx #[=11=]c
bne loop
rts
message: .byte "Hello "
.byte "World!"
我想知道的是,是否有更简单的方法来更改 C64 汇编中的文本颜色,例如 BASIC 中的 POKE 646,color
?
编辑:我想我需要更清楚,我可以使用
lda #color
sta 646
但不影响1024+汇编代码在屏幕上显示的文字
是否有影响屏幕上所有字符的地址?
编辑:我想我知道答案,不。
现在有一个我从未想过会被问到的问题!
sta $0286(十进制 646)设置在使用系统打印例程($FFD2)时使用的背景颜色,我建议直接访问视频 ram,因为它考虑了光标位置。
所以:
lda #[=10=] ; Black letters
sta 86 ; Set color
ldx #[=10=]
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
好吧,我作为一个现代汇编人员的信誉就没了! ;-)
我有如下代码,它运行良好。它清除屏幕,将一些颜色放入屏幕前 12 个字符的颜色记忆中,然后在屏幕上打印文本。
jsr $e544
ldx #[=11=]
lda #3
loopclr: sta $d800,x
inx
cpx #[=11=]c
bne loopclr
ldx #[=11=]
lda #0
loop: lda message,x
sta 00,x
inx
cpx #[=11=]c
bne loop
rts
message: .byte "Hello "
.byte "World!"
我想知道的是,是否有更简单的方法来更改 C64 汇编中的文本颜色,例如 BASIC 中的 POKE 646,color
?
编辑:我想我需要更清楚,我可以使用
lda #color
sta 646
但不影响1024+汇编代码在屏幕上显示的文字
是否有影响屏幕上所有字符的地址?
编辑:我想我知道答案,不。
现在有一个我从未想过会被问到的问题! sta $0286(十进制 646)设置在使用系统打印例程($FFD2)时使用的背景颜色,我建议直接访问视频 ram,因为它考虑了光标位置。 所以:
lda #[=10=] ; Black letters
sta 86 ; Set color
ldx #[=10=]
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
好吧,我作为一个现代汇编人员的信誉就没了! ;-)