Bu sayfadaki yazılar
Sayfanın metni
Sayfa 5
ldy #$00 ; sayacı sıfırla loop2 lda temp,y ; temp adresindeki byte’ları oku sta ($fb),y ; o anki karakterin adreslerine yaz iny ; sayacı 1 arttır. cpy #$08 ; 8 oldumu? bne loop2 ; olmadıysa işlemleri tekrarla lda $fb ; Karakter setinin LO adresini al clc ; Carry bitini sıfırla adc #$08 ; 8 ile topla sta $fb ; LO adrese yaz bcc next_char ; elde biti yoksa git inc $fc ; Karakter setinin HI adresini 1 arttır next_char lda $fc ; HI adresi al cmp #$40 ; #$40 oldumu? Olmadıysa bne loop3 ; işlemleri tekrarla rts ; Olduysa programı bitir. temp .byte 0,0,0,0,0,0,0,0
.end
Program listesinde cfg0 ve cfg1 etiketli satırlardaki komutların değiştirilmesiyle 4 farklı karakter seti elde edilebilir. Aşağıda bu komutları ve elde edilen karakter setlerini görebilirsiniz.
cfg0 ror cfg0 ror cfg1 rol temp,x cfg1 ror temp,x
cfg0 rol cfg0 rol cfg1 rol temp,x cfg1 ror temp,x
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 4
KARAKTER SET NO: 4
(C64ASM V1.1 ile compile edilecek şekilde yazılmıştır.)
*=$0801
.word nextline .word 2004 ; 2004 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0
sei ; İnterruptları engelle lda $01 ; Karakter ROM'u and #$fb ; artık CPU tarafından sta $01 ; okunabilir lda #$d0 ; ROM adresi = $D000 ldx #$30 ; RAM adresi = $3000 ldy #$00 ; olacak şekilde ayarla. sty $fb ; $FB ve $FC adreslerinde sta $fc ; ROM adresi tutuluyor. sty $fd ; $FD ve $FE adreslerinde stx $fe ; RAM adresi tutuluyor. ldx #$10 ; Blok sayacı = $10 (16) transfer lda ($fb),y ; ROM'dan o anki adresi sta ($fd),y ; oku ve RAM'e kopyala iny ; byte sayacını 1 arttır bne transfer ; "0" değilse geri dön inc $fc ; ROM HIGH adresi 1 arttır inc $fe ; RAM HIGH adresi 1 arttır dex ; Blok sayacını 1 azalt bne transfer ; "0" olmadıysa geri dön. lda $01 ; I/O bölgesi eski haline ora #$04 ; getiriliyor. CPU artık sta $01 ; karakter roma erişemez cli ; interruptlara izin ver init lda #$1c ; VIC'e yeni karakter sta $d018 ; setinin yerini bildir. new_fonts lda #$30 ; Karakter seti başlangıç ldy #$00 ; adresi $3000 olarak sty $fb ; $FB ve $FC adreslerine sta $fc ; kaydediliyor loop3 ldy #$00 ; Y registeri byte sayacı=0 loop1 lda ($fb),y ; O anki adresin değerini oku ldx #$00 ; X registeri "ror" işlem sayacı loop0 clc ; carry bitini sıfırla cfg0 ror ; aküdeki değeri 1 bit sağa döndür. cfg1 rol temp,x ; "c" bitini "rol" ile temp'e yaz inx ; x registerini 1 arttır cpx #$08 ; 8 oldumu? bne loop0 ; olmadıysa tekrarla iny ; byte sayacını 1 arttır cpy #$08 ; 8 oldumu? bne loop1 ; olmadıysa işlemleri tekrarla.