Ayrıca o loader, hızı arttırmak için kaset portundaki READ sinyalinin yanında SENSE sinyalini de kullanıyor sanırım (SENSE: dataset üzerindeki herhangi bir tuşun basılı olduğunu bildiren sinyal).
Aslında cihazın nasıl çalıştığı en baştan belliymiş. Tapecart'ın
GitHub sayfasında ayrıntılı dökümanlar var, ama onlara bakmayı akıl edemediğimiz için varsayımda bulunmuşuz. Cihazın nasıl çalıştığını açıklayan dökümanları mesajın sonuna ekliyorum. Anladığım kadarıyla bir açıklama yapayım:
Tapecart, üç farklı modda çalışıyor: streaming, fastload ve command modları. Mod seçimi için C64 tarafından Tapecart'a 16 bitlik bir işaret (signature word) gönderiliyor.
Streaming modu: Bu modda normal bir dataset gibi çalışıyor. Kullanıcının LOAD yaparak bir önyükleyici/bootstrap yükleyebilmesi için daima bu modda açılıyor.
Fastload modu: Bu modda 2-bitlik sabit zamanlamalı bir protokol ile C64'e veri gönderebiliyor. LOAD yapılarak yüklenen önyükleyici, bu modu seçerek Tapecart'tan gelen başlangıç programını çalıştırıyor. Bu program, Tapecart Browser olabilir, ya da bir demo olabilir (örneğin tapecart slideshow).
Command modu: Bu modda 1-bitlik C64 zamanlamalı bir protokol ile C64'ten komut alabiliyor. Komutlarla Tapecart üzerindeki flash memory'den okuma, yazma ve silme işlemleri yapılıyor.
LOAD yapılarak yüklenen önyükleyici
---------------------------------------------
Önyükleyicinin kaynak koduna loader.asm dosyasından bakılabilir, içerisinde açıklamalar da var. Çalışma mantığı şu şekilde:
Fastload modunu seçmek için Tapecart'a $CA65 işaretini gönderiyor. Bu aşamada kullanılan sinyaller:
MOTOR sinyali: C64 çıkış, handshake
WRITE sinyali: C64 çıkış, veri
Handshake'in sonunda Tapecart, başlangıç programını göndermeye başlıyor. Gelen dosyanın başında 6 baytlık bir header var, önce o yükleniyor. Ardından oradaki bilgilere göre dosya bellekte gereken yere yükleniyor. Bir bayt almak için kullanılan rutinin ismi, getbyte. getbyte rutininde yaşananlar şunlar:
SENSE üzerinden Tapecart'ın hazırım cevabı bekleniyor. C64 de son birkez daha WRITE'ı veri çıkışı için kullanıp ben de hazırım diyor ve çok kritik bir zamanlamayla veri alınmaya başlanıyor. Önce ilginç bir şey oluyor. 6510'un veriyönü yazmacına $27 yazılarak WRITE sinyali, C64 için giriş haline getiriliyor (normalde kullanılan değer $2F'tir). Bu aşamadaki sinyaller:
SENSE sinyali: C64 giriş, veri
WRITE sinyali: C64 giriş, veri
Ardından 6510'un I/O portu okunarak SENSE ve WRITE bitleri (bit4 ve bit3) üzerinden 2-bitlik veri alınıyor. Bir bayt tamamlandığında 6510'un veriyönü yazmacına $2F yazılarak WRITE yine C64'ün çıkışı yapılıyor ve rutinden çıkılıyor.
Sonuçta Tapecart'ın hızlı yükleme yaparken SENSE ve WRITE sinyallerini kullanarak 2-bitlik veri aldığı ortaya çıktı. Ben SENSE ve READ sinyalleri olabilir demiştim, ama Tapecart'ın geliştiricileri READ verisi için CIA#1'in $DC0D yazmacını kullanmaya gerek görmemişler.