C64 Türkiye sayı 4, sayfa 20

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 20

;--------------------------------------------; ;PROGRAM ADI : C64 İÇİN YENİ KARAKTER SETİ #01 ;(SAĞA İTALİK FONTLAR) ; ;PROGRAM TARİHİ : 24-09-2003 ; ;PROGRAMI YAZAN : İSMAİL "HADES" ŞAHİN ; ;C64 TÜRKİYE SAYI 4 İÇİN HAZIRLANMIŞTIR ; ;(wordpad, c64asm v1.1 ve VICE v1.11 kul- lanılmıştır) ; ;--------------------------------------------;

*=$0801

.word nextline .word 2003 ; 2003 .byte $9e ; SYS .text "2061" ; 2061 .byte 0 ; komutu nextline .word 0

;--------------------------------------------; ;ROMDAKİ KARAKTER SETİ RAM'E TRANSFER EDİLECEK ;============================================= ;Transfere başlamadan önce hafıza ;düzenlenecek. Bunun için önce interruplar ;engelleniyor ve daha sonra karakter rom'unun ;CPU (6510) tarafından okunabilmesi için I/O ;bölgesi düzenleniyor. ;--------------------------------------------;

sei ;İnterruptları engelle

lda $01 ;Karakter ROM'u

and #$fb ;artık CPU tarafından

sta $01 ;okunabilir ;--------------------------------------------; ; Transfer için adresler ayarlanıyor... ; ;--------------------------------------------;

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. ;--------------------------------------------; ;4096 Byte $D000 adresinden $3000 adresine ;taşınıyor.Karakter seti 4096 byte ;uzunluğundadır ve bu bilgi 4096/256 = 16 ;döngüde transfer edilebilir.

;--------------------------------------------;

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

lda #$1c ;VIC'e yeni karakter

sta $d018 ;setinin yerini bildir. ;--------------------------------------------; ; Karakter setimiz sağa italik olacak ; ;--------------------------------------------;

lda #$30 ;Karakter seti başlangıç

ldy #$00 ;adresi $3000 olarak

sty $fb ;$FB ve $FC adreslerine

sta $fc ;kaydediliyor ;--------------------------------------------; ;Y registeri karakterin byte sayıcısı olacak. ;Bir karakterin datası 8 byte'tan oluştuğu ;için Y registeri 8 kez arttırılıyor ve "0" ;olup olmadığı kontrol ediliyor. "0" olunca ;bir döngüde 256/8 = 32 karakter değiştirilmiş ;oluyor. Bu işlemler Blok sayıcısı kadar ;tekrarlanınca bütün karakter seti ;değiştirilmiş oluyor. ;--------------------------------------------; ; Değişikliğin yapıldığı asıl bölüm burası ; ;--------------------------------------------;

new_fonts ldx #$10 ;Blok sayıcı = $10 (16) nextchar lda ($fb),y ;Karakterin ilk datasını byte1 lsr ;okuyup ve bir kez sağa

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