Maceralı yoldan gelen kartlarımın sonuncusu da bitti ve çalıştı.
Çeşitli forumlarda çeşitli alternatif Kernal'lar hakkında okudukça birden çok Kernal image'i tek bir EPROM'a yazıp duruma göre değiştirmek üzerine çalıştım. Önce klasik yaklaşım ile DIP switch kullanan bir kart çizdim, ama bu her seferinde kasayı açmayı gerektirecekti, bağlantıları bir komütatöre geçirip kasaya monte etmek bunu çözerdi ama kasayı delmek de hoş değil. Bunu "soft" olarak nasıl yaparım, klayveyi mi okurum diye anakart şemasını incelerken baktım RESTORE tuşu matriks'den bağımsız, tek başına bir push buton, tam işime yarayacak şey!
ATTiny85 vardı elimde 3-5 tane, fazla fazla yeterli bir MCU. Zaten oldukça basit bir iş, RESTORE tuşu okunacak, basma şekline göre EPROM üzerindeki 8 Kernal'dan biri seçilecek 3 tane IO pini EPROM'un A13, A14, ve A15 adres bacaklarını duruma göre konfigüre edecek ve sonra da C64'e bir RESET yollanacak. Ama bir de gösterge lazım, onun için de Power LED'i kullanmak mümkün.
ATTiny85 8 bacak, ikisi besleme, biri RESET, geriye 5 tane IO kalıyor. 3 tanesi EPROM adres bacaklarına gidecek, biri RESTORE tuşunu okuyacak, biri C64'e reset atacak derken IO'lar bitti... Hadi EPROM'u 27C512 değil de 27C256 kullanalım, 4 tane Kernal adam olana yeter, buradan bir adres bacağı, yani bir IO pini boşa çıkar, RGB LED yerine adreslenebilir LED kullanalım, tek pin üzerinden istediğimiz renk ve parlaklık komutunu gönderebiliriz. Böylece her işe bir IO bacağı olmuş oldu. Acaba 5mm standart kılıfta adreslenebilir LED var mıdır, varsa bizim piyasada bulunur mu? Sordum Google'a, evet var, ve yine evet, yurtiçinden temin ediliyor, şerit olanlarla kıyaslayınca azıcık pahalıca (Sparkfun imiş) ama ölümcül değil, verdim şiparişi, 2 günde geldiler.
RESTORE tuşu normalde pek bir işe yaramıyor, ama kullanıldığı yerde de (mesela RUN STOP-RESTORE) sadece kısa basış ile kullanılıyor, tek başına ve basılı tutulması diye bir kullanımı yok, bu da tam benim işime yarayacak şey. Kısa basıldığı sürece benim ATTiny üzerinde çalışan kod kısa basışları görmezden gelir, ve sadece 3 saniye gibi uzun basışta devreye girerse bu iş olur.
Oturup kabalama bir kod yazdım, breadboard üzerinde simulasyon şeklinde çalıştırdım. Tuşa 3 saniye basılı tutunca kod devreye giriyor, LED'i hızlıca yakıp söndürerek "seni duydum abi" diyor ve ayar moduna giriyor, onun haricinde ise uslu uslu beklemede kalıyor. Ayar modunda ise yine RESTORE tuşuna her basışta bir başka 8K'lık bank seçiliyor (sırayla loop ediyor bunlar, yani dördüncüden sonra tekrar birinciye geçiyor) ve LED o banka atanan renk ile yanıyor, istediğim rengi LED'de görünce RESTORE tuşuna basmayı bırakıyorum, kod 2-3 saniye bekleyip başka basış olmazsa EPROM adres bacakları gerekli konfigürasyona alıyor, hangi bank'ın seçildiği MCU'nun dahili EPROM'una yazıyor (ki kapatıp açınca yine o Kernal ile açılsın) ve son olarak da C64 reset ediyor, ve yeni seçilen Kernal boot ediyor.
Bir yerlerde C64'ü sadece CPU reset bacağından reset etmenin soft bir reset olduğunu, bazı ısrarcı programların bundan kurtulduğunu okumuştum, bir de hard reset olmalı bu durumda (çünkü emülatörlerde var) diye düşünüp o nasılmış diye yine Google amcaya sordum, EXROM reset diye bir şey olduğunu söyledi bana. Bu konuda araştırma yaparken bir de ne göreyim, adamın biri tam benim yaptığım şeyi çoktaaan yapmış, hem satıyor, hem de open source olarak vermiş. Baktım arkadaşın yazdığı koda. Benden daha iyi programcı olduğu kesin, bazı şeyleri çok daha elegan şekilde yapmış, ama adreslenebilir LED kullanmak yerine normal RGB led kullanmış, pin yetersizliği yüzünden de hem EPROM adres bacaklarını hem RGB LED'i beraber sürmek için bir sürü takla attırmış koda. Dedim benim bunlara ihtiyacım yok, şu EXROM reset işini yapsam benim kod zaten çalışıyor. Ancak malesef EXROM reset için 1 IO pini daha gerektiğini gördüm... Önce CPU RESET pini LOW yapılacak, sonra PLA'nın EXROM bacağı LOW yapılacak, önce RESET bırakılacak, sonra EXROM... Neyse ki son çare ama buna da çözüm var, ATTiny'in reset bacağı kod yüklendikten sonra bu işi yapabilen bir programlayıcı ile 12V pulse verilerek IO pinine çevrilebiliyor. Gayet de güzel çalışıyor ama bu durumdayken ICSP ile kod yüklenemiyor, önce yine aynı metod ile tekrar reset'e çevirmek lazım. Varsın olsun, zaten basit bir kod, bir kere istediğim gibi çalıştıktan sonra kalsın öyle diyip koda EXROM reset'i de ilave ettim. Her işe yarayan TL866II+ programlayıcı bu reset pini çevirme işini de yapabiliyor, kodu Arduino IDE'de yazıp, derleyip HEX export edip TL866 ile ATTiny'e yükleyip, reset pinini de IO yaptım, gayet güzel çalıştı.
C64'ün şemasına baka baka anakart üzerinde RESET ve EXROM ve RESTORE tuşu için bağlantı noktalarını tesbit ettim, oralara kablolar lehimleyip diğer uçlarını breadboard'daki prototipe bağladım, içine 4 tane Kernal image yazdığım 27C256 ile bütün olayı canlı şekilde denedim, gayet güzel çalıştı. Kodu hafifçe temizleyip, cilalayıp son hali budur artık dedim, bir kere daha aynı şekilde yükledim. Tabii ki bütün bunları da bir kart haline getirdim veee....
Ortaya bu çıktı. C64'ün Kernal ROM'unu söktüm, yerine bunu taktım, karta bağlatıları yaptım, LED'i değiştirdim. Herşey gayet iyi çalıştı. Malesef içerinin son durumunu fotoğraflamak kasayı kapatıp vidaladıktan sonra aklıma geldi. Nasılsa tekrar başka bir sebep ile açacağım, o zamana sözüm olsun. Hatta C64'ü ilk aldığın gün çektiğim anakart fotoğrafları ile karşılaştırmalı yaparım.
Şu anda;
1) Standart Kernal (LED Kırmızı)
2) JaffyDOS (LED Mavi)
3) Datel TurboROM-II (LED Yeşil)
4) DolphinDOS (LED Turkuaz)
Şeklinde çalışıyor. Bu arada, JaffyDOS 10 numara 5 yıldız. Bu alternatif Kernal'lar konusunda ayrı bir başlık açmam lazım, ben bu kadar kısa sürede 1 öğrendiysem, buradaki veteran Commodore'cular neler biliyordur.
Bu hikayemiz de buraya kadar. Pi1541 tarafına neler yapılması gerektiği vs konuları da o alternatif Kernal başlığında konuşuruz artık, ama şu kadarını söyleyeyim, drive tarafında JiffyDOS, C64 tarafında JaffyDOS kombinasyonu muhteşem.