Gönderen Konu: Z80 Makine diline meraklı olan?  (Okunma sayısı 104455 defa)

0 Üye ve 4 Ziyaretçi konuyu incelemekte.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Karakter setiyle oynamaya devam.
« Yanıtla #30 : 21 Ocak 2014, 20:06:41 »
Spectrumun karakter setini başaşağı çeviriyoruz. Güle güle kullanın.

Kod: [Seç]
;------------------------------------------------;
; SPECTRUM FONT - 02
; 21-01-2014
; Horizontal mirror char set
; Program uzunluğu 35 Byte
;------------------------------------------------;
org $8000 ;Program $8000(32768)den başlıyor


ld ix,$3d00 ;Romdaki karakter seti başlangıç adresi
ld hl,newchar+7 ;Yeni karakter setinin başlangıç adresi
ld de,16 ;Yeni ram adresi için eklenecek değer
ld c,96 ;Toplam karakter sayısı
loop01 ld b,8 ;Karakter byte sayacı
loop00 ld a,(ix+0) ;Romdan karakter datasını oku
ld (hl),a ;Ram'e yaz
inc ix ;Rom adresini 1 arttır
dec hl ;Ram adresini 1 azalt
djnz loop00 ;byte sayacını 1 azalt. Sıfır değilse işlemleri tekrarla
add hl,de ;Yeni Ram adresini elde et
dec c ;Karakter sayacını 1 azalt
jr nz,loop01 ;Sıfır değilse işlemleri tekrarla.
ld hl,newchar ;Yeni karakter setinin başlangıç
dec h ;adresinin 256 eksiğini
ld (23606),hl ;sistem değişkenine yükle
ret ;bitir.

org $8100
newchar
end $8000


Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #31 : 22 Ocak 2014, 16:11:43 »
Tüm döküman ve örnekler için teşekkürler Hades. Ayrıca Ref'e de development enviroment ile ilgili paylaşımı için teşekkür ederim.

Ben dün gece çalışmalara başladım. Amstrad CPC için CTRL+F9 ile doğrudan emülatörde sonucunu görebildiğim bir dev env kurdum kendime. İnternette bu konuda çok başarılı bir tutorial var. Bkz:

http://pushnpop.net/articles-76.html

Epey bir yol kat ettim. Başlangıçta 464 ve 6128 arası farklılıkları bilmediğim için epey bir gol yedim. Sonra bunları da öğrendim ve problemlerimi çözdüm. İlk fırsatta (umarım bu akşam) C64'de yapıp henüz yayınlamadığımı bahsettiğim bir efektimi CPC'ye port etmiş olucam. Özellikle hız farkını çok merak ediyorum. Bakalım CPC'de ilk yaptığım versiyon C64'den ne kadar daha hızlı olacak ve z80'in derinlerine indikçe en son ne kadar daha optimize edebilicem.

Bu birinci yöntem. Bununla tamamen speed optimization tricklerini öğrenmeyi planlıyorum. İkinci olarak da 256b ya da altı bir size'da bir efekt yapmayı deneyeceğim. Bu sayede de size optimization tricklerini öğrenmiş olucam. Sonrasında işi daha ileri götürüp götürmeyeceğim şu an için muallakta. Ama hazır başlamış ve bir gecede epey bir şey yapmışken olayı en az bu dediğim aşamalara kadar ilerleteceğim kesin.

Bu arada 256b derken CPC'nin ürettiği executableların headerlarını falan katmıyorum işin içine. Benim bahsettiğim yazdığım kodun size'ını 256b'da tutmak. Yoksa şimdilik scene'de yayınlanacak bir ürünün derdinde değilim.

Hades'e bu başlığı açarak verdiği gaz için tekrar teşekkürler. Ne zamandır Amstrad CPC'ye dalmak istiyordum. :)

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 179
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #32 : 22 Ocak 2014, 20:17:55 »
İlk fırsatta (umarım bu akşam) C64'de yapıp henüz yayınlamadığımı bahsettiğim bir efektimi CPC'ye port etmiş olucam. Özellikle hız farkını çok merak ediyorum. Bakalım CPC'de ilk yaptığım versiyon C64'den ne kadar daha hızlı olacak ve z80'in derinlerine indikçe en son ne kadar daha optimize edebilicem.

İkinci olarak da 256b ya da altı bir size'da bir efekt yapmayı deneyeceğim. Bu sayede de size optimization tricklerini öğrenmiş olucam.

Ne zamandır Amstrad CPC'ye dalmak istiyordum. :)

Sabırsızlıkla bekliyoruz..
Bu arada bir CPC grubu kurulur mu diye sorsam erken mi olur?

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #33 : 22 Ocak 2014, 20:30:43 »
Her şeye uzun uzun cevap yazarım normalde ama bu sefer şununla yetinicem. Evet, erken olur. :)

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #34 : 22 Ocak 2014, 21:34:58 »
Her şeye uzun uzun cevap yazarım normalde ama bu sefer şununla yetinicem. Evet, erken olur. :)

Forum tartışması başlığında hep söylemek istedim ama bir türlü yeri gelmemişti, bu forumda "wall of text" çok sevilen birşeydir. Kendinizi tutmayınız, yazınız. Okuyanlar, TLDR de yapmayalım, konu ilginizi çekiyorsa okuyalım.

Bu sefer kısa olsun ama bir dahaki sefere gerekçeli cevaplar bekliyoruz Skate :) eheh..

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #35 : 23 Ocak 2014, 01:01:07 »
Geçekçe basit. Örneğin ben Atari 800XL'e epey bir daldım ve şu anda C64'ün 5'te 1'i kadar olsa da Amstrad CPC'nin en az 100 katı kadar hakimim Atari 800XL donanımına. Ama buna rağmen C64'de yaptığım 256b'lık rottoprojo64'ü Atari'ye zar zor 384b olarak port edebildim (ki ikisi de 6502 tabanlı biliyorsunuz). Sonra JAC! bir Atari scener'ı olarak kalktı benim 384b'ı alıp 256b'a sıkıştırdı rottoprojoXL diye. Bana sorsanız "imkansız" derdim ve bunu diyebilmek için de çok mantıklı gerekçelerim vardı. Ama elbette ki o benim C64'e kıyasla bilmediğim 5'te 4'lük kısım JAC!'ın kısa sürede bunu başarmasını sağladı. Gerçi o adam da bence normal değil, her Atari scener'ı da başaramazdı. O herif de süper hayvan bir coder.

JAC!'ın Pouet Profili: http://www.pouet.net/user.php?who=4177
JAC!'ın kodladığı aşmış bir 8-bit development toolu: http://wudsn.com/

Yani bir platforma yeterince hakim olmadığınız zaman her zaman elinize almaya mahkumsunuz. :) Bu saatten sonra "bakın intro kodladım, scroll bile geçiyor!" diye scene grubu kurmayı kendi açımdan son derece anlamsız buluyorum. Kısa sürede Batman Forever'ı devirecek bir demo çıkaramayacağım da kesin. Bu nedenle "şu aşamada erken olur" diyorum. İlerde Amstrad CPC'de o güne kadar yapılmamış orjinallikte ya da teknik kalitede bir efekt yapacak hale gelirsem artık grup mu kurarım, bir gruba mı girerim, Plush'a CPC section mı açarım, kendi adıma mı yayınlarım, o zaman karar veririm. Şu an için scene'de kimsenin benim ekrana nasıl kernel rutinlerini kullanmadan daha hızlı dot bastığımı merak ettiğini sanmıyorum. :) Retrojen bence bu aşamalar için güzel bir paylaşım platformu olabilir. İşe scene'i bulaştırmaya gerek yok. Yoksa sonuç;

http://www.akaydin.com/zamazingo/

Tecrübe konuşuyor. :)

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #36 : 23 Ocak 2014, 04:57:38 »
Sabahlarken öğrendiğim şeyleri sizinle paylaşmak istiyorum.

1) Daha önce linkini verdiğim tutorial'da snapshot dosyası inject edilerek emülatörden yükleme yapıldığı taktirde kernel call yapılamıyor. Bu nedenle uzun süre herşeyin native metodunu bulmam gerekti ve bu beni çok zorladı.

Örnek:
Kod: [Seç]
ld a,2
call $bc0e

diyebileceğim yerde;

Kod: [Seç]
ld bc,$7f00 ; Gate array port'u oluyor kendileri
ld a,$10001110 ; Alt 2 bit grafik modu (yukarıdaki örnekteki ld a,2'dekine denk)
out (c),a ; Port'a gönder

yapmak zorunda kalmıştım. Ama uzun süre bu sıkıntıyı çektikten sonra bir şeyi fark ettim. Bunun tek nedeni diskten yükletmiyor, snapshot'ı çakıyor olmamdı. Sanırım başta bir kez ROM->RAM aktarımı gibi bir şey oluyor, snapshot'dan yükletildiğinde eğer o bölge sıfırlarla doluysa üzerine yazılıyor v.s. Tam olarak sebebini anlamamış olsam da sorun bundan kaynaklı. Debugger'dan bakıldığında snapshot'dan yüklenmiş durumda $b900 sonrası boş gözükürken diskten yüklendiğinde dolu gözüküyor.

2) Tutorial'ın sorunlu olduğu bir yer var. O da disk oluşturmak için cpcfs'in kullanıldığı yer. cpcfs kesinlikle tutorialdaki parametrelerle çalışmıyor. Başka versiyonu bulurum demiştim ancak çoktan discontinued olmuş o proje. Biri kalkmış cpcxfs diye bir versiyonunu yapmış. Ama o da binary'i istediğim şekilde disk'e yerleştirmemi sağlayamadı. En son alternatif olarak iDSK diye bir tool buldum. Süper bir tool ve işimi çözdü.

https://code.google.com/p/cpcsdk/downloads/detail?name=iDSK_015.7z&can=2&q=

Tutorial'a ait dosyalarda CreateDSK.bat'ın içindeki;

Kod: [Seç]
cpcfs Generated\%1% f
cpcfs Generated\%1% p -e -b Generated\Main.bin,0x100,0x100
satırlarını iDSK'i ve yanında gelen dll dosyasını cpcfs.exe'nin bulunduğu klasöre kopyaladıktan sonra;

Kod: [Seç]
iDSK Generated\%1% -n
iDSK Generated\%1% -i Generated\Main.bin -f -e 100 -c 100 -t 1
şeklinde değiştirmeniz yeterli olacaktır.

Artık snapshot değil doğrudan disk imajından auto run ediyor ve kernel calllarını yapabiliyorum.

Bu gece efekti kodlamaktan çok bunlarla uğraştım. Ama hem kernel disabled olduğu durumda yapmam gerekenleri öğrenmiş oldum, hem de platforma ve development tool chainine daha da aşina olmuş bulundum.

Önümüzdeki gecelerde efekt ortaya çıkacaktır, artık pek engel kalmadı. :)

Not: Yukarıda yanlış anlamış olabileceğim yerleri bilen biri düzeltir ve açıklarsa sevinirim. Örneğin snapshot dosyasından yüklendiğinde kernel call yapılamaması durumunu doğru anlamış mıyım, emin değilim.

Çevrimdışı Alco

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2133
  • "Kahraman olmak, dürüst olmaktan kolaydır" Luigi P
    • Sizin Amstrad
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #37 : 23 Ocak 2014, 12:14:17 »
2) Tutorial'ın sorunlu olduğu bir yer var. O da disk oluşturmak için cpcfs'in kullanıldığı yer. cpcfs kesinlikle tutorialdaki parametrelerle çalışmıyor. Başka versiyonu bulurum demiştim ancak çoktan discontinued olmuş o proje. Biri kalkmış cpcxfs diye bir versiyonunu yapmış. Ama o da binary'i istediğim şekilde disk'e yerleştirmemi sağlayamadı. En son alternatif olarak iDSK diye bir tool buldum. Süper bir tool ve işimi çözdü.

https://code.google.com/p/cpcsdk/downloads/detail?name=iDSK_015.7z&can=2&q=
ManageDSK'yı denedin mi? Pek ihtiyaç duymasam da gerekince bunu kullanıyorum.

Bir de DSKları yazmak-okumak-yönetmek-oluşturmak için elinin altında mutlaka kurulu olması gereken CPCDiskXP var. DSK editor kısmından NEW diyip sonra da ADD Files ile istediğin dosyaları eklersin. Kısacası bununla DSK üzerinde her tür numarayı çekebilirsin.

Eğer bunları deneyip de beğenmediysen sebeplerini öğrenmek isterim.




Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #38 : 23 Ocak 2014, 12:37:06 »
@Alcofribas: Şu anda Mac üzerinde olduğum için direk test edemedim ancak bu tür toolları hep GUI'li bildiğim kadarıyla. Command line parametreleri ile çalışıyorlar mı bilemiyorum. Ancak iDSK tam istediğim gibi command line'dan herşeyi yapabiliyor, zaten console tool'u. Söz konusu olan compile dediğim anda tüm tool chaininin otomatik çalışıp emülatör'de DSK'nın yükletilip çalıştırılması olduğu zaman GUI'li toollar işimi görmüyor. Başka zamanlarda kullanışlı olduklarına eminim tabii ki.

Çevrimdışı Alco

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2133
  • "Kahraman olmak, dürüst olmaktan kolaydır" Luigi P
    • Sizin Amstrad
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #39 : 23 Ocak 2014, 13:03:20 »
@Alcofribas: Şu anda Mac üzerinde olduğum için direk test edemedim ancak bu tür toolları hep GUI'li bildiğim kadarıyla. Command line parametreleri ile çalışıyorlar mı bilemiyorum.
Her ikisi de CL destekliyor. Ekte info-readme dosyaları var. Ama seni iDSK kadar mutlu eder mi bilemem. Daha sonra başka tecrübelerin olursa onları da duymak isteriz.

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #40 : 23 Ocak 2014, 13:20:28 »
ManageDsk eğer dökümantasyonu eksik değilse binary dosya eklerken start ve execute adres belirtmemize izin vermiyor. Belki başka bir çözümü vardır ama dediğim gibi iDSK çok temiz, parametreler derli toplu. Örnek vereyim cpcfs'de parametreler şu şekilde.

Kod: [Seç]
cpcfs Generated\%1% p -e -b Generated\Main.bin,0x100,0x100

şimdi burada hangi parametre start address, hangisi execute address bunu göremiyorsun bile. Ezberlemek lazım. Virgülden sonra ilki şu, ikincisi şu falan filan.

Kod: [Seç]
ManageDsk -C -A*.BIN -Stoto.dsk
boşluksuz ve case sensitive parametre kullanımı ( hiç haz etmem :) ), start, execute adresler için bir parametre bulunmaması (en azından dökümantasyonunda eksik) v.s.

Kod: [Seç]
iDSK Generated\%1% -i Generated\Main.bin -f -e 100 -c 100 -t 1

herşey parametrelere bölünmüş, case sensitive değil, cillop gibi. :)

Bu bağlamda hoşuma gitti. GUI'si olmaması da daha lightweight bir tool olmasını ve "bu ancak arayüzden yapılabiliyor, command line'da karşılığı yok" gibi ihtimalleri ortadan kaldırıyor.

Çevrimdışı matahari

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 209
    • The Blog of Mert Börü
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #41 : 23 Ocak 2014, 13:26:03 »
Merhabalar,

"Z80 Makine diline meraklı olan?" başlığını görünce hiç üzerime alınmadım. Ne de olsa benimki meraktan da öte :P

Her ne kadar yeni projemle ilgili olarak haftanın 7 günü yoğun-ötesi çalışsam da, dayanamayıp bu reply'ı yazmak zorunda hissettim kendimi. Z80 bağımlısı olmak böyle birşey  ;)

Haddim olmayarak, bu başlık altında paylaşılan bulguların/bilgilerin çok dağınık olduğunu belirtirsem, umarım bana kırılmazsınız. hades'in Z80 komut seti listesi ve Spectrum karakter seti ile ilgili örnekleri, Skate'in Amstrad için kod geliştirme ortamına aşina olma çabası, Ref'in Spectrum için kullandığı araç zincirini dağıtılabilir hale getirdiği paket, ve üstüne tuz biber olarak Alcofribas'ın Amstrad kasetçalar mod videosu... Emeği geçen herkese teşekkürler. Herşey iyi niyetle kaleme alınmış ve fakat birbirine karışmış durumda. Takip etmekte zorlandığımı itiraf etmeliyim.

@Skate:

Öncelikle, seni çabalarından dolayı gönülden kutluyorum. İlk Amstrad intronu/demonu heyecanla beklediğimi belirtmek isterim.

http://pushnpop.net/articles-76.html adresindeki Amstrad kod geliştirim ortamını/yöntemini kullanıp kullanmamak, tamamen yiğidin yoğurt yeme tarzı ile ilintili. "Senin gibi tecrübeli bir yazılımcının bir bildiği vardır" diyerek burnumu sokmayacağım. Çok daha basit yöntemler varken, neden kod yazma > derleme > disk oluşturma > iDSK > autorun > WinAPE benzeri bir zincirleme reaksiyon kurduğunu merak ettim. Bu yöntemin diğerlerine göre bir avantajı mı var? Paylaşırsan sevinirim.

@all_forum_members:

Bu başlığı takip eden ve Amstrad üzerinde kod yazmak isteyenlere fikir vermesi açısından, izninizle kendi kod geliştirme ortamımı/yöntemimi paylaşayım. İşinize yarayabilir...

- Amstrad için PC üzerinde kod yazıyorsam, sadece WinAPE kullanıyorum! WinAPE'in içindeki editörde (F3) kodumu yazıp, assemble edip, gereken satırlara breakpoint koyup kodu çalıştırıyorum. Eğer hafızada debug/disassemble etmem gereken bir yer varsa, pause (F7) ile dondurup tüm registerları/belleği inceleyebiliyorum. - Bu süreçte, WinAPE dışında başka hiçbir programa ihtiyacım olmuyor. Less is more ;)

- Amstrad için Amstrad üzerinde kod yazıyorsam, 30 yıl öncesine geri dönesim gelmiş demektir. Bu durumda açıyorum 6128'i, yüklüyorum HiSoft Devpac assembler'ı, başlıyorum eski usül kod yazmaya. Eğer kod çalışırken debug etmem ve/veya breakpoint eklemem gereken bir yer varsa, onu 6128'in arkasına takılı olan Multiface II ile hallediyorum. - (NOT: Bu nostaljik yöntemi, efektif olmaması açısından tavsiye etmiyorum. Ancak bazı durumlarda kaçınılmaz oluyor. Örneğin, şu anda mevcut olan hiçbir Amstrad emülatörü cycle-precise değil. Kaset yükletme, port okuma, vs. türü hassas işlemler için zorunlu olarak bu yöntemi kullanıyorum.)

@Skate:

Gate Array için "firmware vs low-level port programming" konusu ile ilgili olarak, Retrojen Sayı 0 ve Sayı 1'de kaleme aldığım çalışmalara bir gözatmanı tavsiye ederim. Örneğin; Sayı 1, sayfa 9, sütun 2, "Mercek Altında" başlığında RMR register'ına firmware'i aşarak nasıl eriştiğimizi görebilirsin. Hem sabahlamana gerek kalmaz, hem de üstte verdiğin kod örneğindeki RMR register'ına %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! Firmware ile ilgili yaşadığın sorunlardan bu şekilde kurtulayım derken, farkında olarak/olmayarak RMR register'ında neleri set ettiğine dikkat etmende fayda var.

Madem Amstrad üzerinde 256 byte işine soyundun, o zaman ilk optimizasyonu hemen yapalım ;)

Kod: [Seç]
ld bc,$7f00
ld a,$10001110
out (c),a

yerine

Kod: [Seç]
ld bc,$7f00 + %10001110
out (c),c

yazarak 2 byte kazanabilirsin.

ÖNEMLİ NOT: Kodundaki $ (address pointer) işaretini % (binary) ile değiştirdim. İkisi farklı şey. Sanırım C64 ve/veya Amiga'dan kalma bir alışkanlık. Trace etmesi zor bir bug'a sebep olabilir.

Umarım faydalı olabilmişimdir.
Parity bit'iniz açık olsun...

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2882
  • Advanced User Simulator
    • ae unutmadan
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #42 : 23 Ocak 2014, 14:07:35 »
Matahari, seni bizi gözetlediğin daldan indirebilmiş olmak ne harika :) Bahsettiğin bir konu beni de ilgilendirdiği için cevap vermek istedim, aslında kendi cevabını kendin vermişsin, tabii bu durum CPC'ye tam oturmuyor.

Çok daha basit yöntemler varken, neden kod yazma > derleme > disk oluşturma > iDSK > autorun > WinAPE benzeri bir zincirleme reaksiyon kurduğunu merak ettim. Bu yöntemin diğerlerine göre bir avantajı mı var?

...

Ancak bazı durumlarda kaçınılmaz oluyor. Örneğin, şu anda mevcut olan hiçbir Amstrad emülatörü cycle-precise değil.

Normalde winape'in kod düzenleyicisinin bir benzeri ZX Spin'de bulunuyor. Senin dediğin herşey orda mümkün fakat cycle-exact değil. Diğer taraftan spectrum camiası bu konuda çok şanslı, elimizde birden fazla cycle-exact emülatör mevcut, bunların en kabul göreni de specemu. Bu sebepten emülatör üzerinde geliştirme yapmak yerine specemu'ya işi bağlamak gerekiyor.

Acaba amstrad üzerindeki geliştirme maceranı da pc<->amstrad bağlantısı yaparak değiştiremez misin? Skate'in zincirinin son halkasına diske göndermek yerine, seri porttan veri gönderen program eklesen mesela?

edit:

Alıntı
Herşey iyi niyetle kaleme alınmış ve fakat birbirine karışmış durumda. Takip etmekte zorlandığımı itiraf etmeliyim.

Kesinlikle katılıyorum, forum ortamı bu tür işler için uygun değil, wiki'yi kurdum, içini bu başlıktaki bilgileri toparlayacak şekilde dolduruyorum (elbette siz vaktiniz olduğunca yardım ederseniz daha bir anlamlı olur):

http://retrojen.org/wiki

Burada sadece deneyimler paylaşılmalı, dersler/tutorialler wikiye atılabilir.

Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 175
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #43 : 23 Ocak 2014, 14:23:25 »
@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. :D

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.

Alıntı
%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. ;)

Çevrimdışı matahari

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 209
    • The Blog of Mert Börü
Ynt: Z80 Makine diline meraklı olan?
« Yanıtla #44 : 23 Ocak 2014, 14:36:07 »
Acaba amstrad üzerindeki geliştirme maceranı da pc<->amstrad bağlantısı yaparak değiştiremez misin? Skate'in zincirinin son halkasına diske göndermek yerine, seri porttan veri gönderen program eklesen mesela?
@Ref:
(CC: @Skate)

Elbette, herşey mümkün.

Yıllar içinde edindiğim tecrübe, bana Occam'ın Usturası prensibinden (http://tr.wikipedia.org/wiki/Ockham'%C4%B1n_Usturas%C4%B1) şaşmamam gerektiğini öğretti. İster retro ortam olsun, isterse son model bir konsol... Kod geliştirme ortamımı mümkün olduğunca yalın tutmaya çalışarak, oluşması muhtemel sorunların sayısını azaltmış oluyorum. Aynı sonucu elde edebildiğim sürece, tercihimi basit ve yalın olandan yana kullanıyorum.

Amstrad için kod yazarken WinAPE'i tercih etmemin sebebi de bu. Evet, cycle-precise değil, ama işin %99'unu yapmak için yeter de artar. (Geri kalan %1'lik bölüm için zaten gerçek Amstrad üzerinde testlerimi yapıyorum.) Bu da hem işimi hızlandırıyor, hem de muhtemel bug'lardan beni uzak tutuyor.

İlk mesajımda belirttiğim üzere, her yiğidin yoğurt yemesi farklı  ;)