2015-02-19 20 views
5

Ho un codice come sotto, e funziona perfettamente. Cancella lo schermo, mette un po 'di colore nella memoria a colori dei primi 12 caratteri sullo schermo e stampa un testo sullo schermo.Cambia colore del testo senza memoria colore in C64/Assembly

  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!" 

Quello che mi chiedo è, se c'è un modo più semplice per modificare il colore del testo in Assemblea C64, come POKE 646,color in BASIC?

Edit: ho pensato che ho bisogno di essere più chiaro, posso usare

lda #color 
sta 646 

Ma non influisce sul testo messo su schermo dal codice assembly in 1024+.

C'è un indirizzo che interessa tutti i caratteri messi sullo schermo?

Edit: Penso di conoscere la risposta, no.

risposta

8

Ora c'è una domanda che non avrei mai pensato di ricevere! sta $ 0286 (646 decimale) imposta il colore di sfondo da utilizzare quando si utilizza la routine di stampa del sistema ($ FFD2) che raccomando sull'accesso diretto alla ram del video poiché tiene conto della posizione del cursore. Quindi:

 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 

Beh, ci va la mia credibilità come un moderno ragazzo assemblatore! ;-)

+0

Perché la tua credibilità dovrebbe andare? Penso che la tua risposta sia grandiosa. Non conoscevo il trucco '$ ffd2'. Grazie. –

+2

E 'quello che mi è rimasto in testa 30 anni dopo l'ultimo utilizzo. Probabilmente vuoi familiarizzare con il sistema operativo. C'è un disassemblaggio completo su http://www.ffd2.com/fridge/docs/c64-diss.html, i vettori del kernel partono da $ FF81 con una breve descrizione di ciò che ciascuno fa. – Mike

+0

Wow, 30 anni! Ho provato a programmare C64 anche 30 anni fa, ma a quel tempo non riuscivo a raggiungere alcuna risorsa di programmazione nel mio paese. Dopo 30 anni, ho deciso di imparare l'assemblaggio del C64. Con persone come te, sembra possibile. –