Изменить цвет текста без цветовой памяти в 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

Ну, вот и мой авторитет как современного парня-ассемблера!;-)

Другие вопросы по тегам