2015-02-19 15 views
5

Aşağıda gibi bir kod var ve iyi çalışıyor. Ekranı temizler, ekranda ilk 12 karakterin renk hafızasına biraz renk koyar ve ekranda bir metin basar.C64/Assembly'de renk belleği olmayan metnin rengini değiştirin

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

Ben C64 Meclisi'nde metin rengini değiştirmek için daha kolay bir yolu BASIC POKE 646,color gibi varsa, acaba ne olacak?

Düzenleme: Ben daha net olması gerekir düşündüm, ben

lda #color 
sta 646 

kullanabilirsiniz Ama 1024+ montaj koduyla ekranda koymak metni etkilemez.

Ekrana gelen tüm karakterleri etkileyen bir adres var mı?

Düzenleme: Sanırım cevabı biliyorum, hayır.

cevap

8

Şimdi, sorulacağımı hiç düşünmediğim bir soru var! sta $ 0286 (646 ondalık), imleç konumunu dikkate aldığından, video ramına doğrudan erişim üzerinden önerdiğim sistem yazdırma rutinini ($ FFD2) kullanırken kullanılacak arka plan rengini ayarlar. Yani:

 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 

Eh, güvenilirliğim modern montajcı adam olarak gidiyor! ;-)

+0

Güvenilirliğiniz neden gitmeli? Bence cevabın harika. Ben '$ ffd2' hile hakkında bilmiyordum. Teşekkürler. –

+2

En son kullandığımdan 30 yıl sonra bile kafamda sıkışmış olan bu. Muhtemelen işletim sistemi hakkında bilgi sahibi olmak istersiniz. Http://www.ffd2.com/fridge/docs/c64-diss.html adresinde tam bir demontaj var, çekirdek vektörleri her birinin ne yaptığıyla ilgili kısa bir açıklama ile $ FF81'de başlıyor. – Mike

+0

Vay, 30 yıl! C64'ü 30 yıl önce de programlamaya çalışıyordum, ama o zamanlar ülkemdeki herhangi bir programlama kaynağına ulaşmam imkansızdı. 30 yıl sonra C64 topluluğunu öğrenmeye karar verdim. Senin gibi insanlar ile mümkün görünüyor. –