tr-demoscene

the scene => coding => c64 => Konuyu başlatan: skate - 31.12.2007 16:05:29

Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: skate - 31.12.2007 16:05:29
Commodore 64 Assembler'ında kodun başlangıç adresi değiştiği zaman basic kodunun da buna göre değişmesi gerekir. Bu yüzden başlangıç adresi değiştiğinde kodda en az iki yeri değiştirmek gerekir. Bu problemi halleden ufak bir örnek yaptım. Büyük birşey değil. Belki birilerinin işine yarar.
 
Kod: [Seç]
BASIC_START = $0801
 CODE_START = $080d
 
 !to "dummy.prg",cbm
 
 * = BASIC_START
 !byte 12,8,0,0,158
 !if CODE_START >= 10000 {!byte 48+((CODE_START/10000)%10)}
 !if CODE_START >= 1000 {!byte 48+((CODE_START/1000)%10)}
 !if CODE_START >= 100 {!byte 48+((CODE_START/100)%10)}
 !if CODE_START >= 10 {!byte 48+((CODE_START/10)%10)}
 !byte 48+(CODE_START % 10),0,0,0
 
 * = CODE_START
[COLOR=blue] lda $d012
 lsr
 lsr
 sta $d020
 sta $d021
 jmp CODE_START[/COLOR]

CODE_START sabitini değiştirdiğinizde hem basic autorun kodu buna göre üretilecek, hem de kod hafızada o adrese yerleşecektir.
 
Not: Mavi renk ile işaretlenmiş bölge örnek bir kod parçasıdır. Siz kendi kodunuzu bu bölümü silerek yazabilir ya da kendinize template oluşturabilirsiniz.
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: ssg - 31.12.2007 23:58:42
cok acayipmi$ demek sys'in parametresi word olarak degil hafizada ascii duruyor ha? c64 basic zaten genel olarak primitif bi$eydi ama bu acidan da baya verimsizmi$.
 
gerci biraz da bu sayede herkes assembly ogrenip co$tu galiba :)
 
ssg
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: ssg - 01.01.2008 00:00:22
ayrica herkese super 2008'ler dilerim :)
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: Ragnor - 01.01.2008 00:11:30
Nayıııır yeni yılın ilk mesajını atma şansını kaçırdım!!!!!
Nice senelere!!111one :P
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: ssg - 01.01.2008 02:00:29
bende hala 2007 ragnor merak etme :)
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: skate - 01.01.2008 19:52:37
evet ssg, basic'de sys gibi komutların parametreleri string olarak duruyor. ancak bunun sebebi oldukça basit. basic'de satır numarası kullanılarak bir satır kod yazılıp enterlandığı zaman herhangi bir error check olmuyor. yalnızca ufak bir string search ile tanınan basic keywordleri işaretleniyor o kadar. mesela "?" yazdıysan onu o anda "print" olarak algılayıp $99 byte'ı konuluyor hafızaya. ama print'den sonra gelen parametrede bir hata varsa bununla ilgili birşey yapılmıyor. sys'de de bu aynı şekilde işliyor elbette ki. daha sonra program run edildiği zaman parametreler gerekli convertion filtrelerinden geçiriliyorlar. bu sırada bir problem görüldüğü taktirde program hata veriyor.
 
örnek olarak "0 sys 70000" yazıp enterladığımızda bir hata almayız ve "70000" string olarak hafızada durur. ne zamanki "run" deriz, bu durumda 70000'in maksimum 16 bit olması gereken parametre için uygun bir değer olmadığı ortaya çıkar ve;
 
?ILLEGAL QUANTITY ERROR IN 0
 
hatasını alırız. aslında düşününce o kadar da mantıksız değil. yanlış hatırlamıyorsam Atari 800XL'in basic'inde bu böyle değildi. başında satır numarası olsa da, bir kod parçası yazılıp enter'a basıldığında bu tür hatalar anında denetleniyordu ve run edildiğinde bu tür hatalar verebilecek kodların yazılmasına baştan izin verilmiyordu. tabii basic kodlarının hafızada daha az yer kaplaması açısından bu oldukça mantıklı bir yöntem. commodore basic'i bu yüzden eleştirilebilir.
Başlık: ACME'de autorun ile ilgili bir trick
Gönderen: ssg - 02.01.2008 01:05:46
locomotive basic'te (cpc'lerin basic'i) bu konu "parse edemedigini string olarak tut, aksi halde native halinde tut" $eklindeydi yanli$ hatirlamiyorsam. "parse ettim/edemedim"i tokenize etmek zor olmasa gerek. bunlari hep string tutmak interpreter hizini da baya du$uruyordur, programlarin cok yer kaplamasi bir yana. her integer icin 4 tane carpma 5 tane toplama i$lemi cok pahali.
 
ama dedigim gibi bu verimsizlikler hep hayirlara vesile olmu$. cpc'nin basic'i o kadar iyiydi ki demo kasetinde gelen yazilimlarin cogu basic tabanliydi. o yuzden dergiler assembly uzerinde pek durmazdi, poke'la peek'le z80 assembly ogrenmeye cali$tik :)
 
ssg