2 poin oleh GN⁺ 2025-01-27 | 1 komentar | Bagikan ke WhatsApp

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

 
GN⁺ 2025-01-27
Komentar Hacker News
  • Membagikan pengalaman menemukan instruksi MC68030 yang tidak terdokumentasi. Instruksi ini mengubah nilai register A1 dan menjalankan siklus bus baca-modifikasi-tulis

    • Ada kemungkinan instruksi ini bukan dibuat sengaja oleh perancang CPU, melainkan instruksi ilegal
    • CPU biasanya mendeteksi instruksi ilegal dan memicu exception. Namun, dalam kondisi tertentu exception mungkin tidak terjadi
    • Menurut manual MC68030, instruksi ilegal mencakup pola bit yang tidak cocok dengan pola bit instruksi yang valid
    • Menurut manual, instruksi terdiri dari 3 word, kata pertama normal dan bit aneh muncul pada kata kedua
  • Menyebutkan bahwa dulu ada banyak laporan bug terkait emulasi instruksi CAS

    • Mengingat bug di King of Fighters yang salah memeriksa carry flag dari instruksi SBCD
    • SNK seperti dewa untuk chip 68000
  • Membagikan kenangan tentang Amiga 2000 dan prosesor 68000 di masa lalu

    • Menyebut antusiasme terhadap 68020, 68030, dan arsitektur RISC
    • Menekankan bahwa sekarang kita hidup di era ketika bisa berbicara dengan komputer menggunakan bahasa alami
  • Sebagian besar CPU punya instruksi yang tidak terdokumentasi, dan 68k bukan pengecualian

    • Pada masa itu banyak orang fokus pada x86/PC, yang merupakan arsitektur yang lebih terbuka dan stabil
    • Mikrokode 8088 dan 8086 telah dibongkar dan diteliti
  • Diperlukan upaya untuk memahami perilaku pasti dari instruksi MC68030 yang tidak terdokumentasi ini

    • Nilai hasil A1 bisa berbeda tergantung pada nilai asli A1, nilai A7, dan program counter
    • MAME menambal bug ini di ROM agar Classic II bisa boot
  • Mengagumi efisiensi UI debugger Mac

    • Namun itu tidak akan mempercepat kecepatan konversi di Amiga
  • Bertanya-tanya apakah instruksi ini digunakan untuk tujuan copy protection, dan apakah ini terjadi di semua 68030

    • Tampaknya hal seperti ini tidak mungkin di Mac modern. Dokumentasi teknis Apple akhir-akhir ini kurang bagus
  • Bertanya-tanya apakah '040/060 juga mendukung "instruksi yang tidak terdokumentasi" ini