@Matahari: Kardeşim öncelikle ascii karakterlerine sağlık.
Emin ol development platformumu oturttuktan sonra en çok başını ağrıtacağım kişilerden birisin. Hatta bu mesajı yazdığına pişman bile olabilirsin. C64 programming öğrendiğim yıllarda Mert Hekimci (Digahole / Onslaught) bana yardımcı olmak istemiş, sonra çok pişman olmuştu. Ben adamı yakaldım mı bırakmam, sorularla bunaltırım.
Bu başlığın dağınık olduğu en başından birden fazla kişi tarafından belirtildi zaten, biri de bendim. Ancak ben bencilce bir hareketle start-up için yeterli gazı alıp sonra kendi yolumu çizdim. Çünkü zaten chip z80 olsa da örnekler ve development tool chain'i ZX Spectrum üzerineydi ve benim ilgim Amstrad CPC'yeydi.
WinAPE üzerinde doğrudan kod yazma mevzusuna gelince, bu senin de dediğin gibi benim genel development tercihlerimi karşılamıyor. C64'de de 10 seneyi aşkın bir süredir tamamen cross development kullanıyorum, buna emülatör üzerinde development yapmamak da dahil. Yani benim favori text editörümü açıp, tek bir compile tuş kombinasyonu ile sonucu görmem, label, macro v.s. kullanabilmem, compile aşamalarının arasına scripting dilleri falan sokabilmem lazım. Hatta Glance ile geliştirdiğimiz projelerde bildiğin makefile kullanıyorduk. Emülatör üzerinde kod yazmak bu nedenle benim açımdan pek ideal değil. Uyuşturucu bağımlılığı gibi birşey bu, bir kere alıştın mı bırakamıyorsun bu konforu.
Verdiğim linkteki tool chain'in özelliklerini inceledin mi bilmiyorum. Source code içersinden breakpoint koyabilmek gibi özellikler de içeriyor. Yani ben kodu derlemeden önce BRK_hello tarzı birşey yazıyorum kodun istediğim yerine, compile ettiğimde WinAPE o noktada breakpoint konulmuş şekilde beklemeye başlıyor. Yani emülatörü doğrudan kullanmıyor olmanın bu tür konularda bana kaybettirdiği bir şey de yok.
Bu arada incelemeden soruyorum, WinAPE'in içinde gelen tool label, macro kullanımına izin veriyor mu? Araya scripting dilleri sokabiliyor muyuz? Yoksa doğrudan hafıza adreslerine mi yazıyoruz? Bu yukarıda yazdıklarımı Vice ve diğer bildiğim birçok emülatörde de olduğu gibi doğrudan hafızaya yazdığımızı ön görerek belirttim.
Amstrad CPC üzerinde, yani emülatörün kendisinde olmayan, cihaz üzerinde emülasyonla çalışan label, macro destekli bir Assembler'ı da iki açıdan tercih etmem.
1) Emülatör içindeki klavye key map'ine alışmam gerekmesi.
2) Assembler'ın da hafızada yer kaplaması. Kartuş bile olsa source codeları RAM'e yazması gerekecektir diye tahmin ediyorum.
Ben hayatımda Amstrad CPC kullanmamış bir adamım. CPC'cilerin ezbere bildiği karakter map ve klavye düzenini bilmiyorum.
Sabahlama mevzusuna gelince, hiç kullanmadığın bir chip sete sahip hiç kullanmadığın bir donanım için cross development platformunu kendi ihtiyaçların doğrultusunda kurmak istiyorsan ve bu seni sabahlatmıyorsa çok doğru bir tutorial bulmuşsun demektir.
Benim bulduğum tutorial kusursuz olsa zaten sabahlamazdım. Disk toolunda bahsettiğim problem gibi alternatiflerini araştırmam gereken şeyler çıktı karşıma. Zaten snapshot'ı inject ettiğimde kernel call yapamıyor olmam ile ilgili birşey bulmam da çok kolay olmadı tahmin edersin. Çünkü;
1) Sebebin snapshot kullanımı olduğunu anlamak da zamanımı aldı. C64'de snapshot kullansan da kernel call yapabilirsin. Bunun nedenini hala tam anlamış değilim. ROM -> RAM aktarımı falan demem bu yüzden. Yani ancak kernel rutinleri ROM'dan RAM'a aktarılıyor, sonra snapshot bunları overwrite ediyorsa bu bana mantıklı geldi. Onun dışında sebebini anlayamadım. Biz C64'de kernel rutinlerini doğrudan ROM'dan çağırırız. Burada ya olay farklı işliyor ya da hala bana kimsenin açıklamadığı başka bir nedeni var ki bu konuda senden yardım bekliyorum Matahari kardeşim.
2) Snapshot sorununu algıladıktan sonra da Amstrad CPC için otomatik DSK oluşturup, binary'i start ve execute adresleriyle içine push edebileceğim bir tool araştırmam gerekti. Abi platformu daha önce hiç kullanmamışım. DSK yapısını bile bilmiyorum. Toolların bir kısmı discontinued. Elbette ki zaman alıyor araştırma yapmak.
%10001110 yüklemen durumunda sadece ekran mode'unu değiştirmekle kalmadığını, aynı zamanda Upper & Lower ROM'u da devre dışı bıraktığını ve interrupt counter'ı resetlediğini de görebilirsin!
Elbette ki bilmediğim birçok şey vardır ancak gate array portu konusunda dökümanları baştan sona okudum. Hatta snapshot olayının yarattığı sorunu uzun süre 2. ve 3. bitleri değiştirerek çözmeyi düşündüm, belki sorun ROM'ların disabled olmasından kaynaklanıyordur diye. Ama sorunun o olmadığını sonra fark ettim. Ben öğrenme aşamasında tutorial yazacak kadar ileri gitmem.
Bu nedenle de az önce dökümanda okuduğum tüm bitlerin anlamlarını belirtmedim source code commentinde. Demek istediğim üstekini alttaki gibi çözdümü vurgulamaktı.
Senin Retrojen'deki yazılarını elbette ki biliyorum, elimde hard copy olarak duruyor her iki sayı da.
Elbette ki hepsinden yararlanıcam zaman içinde. Ancak daha tool chainimi oturtma, opcodeları inceleme aşamasındayken ve bu işe iki akşamımı ayırmışken senin yazıların dahil okumam gereken yüzlerde dökümanı okumamış olduğumu tahmin edebiliyorsundur. Retrojen'in forumunda bunları tartışıp Retrojen'de yayınlanmış makaleleri okumamak çok ironik olurdu zaten.
Dediğim gibi Matahari kardeşim, olayı değerlendirirken sadece Amstrad CPC'ye değil z80'e de yabancı olduğumu aklında bulundurmanı isterim. Ben büyük bir keyifle keşfediyorum, takılıyorum. Öyle ciddi bir derdim de yok. Olsa zaten herşeyden önce seninle kontağa geçerdim "abi, şu bob rekorunu kırmamız lazım, akşama müsait misin?" şeklinde.