Изменить цвет текста без цветовой памяти в C64/Assembly
У меня есть код, как показано ниже, и он отлично работает. Он очищает экран, помещает некоторые цвета в цветовую память первых 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 Assembly, например POKE 646,color
в бейсике?
Редактировать: я думал, что мне нужно быть более ясным, я могу использовать
lda #color
sta 646
Но это не влияет на текст, выводимый на экран ассемблерным кодом в 1024+.
Есть ли адрес, который влияет на все символы на экране?
Изменить: я думаю, что я знаю ответ, нет.
1 ответ
Теперь есть вопрос, который я никогда не думал, что мне зададут! 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
Ну, вот и мой авторитет как современного парня-ассемблера!;-)