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)
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: basic sorusu  (Okunma Sayısı 7552 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
sbaslar
Üye
****
Mesaj Sayısı: 260



Üyelik Bilgileri
« : Ekim 20, 2010, 14:43:03 ÖS »

c64 de basic de basit bir program yazdık diyelim. bu programa bir de müzik eklemek istiyoruz. Ama  bilgisyar, satırları sıra sıra  okuduğu için müzik ile ilgili satırlar bitince müzik de  bitiyor haliyle. Arka planda  bir sesin sürekli çıkmasını nasıl sağlarız.  Yani hem program çalışaçak hem de arka planda aynı anda müzik  sürekli çalacak.  Var mı böyle birşey. ?
Logged
Cengiz Demir
Uzman
*****
Mesaj Sayısı: 3.828



Üyelik Bilgileri
« Yanıtla #1 : Ekim 20, 2010, 14:58:58 ÖS »

Çok fazla olmayan C64 basic programlama bilgime göre
o işler için basit çözüm sürekli döngü kurmak olur ki o zamanda programdan faydalanamazsın.
Profesyonelce bir çözüm için assembleri işin içine dahil etmen lazım



Logged

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


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #2 : Ekim 20, 2010, 15:11:04 ÖS »

Bunun için interupt kullanman lazım. Yani müziği çalacak olan assembler kodunu kodu belleğe yerleştireceksin. Sonra bu koda bir interupt atayacaksın ki Basic programımızla beraber çalışmaya devam etsin. Interurupt konusunu biraz araştırmanı öneririm.

Ha eğer kodum pure Basic olacak diyorsan ki SID'e komut vermek için illa ki Poke kullanman gerek. Bu da ne kadar pure Basic olur şaibeli. Programın normal işleyişinin arasında müzik çalan satırlara GOSUB ile dallanırsın. Bir nota çalar RETURN ile geri dönersin.
Logged

witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #3 : Ekim 20, 2010, 15:35:57 ÖS »

C64 Basic V2'de müzik çalmayı becerdiysen yetenekli sayılırsın

Interrupt'ları destekleyen bildiğim tek BASIC diyalekti Amstrad'ın Locomotive Basic'i idi. Onun dışındakilerde bu tarz işler bir hayli çetrefilli. Ya wizofwor'un bahsettiği şekilde interrupt kullanan makine dili bir program yazacaksın veya programın ana döngüsünde her çağrılışta bir kademe çalışan bir müzik altrutini hazırlayacaksın. Her ikisi de BASIC için biraz 'advanced' kalıyor.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #4 : Ekim 20, 2010, 15:54:29 ÖS »

doğrudan basic'den müzik çalmak mümkün, ben zamanında yapmıştım. ancak bu basic programının yapısına göre değişir. mesela arada bir uzun işlem yapan rutinler varsa buralarda müzik bozulmalara uğrayabilir. yapılabilecek en makul çözüm main loop içersinde bir alt rutinin maksimum ne kadar delay'e neden olabileceğini ölçüp müziğin hızını bu maksimuma uygun bir biçimde ayarlaman olacaktır. müzik çalma rutinin de içinde bir timer kontrolüne sahip olmalı ve her çağırıldığında değil, çağırıldığı zaman bir sonraki notayı çalma zamanı geldiyse SID komutlarını göndermelidir. bu sayede tamamen basicden bir çözüme gidebilirsin. tahminen müzik yavaş olacaktır ama iyi bir müzisyen bu şekilde de güzel bir müzik ortaya koyabilir.
Logged
sbaslar
Üye
****
Mesaj Sayısı: 260



Üyelik Bilgileri
« Yanıtla #5 : Ekim 21, 2010, 09:03:59 ÖÖ »

çok basit olmayacak anlaşılan. assembler ve interput neymiş küçük bir giriş yapayım en iyisi..  umarım hevesim geçmeden bir şeyler öğrenebilirim.
witchdoktor  , daha müzik denemez ama denemelerim devam ediyor. kolay olmayacağı kesin.  c64 ü seviyorum. amaç bir şekilde onunla vakit geçirmek Kahkaha eski günlerimi anı olarak değil, gerçekten yeniden yaşamak.
Logged
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #6 : Ekim 21, 2010, 11:13:57 ÖÖ »

sen heves et yeter ki sana çalışan bir örnek kodladım bile. tabii bu öğrenme hevesinden birşey götürmesin, aynen devam.

http://www.akaydin.com/c64/codes/skate/basic_music_play.zip

zipin içindeki d64'de 3 dosya var. dosyalardan biri $1000'den yükleyen bir müzik ve init adresi $1000, play adresi $1003 (en yaygın formattır). diğer dosya senin ihtiyacın olan basic'den assembler kodlarını oluşturan ve müziği çalan basic kodu. ilk dosya ise hiç güvenli olmamakla birlikte basic'den yazılmış bir loader. sırayla önce müziği yüklüyor, sonra acayip riskli bir biçimde kendi üstüne diğer basic kodunu yüklüyor (baştaki REM satırları yükleme sırasında çakışma olmasın diye) sonra da yeni yüklenmiş basic kodunu execute ediyor. bu loader'a hiç takılmayın, sadece müziği ve basic kodunu peş peşe yükletmekle uğraşmayın, kolaylık olsun diye yaptım, kötü bir örnektir.

bunun haricinde zip paketinde bas uzantılı dosyaları notepad'de açıp bakabilirsin, basic kodları onlar. Vice'ın yeni bir özelliği var son birkaç versiyondur. notepad'den copy ettikten sonra vice'ın basic ekranında mouse ile sağ tık yaptığında paste ediyor basic'e. kodları bu şekilde aktarman mümkün (gerçi d64'ün içinde aktarılmışları da var). Ayrıca ".a" uzantılı dosyayı da notepad'de açıp bakabilirsin. o da ACME source codeları. ACME cross assembler yükleyecek olursan, bu kodları derleyebilirsin. Örneğin müziğin başlangıç adresi, init, play adresleri farklıysa burada değiştirip, sonra basic'e data olarak aktarabilirsin. ama aslında bunu doğrudan bir daha compile etmeden basic datalarından yapmak da çok kolay. kullanmak istediğin müzik standart dışıysa bana haber ver, ben sana yardımcı olurum. kolay gelsin.
Logged
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: