DİKEY –Y EKSENİNDE– SİMETRİK KARAKTER SETİ PROGRAMI

Bu sayının program bölümüne hoş geldiniz. İlk olarak C64 için kısa programlarla yeni karakter setleri üretmeye devam ediyoruz. Birinci program C64'ün standart karakterlerini Y ekseninde simetrik olacak şekilde değiştiriyor. (5. sayıda ise X ekseninde -yatay- simetrik bir karakter seti elde etmiştik.) İkinci programımız yine karakter seti değiştirmeyle ilgili. Fakat ekrandaki yazıları okuyabilmek için monitörü sağa veya sola yatırmanız gerekmektedir. Karakter setleri programları önümüzdeki sayılarda da devam edecek. 1x1 olarak 2-3 tane kadar program kaldı. Daha sonra ise 1x1'lik seti 1x2, 2x1 ve 2x2 olarak değiştirmeye sıra gelecek. Bu arada belirtmekte fayda var. Bu programlar sadece standart karakter seti için kullanılabilir diye bir şart yok. Mesela elinizde 1x1'lik güzel bir karakter seti var. Önce bu seti $3000 adresinden itibaren yükleyin. Daha sonra aşağıdaki programı yükleyin fakat çalıştırmayın. RUN komutu yerine, programda “init” etiketli yere karşılık gelen adres için SYS 2105 komutunu verin. Böylece başka bir yerden bulduğunuz 1x1'lik bir karakter setinden yeni karakter setleri üretmiş olursunuz. Son olarak 1-2 ufak rutin vererek bu sayıdaki program bölümünü bitiriyoruz. Herkese iyi çalışmalar...

DİKEY –Y EKSENİNDE– SİMETRİK KARAKTER SETİ PROGRAMI

KARAKTER SET NO: 3

(C64ASM V1.1 ile compile edilecek şekilde yazılmıştır.)

*=$0801
.word nextline
.word 2004
; 2003
.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
loop2
ldx
#$08
; "bit" sayacı
lda
#$00
; Geçici adresi
sta
$02
; sıfırla
loop0
lda
($fb),y
; O anki adresin değerini oku
loop1
ror
; bir bit sağa döndür - 7. biti carry'e koy
rol
$02
; bir bit sola döndür. Carry’i 7. bite koy
dex
; bit sayacını 1 azalt
bne
loop1
; sıfır olmadıysa tekrarla
lda
$02
; geçici adresi oku
sta
($fb),y
; o anki adrese geri yaz
iny
; byte sayacını 1 arttır
bne
loop2
; sıfır olmadıysa bir byte daha oku
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.
.end

Yeni karakter setine ait ekran görüntüsü.

vs...) yardım edebilecek editörler aranıyor. Yardım etmek isteyenler kendilerini tanıtan ve ilgilendiği bölümleri belirten bir e-maili c64turkiye@yahoo.com veya hades@hi3s.org adreslerine atabilirler.