Bu sayfadaki yazılar
Sayfanın metni
Sayfa 2
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...
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.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 3
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.