Bu sayfadaki yazılar
Sayfanın metni
Sayfa 15
scrcalc lda $ecf0,x ; Rom’daki ekran belleği LOW adres değerini al sta $fb ; $FB adresine kopyala sta $02 ; $02 adresine kopyala lda scr_hi,x ; Tablodan ekran belleği HIGH adres değerini al sta $fc ; $FC adresine kopyala clc ; “carry” bitini sıfırla adc #$d4 ; #$D4 ile topla sta $03 ; $03 adresine kopyala (Renk belleği HI byte) rts ; geri dön ;---------------------------------------------------------------------------------------; vertical ldx #$00 ; X=0 lda #$04 ; AKÜ=4 stx $fb ; X’in değerini $FB adresine yaz sta $fc ; Akünün değerini $FC adresine yaz stx $fd ; X’in değerini $FD adresine yaz clc ; elde bitini sıfırla adc #$d4 ; #$D4 ile topla ve renk bellek adresini elde et sta $fe ; $FE adresine yaz ldx #$00 ; X=0 Æ Satır sayacı olarak kullanılacak vert1 lda #$27 ; AKÜ=27 sta right ; sağ değişkenine yaz ldy #$00 ; Y=0 vert0 sty left ; sol değişkenine yaz ldy right ; sağ değişkenini al lda ($fb),y ; ekran belleği sağdaki adresi oku pha ; yığına at lda ($fd),y ; renk belleği sağdaki adresi oku pha ; yığına at ldy left ; sol değişkenini al lda ($fd),y ; renk belleği soldaki adresi oku ldy right ; sağ değişkenini al sta ($fd),y ; renk belleği sağdaki adrese yaz ldy left ; sol değişkenini al lda ($fb),y ; ekran belleği soldaki adresi oku ldy right ; sağ değişkenini al sta ($fb),y ; ekran belleği sağdaki adrese yaz ldy left ; sol değişkenini al pla ; yığından geri al sta ($fd),y ; renk belleği soldaki adrese yaz pla ; yığından geri al sta ($fb),y ; ekran belleği soldaki adrese yaz dec right ; sağ değişkenini 1 azalt iny ; y'yi (sol değişkeni) arttır cpy #$14 ; 20 mi? bne vert0 ; değilse tekrarla lda $fb ; ekran belleği adresi LOW byte’ı al clc ; elde bitini sıfırla adc #$28 ; #$28 (40) ile topla sta $fb ; Adrese geri yaz sta $fd ; $FD adresine yaz bcc no_hi ; “Elde” yoksa git inc $fc ; $FC adresindeki değeri 1 arttır inc $fe ; $FE adresindeki değeri 1 arttır no_hi inx ; X registerini 1 arttır cpx #$19 ; $19 (25) oldu mu? (25 satır oldu mu?) bne vert1 ; olmadıysa yeni satır için işlemleri tekrarla jmp $a7e4 ; Kontrolü Basic Rom’a devret.
scr_hi .byte 4,4,4,4,4,4,4 ; Ekrandaki her satırın adresinin .byte 5,5,5,5,5,5 ; HIGH byte’larının bulunduğu tablo .byte 6,6,6,6,6,6,6 .byte 7,7,7,7,7 up .byte 0 ; Yukarı değişken sayaç adresi down .byte 0 ; Aşağı değişken sayaç adresi
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 14
mirror jsr $73 ; parametre varmı kontrol et bne mir0 ; varsa git. mir_err jmp $af08 ; yoksa “syntax error” yazdır mir0 cmp #$56 ; parametre “V” mi? beq vertical ; evetse “vertical” kısmına git cmp #$48 ; değilse kontrol et. “H” mi? bne mir_err ; değilse hata yazdır. Evet ise devam et.
horizontal lda #$00 ; Akü=0 ldx #$18 ; X=0 sta up ; Aküdeki değer “UP” değişkenine sta byte ; Aküdeki değer “BYTE” değişkenine stx down ; X’teki değer “DOWN” değişkenine
one_line ldy byte ; Y registerine “byte” değişkenini yükle horiz ldx up ; X registerine “up” değişkenini yükle jsr scrcalc ; ekran ve renk belleği adreslerini hesapla lda $fb ; $FB adresindeki değeri al sta $fd ; $FD adresine kopyala lda $fc ; $FC adresindeki değeri al sta $fe ; $FE adresine kopyala lda $02 ; $02 adresindeki değeri al sta $04 ; $04 adresine kopyala lda $03 ; $03 adresindeki değeri al sta $05 ; $05 adresine kopyala lda ($fd),y ; ekrandaki karakteri al pha ; yığına at lda ($04),y ; renk belleğindeki değeri al pha ; yığına at ldx down ; X registerine “down” değişkenini yükle jsr scrcalc ; ekran ve renk belleği adreslerini hesapla lda ($02),y ; renk belleğindeki değeri al sta ($04),y ; kopyala lda ($fb),y ; ekrandaki karakteri al sta ($fd),y ; kopyala pla ; yığındaki değeri al sta ($02),y ; renk belleğine yaz pla ; yığındaki değeri al sta ($fb),y ; ekrana yaz iny ; Y registerinin içeriğini 1 arttır cpy #$28 ; $28 (40) oldu mu ? bne horiz ; olmadıysa tekrarla.
Yukarıdaki kısımda değişkenlere ilk değerleri yüklendikten sonra, ilk önce X registerine yüklenen “UP” değişkeninin değerine göre (ilk satır için) ekran ve renk belleklerinin adresi hesaplanıyor. Bu adresler yedekleniyor. Daha sonra “BYTE” değişkeninin değerine göre ekran belleğindeki ve renk belleğindeki değerler okunup yığına atılıyor. Sonra X registerine “DOWN” değişkeni yükleniyor ve (en alt satır için) ekran ve renk belleği adresleri elde ediliyor. Daha sonra ekran ve renk belleğindeki değerler okunuyor. Bu değerler daha önce yedeklediğimiz adreslere yazılıyor. Daha sonra ise yığındaki değerler geri alınıp o anki renk ve ekran belleğine geri yazılıyor. Böylece en üst ve en alttaki satırların ilk byte’ları yer değiştirmiş oluyor. Y registerinin değeri 1 arttırılıp 40 olup olmadığı kontrol ediliyor. 40 olmadıysa aynı satırların bir sonraki byte’ları için işlemler tekrarlanıyor.
ldy #$00 ; Y registerini sıfırla sty byte ; “BYTE” değişkenine kopyala inc up ; “UP” değişkenini 1 arttır dex ; X registerini 1 azalt. stx down ; “DOWN” değişkenine kopyala cpx #$0c ; X= $0c mi? (12-yani ekranın ortasındaki satır) bne horiz ; olmadıysa işlemleri yeni satır için tekrarla. jmp $a7e4 ; olduysa kontrolü Basic Rom’a devret