2015-02-19 7 views
5

У меня есть код, как показано ниже, и он отлично работает. Он очищает экран, помещает в цветную память первые 12 символов на экране и печатает текст на экране.Изменение цвета текста без памяти цвета в C64/Сборка

  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 Ассамблеи, как POKE 646,color в BASIC?

Edit: я думал, что мне нужно быть более ясным, я могу использовать

lda #color 
sta 646 

Но это не влияет на текст положить на экране ассемблере в 1024+.

Есть ли адрес, который влияет на все символы, помещенные на экран?

Редактировать: Я думаю, что знаю ответ, нет.

ответ

8

Теперь есть вопрос, который я никогда не думал, что меня попросят! 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 

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

+0

Зачем вам доверять? Я думаю, что ваш ответ велик. Я не знал о трюке '$ ffd2'. Благодарю. –

+2

Это тот, который застрял у меня в голове даже через 30 лет после того, как я его последний раз использовал. Возможно, вам захочется ознакомиться с операционной системой. Существует полная разборка по адресу http://www.ffd2.com/fridge/docs/c64-diss.html, векторы ядра начинаются с $ FF81 с кратким описанием того, что делают каждый. – Mike

+0

Ничего себе, 30 лет! Я тоже пытался программировать C64 30 лет назад, но тогда мне было невозможно достичь каких-либо ресурсов программирования в моей стране. Спустя 30 лет я решил изучить сборку C64. С такими людьми, как вы, это кажется возможным. –