Bir süre sonra gelen EDIT: megaOne Beta Tanıtım Videosu
Tekrar merhaba,
Yıllar sonra geçen sene tekrar C64'ümün başına geçince, "Eeee, şimdi buna nasıl program yükleyeceğim?" sorusuryla karşı karşıya kalmıştım. Ne bir disket, ne 1541, ne de kaset hiçbirşey yoktu elimde. PIC ile bir kartuş emülatörü yaparım diye düşündüm. Nasılsa C64 1MHz hızında, ama PIC 64MHz, 16MIPS ile yaklaşık 16 kat daha hızlı çalışıyordu. C64, bir adres okumak istediğinde, PIC bu veriyi yetişriebilirdi ve sanki bir kartuş takılıymış gibi emülasyon yapabilirdim. Neyse uzun lafın kısası bu fikir yattı. PIC 16 kat hızlı çalışsa bile, datayı mediadan yada ROM dan okuyup yetiştiremedi. Bunun üzerine düşünürken aklıma DMA geldi ve oradan iş büyüdü Doberman ortaya çıktı.
Aslında Doberman klasik bir kartuş gibi çalışmıyordu. İçerisinde CPLD, uC, Flash vb vardı ve gene ucuz bir çözüm olamamıştı. Bir kaç hafta önce kartuş tufanının öncüsü, sevgili Simon'un kisscart'ı elime ulaştı. Bu kartuşa bakınca ilk baştaki duygularım gene depreşti, 64KB değilde, maliyeti yükseltmeden yapabileceğim en büyük kartuş ne olabilir diye bakındım.
Tabi temel amaçlarımdan biri EPROM programlaycı vb kullanmadan kolay bir şekilde programlanabilir olmasıydı. Bu sebeple FLASH kullanmak daha uygun olur diye düşündüm.
Fiyatı çok abartmadan bulabildiğim 5V ile çalışan en büyük flash 29F800 oldu. (1MByte) Bunun üzerine gitmeye karar verdim. Digikey fiyatı 2.8 Dolar, ebay fiyatı 2 dolar altında. Türkiye'de en ucuz 7TL ye bulabildim ama sanırım artık kalmadı.
C64 standart kartuş tiplerine baktığımızda 8K ve 16K normal ve 16K Ultimax olmak üzere temelde 3 tipi var. Bunları desteklemek iyi olurdu. Bu durumda 16K'lık toplam 64 adet CRT imajını bu kartuşa yüklemek teorik olarak mümkün olacaktı. (Doberman'da da 64K lık 64 adet imaj vardı, hep bir 64'e çıkıyoruz...

)
İşi daha fazla karıştırmamak için freezer vb özel donanım isteyen kartuşları liste dışı bıraktım. Şimdilik herşey kiss prensiplerine uygun devam ediyordu.
Simon 8 tane slotu seçmek için mikroişlemci yada switch kullanmıştı. Bende slot sayısı 64 olunca bu iş çok karışık hale gelmekteydi. Yada kartuş üzerine LCD ekran vb eklemek gerekecekti ki bu da maliyeti artıracaktı. Bunun yerine Doberman'da olduğu gibi C64 tarafında çalışan bir menu yapmayı düşündüm. 64 Slotun ilkinde menu programı olacaktı. İlk çalışınca bu slot aktif olduğundan menu çalışacak ve bir slot seçildiğinde bunu kartuşa bildirecektim.
Ve sonrasında reset atıp seçilmiş olan slot içerisindeki kartuş imajının çalışması sağlanacaktı.
Burada işler biraz biraz kiss prensipleri dışına çıkmaya başladı. Ama maliyet çok artmadığı ve proje yapılabilir olduğu sürece devam etmeye karar verdim. En güzel yöntem bir adet slot select register yani aslında bir adet latch entegresi kullanmak ve i/o bölgelerinden birine yazıldığında bunu yakalayıp slotu değiştirmek.
Bu noktada biraz da kartuşun programlanması ile ilgili düşündüklerimden bahsetmek gerekirse, FLASH'ı çıkartıp programlayıcıya falan takmak istemedim. USB üzerinden doğrudan PC ile programlamak güzel olurdu. Ancak bu noktada bir iki temel sıkıntı var.
Öncelikle USB>TTL çeviri entegre ve programlama için bir PIC kullanmam gerekiyordu. Bu maliyeti biraz arttıracaktı. Kartuş C64'e takılıyken programlanmamalıydı. Çünkü FLASH'ın adres ve data hatları doğrudan C64 bus'a bağlı. Bu durumda en az 3 adet trisate buffer (kabaca switch diyebiliriz.) entegre daha kullanarak aynı anda ya PIC'e yada C64'e bağlı olmasını sağlamam gerekiyordu.
Aklıma özellikle bu kartuş için ayrı bir programlayıcı kart yapma fikri geldi. PIC ve USB>TTL çevirici bu kart üzerinde olacaktı. Kartuşu programlamak için C64'ten söküp bu karta takacaktım. Bu sayede tristate entegrelere gerek kalmadı keza fiziksel olarak aynı anda hem PIC'e hem de C64'e bağlı olma ihtimali kalmamıştı. Aynı zamanda salt kartuşun maliyetini arttırmamış oldum. Örneğin bu kartuştan elimde 4 tane varsa, sadece bir adet programlayıcı ile işimi görebilecektim.
Bu arada eğer slot select registeri olarak sadece io hattını değil, bir de adres hattını kontrol edersem, registeri io bölgesi içerisindeki spesifik bir adrese koyabilirdim.
Ocean Kartuşlarında bank select olarak geçen register $DE00'daydı. Bunu yapmak ta çok zor değil. Bu sayede Normal kartuşlar + Ocean kartuşları da desteklenebilir olabilirdi.
Eminim eğer buraya kadar okuduysanız bir çok kişinin aklına hemen easyflash gelmiştir. Aklın yolu bir midir bilmem bu kadar kurgulamışken benim de aklıma easyflash geldi.

Skoe amca da zaten easyflash'ı tasarladığında amacı Ocean kartuşlarını desteklemekmiş, sonra projesi büyümüş...
Şimdi easyflash desteği için öncelikle easyflash'ın nasıl çalıştığına biraz baktım. İki modeli var bilindiği üzere.
İlk modelinde iki adet 29F040 flash entegresi mevcut. Programlama C64 üzerinden yapılıyor. Büyük kartuş imajlarını parçalayıp disketlere atmak gerekiyor vb...
İkinci modelinde ise çok daha büyük tek bir flash çip kullanmış, 8 adet easyflash1 slotuna sahip, büyükçe bir CPLD kullanarak logic işini ve 3V-5V level translation işini halletmiş.
USB ile PC ye bağlanabiliyor. Ama programlama gene C64 üzerinden yapılıyor. Yani C64 ve PC aslında USB üzerinden birbirlerine bağlanmış oluyor.
Satış fiyatı görebildiğim kadarı ile 65$ ama non-stock görünüyor.
Neyse, zaten easyflash3 ün özellikleri benim varmak istediğim hedefin oldukça ilerisinde. Yapmak istediğim kartuş ucuz olmalı, bu sebeple bu kadar büyük flash kullanmak mantıksız ayrıca pahalı bir CPLD'ye yer vermek istemiyorum. Ama gel gelelim easyflash için çıkmış olan release'leri de bir kenara atmak hiç içimden gelmedi. Özellikle sadece easyflash versiyonu çıkmış olan prince of persia'yı bir şekilde çalıştırmalıydım C64'ümde. Doberman projesi ile uğraşırken, ara yüklemeli olan Last Ninja III'ü Doberman için patchlemiştim. i_r_on, patchle patchle nereye kadar demişti. Aslında çok haklıydı. Bir ton easyflash release varken bunları kolay birşekilde patchlemeden çalıştırabilmek güzel olurdu.
Neyse, şu noktaya kadar tasarladığım kartuş ile en azından easyflash1'in benzerliklerini sıralarsak;
- Hafıza miktarı aynı. (1MByte)
- Slot Select mantığı neredeyse aynı. (IO Bölgesindeki bir register ile seçiliyor.)
- Programlama için ikisi de kartuş portunu kullanıyor.
Farklılaştığımız yerler ise;
- Aynı flash çipi kullanılmadığı için EasyAPI benim kartuşu tanımayacak ve programlayamayacak.
- Easyflash içerisinde 256 Byte RAM mevcut. $DF00 adresine maplenmiş durumda.
- Easylash'ın aynı zamanda modu değiştirebilen bir register'i daha var. (EXROM ve GAME hatlarını yazılım üzerinden konfigüre edebiliyor.)
Bu farklılaştığımız yerler ile ilgili olarak, eğer easyflash desteği de vermeyi istersem aşağıdaki çözümler uygulanabilir.
- EasyAPI patchlenerek yada yeniden yazılarak benim kullandığım 29F800 flash'ına destek verilebilir. Ne de olsa bu bir kere yapılacak ve sonrasında tüm easyflash releaseleri desteklenmiş olacak.
- RAM için bir RAM entegresi daha ekleyebilirim. (Digikey fiyatı 1.1$ civarında.)
- Mode registeri ise ek olarak bir adet daha latch entegresi gerektiriyor.
Şimdilik bu kadar. Kartuşun tasarladığım şeması ve teknik detayları da bu topic altında paylaşacağım.
Henüz tam olarak easyflash desteği ekleyip eklmemek konusunda kararsızım. Eğer maliyet çok yükselmeyecek ise yapmak istiyorum...
Ve son olarak kartuşun henüz bir ismi yok.
