Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore YazılımC64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü
Sayfa: 1 ... 20 21 [22] 23 24 ... 30   Aşağı git
Yazdır
Gönderen Konu: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü  (Okunma Sayısı 248747 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #315 : Mayıs 30, 2017, 08:03:10 ÖÖ »

Ben bunu biliyordum ve hatta daha dün başka bir rf projesinde 868000000 yazmamak için 868E6 şeklinde kullandım. Ama iş c64 olunca hiç aklıma gelmemiş. Güzel yakaladın...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #316 : Mayıs 30, 2017, 12:11:34 ÖS »

@delimawi: Diğer dillerde ben de kullanırım. CBM Basic'in desteklediğini hatırlamıyordum. Ama dediğim gibi eski kodlarımdan birinde görünce atladım hemen.

92'den kalma bir kod disketimin içinde işe zamazingo sayfamda (http://akaydin.com/zamazingo/) paylaşmaya değer bir şeyler var mı acaba diye araştırırken denk geldim. Yoksa 25 sene önceki kendimden medet ummadım. Kahkaha
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #317 : Mayıs 31, 2017, 06:41:09 ÖÖ »

3-4 farklı şekilde daha çok kısaltmanın eşiğine gelsem de 172 byte'ın altına indiremedim. bir kaç farklı çözüm aynı byte sayısıyla sonuçlandı. hafta sonuna kadar bu versiyonla cebelleşelim, bakalım daha çok kısalacak mı. Ben 170'in altına inmeli diyorum. Niye üstünde ki, di mi ama?

Kod:
0 poke53265,59:poke53272,24:fori=8e3to4^7:pokei,0:next
1 a=~*.8*int(j):x=x-cos(a):y=y+sin(a):j=j+.01:print
2 c=1e4+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #318 : Mayıs 31, 2017, 22:20:42 ÖS »

Şöyle bir versiyon var elimde. Sadece trick'i görmeniz açısından paylaşıyorum. 165 byte'a kadar düşüyor ama ekran temizlenmek yerine dikey çizgilerle dolduruluyor. Güzel olan tarafı ekranı biraz daha renkli hale getirmek, hatta renk seçmek mümkün hale geliyor.

Amaç print'den kurtulmak. $d018'i varsayılan değeriyle kullanıp bunun yerine $dd00'ı set ederek $4000-$8000 aralığındaki banka geçiyoruz. Bitmap ve ekran çakışıyor (bitmap $4000, ekran $4400'de). Her ikisini birden aynı değerle fill'liyoruz. Eğer 0 ile fillersek siyah üstüne siyah çizildiği için ekranda bir şey gözükmüyor. Başka bir değerle fillediğimizde de üst ve alt nibble eşit olmadığı sürece çizim görüntüleniyor ama ekran o byte patterni ile dolmuş oluyor. Ekranın bir yerine kadar olan bölümünü ($4800'e) renk değeri, $4800'den sonrasını 0 ile fill ettiğimizde uygun sonuca ulaşıyoruz ama 172 byte'dan kısa yapmayı beceremedim. Yine 172-173 byte civarlarına geliyor.

Kod:
0 poke53265,59:poke56576,2:fori=4^7to~^9:pokei,4:next
1 a=~*.8*int(j):x=x-cos(a):y=y+sin(a):j=j+.01
2 c=2e4+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #319 : Mayıs 31, 2017, 22:56:51 ÖS »

Ben de şu dolu yıldıza bir eğilmeyi düşünüyordum bu gece. BAkarsın dolusu 170 altına iner...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #320 : Mayıs 31, 2017, 23:13:10 ÖS »

Merakla bekliyoruz efendim.

Sesli düşünüyorum. Bana şu yüzden 170 altı filled için mümkün gelmiyor. Eğer ray tracing mantığı bir şeyler deneyecek olursan benim 196 bytelık versiyona benzer bir noktaya ulaşıyorsun. Senin yaptığın gibi yıldız gittikçe küçülerek çizilsin dediğinde ise normal çizilen dış hatlara ek bir kod yazman gerekiyor. Bu durumda (büyük ihtimalle) sadece dış hatları çizilen versiyon daha küçük olacaktır.

Denemediğimiz çok fazla yöntem kalmadı gibi filled için. Aklıma merkezden linelar çizerek elde etmek geliyor ki yine line çizimi, yine dış hattın bulunması. Sadece dış hattı çizdirmek daha kısa olacaktır.

İçimden bir ses sen filled versiyonu 172'nin altına indirmeyi becerirsen daha kısa outline versiyonu çıkar ortaya diyor. Dur bakalım.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #321 : Mayıs 31, 2017, 23:18:35 ÖS »

Bu kadar yazdım yazdım aklıma yeni bir yöntem geldi bak. Belki senin aklındakine benzerdir. Olsa olsa o olabilir.
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #322 : Mayıs 31, 2017, 23:26:36 ÖS »

Aslında aklımda birşeyler var ama koda dökmeden dillendirmek doğru olmaz. Belki de hiç de beklediğim kadar kısa olmayacak... Temelde poke esnasında x,y koordinat sisteminden, lineer adrese çevirmek üzere kullandığımız and lerderden vb kurtulmak üzerine kurulu...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #323 : Haziran 01, 2017, 00:18:08 ÖÖ »

Demo efektlerinde o andlerden kurtulmak için 256 byte'lık tablolar oluşturuyoruz 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1,128,64,32,... şeklinde giden. Ama o tabloyu oluşturmak da karakter harcadığı için astarı yüzünden pahalıya gelebilir diye düşünüyorum.

edit: diğer lookup tabloları da low byte high byte şeklinde her satır başına denk gelecek şekilde ilerliyor. lo -> 0,1,2,3,4,5,6,7,64,65,66,67... gibi
« Son Düzenleme: Haziran 01, 2017, 00:25:20 ÖÖ Gönderen: Skate » Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #324 : Haziran 01, 2017, 00:22:02 ÖÖ »

Bu arada sen datayı nasıl hazırlarsan hazırla, en son ekrana plot edeceğin noktada bitmap dizilimi yine aynı olacağı için tam olarak kurtulmak mümkün olmaz sanıyorum. Benim filled star örneğimde o hesaplamalardan kurtardım ama bu sefer de yan byte'a geçmek için 8'er ilerle, alt satıra geçerken bilmemkaç byte geri dön ama 8. satıra ulaştıysan da bilmemkaç byte ileri git demekle uğraşıyorsun. Yine tam kurtuluş yok gibi. Senin versiyonu çok merak ettim. Eğer gerçekten buna çözüm getirebiliyorsa kesinlikle yeni bir yöntem öğreneceğim.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #325 : Haziran 01, 2017, 00:29:46 ÖÖ »

Yapmak istediğini anladım. Sen bit bit değil de byte byte ilerleyeceksin, set edilmesi gereken bit pattern'i oluşturacaksın. Doğru mudur? Öyleyse silmeye de gerek kalmayacak. Güzel yöntem olur ama byte değerini hesaplamak o kadar kolay olur mu, başlangıç ve bitiş bitleri aynı byte'a denk gelirse ne olacak gibi soru işaretleri var benim kafamda. Doğru anlamış mıyım?
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #326 : Haziran 01, 2017, 01:41:28 ÖÖ »

Evet, aynen dediğin gibi. Byte byte ilerlemeyi ve silmekten kurtulmayı düşündüm. Bu gecelik enerjim kalmadı, daha optimize edilecek potansiyeli olduğunu düşünüyorum, 170 byte olmasa da, sanırım en kısa dolu yıldız bu oldu şimdilik. Dirty trick içermiyor, gayet temiz kod, dolu yıldız.

188 byte

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs(((a-(yand56)*40)and504)+p-160)*2/3
3 d=d*2+((w*4<y)*(w>y-48)or(y>26)*(w<48-y)):nextp,a

Burada lineer olarak adresten ilerleyip, yaptığımız işlemin tam tersini yapıp, adresin karşılık geldiği x ve y değerini buluyorum. İlgili x,y noktasının dolu olup olmayacağını da başka bir formül belirliyor ki senin örnekte olduğu gibi, noktanın yıldızın içerisinde kalıp kalmadığını kontrol ediyor. Elimde 8 bitlik data biriktiği anda pokeleyip devam ediyorum... Açıkçası ben daha kısa olacağını düşünmüştüm. Belki kısalabilir yarına...
« Son Düzenleme: Haziran 01, 2017, 01:44:11 ÖÖ Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #327 : Haziran 01, 2017, 01:47:10 ÖÖ »

*2/3 kısmını atıp 4 byte kısaltmak mümkün ama proporsiyon bozulduğu için şimdilik tercih etmedim.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #328 : Haziran 01, 2017, 01:51:13 ÖÖ »

Not: Burada bir trick kullandım. Herhangi bir (bool and bool) şeklinde ifade, (true and true)=-1 olacağı için, and yerine * kullanarak, (true * true)=1 şeklinde 2 byte tasarruf edilebiliyor. Hemde -1 yerine 1 veriyor olması da bir avantaj, lazım olursa...

Bunun bir de yukarıda ki örnekte bir avantajı daha var.
and kullansaydım, andleri izole etmek için ekstra () gerekecekti. * numeric işlem olduğu için, and'e göre () istemiyor.
« Son Düzenleme: Haziran 01, 2017, 01:52:48 ÖÖ Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #329 : Haziran 01, 2017, 01:59:01 ÖÖ »

Yukarıdaki notu yazarken kafamda bir şimşek çaktı ve biraz daha kısaldı. Yukarıdaki ek bir bilgi olarak kalsın ama bunu kullanmıyor olmak daha efektifmiş. Kahkaha

184 byte...

Kod:
1 poke53265,59:poke53272,24:fora=0to3e3:poke8191+a,d:y=int(a/320)*8+(aand7):d=0
2 print:forp=0to7:w=abs(((a-(yand56)*40)and504)+p-160)*2/3
3 d=d*2-(w*4<yandw>y-48ory>26andw<48-y):nextp,a
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Sayfa: 1 ... 20 21 [22] 23 24 ... 30   Yukarı git
Yazdır
Gitmek istediğiniz yer: