Retro Sistemler > Amstrad
CPC'de Assembler ile imtihanım...
Fero:
Birkaç gün önce sevgili Alcofribas 'ın beni "Yan dal olarak CPC 'ci" diye tanımlamasıyla gaza gelip, "CPC 'de çalışacak birşeyler yapmalıyım!" diyerek Winape 'i açıp bir hışımla F3 'e bastım! Unity ile anlaşabilecek kadar C# ile C64 'de ekrana renkli yazı ve petscii koyabilmekten ibaret olan muhteşem(!) programcılık altyapım ile yaptığım pixel artları CPC 'de görüntülemek o kadar da zor olmasa gerekiyordu...
Ancak, işte kazın ayağı öyle değilmiş :)
Başta register'lar flag'lar falan derken herşey anlaşılır gibi görünse de, iş ekranda bir görsel oluşturmaya gelince beynim ufaktan arıza sinyalleri vermeye başladı. İlk önce anlam veremediğim bir şekilde ekranda görsel oluşturmak ile ilgili hangi taşın altına bakarsam bakayım, ya C ile Asm rutinlerini birlikte kullanmaktan, ya da görselleri SCR formatına dönüştürerek, LOAD"FILENAME.SCR",&C000 şeklinde belleğe almaktan bahsediliyordu. Ancak bunlar tam olarak aradığım şey değildi.
Yapmak istediğim şey bitmap'i bir şekilde kodun içine gömerek istediğim anda bir loopu çağırarak ekrana verebilmek. Örneğin aşağıdaki gibi bir görseli ele alalım. Sonradan üzerine müzik, yazı vs ekleyip bazı demo efektlerinde kullanabilmek için görseli SCR olarak dışarıdan yüklemek bana pek doğru ya da optimize bir yöntem değilmiş gibi geliyor. (öyle değil mi?) Bunun için nasıl bir yöntem izlemek daha doğru ya da daha optimize olur?
Konuyla ilgili üstatlardan yönlendirme talep ediyorum :)
Şimdilik cpcrulez.fr 'deki makaleleri google translate ile çevire çevire bakınıyorum. Henüz donanımın mimarisi ile ilgili ve makine dili konusunda temel seviyede bile bilgi sahibi değilim ancak coderlığa soyunmak gibi bir niyetim olmadığından şimdilik işimi görecek kadarıyla yetinmek en mantıklısı :)
Şimdiden teşekkürler.
Ref:
ben spectrumcuyum fakat aynı familyanın aletleri olduğu için yardımcı olabilirim. Yine de yanlış bir yönlendirme yapmamak için önce matahari ve alco'ya lafı bırakmak istiyorum.
Temel olarak, bir assembler ile (ben pasmo kullanıyorum) scr dosyasını include edip, zamanı gelince de veriyi ram'de uygun bir yere (ekran tamponuna) kopyalamaktan ibaret o iş.
matahari:
Merhabalar,
Öncelikle Retrojen Forum'a hoşgeldiniz!
--- Alıntı yapılan: Ref - 25 Kasım 2018, 12:39:30 ---Temel olarak, bir assembler ile (ben pasmo kullanıyorum) scr dosyasını include edip, zamanı gelince de veriyi ram'de uygun bir yere (ekran tamponuna) kopyalamaktan ibaret o iş.
--- Alıntı sonu ---
Ref'e katılıyorum. SCR dosyası illaki ekran adresine yüklenecek diye bir kural yok. Bu dosyayı hafızanın istediğiniz yerine yükleyebilirsiniz.
Örneğin, bu işi BASIC'te şu şekilde yapabilirsiniz:
--- Kod: ---MEMORY &3FFF
LOAD "FILENAME.SCR", &4000
--- Kod sonu ---
Aynı işlemi WinAPE Assembler içerisinde yapmak için incbin (include binary) direktifini kullanabilirsiniz.
(bkz: http://www.winape.net/help/assembler_directives.html)
--- Alıntı yapılan: Fero - 24 Kasım 2018, 04:15:10 ---Yapmak istediğim şey bitmap'i bir şekilde kodun içine gömerek istediğim anda bir loopu çağırarak ekrana verebilmek.
--- Alıntı sonu ---
Madem başlangıç seviyesinde Z80 Assembly language kullanıyorsunuz, o zaman LDIR komutu ile yola çıkabilirsiniz.
--- Kod: ---LD HL, $4000 ; Yukarıdaki örnekte kullandığımız tampon adres
LD DE, $C000 ; Amstrad CPC 464/664/6128 için ekran adresi
LD BC, 16384 ; Kopyalanacak byte sayısı
LDIR
--- Kod sonu ---
Elbette bu çözüm demo/oyun geliştirimi için çoğu kez yeterince hızlı değil. Ancak, işin mantığını kavrayabilmeniz açısından bir yerden başlamak gerekiyor. Kişisel görüşümce Z80 Assembly kodlamaya LDI, LDD, LDIR, LDDR, vb. komutlarla başlamanız faydalı olacaktır.
Fero:
--- Alıntı yapılan: Ref - 25 Kasım 2018, 12:39:30 ---ben spectrumcuyum fakat aynı familyanın aletleri olduğu için yardımcı olabilirim. Yine de yanlış bir yönlendirme yapmamak için önce matahari ve alco'ya lafı bırakmak istiyorum.
Temel olarak, bir assembler ile (ben pasmo kullanıyorum) scr dosyasını include edip, zamanı gelince de veriyi ram'de uygun bir yere (ekran tamponuna) kopyalamaktan ibaret o iş.
--- Alıntı sonu ---
Aslında bende öyle tahmin ediyorum ancak garip bir şekilde buna benzer bir örnek bulamayınca "acaba yanlış yolda mıyım?" diye bir şüpheye düştüm. Tabi şu anda yapmaya çalıştığım şey işi temelden öğrenmeye çalışmaktansa örnekler bulup oralardan mantığı anlamaya çalışarak kolaya kaçmak. O nedenle muhtemelen bir şeyleri kaçırıyorumdur. Sen söyleyince aklıma spectrum ile ilgili kaynaklara bakıp oradan fikir edinmek geldi. Biraz daha kurcalayayım :)
Fero:
--- Alıntı yapılan: matahari - 25 Kasım 2018, 14:44:26 ---Merhabalar,
Öncelikle Retrojen Forum'a hoşgeldiniz!
Ref'e katılıyorum. SCR dosyası illaki ekran adresine yüklenecek diye bir kural yok. Bu dosyayı hafızanın istediğiniz yerine yükleyebilirsiniz.
Örneğin, bu işi BASIC'te şu şekilde yapabilirsiniz:
--- Kod: ---MEMORY &3FFF
LOAD "FILENAME.SCR", &4000
--- Kod sonu ---
Aynı işlemi WinAPE Assembler içerisinde yapmak için incbin (include binary) direktifini kullanabilirsiniz.
(bkz: http://www.winape.net/help/assembler_directives.html)
--- Alıntı yapılan: Fero - 24 Kasım 2018, 04:15:10 ---Yapmak istediğim şey bitmap'i bir şekilde kodun içine gömerek istediğim anda bir loopu çağırarak ekrana verebilmek.
--- Alıntı sonu ---
Madem başlangıç seviyesinde Z80 Assembly language kullanıyorsunuz, o zaman LDIR komutu ile yola çıkabilirsiniz.
--- Kod: ---LD HL, $4000 ; Yukarıdaki örnekte kullandığımız tampon adres
LD DE, $C000 ; Amstrad CPC 464/664/6128 için ekran adresi
LD BC, 16384 ; Kopyalanacak byte sayısı
LDIR
--- Kod sonu ---
Elbette bu çözüm demo/oyun geliştirimi için çoğu kez yeterince hızlı değil. Ancak, işin mantığını kavrayabilmeniz açısından bir yerden başlamak gerekiyor. Kişisel görüşümce Z80 Assembly kodlamaya LDI, LDD, LDIR, LDDR, vb. komutlarla başlamanız faydalı olacaktır.
--- Alıntı sonu ---
Hoşbulduk,
Ref 'e cevap yazarken misafir gelince ben postu atana kadar epey süre geçmiş. Arada bu cevabı kaçırmışım, kusura bakmayın. Aslında Ref 'e de dediğim gibi biraz kolaya kaçmaya çalışıyordum. Layığı ile assembler öğrenmek için ciddi bir vakit ayırmam gerekiyor ancak bu lükse sahip değilim. O nedenle sadece örneklerden gördüklerimle birşeyler yapmaya çalışırken, bir yandan da demoya da uygun olsun diye garip bir optimizasyon derdine düşerek kendimle çeliştim :)
Bu yanıtlarınızdan sonra da kafamda birşeyler netleşmeye başladı. Dediğiniz şekilde ilerlemek aslında daha az yorucu ve daha faydalı olacaktır. @ref, @matahari Yanıtlarınız için teşekkürler :)
Navigasyon
[0] Mesajlar
[#] Sonraki Sayfa
Tam sürüme git