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 ... 18 19 [20] 21 22 ... 30   Aşağı git
Yazdır
Gönderen Konu: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü  (Okunma Sayısı 243332 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #285 : Mayıs 28, 2017, 01:23:33 ÖÖ »

Aklımda bir yöntem daha var, özellikle baştaki silme loop'unu ortadan kaldırıyor, ama daha olgunlaştıramadım...
Logged

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


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #286 : Mayıs 28, 2017, 02:31:15 ÖÖ »

@delimawi: çok güzel bir yaklaşım. benim versiyon henüz 240 bytelarda. optimize edilmeye çok açık ama basic sağolsun epey zorluyor beni. 214 byte'a ineceğini düşünmüyorum bahsettiğim yöntemin. yine trigonometrik bir yöntem üzerinde uğraştığım.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #287 : Mayıs 28, 2017, 02:33:45 ÖÖ »

bu arada baştaki loop'u ben asm'de 3 opcode ile hallediyorum. ama basic'e aktarıldığında standart looptan daha uzun yer kaplıyor.
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #288 : Mayıs 28, 2017, 02:37:52 ÖÖ »

Pokelemek yerine dim array içine atmayı düşündüm. Bu sayede başlangıçta zaten 0 olcaktı. Ayrıca pokex,peek(x)orn  d(x)=d(x)orn haine geliyor. Ha en sonra bir loop ile yerine pokelencek. Bu avantaj da olabilir, işlemin bir kısmı bu sondaki loopa kaydırılabilir vb... Ama 10 elemandan büyük ise başta dim lamak gerekiyormuş. Bir de nedense dimladığım halde içi tamamen boş gellmiyor arrayin, yani o yöntem şimdilik yattı...
Logged

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


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #289 : Mayıs 28, 2017, 02:44:03 ÖÖ »

@delimawi: kernel'de 2-3 farklı yerde 256'lık alan dolduran yerler var. bunlar sys ile çağırılarak tek seferde 256 bytelık blok silebiliyor. hi byte'lar da zeropage'de yer alıyor. kısacası high byteları 32 kere saydırıp, sys ile çok hızlı bir biçimde ekran temizlemek mümkün. ama örneğin;

fori=32to63:pokeXX,i:sysXXXXX:next
fori=6^5to4^7:pokei,0:next

görüldüğü gibi daha kısa değil. hız dersen inanılmaz fark ediyor tabii ki.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #290 : Mayıs 28, 2017, 02:57:03 ÖÖ »

senin son paylaştığın yöntem şöyle 211 byte'a iniyor.

Kod:
0 s=56:y=24:poke53265,s:poke53272,y:fori=6^5to4^7:pokei,0:next:forj=0to4:readq,w
1 fori=0tos:x=x+q:y=y+w:c=~^8+40*(yands)+(yand7)+(xands):print
2 pokec,peek(c)or2^(7-(xand7)):nexti,j:data1,,-1,.7,.5,-1,.5,1,-1,-.7

Bu arada PI karakteri üs (^) karakterinin SHIFT ile basılan hali. Normalde Vice'da INS/DEL/HOME/END/PAGE UP/PAGE DOWN tuşlarının olduğu bölgeden çıkıyor genellikle. Bende DELETE tuşuna denk geliyor. SHIFT+DELETE ile test edebilirsin.

Vice'ın içinde gelen petcat.exe ile source'u derleyecek olursan da ~ karakteri PI çıkarıyor. petcat'in kullanımı şu şekilde.

Kod:
petcat -o output.prg -w2 input.txt
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #291 : Mayıs 28, 2017, 03:11:38 ÖÖ »

OK, teşekkürler, pi yi basar hae geldim. SHIFT+küçükDEL ile oldu. Notebookdayım bu arada. Zaten alternatif tuşlar Fn+Key oluyor, bir de SHIFT vb gelince tam çorba... Gel gelelim şu üzerinde uğraştığım yöntemde pi yok... :/
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.758


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #292 : Mayıs 28, 2017, 03:34:03 ÖÖ »

Notebookdayım bu arada. Zaten alternatif tuşlar Fn+Key oluyor, bir de SHIFT vb gelince tam çorba...
BIOS ayarlarında Fn tuşunun işlevini tersine çeviren bir ayar oluyor genelde.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #293 : Mayıs 28, 2017, 15:43:48 ÖS »

Partiden 193 byte ...

Kod:
0 s=56:y=24:poke53265,s:poke53272,y:fori=6^5to4^7:pokei,0:next:fori=1to320
1 c=~^8+40*(yands)+(yand7)+(xands):pokec,peek(c)or2^(7-(xand7)):x=x+cos(a)
2 y=y+sin(a):a=a-2.5*((iand63)=0):print:next
Logged

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


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #294 : Mayıs 28, 2017, 18:12:05 ÖS »

Partide delimawi ile bir araya gelince ortaya çıkan coop versiyon.

175 byte

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 c=~^8+320*int(y/8)+(yand7)+(xand56):pokec,peek(c)or2^(-xand7)
2 x=x+cos(a):y=y+sin(a):a=~*.8*int(j/64):print:j=j+1:goto1
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #295 : Mayıs 28, 2017, 23:20:57 ÖS »

-1 byte daha suyunu sıktım...

320*int(y/8) > 40*(-8andy)

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 c=~^8+40*(-8andy)+(yand7)+(xand56):pokec,peek(c)or2^(-xand7)
2 x=x+cos(a):y=y+sin(a):a=~*.8*int(j/64):print:j=j+1:goto1

Logged

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


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #296 : Mayıs 29, 2017, 05:26:13 ÖÖ »

173 byte ve artık 64x64'den büyük alana çizim yapılabiliyor (senin and-8'in sağolsun )

Kod:
0 poke53265,59:poke53272,24:fori=6^5to4^7:pokei,0:next
1 x=x-cos(a):y=y+sin(a):j=j+.01:a=~*.8*int(j):print
2 c=9896+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7):goto1

9896 yerine PI^8 kullanılarak 172 byte'a da iniyor ama azıcık yukarıdan croplanıyor. j=j+.01'i değiştirerek yıldızın boyutuyla oynayabiliyoruz ancak diğer değerler genellikle ya çok küçük, ya çok büyük oluyor.

Biraz daha üzerinde oynanarak 170 bytelar civarına getirilebilir bu, altına da inebilir.
Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.794


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #297 : Mayıs 29, 2017, 12:08:05 ÖS »

Soruyu ilk başta 24 pixel olarak kurgulayıp, örnek şekli çizen kodu hazırlarken 48'e pixel'e çıkartmıştım. Soruda 24 olarak kalmış. Siz de ekran görüntüsünü örnek aldığınıza göre soruyu gönül rahatlığıyla 48 pixel olarak günceliyorum.

Hazır elim değmişken örnek kodumu da yapıştırıyorum. 400'den itibaren yer alan PLOT rutinleri olduğu gibi Programmers Reference Guide'dan kopyadır.

Alıntı
0 PRINT "{clear}"
10 BASE=2*4096: POKE 53272,PEEK(53272)OR8: REM PUT BIT MAP AT 8192
20 POKE 53265,PEEK(53265)OR 32
30 FORI=BASETOBASE+2599:POKEI,0:NEXT:REM CLEAR BIT

99 REM CALCULATE
100 FOR X=0TO24 : Y=50-2*X : GOSUB 400 : NEXT
110 FOR X=25TO48 : Y=2*(X-24) : GOSUB 400 :NEXT
120 FOR X=0TO48 : Y=50-0.7*X : GOSUB 400: NEXT
130 FOR X=0TO48 : Y=34+0.7*(X-24) : GOSUB 400: NEXT
140 FOR X=0TO48 : Y=16 : GOSUB 400: NEXT

200 REM return to text mode
300 POKE 198,0: WAIT 198,1
310 POKE 53265,PEEK(53265)AND 223
320 POKE 53272,PEEK(53272)AND 247
330 END

399 REM PLOT
400 CH=INT(X/8):RO=INT(Y/8):LN=YAND7
410 BY=BASE+RO*320+8*CH+LN:BI=7-(XAND7)
420 POKEBY,PEEK(BY)OR(2^BI)
430 RETURN
Logged

Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #298 : Mayıs 29, 2017, 15:46:36 ÖS »

Proof of concept filled star. Üzerinde çalışacağım biraz.

Kod:
0 m=59:poke53265,m:poke53272,24:fori=6^5to4^7:pokei,0:next
1 fory=0to63:forx=-32to31:z=abs(x):if(z>lorz<-m)and(m>32orz>m)then3
2 c=9896+40*(yand-8)+(yand7)-(xand-8):pokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.2:print:next
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #299 : Mayıs 29, 2017, 16:21:17 ÖS »

Kendi çizim alanını temizleyen versiyon;

214 byte

Bu 170 bytelara düşmeyecek gibi görünüyor ama filled versiyon olarak dursun kenarda.

Kod:
0 m=59:poke53265,m:poke53272,24:fory=0to63:forx=-32to31
1 c=9896+40*(yand-8)+(yand7)-(xand-8):if(xand7)=0thenpokec,0
2 z=abs(x):if(z<landz>-m)or(m<33andz<m)thenpokec,peek(c)or2^(xand7)
3 next:l=l+.3:m=m-1.2:print:next
Logged
Sayfa: 1 ... 18 19 [20] 21 22 ... 30   Yukarı git
Yazdır
Gitmek istediğiniz yer: