Kisah bagaimana instruksi 68030 yang salah memungkinkan Mac Classic II melakukan boot
- Apple melakukan kesalahan di ROM Macintosh Classic II, yang sebenarnya dapat menghalangi proses boot. Namun, CPU Motorola MC68030 mengeksekusi instruksi yang tidak terdefinisi, mencegah crash dan membuat boot berhasil.
MAME dan emulasi Mac
- MAME adalah emulator yang mendukung berbagai game arcade, dan dinilai sebagai salah satu emulator paling lengkap untuk model Mac berbasis 68000.
- Penulis menggunakan MAME untuk mencoba menyelesaikan masalah pada Mac Classic II, dan menemukan bahwa sistem melakukan boot dengan normal dalam mode alamat 24-bit, tetapi gagal boot dalam mode alamat 32-bit.
Mode alamat 24-bit vs 32-bit
- Prosesor Motorola 68000 memiliki 24 jalur alamat, dan Apple menggunakan 8 bit sisanya untuk menyimpan flag.
- Mesin dan prosesor yang lebih baru mendukung ruang alamat 32-bit, sehingga dua mode disediakan untuk mengatasi masalah kompatibilitas yang timbul.
Analisis penyebab masalah
- Untuk mencari tahu mengapa Classic II gagal boot dalam mode 32-bit di MAME, penulis menelusuri kode menggunakan debugger.
- Menurut dokumentasi teknis Apple, 0000000F berarti terjadi exception, dan 00000001 menunjukkan bus error.
Analisis kode ROM
- Dalam kode ROM, ditemukan instruksi yang mengakses alamat yang salah.
- Instruksi ini menyimpan alamat yang salah ke register A1, yang kemudian memicu error Sad Mac.
Perbedaan dengan perangkat keras
- Pada perangkat keras asli, instruksi yang salah tersebut mengubah nilai A1 sehingga menjadi alamat yang valid.
- Emulator MAME tidak dapat menangani instruksi ini dengan benar, sehingga A1 tetap menyimpan alamat yang salah.
Kesimpulan
- Apple tampaknya tidak menyadari bug yang bisa muncul di ROM Classic II, dan instruksi 68030 yang salah justru menyembunyikannya.
- Untuk mengatasi masalah ini, MAME menambal bug di ROM agar Classic II dapat melakukan boot.
- Kasus ini menunjukkan bahwa emulator dapat mengungkap fakta baru tentang perangkat keras.
1 komentar
Komentar Hacker News
Membagikan pengalaman menemukan instruksi MC68030 yang tidak terdokumentasi. Instruksi ini mengubah nilai register A1 dan menjalankan siklus bus baca-modifikasi-tulis
Menyebutkan bahwa dulu ada banyak laporan bug terkait emulasi instruksi CAS
Membagikan kenangan tentang Amiga 2000 dan prosesor 68000 di masa lalu
Sebagian besar CPU punya instruksi yang tidak terdokumentasi, dan 68k bukan pengecualian
Diperlukan upaya untuk memahami perilaku pasti dari instruksi MC68030 yang tidak terdokumentasi ini
Mengagumi efisiensi UI debugger Mac
Bertanya-tanya apakah instruksi ini digunakan untuk tujuan copy protection, dan apakah ini terjadi di semua 68030
Bertanya-tanya apakah '040/060 juga mendukung "instruksi yang tidak terdokumentasi" ini