Plazma sayı 4, sayfa 69

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 69

Commodore 64

Şekil 1.

$F5C1 (62913) adresinin en son yükletilen dosyayı ekrana yazdığını biliyor muydunuz?

load"program",8,1 sys 62913

Eğer dosyayı load"*",8,1 şeklinde yüklediyseniz ekrana * karakteri yazılacaktır. Yani bu komut sizin yüklediğiniz en son dosya isminin tutulduğu tampon belleği ekrana yazar. Peki nerede bu tampon bellek? $a000 adresi Basic ROM'unun başladığı adrestir. Yükletilen dosya isminin uzunluğuna bağlı olarak bu bellek alanı $9fff'den geriye doğru kullanılır, yani Basic ROM'unun başlangıcından geriye doğru. Örneğin dosyayı "*" ile yüklemişsek bellek başlangıcı tam olarak $9fff'de yer alır. Ama "dutch breeze" diye bir dosya yüklediysek, dosya ismi 12 karakter olduğu için $a000-12 = $9ff4 adresinden itibaren hafızaya yerleşecektir. Bu bellek adresinin başlangıcı ise zeropage'de $bb ve $bc adreslerinde 16 bit şeklinde durur. Örneğin "dutch breeze" için $bb = $f4, $bc = $9f gibi.

6510 ASM'de hiçbir flag'i (zero flag, carry flag v.b.) etkilemeyen komutlar nelerdir?

NOP, JSR, JMP, PHA, PHP, RTS, STA, STX, STY. Bu komutlar haricindeki tüm 6510 assembler komutları en az bir flag'i etkiler.

$D011'e sıfır değeri verdiğimizde DMA satırlarından kurtuluyoruz ve iç ekran kapanıyor ancak bu sefer sprite veya herhangi bir grafik göstermemiz mümkün olmuyor. FLD kullanmadan kolay bir şekilde yalnızca karakter ekranını kapatarak DMA'dan kurtulmanın bir yolu var mıdır?

Olmasa ne diye uzun uzun yazayım bu soruyu :) Birbirine benzer iki yolu var bunun. Birincisi 48. raster satırında ($30) $d011'i kapatıp (0'a eşitleyip) 1-2 raster satırı kadar bekledikten sonra yine $d011'in 3 numaralı bitini set edecek olursak (örneğin 8 değerine eşitleyecek olursak) karakter ekranı kapandığı halde sprite'lar ve bankın sonundaki adres ($3fff, $7fff, $bfff ya da $ffff) görüntülenebilir. Kısacası FLD tekniğinin yarattığı etkinin aynısı yaratılmış olur. Avantajı ise 200 raster satırlık tüm ekranın DMA'larını 1-2 raster satırı zaman harcayarak yok edilebilmesidir.

İkinci yöntem ise bunu ekranın bitiminde 248. raster satırı civarında yapmaktır. Ancak bu durumda ekstra kazancımız alt ve üst border'ların da açılmasıdır. Bu alanlara da sprite basabiliriz bu yöntemle.

Şimdi 48. raster satırını kullanarak yaptığım bir örneği inceleyelim. Bu örnekte $3fff adresi kullanılarak iç ekranda dikey çubuklar kaydırılıyor. Bunun haricinde 50. raster satırdan ($32) itibaren 254 raster satırı boyunca hiçbir ekstra zaman tablosu içermeyen bir döngüyle raster çekebiliyoruz. ACME ile derlemenizi öneririm.

to "nobadlines.prg",cbm

WAIT ldy dey bne

.Vv 1 #.v *-—1

*

$0801 !byte $0c, !byte $9e, !byte $31,

$08, 532; $00,

$00, $30, $00,

$00 $36 $00

*

lda sta sei

$080d #$01

Start: lda cmp bne lda #$00 sta *WAIT 24 lda #$0b sta $d0l1 lda #$31 cmp $d012 bne *-3 lda #$1b sta *WAIT 8 bit $ea ldx #$00

#$30 $d012 *-3

loopl1: txa sta $d020 sta $d021 *WAIT 9 inx Ccpx bne asl bne inc İmp

#254 loopl start $3fff start

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