2 Punkte von GN⁺ 2025-01-27 | 1 Kommentare | Auf WhatsApp teilen

Wie ein fehlerhafter 68030-Befehl das Booten des Mac Classic II ermöglichte

  • Apple machte im ROM des Macintosh Classic II einen Fehler, der den Bootvorgang hätte verhindern können. Die Motorola-MC68030-CPU führte jedoch einen undefinierten Befehl aus, verhinderte so den Absturz und ermöglichte einen erfolgreichen Start.

MAME und Mac-Emulation

  • MAME ist ein Emulator, der viele verschiedene Arcade-Spiele unterstützt, und gilt als einer der vollständigsten Emulatoren für Mac-Modelle auf 68000-Basis.
  • Der Autor wollte das Problem des Mac Classic II mit MAME lösen und stellte fest, dass das System im 24-Bit-Adressmodus normal bootet, im 32-Bit-Adressmodus jedoch fehlschlägt.

24-Bit- vs. 32-Bit-Adressmodus

  • Der Motorola-68000-Prozessor verfügte über 24 Adressleitungen, und Apple nutzte die übrigen 8 Bit zum Speichern von Flags.
  • Neuere Maschinen und Prozessoren unterstützten einen 32-Bit-Adressraum; um Kompatibilitätsprobleme zu lösen, wurden deshalb zwei Modi angeboten.

Analyse der Ursache

  • Um herauszufinden, warum der Classic II in MAME im 32-Bit-Modus nicht bootet, wurde der Code mit dem Debugger nachverfolgt.
  • Laut Apples technischer Dokumentation bedeutet 0000000F, dass eine Ausnahme aufgetreten ist, und 00000001 steht für einen Busfehler.

Analyse des ROM-Codes

  • Im ROM-Code wurde ein Befehl entdeckt, der auf eine falsche Adresse zugreift.
  • Dieser Befehl speichert eine falsche Adresse im Register A1, was zu einem Sad-Mac-Fehler führt.

Unterschiede zur Hardware

  • Auf echter Hardware verändert der fehlerhafte Befehl den Wert von A1 und macht daraus eine gültige Adresse.
  • Der Emulator von MAME verarbeitet diesen Befehl nicht korrekt, sodass A1 die falsche Adresse behält.

Fazit

  • Apple war sich des möglichen Bugs im ROM des Classic II offenbar nicht bewusst, und der fehlerhafte 68030-Befehl verbarg ihn.
  • MAME behebt das Problem, indem der Bug im ROM gepatcht wird, sodass der Classic II booten kann.
  • Dieser Fall zeigt, dass Emulatoren neue Erkenntnisse über Hardware liefern können.

1 Kommentare

 
GN⁺ 2025-01-27
Hacker-News-Kommentare
  • Jemand teilt die Erfahrung, eine undokumentierte Anweisung des MC68030 entdeckt zu haben. Diese Anweisung verändert den Wert des A1-Registers und führt einen Read-Modify-Write-Buszyklus aus.

    • Diese Anweisung wurde möglicherweise nicht absichtlich vom CPU-Designer geschaffen, sondern ist eher eine illegale Anweisung.
    • Die CPU erkennt illegale Anweisungen normalerweise und löst eine Exception aus. Unter bestimmten Umständen kann jedoch keine Exception ausgelöst werden.
    • Laut dem MC68030-Handbuch enthalten illegale Anweisungen Bitmuster, die keinem Bitmuster einer gültigen Anweisung entsprechen.
    • Dem Handbuch zufolge besteht die Anweisung aus drei Wörtern; das erste Wort ist normal, im zweiten Wort treten jedoch seltsame Bits auf.
  • Es wird erwähnt, dass es viele Bugreports zur Emulation der CAS-Anweisung gab.

    • Jemand erinnert sich an einen Bug in King of Fighters, bei dem das Carry-Flag der SBCD-Anweisung falsch geprüft wurde.
    • SNK war gottgleich, wenn es um den 68000-Chip ging.
  • Es werden Erinnerungen an den Amiga 2000 und den 68000-Prozessor geteilt.

    • Die Begeisterung für 68020, 68030 und RISC-Architekturen wird erwähnt.
    • Es wird betont, dass wir heute in einer Zeit leben, in der man mit Computern in natürlicher Sprache sprechen kann.
  • Die meisten CPUs haben undokumentierte Anweisungen, und 68k ist keine Ausnahme.

    • Damals konzentrierten sich viele Menschen auf x86/PC, weil es eine offenere und stabilere Architektur war.
    • Der Mikrcode des 8088 und 8086 wurde zerlegt und untersucht.
  • Es seien Versuche nötig, um das genaue Verhalten der undokumentierten Anweisung des MC68030 zu verstehen.

    • Der resultierende Wert von A1 kann je nach ursprünglichem A1-Wert, A7-Wert und Program Counter unterschiedlich sein.
    • MAME patcht diesen Bug im ROM, damit der Classic II booten kann.
  • Es wird Bewunderung für die Effizienz der UI des Mac-Debuggers geäußert.

    • Die Konvertierungsgeschwindigkeit des Amiga wird dadurch wohl nicht steigen.
  • Jemand fragt sich, ob diese Anweisung zu Kopierschutzzwecken verwendet wurde und ob sie auf allen 68030 auftritt.

    • Auf modernen Macs scheint das unmöglich zu sein. Apples technische Dokumentation ist heutzutage nicht besonders gut.
  • Es wird gefragt, ob auch der "040/060" diese "undokumentierte Anweisung" unterstützt.