ipucLarI

31 replies · 29,286 views

ipucLarI
skate wrote:$0801 öncesi bazı yükleme adresleri kullanılarak istisnai trickler yapılabiliyor ancak bunun şu an için bir önemi yok.

Öğrenmek amaçlı bir kaynak kodu okurken 6 baytlık bir autostart koduna denk geldim, bu da burada bulunsun 256b için işe yarayabilir. 🙂
!to "256b-minboot.prg",cbm

* = $0326    

!word start
!byte $ed,$f6

start:
    ;programı buraya yazın

256 bayt bile size fazla geliyorsa 6 bayt harcamanın en güzel yolu. 😛
ipucLarI
http://noname.c64.org/csdb/release/?id=103840
Burada bu 6 byte'ı 4 byte olarak kullanıyorum. $f6 ya da $ff olmak durumunda sondaki byte ancak $ed olan byte değişebiliyor. Dolayısıyla şu çalışıyor örneğin;
!to "tricky.prg",cbm

* = $0326    

!word start
start:
lda #$f6 ; ya da $ff
...

Aklınızda bulunsun.
En fazla 18-19 byte civarı kod yazacaksanız $007e trickini de kullanabilirsiniz.
18 byte örneği (load address hariç):
!to "very_short_1.prg",cbm

* = $7e
loop
 inc $d020
 inc $d021
 inc $d020
 inc $d021
 inc $d020
 jmp loop

19 byte örneği (load address hariç):
!to "very_short_2.prg",cbm

* = $7e
loop
 inc $d020
 inc $d021
 inc $d020
 inc $d021
 inc $d020
 nop
 nop
 bcs loop

ılk örnek 19 byte olarak kullanıldığında sondaki jmp'ın high byte adresi bozuluyor ancak ikinci örnekte aynı adresteki byte bozulmuyor. Yani biraz kullandığınız opcodelara göre de maksimum sınırınız değişebiliyor. Çok sakat ve aşırı sınırlı bir autorun yöntemidir ancak $0326'ya göre 4 byte daha kısa, benim kullandığım $0326 trickine göre de 2 byte daha kısa sonuç verir, load address harici hiç byte harcamaz.

Last edited: 2012-02-07 07:49