commodore.gen.tr

Commodore => Commodore Yazılım => Konuyu başlatan: 8bitplayer üzerinde Mayıs 12, 2011, 11:25:30 ÖÖ



Konu Başlığı: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 12, 2011, 11:25:30 ÖÖ
c64 ile yapilabilecek programlar [basıc ıle] ve ılgınc seyler nelerdır bu ara forumu ısgal ettm ama bugun gelıyor :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: LW3D üzerinde Mayıs 12, 2011, 13:22:51 ÖS
Commodore64'ün BASIC dile çok iyi değildir. Hatta akranlarına göre kötüdür. Bu nedenle çoğu C64 ile ilgilenen Makina Dili (Assembler) ile ilgilenmiştir. BASIC ile ilgili bir kaynak veremeyeceğim ama makina dili için, NightLord'un ilgili yazısına bakabilirsiniz.

http://nightnetwork.org/writings_tr/6502_makine_dili/html/6502_makine_dili.html (http://nightnetwork.org/writings_tr/6502_makine_dili/html/6502_makine_dili.html)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: wizofwor üzerinde Mayıs 12, 2011, 13:50:07 ÖS
C64 Basic çok iyi olmasa da pek çok kullanışlı "metin tabanlı" program yazılabilir. Ancak programlarınızda grafik modunu veya spriteları kullanmak istiyorsanız, makine dili olmasa bile en azından peek poke komutlarıyla donanıma direk erişmeniz gerekecektir. C64 Basic üzerine çok güzel kitaplar var. Bunları büyük kütüphanelerde bulmak hala mümkün. Bu kaynaklara internet ortamında nasıl erişirim diyorsanız hiç fikrim yok malesef. 


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: CenkMiri üzerinde Mayıs 12, 2011, 14:42:01 ÖS
Sene 2009 askerde sıkıcı bir hafta sonu nöbetindeyim. Nöbetçi komutan beni yanına çağırdı.Şöyle bir soru yönelti:
 "Her ay maaşımın % bilmem kaçı oyak'a yatmakta ve bu para senelik % bilmem kaç faizle artmakta. Ne kadar zamanda ev alabilecek kadar param birikir?"
Hemen yazıcı odasında bunu çalışmak üzere izin aldım. Bu problemi çözecek 3 şey oradaydı :-). Bir adet PC, C64 emülatörü ve bunları kullanabilecek bir çavuş (ben oluyorum). Problemin cevabını hatırlamıyorum ama çözüm sayesinde keyif ve muhabbetle içtiğim çayı ve yediğim nöbeti iyi hatırlıyorum :-).


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: wizofwor üzerinde Mayıs 12, 2011, 14:56:34 ÖS
Bu tip hesaplar için excel diye bir program var. İlla da Basic'te kasacam diyenleri için içersinde VisualBasic yorumlayıcısı da barından güzel bir program :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: guru68 üzerinde Mayıs 12, 2011, 15:16:14 ÖS
Diskolarda ışık sistemini yönetmek için hala kullananlar...
Tıbbi cihaz üretiminde (dializ makineleri) final test için kullanılırdı...
Kış bahçesi tavan camları, gölgelik, bitki ışığı, ısıtma, havalandırma vs otomasyonunda kullanılır...
Muhasebe hesaplamalarında bazıları günümüzde bile kullanıyor...
Ordu haber şifrelemeleri işinde kullandı...
Web sunucusu olarak günümüzde örnek olarak kullanılıyor...
Müzik prodüksiyonunda SID sayesinde kullanılabilir...

aklıma şu an gelen bunlar.


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: LW3D üzerinde Mayıs 12, 2011, 15:19:58 ÖS
@wizofwor : cenk56_2001'nin asıl amacının hesabı çözmek olduğu konusunda ciddi şüphelerim var :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: wizofwor üzerinde Mayıs 12, 2011, 15:37:14 ÖS
Hımm. Ben LW3D'nin cevabından yola çıkarken asıl sorunun özünü kaçırmışım biraz.

Commodore 64'le yapılabilecek en ilginç şeylerden biri bence ışıklı kalem (lightpen) uygulamalarıydı. Bu cihaz modern (lcd) televizyonlar da da aynı şekilde çalışıyor mu bilmiyorum. Bunun haricinde çeşitli otomasyon, veri kontrolü vs. işlerinde de kullanılabilir tabiki.   


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 12, 2011, 17:24:46 ÖS
en kısa ve aynı ilginç basic programı şudur.

Kod:
10 if peek(54297)=255 then 10
20 print "voila!"

programı yaz, çalıştır. öylece bekleyecek bilgisayar. sonra parmağını tükürükle ve 1. joystick portuna dokundurup ileri geri oynat. voila! :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: witchdoktor üzerinde Mayıs 12, 2011, 17:38:12 ÖS
C64 BASIC V2 ile yapmaya çalıştığın şeylerin çoğu seni makine diline biraz daha yaklaştıracaktır. Bunun dışında hali hazırdaki 256 karakterlik (grafik karakterlerini de ihtiva eden) set ve tam ekran editörün de yardımıyla gayet güzel işler çıkarabilirsin. Zamanının tam ekran editör içeren nadir cihazlarındandı C64.

İşletim sistemi ve BASIC yorumlayıcı değişkenleri ve I/O çip register'lerini (VIC-II, SID, CIA vb) öğrenmeye başladığında daha ilginç şeyler yapabilirsin.

Bunun dışında BASIC'de klavye tamponunu kullanarak self-modifying programlar yazabilirsin ki bu sayede 'parser' yazma zahmetine katlanmadan fonksiyon çizimi vb programlar yazılabilir.

İlle de BASIC diyorsan SIMON'S BASIC gibi bir BASIC extension yazılımı yüklemende fayda var.


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 12, 2011, 18:52:44 ÖS
basic mi istiyonuz? eğlence mi istiyonuz? alın size :)

Kod:
10 poke53280,0:poke53281,0:printchr$(147)
20 poke53269,255
30 fori=0to62:poke8192+i,0:next
40 poke8192,24:poke8195,60:poke8198,60:poke8201,24
50 fori=0to7:poke2040+i,128:poke53287+i,7:next
100 n=150:a=234
110 for i=0 to 7
120 f=cos(a+n)
130 n=n+(i/a)
140 g=cos(n)
150 a=-a
160 if iand2 then j=a:goto 180
170 j=-a
180 if iand4 then k=a:goto 200
190 k=-a
200 d=j*g-a*f
210 e=4.5+(d*g-k*f)/a
220 x=n+(d*f+k*g)/e
230 y=n+(j*f+a*g)/e
240 poke53248+i*2,x and 255
250 poke53249+i*2,y and 255
260 next
270 goto 110
run

Vice emülatörü artık copy&paste destekliyor. "run" dahil olmak üzere texti kopyalayın, sonra vice'da commodore ekranının üzerinde mouse'un sağ buttonuna tıklayın. derhal çalışması lazım. ama elbette ki acayip yavaş çalışacaktır. ALT+W ile warp speed'i açın ve basic'den nasıl küp çevrilirmiş görün. :) Bu aslında şunun aynısı;

http://www.pouet.net/prod.php?which=49904 (http://www.pouet.net/prod.php?which=49904)

Yakında bu olayla ilgili ilginç bir de release'im olacak, duyurulur. ;)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 12, 2011, 19:20:50 ÖS
vay cıdden guzel seyler cıktı :D wıtchdoktor bıraz daha acıklarmısn? Yenıyim :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: witchdoktor üzerinde Mayıs 12, 2011, 19:45:52 ÖS
@8bitplayer
Kodu skate'e sorsan daha açıklayıcı olacaktır.

@skate
Güzel kod olmuş. BASIC V2 mantığıyla hafif optimize edeyim bari ;)

Kod:
10poke53280,0:poke53281,0:printchr$(147):poke53269,255
30fori=0to62:poke8192+i,.:next
40poke8192,24:poke8195,60:poke8198,60:poke8201,24
50fori=0to7:poke2040+i,128:poke53287+i,7:next
100n=150:a=234:m=4.5:p=53248:o=53249:r=255:s=2:t=4:l=7
110fori=.tol:f=cos(a+n):n=n+(i/a):g=cos(n):a=-a
160j=-a:ifiandsthenj=a
180k=-a:ifiandtthenk=a
200d=j*g-a*f:e=m+(d*g-k*f)/a:x=n+(d*f+k*g)/e:y=n+(j*f+a*g)/e
240pokep+i*s,xandr:pokeo+i*s,yandr:next
270goto110
run


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: guru68 üzerinde Mayıs 12, 2011, 20:00:12 ÖS
vay be arkadaşlar beni timetrip'e soktunuz, epey bişeyler çağrıştırıyor program ama unutmuş gibiyim, daha doğrusu "peek my poke" oldum!


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 13, 2011, 10:18:38 ÖÖ
kup cidden cok iyi c64 gelmedı :(


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 13, 2011, 13:25:48 ÖS
yakında bu küpün tamamen farklı bir algoritmayla yazılmışını yayınlayacağım. world first bir özelliği olacak elbette ki. :) o zaman bu küp ve o küp arasındaki farkı açıklayacağım. bu küpün kullandığı tek eksen üzerindeki rotasyon formülü şu aslında.

// Z ekseninde çevirme
xCevrilmis = x * cos(zDonusAcisi) - y * sin(zDonusAcisi)
yCevrilmis = x * sin(zDonusAcisi) + y * cos(zDonusAcisi)
zCevrilmis = z

Bu diğer eksenlere de kolayca uygulanabilir. Yukarıdaki basic örneği 2 eksende dönüyor. Ancak gördüğünüz gibi kod javascript versiyonunda 256 byte'a sığdırılmak için onlarca optimizasyondan geçmiş durumda. değişkenlerin hep tek harfli, kodun anlaşılmaz olma nedeni de javascript'in derlenmeyen bir dil olması. yani binary dosya boyutu diye birşey yok. javascript'de boyut doğrudan source code'un boyutu ile ölçülüyor. mecburen böyle şeyler kullanıyorsunuz. bu kodu da dün ben hızlıca javascript versiyonundan copy & paste'ler ile yazdım. Ufak bir iki parametre değiştirdim sadece c64 ekranına sığsın diye.

x,y,z noktalarının ekrana basılabilmesi, yani 3 boyuttan 2 boyuta çevrilme işlemi ise (projection) şu şekilde yapılıyor.

xEkran = (x / (z + uzaklık)) * buyutme
yEkran = (y / (z + uzaklık)) * buyutme

Uzaklık, objenin ekrana mesafesini belirliyor. Büyütme ise zoom faktörü. Kamera zoom mantığı. Uzakta da olsa zoomlayabiliriz mantığı. Bu iki değişken de başta sabit olarak tanımlanabilirler. İstenildiği taktirde değişken olarak kullanılarak objeyi ekrana yaklaştırıp uzaklaştırabilir ya da perspektifi abartılmış balıkgözü kamera gibi efektler elde edebiliriz.

Yakında yayınlayacağım diğer küp ise mantıksız derecede basit bir rotasyon formülü içeriyor. Sonuca bakınca o kod ile hala o küp nasıl düzgün dönüyor anlamış değilim. :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 13, 2011, 14:53:45 ÖS
ow cıdden anlamak uzun surcek :d


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 13, 2011, 15:02:42 ÖS
ben 12 yaşımdan 17 yaşıma kadar 5 sene boyunca deneyip küp çevirememiştim. yani benim 5 senemi aldı. moralinizi bozmayın. :)

not: tabii o zamanlar internet imkanım pek yoktu. en fazla yabancı bbs'lere bağlanıp döküman arıyordum 2400 baud c64 modemi ile. :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: joker_ üzerinde Mayıs 13, 2011, 15:42:25 ÖS
ow cıdden anlamak uzun surcek :d

eğer assembler ile ilgileniyorsan,anlaman çok da zor olmayacak,nightlord'un dökümanları ile başlayabilirsin,emin ol hızlı yol alacağını göreceksin,üstüne birde skate varken hiç düşünme,7dx paty'e elinde bitmiş bir ürünle gelip katılırsın. :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 13, 2011, 16:05:18 ÖS
Assembler registrylemi ilgili ? su c64um gelsede hemen başlasam :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 13, 2011, 16:21:34 ÖS
ufak bir kavram karmaşası olmuş sanırım. c64'de bir işletim sistemi ve dolayısıyla "registry" tarzı birşey yok (aslında geos var işletim sistemi olarak ama onda da registry yok). sen herhalde "register" lafını görünce böyle bir çağırışım oldu. register demek bir nevi en düşük seviyede "değişken" anlamına geliyor. ama bu değişkenin diğer programlama dillerindeki değişkenlere göre farkı donanım seviyesinde bulunması.

c64'de 3 adet register var. a,x ve y. bunlardan a özel bir registerdır ve accumulator diye adlandırılır. x ve y ise diğer iki registerdır. ancak assembly dili demek "register ile ilgili" şeklinde tanımlanabilecek birşey değildir. assembly en düşük seviyeli programlama dilidir ki bu sadece c64 için değil tüm platformlar için geçerlidir.

basic'de iç ve dış ekran rengi değiştirme (kırmızı yapma)
Kod:
poke 53280,2
poke 53281,2

aynısının assembly dili karşılığı
Kod:
lda #$02
sta $d020
sta $d021

$d020 16'lı (haxadecimal) sayı sisteminde 53280'e karşılık gelir. Yani her iki program parçası da aynı adreslere 2 değerini (kırmızının renk kodu) yazıyor. Ama göründüğü gibi diller oldukça farklı birbirinden. bu örnekte assembly'den yazılan program basic karşılığından yaklaşık 600-700 kat daha hızlı çalışır. ilginç değil mi? :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 13, 2011, 21:48:52 ÖS
iyi bi açıklama :D 600 700 kat :O :D c64 de geldi :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 13, 2011, 22:58:58 ÖS
bu devasa fark şundan kaynaklanıyor. basic precompile edilmeyen ve interpreted bir dil. bu ne demek? yani her basic kodunu yazıp "run" dediğinizde ya da satır numarasız olarak bir basic satırı yazıp enterladığınızda öncelikle feci bir işlem devreye girer. parsing! yani text olarak yazdığınız kodların bilgisayarın anlayabileceği komut ve parametrelere dönüştürülme işlemi. bu 1 Mhz'in altındaki bir bilgisayar için korkunç bir süre almaktadır. örneğin;

print sin(1.2345)
ile
print sin(1.2345000000000000000)

bu ikisini karşılaştıralım. küsüratta sağdaki sıfırın değeri olmadığından sonuç aynı çıkar doğru mu? doğru. peki süre olarak hangisi hızlıdır? ilki, yani 1.2345. sebebi ise siz bu satırı yazıp enterladığınızda basic parserının bir kısmı devreye girer ve print, sin gibi komutları tek bytelık komutlara çevirir. ancak parametre o anda float gibi küsüratlı bir sayı değişkenine çevrilmez. çünkü çevrilirse yazdığınız değerin değişme ihtimali var değişken sınırlarından dolayı. liste aldığınızda enterladığınız satırdaki bazı değerleri değişmiş görebilirsiniz bu durumda. aslında ben kodlayacak olsam böyle kodlardım, sonuçta süper bir hız optimizasyonu olurdu. her neyse, bu bölüm string olarak hafızada saklanır ve run dedikten sonra çalıştırılırken bu string sayısal bir değere dönüştürülür. "1.2345" = 6 karakterlik bir çevirme işlemi demekken "1.2345000000000000000" = 21 karakterlik bir string'in çevirme işlemi demektir. yani komik bir biçimde değeri olmayan sıfırlar kodu yavaşlatmıştır.

gelelim parsing ve convertion sonrasına. artık elimizde şunlar var. print ve sin komutları, sin komutunun sayısal değere çevrilmiş parametresi. ne yapılacak bu noktada? sin değeri hesaplanıp ekrana basılacak. ama nasıl? tüm komutlar birer alt rutin olarak duruyorlar. her komut için bir jsr ve bir rts komutu çalışmak zorunda arka planda.

tam olarak doğru olmayan örnek asm karşılığı:

Kod:
lda sinusDegeri
jsr sinusFonksiyonu
jsr printFonksiyonu

sinusFonksiyonu
;sinus kodu
rts

printFonksiyonu
;print kodu
rts

her bir jsr ve rts 12 cycle zaman yer. bu da tek taramadaki toplam CPU gücünün 1638'de 1'idir. çok fazla gibi gözükmese de siz yüzlerce komut çalıştırmayı denediğinizde sırf interpreting size CPU'nun önemli bir bölümünü kaybettirecektir. asm'de ise alt rutin kullanmaksızın:

Kod:
lda sinusDegeri
;sinus kodu
;print kodu

şeklinde peş peşe yazma imkanınız vardır. elbette ki burada bahsettiğim sinus ve print komutları da çok yavaştır basic'de. neden? çünkü çok genel amaçlı yazılmışlardır. print dediğinizde öncelikle gider ekran nerede diye bakar (ekran adresleri değiştirilebilen adreslerdir). halbuki siz kendi kodunuzda ekranı başta istediğiniz bir pozisyona koyduktan sonra her defasında ekran nerede diye bakmak zorunda değilsinizdir. ama basic her print komutunda arada değişip değişmediğini bilmediği için buna bakmak zorundadır. sinus komutu ise süper hassas bir sonuç üretir, hesap makinelerinde olduğu gibi. ancak sizin ihtiyacınız o kadar yüksek hassasiyet değilse çok daha hızlı çalışan ama virgülden sonra daha az basamakta doğru sonuç veren bir sinus yazabilirsiniz.

sanırım 600-700 kat nereden geliyor açıklayıcı olmuştur. :)


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 14, 2011, 00:31:05 ÖÖ
Süpersin skate :D


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: 8bitplayer üzerinde Mayıs 14, 2011, 01:02:04 ÖÖ
yavaş yavaş başladım okumaya acme programı istiyor ama bulamadım biyerden link verebilcek varmı?


Konu Başlığı: Ynt: c64 ıle yapılabılecek seyler
Gönderen: Skate üzerinde Mayıs 14, 2011, 04:00:44 ÖÖ
http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/ (http://www.esw-heim.tu-clausthal.de/~marco/smorbrod/acme/)