2 puan yazan GN⁺ 2025-01-27 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2025-01-27
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

    • Bu komutun CPU tasarımcısı tarafından kasıtlı olarak yapılmış değil, yasadışı bir komut olması muhtemel
    • CPU normalde yasadışı komutları algılar ve bir exception oluşturur. Ancak belirli durumlarda exception oluşmayabilir
    • MC68030 kılavuzuna göre yasadışı komutlar, geçerli komutların bit desenleriyle eşleşmeyen bit desenleri içerir
    • Kılavuza göre komut 3 sözcükten oluşuyor; ilk sözcük normal, ikinci sözcükte ise garip bitler ortaya çıkıyor
  • CAS komutunun emülasyonuna ilişkin çok sayıda hata raporu olduğunu belirtiyor

    • King of Fighters'ta SBCD komutunun carry flag'ini yanlış kontrol eden bir bug'ı hatırlıyor
    • SNK, 68000 çipinin tanrısı gibiydi
  • Geçmişteki Amiga 2000 ve 68000 işlemci anılarını paylaşıyor

    • 68020, 68030 ve RISC mimarilerine duyduğu heyecandan bahsediyor
    • Bugün artık bilgisayarlarla doğal dilde konuşabildiğimiz bir çağda olduğumuzu vurguluyor
  • Çoğu CPU'da belgelenmemiş komutlar vardır ve 68k da istisna değil

    • O dönemde birçok kişi x86/PC'ye odaklanmıştı; bu daha açık ve daha istikrarlı bir mimariydi
    • 8088 ve 8086'nın microcode'u sökülüp incelendi
  • MC68030'daki belgelenmemiş komutun tam davranışını anlamaya yönelik bir çabaya ihtiyaç olduğunu söylüyor

    • A1'in sonuç değeri, özgün A1 değeri, A7 değeri ve program sayacına göre değişebilir
    • MAME, Classic II'nin açılabilmesi için ROM'daki bu bug'ı patch'liyor
  • Mac debugger arayüzünün verimliliğine hayran kalıyor

    • Bunun Amiga'nın dönüşüm hızını artırmayacağını söylü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

    • Modern Mac'lerde bunun mümkün görünmediğini düşünüyor. Apple'ın teknik belgeleri bugünlerde pek iyi değil
  • '040/060'ın da bu "belgelenmemiş komutu" destekleyip desteklemediğini merak ediyor