Bu sayfadaki yazılar
Sayfanın metni
Sayfa 21
sta ($fb),y ;kaydırıp geri yazıyoruz
iny ;2. data için arttır.
lda ($fb),y ;2. datayı oku ve byte2 lsr ;bir kez sağa kaydır
sta ($fb),y ;Sonra geri yaz
iny ;3. data için arttır.
iny ;4. data için arttır.
iny ;5. data için arttır.
iny ;6. data için arttır.
lda ($fb),y ;6. datayı oku ve byte6 asl ;bir kez sola kaydır.
sta ($fb),y ;Sonra geri yaz.
iny ;7. dta için arttır.
lda ($fb),y ;7. datayı oku ve byte7 asl ;bir kez sola kaydır.
sta ($fb),y ;Sonra geri yaz.
iny
;8. data için arttır.
lda ($fb),y ;8. datayı oku ve byte8 asl ;bir kez sola kaydır.
sta ($fb),y ;Sonra geri yaz
iny ;Bir sonraki karakterin
bne nextchar ;ilk datası için arttır. ;"0" olmadıysa tekrar
inc $fc ;RAM HIGH adresi arttır.
dex ;Blok sayıcısını azalt.
bne nextchar ;"0" olmadıysa tekrar
rts ;Programı bitir. ;--------------------------------------------; ;NOT : Program listesindeki "asl" komutları ;"lsr" ve "lsr" komutları "asl" olarak ;değiştirilirse yeni karakter seti sola italik ;olur. ;--------------------------------------------;
.end
Derginin bir sonraki sayısında bütün karakter setini başaşağı çevireceğiz. İsteyen uğraşabilir ve çözümünü .txt dosyası olarak bana gönderebilir. Veya sadece program ile değişik bir karakter seti yaparsanız dergide yayınlayabilirim. Şimdiden iyi çalışmalar....
SET
1
2
ADRES D000-D1FF D200-D3FF D400-D5FF D600-D7FF D800-D9FF DA00-DBFF DC00-DDFF DE00-DFFF
VIC-II ROM GÖRÜNTÜSÜ
1000-11FF 1200-13FF 1400-15FF 1600-17FF 1800-19FF 1A00-1BFF 1C00-1DFF 1E00-1FFF
AÇIKLAMA Büyük harf karakterler
Grafik karakterleri Büyük harf karakterler (negatif)
Grafik karakterleri (negatif)
Küçük harf karakterler Büyük harf ve grafik karakterler
Küçük harf karakterler (negatif) Büyük harf ve grafik karakterler (negatif)
ONLU KARAKTER SETİ ADRESİ
$0000-$07FF $0800-$0FFF $1000-$17FF $1800-$1FFF $2000-$27FF $2800-$2FFF $3000-$37FF $3800-$3FFF
0 2048 4096 6144 8192 10240 12288 14336
$D018 DEĞERİ
$10 (16) $12 (18) $14 (20) $16 (22) $18 (24) $1A (26) $1C (28) $1E (30)
(Tablo-1)
(Tablo-2)
Klavyeyle gezinmek için ← ve → tuşları.
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