C64 Türkiye sayı 6, sayfa 4
Sayfanın metni

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.

Klavyeyle gezinmek için ← ve → tuşları.