Gönderen Konu: ACME'de autorun ile ilgili bir trick  (Okunma sayısı 5872 defa)

ACME'de autorun ile ilgili bir trick

« : 31.12.2007 16:05:29 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

ACME'de autorun ile ilgili bir trick

« Yanıtla #1 : 31.12.2007 23:58:42 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
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

ACME'de autorun ile ilgili bir trick

« Yanıtla #2 : 01.01.2008 00:00:22 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
ayrica herkese super 2008'ler dilerim :)

ACME'de autorun ile ilgili bir trick

« Yanıtla #3 : 01.01.2008 00:11:30 »
Hızlı düğmeleri aç

Ragnor

İleti: 901

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://ozanemirhan.blogspot.com
Nayıııır yeni yılın ilk mesajını atma şansını kaçırdım!!!!!
Nice senelere!!111one :P

ACME'de autorun ile ilgili bir trick

« Yanıtla #4 : 01.01.2008 02:00:29 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
bende hala 2007 ragnor merak etme :)

ACME'de autorun ile ilgili bir trick

« Yanıtla #5 : 01.01.2008 19:52:37 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.

ACME'de autorun ile ilgili bir trick

« Yanıtla #6 : 02.01.2008 01:05:46 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
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