Teknoloji tarihi, bazen en kusursuz görünen ürünlerin bile beklenmedik hatalarla dolu olduğunu kanıtlayan şaşırtıcı hikayelerle doludur. Programcı Doug Brown'ın son keşfi, Apple'ın 1991 yılında çıkardığı hepsi bir arada bilgisayarı Macintosh Classic 2'nin, aslında hiçbir zaman açılmaması gerektiğini gösterdi. Bu bilgisayar, piyasaya çıktığı andan itibaren, Apple mühendislerinin farkında olmadığı, kritik bir ROM hatası taşıyordu. Peki, Classic 2 yıllarca nasıl sorunsuz çalıştı? Cevap, donanımın kendi içinde sakladığı inanılmaz bir sırdı: Motorola 68030 CPU'nun belgelenmemiş bir özelliği.
Emülatörler Sayesinde Ortaya Çıkan Kaza
Macintosh Classic 2'deki bu devasa hata, tesadüfen, MAME (genellikle arcade sistemlerini taklit eden, ancak çok çeşitli klasik bilgisayarları da destekleyen bir emülatör) kullanılırken ortaya çıktı. Doug Brown, MAME üzerinde Classic 2'yi 32-bit modda çalıştırmaya çalıştığında, emülasyon sürekli olarak çöktü ve “Üzgün Mac” (Sad Mac) hatası verdi. Oysa gerçek donanım üzerinde böyle bir problem yaşanmıyordu. Bu durum, Brown'ı karmaşık bir hata ayıklama sürecine itti: Emülatör mü hatalıydı, yoksa donanımda bilinmeyen bir şey mi vardı?
Brown, hem MAME kodunu hem de aynı döneme ait Motorola 68030 işlemciyi kullanan diğer Mac modellerini inceledi. Analizler sonucunda, Classic 2'nin açılış kodu sırasında geçersiz bir adrese atlama (jump) yaptığını tespit etti. Bu, her seferinde bilgisayarın çökmesine neden olması gereken bariz bir yazılım hatasıydı.
“MAME'de emüle edilen Classic 2 çöküyordu, çünkü A1 (hafıza adresi) değişmiyordu. Ancak gerçek donanım üzerinde, işlemci, bu geçersiz adresi geçerli bir adrese dönüştürüyordu. Apple’ın Classic 2 ROM’unda bir hata vardı ama 68030, belgelenmemiş bir komutu yürüterek bu hatayı yanlışlıkla düzeltiyordu.”
Motorola 68030’un Gizli Kurtarıcısı
Hatanın çözülmesini sağlayan şey, doğrudan donanımın kendisiydi. Brown, yoğun testler ve tersine mühendislik çalışmaları sonucunda, Motorola 68030 işlemcisinde 'read-modify-write' veri yolu döngüsü gerçekleştiren ve aynı zamanda A1 kaydedicisinin (bellek adresi) değerini değiştiren, tamamen belgelenmemiş bir komut keşfetti. Bu komut, normalde kod akışında yanlış bir noktada yürütülüyordu, ancak tam olarak bu