Hatalı bir 68030 komutunun Mac Classic II'nin açılmasını nasıl mümkün kıldığı
- Apple, Macintosh Classic II'nin ROM'unda bir hata yaptı ve bu hata açılışı engelleyebilirdi. Ancak Motorola MC68030 CPU, tanımsız bir komutu çalıştırarak çöküşü önledi ve açılışın başarıyla tamamlanmasını sağladı.
MAME ve Mac emülasyonu
- MAME, çok çeşitli arcade oyunlarını destekleyen bir emülatördür ve 68000 tabanlı Mac modelleri için en kapsamlı emülatörlerden biri olarak değerlendirilir.
- Yazar, Mac Classic II'nin sorununu çözmek için MAME'i kullandı; sistem 24 bit adresleme modunda normal şekilde açılırken 32 bit adresleme modunda açılış başarısız oluyordu.
24 bit ve 32 bit adresleme modları
- Motorola 68000 işlemcisi 24 adres hattına sahipti ve Apple, fazladan 8 biti bayrakları saklamak için kullandı.
- Daha yeni makineler ve işlemciler 32 bit adres alanını destekliyordu; Apple da uyumluluk sorunlarını çözmek için iki modu birden sundu.
Sorunun nedeninin analizi
- Yazar, MAME'de Classic II'nin neden 32 bit modda açılmadığını bulmak için hata ayıklayıcıyla kodun izini sürdü.
- Apple'ın teknik belgelerine göre
0000000F bir istisnanın oluştuğunu, 00000001 ise bir veri yolu hatasını gösteriyordu.
ROM kodunun analizi
- ROM kodunda yanlış bir adrese erişen bir komut bulundu.
- Bu komut A1 yazmacına hatalı bir adres yazıyor ve bunun sonucunda Sad Mac hatası oluşuyordu.
Donanımla farklar
- Gerçek donanımda hatalı komut A1'in değerini değiştirerek onu geçerli bir adrese dönüştürüyordu.
- MAME'in emülatörü ise bu komutu doğru işleyemediği için A1 hatalı adresi koruyordu.
Sonuç
- Apple, Classic II'nin ROM'unda ortaya çıkabilecek hatanın farkında değildi ve 68030'un hatalı komutu bu sorunu gizliyordu.
- MAME, bu sorunu çözmek için ROM'daki hatayı yamalayarak Classic II'nin açılmasını sağladı.
- Bu örnek, emülatörlerin donanım hakkında yeni gerçekleri ortaya çıkarabileceğini gösteriyor.
1 yorum
Hacker News yorumu
MC68030 için belgelenmemiş bir komut keşfetme deneyimini paylaşıyor. Bu komut A1 yazmacının değerini değiştiriyor ve bir read-modify-write veri yolu döngüsü gerçekleştiriyor
CAS komutunun emülasyonuna ilişkin çok sayıda hata raporu olduğunu belirtiyor
Geçmişteki Amiga 2000 ve 68000 işlemci anılarını paylaşıyor
Çoğu CPU'da belgelenmemiş komutlar vardır ve 68k da istisna değil
MC68030'daki belgelenmemiş komutun tam davranışını anlamaya yönelik bir çabaya ihtiyaç olduğunu söylüyor
Mac debugger arayüzünün verimliliğine hayran kalıyor
Bu komutun kopya koruma amacıyla kullanılıp kullanılmadığını ve tüm 68030'larda ortaya çıkıp çıkmadığını merak ediyor
'040/060'ın da bu "belgelenmemiş komutu" destekleyip desteklemediğini merak ediyor