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 ... 5 6 [7] 8 9 ... 30   Aşağı git
Yazdır
Gönderen Konu: C64 BASIC Kısa Kod Yarışması - irqHack64 Ödüllü  (Okunma Sayısı 238121 defa)
0 Üye ve 3 Ziyaretçi konuyu incelemekte.
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #90 : Nisan 29, 2017, 20:00:25 ÖS »

İkinci sürümüm farklı çözüm (uzun kodun kısası)  Kahkaha

Asıl BASIC kodu

Kod:
0 INPUTS:FORX=0TO27:READD:POKE828+X,D:NEXT:SYS828
2 DATA 162,0,189,0,2,240,12,41
3 DATA 15,24,109,83,3,141,83,3
4 DATA 232,208,239,169,93,56,233,0
5 DATA 32,210,255,96

Assembler kod bölümü
Kod:
*=$033C

start
        LDX#$00
loop
        LDA$0200,x
        BEQ sonuc
        AND#$0F
        CLC
        ADC sonuc+4
        STA sonuc+4
        INX
        BNE loop
sonuc
        LDA #$5D
        SEC
        SBC #$00
        JSR$FFD2
        RTS
       

Basic dataları $033C ile başlayan adrese yerleştirilir. Input ile girilen değer $0200'dan işlenip sonuç yazılması için SYS828 ile çalıştırılır.


Ekran görüntüsü

« Son Düzenleme: Nisan 29, 2017, 20:08:40 ÖS Gönderen: emarti » Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #91 : Nisan 29, 2017, 21:23:11 ÖS »

Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görüyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor.
Logged
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #92 : Nisan 29, 2017, 21:40:21 ÖS »

Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görülyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor.
Bunun üstüne bir kafa yorayim skate. Bazı kernel rutinleri ile de denedim lakin çok uzun oluyor zaten uzun. O yüzden basic'ten input kolay geldi.
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #93 : Nisan 29, 2017, 22:03:27 ÖS »

Toplama yerine xor ile cozum uretmek uzerine kafa yorduktan sonra fark ettim ki cbm basic deki ^ isareti xor degil ussu imis. Kahkaha c de xor bu operator. Isim icabi pascal c ve assembler arasinda gidip gelirken bir de yillar sonra ilk goz agrim basic girince isin icine kafa daginikken karisiyor syntaxlar...
Logged

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


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #94 : Nisan 29, 2017, 22:39:47 ÖS »

CBM Basic'de XOR'un alternatifi de yok (en azından C64'ün kullandığı versiyonda). Benim nice tricklerimi öldürüyor şerefsiz CBM Basic. Interpretted language'e uyuz oluyorum. Mesela next'in işlevini gören ve ekstra bir işe yarayan ROM callları yapmak istiyorum. Ama for komutu olacak şerefsiz next'i string olarak search ediyor. Next'e kadar olan alanı string olarak alıp ona göre loop ediyor iç bloğu da tekrar intrepretter'dan geçirerek. Boynu altında kalsın bu şerefsiz basic'in. Tüm optimizasyonlarıma kapalı. Kahkaha
Logged
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #95 : Nisan 30, 2017, 01:08:00 ÖÖ »

Asm kullandığın durumda input komutunu basic'den kullanmana gerek yok. jsr $abf9 ile o kısmı da Assembly'e taşıyabilirsin. Ama parametresiz çağırdığın için basic'e döndüğünde arıza çıkarabilir, denemek lazım. Örneğin basic'de sadece "input" olarak da kullanabiliyorsun ve bizim işimizi görüyor, $0200'e yazılıyor değerler. Ama angut interpretter parametre göremediği için input'u aldıktan sonra syntax error veriyor.

@skate abi jsr$abf9 ile ?syntax error olayı oluşsada turin dediğin gibi çalışıyor. asm'nin byte sayısı da az oluyor. Lakin syntax error sinir bozucu. JSR$CHRIN ($FFCF) kernel rutini ile klavyeden girişleri istediğimiz bellek adresinde saklayabiliyoruz. Bunu denedim INPUTtan kurtuldum.

Yeni 3. sürüm BASIC kodum ve karşılığı ASM aşağıdadır.

BASIC
Kod:
0 FORX=0TO48:READD:POKE828+X,D:NEXT:SYS828
2 DATA 169,63,32,210,255,160,0,32
3 DATA 207,255,153,108,3,200,201,13
4 DATA 208,245,162,0,189,108,3,201
5 DATA 13,240,12,41,15,24,109,103
6 DATA 3,141,103,3,232,208,237,169
7 DATA 93,56,233,0,32,210,255,96,0

ASM
Kod:
*=$033C

start
        LDA#$3F
        JSR$FFD2
        LDY#$00
l1
        JSR$FFCF
        STA sakla,Y
        INY
        CMP#$0D
        BNE l1

        LDX#$00
l2
        LDA sakla,X
        CMP#$0D
        BEQ sonuc
        AND#$0F
        CLC
        ADC sonuc+4
        STA sonuc+4
        INX
        BNE l2
sonuc
        LDA #$5D
        SEC
        SBC #$00
        JSR$FFD2
        RTS
     
sakla
        BYTE $00

Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #96 : Nisan 30, 2017, 04:44:34 ÖÖ »

Süper, eline sağlık.
Logged
maverick
Deneyimli
*****
Mesaj Sayısı: 764



Üyelik Bilgileri
« Yanıtla #97 : Nisan 30, 2017, 14:56:20 ÖS »

Aynen dediğiniz gibi ne olduğunu anlamak için şöyle bir kod eklemesi yapmıştım kendimce.

Kod:
0 inputa:fori=0to8:t=t+peek(2^9+i):printi;") ";"477 -";t;"=";477-t:next

Çıkan neticelerden karşılaştırmalar yaptım ama pek bir anlam çıkaramamıştım yine de

Skate 'in yazdığın koddan sonra bize düşen o kodu nasıl kısaltırız ona kafa yormak olacak galiba 

Ayrıca çok eğitici ve güzel bilgiler mevcut. Tebrikler SKATE!



Logged

| Amiga 1200 | C= 64 | PS1 | PSone | Commodore Dergileri |
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.789


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #98 : Mayıs 02, 2017, 16:12:18 ÖS »

Yarışmnın amaçlarından biri de aynı işi yapan alternatif yöntemleri görmekti. Bu yüzden ilk dakikalarda süper kısa bir cevap gelmesine rağmen alternatif cevaplarla başlığa katkıda bulunan herkese özellikle teşekkür ediyorum.

delimawi'nin Skate'in cevabını 1 karakter kısaltan cevabını geçerli kabul ettiğimi de söylemiş olayım. Daha iyisi gelmezse o kazanıyor yani.

@wolfiem senin cevap nasıl olduysa aradan kaynamış. Listeye ekledim. Başığın ilk mesajındaki linkten disketin son halini indirebilirsin.
Logged

wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.789


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #99 : Mayıs 05, 2017, 22:12:00 ÖS »

İkinci sorunun ek kısa cevabı delimawi'ye ait. Sonuc disketini hazırlıyorum ama biraz vakti var. Sizi bekletmeden üçüncü soruyu vereyim.

Üçüncü soru: n basamaklı rastgele sayı

0<n<10 olmak üzere girilen rakam için: n basamaklı, her basamağı birbirinden farklı ve sıfırla başlamayan rastgele bir sayı üretin.
Programınızın n'in koşullara uymadığı kontrol etmesine gerek yok. Üretilen rastgele sayının dağılımı önemli değil. Yani RND() fonksiyonun ürettiği sayılar yeterli.
Logged

i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #100 : Mayıs 05, 2017, 23:26:00 ÖS »

Kod:
1 inputn
2 x=int(n*rnd(1)):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

daha kısası mutlaka vardır ama maksat katılım olsun.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
emarti
Uzman
*****
Mesaj Sayısı: 2.592


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #101 : Mayıs 05, 2017, 23:42:35 ÖS »

Kod:
1 inputn
2 x=int(n*rnd(1)):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

daha kısası mutlaka vardır ama maksat katılım olsun.

Abi kodlamada ilk rakamın 0 olma ihtimali var.
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #102 : Mayıs 05, 2017, 23:52:36 ÖS »

Abi kodlamada ilk rakamın 0 olma ihtimali var.

Şöyle yapalım o zaman
Kod:
1 inputn
2 x=int(n*rnd(1)+1):ifa(x)<>0goto2
3 i=i+1:a(x)=i:printx:ifi<ngoto2

ps: 1 seed'i bilgisayarı açınca en azından ilk sayıyı sıfır getirmiyor diye düşünüyordum ancak bu da kural ihlali olur biraz.
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.789


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #103 : Mayıs 06, 2017, 00:08:58 ÖÖ »

Senin program rakamları satır satır veriyor. Tek bir sayı olarak yan yana yazması lazım.
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #104 : Mayıs 06, 2017, 00:12:57 ÖÖ »

Şimdilik şu dursun, daha kısası yolda...
Kod:
0 inputn:fori=0ton-1
1 a=int(rnd(1)*10):if(2^a)andtthen1
2 b=b*10+a:ifb=0then1
3 t=t+2^a:next:printb
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Sayfa: 1 ... 5 6 [7] 8 9 ... 30   Yukarı git
Yazdır
Gitmek istediğiniz yer: