2015-02-19 19 views
5

Ich habe einen Code wie unten, und es funktioniert gut. Es löscht den Bildschirm, legt eine Farbe in den Farbspeicher der ersten 12 Zeichen auf dem Bildschirm und druckt einen Text auf dem Bildschirm.Ändern Sie die Farbe des Textes ohne Farbspeicher 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!" 

Was ich frage ich ist, wenn es ein einfacherer Weg, um die Textfarbe in C64 Assembly zu ändern, wie POKE 646,color in BASIC?

Edit: Ich dachte, ich brauche mehr klar zu sein, kann ich

lda #color 
sta 646 

verwenden, aber der Text nicht auf dem Bildschirm durch Assembler-Code in 1024+ setzen beeinflussen.

Gibt es eine Adresse, die alle Zeichen betrifft, die auf dem Bildschirm angezeigt werden?

Edit: Ich glaube, ich kenne die Antwort, nein.

Antwort

8

Jetzt gibt es eine Frage, ich hätte nie gedacht, dass ich gefragt werde! sta $ 0286 (646 dezimal) legt die Hintergrundfarbe fest, die verwendet werden soll, wenn die Systemdruckroutine ($ FFD2) verwendet wird, die ich über den direkten Zugriff auf den Video-RAM rate, da sie die Cursorposition berücksichtigt. Also:

 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 

Nun, es geht meine Glaubwürdigkeit als moderner Assembler Kerl! ;-)

+0

Warum sollte deine Glaubwürdigkeit gehen? Ich denke deine Antwort ist großartig. Ich wusste nicht über '$ ffd2' Trick. Vielen Dank. –

+2

Das ist eines, das auch 30 Jahre nach meinem letzten Gebrauch in meinem Kopf stecken geblieben ist. Sie möchten sich wahrscheinlich mit dem Betriebssystem vertraut machen. Es gibt eine vollständige Disassemblierung unter http://www.ffd2.com/fridge/docs/c64-diss.html, die Kernel-Vektoren beginnen bei $ FF81 mit einer kurzen Beschreibung dessen, was jeder tut. – Mike

+0

Wow, 30 Jahre! Ich habe auch vor 30 Jahren versucht, C64 zu programmieren, aber damals war es für mich unmöglich, Programmressourcen in meinem Land zu erreichen. Nach 30 Jahren habe ich beschlossen, C64 Montage zu lernen. Mit Leuten wie dir scheint es möglich. –