Sad Mac Error Codes: Difference between revisions

No edit summary
Link Apple's OS 8.1 Emergency Handbook and the MacsBug guide from the Sad Mac page - both were reachable from no article
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[File:Sad Mac.png|thumb|right|''Sad Mac with Error Code'']]
[[File:Sad Mac.png|thumb|right|''Sad Mac with error code'']]
{{Original research|The per-model test tables, the OR-encoding rule, the Test Manager flag-bit list and the worked examples below were decoded by this wiki's contributors from machines on the bench and from the codes those machines produce.}}


The '''Sad Mac''' is a startup-diagnostic icon displayed by [[:Category:Apple Vintage Computers|Vintage Macintosh computers]] (every [[Macintosh Old World ROM|Old World ROM]] model from the [[Macintosh 128K]] through the NuBus Power Macintosh line) when a power-on self-test fails and the machine cannot reach the Happy Mac / boot stage. Below the icon the ROM prints one or two lines of hexadecimal which identify the failing subsystem and, where possible, the failing chip, byte lane, address line, or CPU exception. Together with the [[#Chimes of Death|Chimes of Death]], these codes are by far the most useful starting point for diagnosing a non-booting compact or Mac II-family machine.
The '''Sad Mac''' is a startup-diagnostic icon displayed by [[:Category:Apple Vintage Computers|Vintage Macintosh computers]] (every [[Macintosh Old World ROM|Old World ROM]] model from the [[Macintosh 128K]] through the NuBus Power Macintosh line) when a power-on self-test fails and the machine cannot reach the Happy Mac / boot stage. Below the icon the ROM prints one or two lines of hexadecimal which identify the failing subsystem and, where possible, the failing chip, byte lane, address line, or CPU exception. Together with the [[#Chimes of Death|Chimes of Death]], these codes are by far the most useful starting point for diagnosing a non-booting compact or Mac II-family machine.
Line 19: Line 20:
* '''Short format''' — used on the [[Macintosh 128K|128K]], [[Macintosh 512K|512K]], [[Macintosh 512Ke|512Ke]] and [[Macintosh Plus|Plus]]. A single six-digit line, '''YYXXXX''', where '''YY''' is the two-digit class code and '''XXXX''' is the four-digit subcode.
* '''Short format''' — used on the [[Macintosh 128K|128K]], [[Macintosh 512K|512K]], [[Macintosh 512Ke|512Ke]] and [[Macintosh Plus|Plus]]. A single six-digit line, '''YYXXXX''', where '''YY''' is the two-digit class code and '''XXXX''' is the four-digit subcode.
* '''Expanded format''' — used from the [[Macintosh SE|SE]] onwards (SE, SE/30, Classic, Classic II, Color Classic, LC family, Performa, Mac II family, Centris, Quadra, and the NuBus Power Macs). Two lines of eight hex digits each, displayed as:
* '''Expanded format''' — used from the [[Macintosh SE|SE]] onwards (SE, SE/30, Classic, Classic II, Color Classic, LC family, Performa, Mac II family, Centris, Quadra, and the NuBus Power Macs). Two lines of eight hex digits each, displayed as:
   : Line 1 (D7) — '''FFFFTTEE''' where ''FFFF'' = test-manager flags, ''TT'' = test number, ''EE'' = exception number (ORed in if an unexpected exception interrupted a test).
   : Line 1 (D7) — '''FFFFEETT''' where ''FFFF'' = Test Manager flags, ''EE'' = exception number (ORed in if an unexpected exception interrupted a test) and ''TT'' = test number. The exception occupies the '''upper''' byte of the lower word and the test number the '''lower''' byte: read the last two digits for the test and the two before them for the exception.
   : Line 2 (D6) — minor error / additional information (failing bit mask, address-line XOR, stack pointer, etc.).
   : Line 2 (D6) — minor error / additional information (failing bit mask, address-line XOR, stack pointer, etc.).


When an exception occurs ''during'' a test the exception number is logically ORed into the lower word of the major code. So if an address error (0200) hits during the [[#RAM Test on Mac II|RAM Bank A test (test 03)]], the major code reads '''0203''', not '''0200''' or '''0003''' alone — you read it as "address error while running test 3". This OR-encoding is the single most important thing to know about decoding expanded codes; without it most published code tables look contradictory.
When an exception occurs ''during'' a test, the exception number is logically ORed into the lower word of the major code. So if an address error ('''0200''') hits during the [[#Macintosh SE, SE/30, Classic, and Classic II (Expanded Format)|RAM Bank A test, which is test 04]], the lower word reads '''0204''' — not 0200 or 0004 alone — and you read it as "address error while running test 4". Equally, {{code|00000304}} is "illegal instruction (03) during RAM Bank A (04)".
 
This OR-encoding is the single most important thing to know about decoding expanded codes; without it most published code tables look contradictory.


=== Test Manager flags (upper word of D7) ===
=== Test Manager flags (upper word of D7) ===
Line 130: Line 133:
| 15 || G12 || 8000
| 15 || G12 || 8000
|}
|}
''Note: prior revisions of this page contained two transcription errors in this table — F8 was duplicated as Data Bit 3, and Data Bit 12 was listed twice (against both G9 and G10). The corrected mapping above gives one chip per data line for all 16 bits.''


==== Worked example ====
==== Worked example ====
Line 147: Line 148:
== Common Exception Codes (Class 0F) ==
== Common Exception Codes (Class 0F) ==


When the major class is '''0F''' on a compact Mac, or when the exception byte is ORed into the major code on an expanded-format machine, the subcode tells you which [[Motorola 68000|68000-family]] exception fired:
When the major class is '''0F''' on a compact Mac, or when the exception byte is ORed into the major code on an expanded-format machine, the subcode tells you which 68000-family exception fired:


{| class="wikitable"
{| class="wikitable"
Line 169: Line 170:
| 0008 || Trace || CPU was placed in trace mode without a debugger installed.
| 0008 || Trace || CPU was placed in trace mode without a debugger installed.
|-
|-
| 0009 || Line 1010 / A-line || Trap-dispatch failure: the CPU saw a 1010-prefixed opcode (the [[A-trap]] mechanism Mac OS uses for ROM calls) but the dispatcher couldn't find it. Common when the OS image is corrupt or MacsBug / Easy Access traps are missing.
| 0009 || Line 1010 / A-line || Trap-dispatch failure: the CPU saw a 1010-prefixed opcode (the A-trap mechanism Mac OS uses for ROM calls) but the dispatcher couldn't find it. Common when the OS image is corrupt or MacsBug / Easy Access traps are missing.
|-
|-
| 000A || Line 1111 / F-line || Unimplemented F-line opcode — typically an [[FPU]] instruction on a machine without one (or with a removed/dead 68881 / 68882 / 68040 FPU).
| 000A || Line 1111 / F-line || Unimplemented F-line opcode — typically an FPU instruction on a machine without one (or with a removed/dead 68881 / 68882 / 68040 FPU).
|-
|-
| 000B || Other exception / unassigned vector ||
| 000B || Other exception / unassigned vector ||
Line 185: Line 186:
| 0040 (and 0041–0047) || Auto-vectors / interrupt-level traps || Interrupt level ''n'' fired without a handler (on '020+ machines line 1700+ is also used for these).
| 0040 (and 0041–0047) || Auto-vectors / interrupt-level traps || Interrupt level ''n'' fired without a handler (on '020+ machines line 1700+ is also used for these).
|-
|-
| 0062 || Old-ROM reading [[HFS]] disk || A 64K-ROM machine ([[Macintosh 128K|128K]] / [[Macintosh 512K|512K]]) attempting to mount an HFS-formatted volume. The fix is either to format the boot disk as [[MFS]] or to upgrade to a 128K ROM (the upgrade that turns a 512K into a 512Ke).
| 0062 || Old-ROM reading HFS disk || A 64K-ROM machine ([[Macintosh 128K|128K]] / [[Macintosh 512K|512K]]) attempting to mount an HFS-formatted volume. The fix is either to format the boot disk as MFS or to upgrade to a 128K ROM (the upgrade that turns a 512K into a 512Ke).
|-
|-
| 0064 || Couldn't read System File || ROM loaded enough of the boot blocks to start the OS but could not read the System file into RAM. Almost always a bad floppy or hard-disk error rather than a logic-board fault.
| 0064 || Couldn't read System File || ROM loaded enough of the boot blocks to start the OS but could not read the System file into RAM. Almost always a bad floppy or hard-disk error rather than a logic-board fault.
Line 198: Line 199:
The [[Macintosh SE|SE]] introduced the expanded two-line format. The same format is used by the [[Macintosh SE/30|SE/30]], [[Macintosh Classic|Classic]], and [[Macintosh Classic II|Classic II]], although the SE/30 inherits Mac II-family tests in addition.
The [[Macintosh SE|SE]] introduced the expanded two-line format. The same format is used by the [[Macintosh SE/30|SE/30]], [[Macintosh Classic|Classic]], and [[Macintosh Classic II|Classic II]], although the SE/30 inherits Mac II-family tests in addition.


The line-1 test number for these machines is drawn from this list (the lower byte of D7, i.e. the "TT" field of '''FFFFTTEE'''):
The line-1 test number for these machines is drawn from this list (the lower byte of D7, i.e. the "TT" field of '''FFFFEETT'''):


{| class="wikitable"
{| class="wikitable"
Line 231: Line 232:
* '''00000001 / 00000000''' — ROM checksum. Often a dirty/oxidised ROM SIMM. Reseat before recapping.
* '''00000001 / 00000000''' — ROM checksum. Often a dirty/oxidised ROM SIMM. Reseat before recapping.
* '''00000004 / xxxxxxxx''' — RAM Bank A failed. Minor code is the failing bit-mask across the 32-bit bus.
* '''00000004 / xxxxxxxx''' — RAM Bank A failed. Minor code is the failing bit-mask across the 32-bit bus.
* '''00000005 / xxxxxxxx''' — Address-line failure. Recap the board (especially around the [[Glue Logic|GLU]] and ROM area), inspect traces under the RAM SIMM sockets.
* '''00000005 / xxxxxxxx''' — Address-line failure. Recap the board (especially around the GLU and ROM area), inspect traces under the RAM SIMM sockets.


If the SE/30 displays no Sad Mac at all and instead shows the [[#Simasimac|Simasimac]] vertical stripes, the ROM was never even checksummed — see [[#Simasimac|that section]] below.
If the SE/30 displays no Sad Mac at all and instead shows the [[#Simasimac|Simasimac]] vertical stripes, the ROM was never even checksummed — see [[#Simasimac|that section]] below.
Line 275: Line 276:
| 0088 || SCSI full test
| 0088 || SCSI full test
|-
|-
| 0089 || [[Apple Sound Chip|ASC]] (Apple Sound Chip) test
| 0089 || ASC (Apple Sound Chip) test
|-
|-
| 008A || PRAM test (always reports failure; not actually run)
| 008A || PRAM test (always reports failure; not actually run)
Line 291: Line 292:
* Mixed values (e.g. {{code|0009}} = chips 1 + 4) indicate multiple failing chips, or — more commonly — an address-line problem upstream that's making all the chips look bad simultaneously.
* Mixed values (e.g. {{code|0009}} = chips 1 + 4) indicate multiple failing chips, or — more commonly — an address-line problem upstream that's making all the chips look bad simultaneously.


To narrow down ''which'' ROM chip is bad on a IIcx/IIci/SE/30 board with soldered ROMs, see [[#Test Manager (Serial Diagnostic Mode)|Test Manager]] below; the {{code|*T000400010000}} command runs the per-chip ROM checksum directly and returns a result of 1/2/4/8.
To narrow down ''which'' ROM chip is bad on a IIcx/IIci/SE/30 board with soldered ROMs, see [[#Test Manager (Serial Diagnostic Mode)|Test Manager]] below; running the ROM checksum test — test '''01''', so {{code|*T000100010000}} — returns a result of 1/2/4/8 identifying the chip.


=== Worked example: IIcx, slow Chimes of Death, code 0000FFFF 00000001 ===
=== Worked example: IIcx, slow Chimes of Death, code 0000FFFF 00000001 ===
Line 357: Line 358:
=== Power Manager handshake codes (CD33–CD38) ===
=== Power Manager handshake codes (CD33–CD38) ===


The Portable, PowerBook 100, and later PowerBooks share a Power Manager [[IC]] that communicates with the main CPU over a custom serial-handshake protocol. Failures of this protocol surface as one of:
The Portable, PowerBook 100, and later PowerBooks share a Power Manager IC that communicates with the main CPU over a custom serial-handshake protocol. Failures of this protocol surface as one of:


* '''CD33''' — During a receive, Power Manager did not finish a handshake
* '''CD33''' — During a receive, Power Manager did not finish a handshake
Line 412: Line 413:


== Test Manager (Serial Diagnostic Mode) ==
== Test Manager (Serial Diagnostic Mode) ==
: ''Main article: [[Diagnostic Serial Console]]''


Every Macintosh from the [[Macintosh SE|SE]] onwards exposes a hidden Test Manager over the modem-port SCC. Connect a null modem cable from the modem port to a host running a serial terminal at 9600 8N1, then send a {{code|*}} to interrupt whatever the machine is doing and enter Test Manager. The trap {{code|_TestManager}} (defined in the same ROMs) provides the same interface programmatically.
Every Macintosh from the [[Macintosh SE|SE]] onwards exposes a hidden Test Manager over the modem-port SCC. Connect a null modem cable from the modem port to a host running a serial terminal at 9600 8N1, then send a {{code|*}} to interrupt whatever the machine is doing and enter Test Manager. The trap {{code|_TestManager}} (defined in the same ROMs) provides the same interface programmatically.
Line 418: Line 421:


* '''Per-test execution''' — {{code|*T<TT>0001<minor>}} runs test {{code|TT}} once and returns its result on the next line. Example: {{code|*T000400010000}} runs test 04 (RAM Bank A) once.
* '''Per-test execution''' — {{code|*T<TT>0001<minor>}} runs test {{code|TT}} once and returns its result on the next line. Example: {{code|*T000400010000}} runs test 04 (RAM Bank A) once.
* '''Per-ROM checksum''' — {{code|*T000400010000}} on a IIcx/IIci/SE/30 will (because test 04 also covers the four-chip ROM array on those machines) return {{code|R<class><result>0000}} where the result narrows the failure to one of the four physical ROM chips ({{code|0001}}, {{code|0002}}, {{code|0004}}, {{code|0008}}).
* '''Per-ROM checksum''' — {{code|*T000100010000}} runs test 01, the ROM checksum. On a IIcx, IIci or SE/30, whose ROM is four physical chips, the result narrows the failure to one of them ({{code|0001}}, {{code|0002}}, {{code|0004}}, {{code|0008}}). Test 04 is '''RAM Bank A''' and does not test ROM — the two commands differ only in those two digits, which makes them easy to transpose.


The same interface is used by Apple's internal MacTest / MacTest Pro / Apple Personal Diagnostics suites. Note that some test commands (notably the full SCSI test) will hang a machine that has a non-functional SCSI chip — be ready to power-cycle.
The same interface is used by Apple's internal MacTest / MacTest Pro / Apple Personal Diagnostics suites. Note that some test commands (notably the full SCSI test) will hang a machine that has a non-functional SCSI chip — be ready to power-cycle.
Line 446: Line 449:
| Quadra, Centris (non-AV) || Same as LC family || Apple reused the LC chime across all non-AV Quadras and Centrises
| Quadra, Centris (non-AV) || Same as LC family || Apple reused the LC chime across all non-AV Quadras and Centrises
|-
|-
| Quadra/Centris 660AV, Quadra 840AV || [[Roland D-50]] "Digital Native Dance" sample loop + [[Roland U-20]] effects || Completely different sound — abstract and synth-pad-like
| Quadra/Centris 660AV, Quadra 840AV || Roland D-50 "Digital Native Dance" sample loop + Roland U-20 effects || Completely different sound — abstract and synth-pad-like
|-
|-
| Power Macintosh 6100/7100/8100, Performa 6100, Workgroup Server 6150/8150/9150 || Car-crash sound effect (Sound Ideas / Hanna-Barbera library samples) || The infamous "your computer just died in a head-on collision" chime
| Power Macintosh 6100/7100/8100, Performa 6100, Workgroup Server 6150/8150/9150 || Car-crash sound effect (Sound Ideas / Hanna-Barbera library samples) || The infamous "your computer just died in a head-on collision" chime
Line 454: Line 457:
| PCI Power Macs (7500, 7600, 8500, 9500, beige G3, G3 AIO, PowerBook 2400/3400/G3) || Popping and glass-shattering || These machines do not display a Sad Mac icon — chime only
| PCI Power Macs (7500, 7600, 8500, 9500, beige G3, G3 AIO, PowerBook 2400/3400/G3) || Popping and glass-shattering || These machines do not display a Sad Mac icon — chime only
|-
|-
| iMac (1998) and later || ''(no chime — beep codes only)'' || See [[Mac Beep Codes]] for the post-Sad-Mac diagnostic indicator scheme
| iMac (1998) and later || ''(no chime — beep codes only)'' || See Mac Beep Codes for the post-Sad-Mac diagnostic indicator scheme
|}
|}


[[Stephen Hackett]]'s [https://512pixels.net/2021/04/mac-chimes-of-death/ 512 Pixels] page hosts high-quality recordings of each variant. The decoder gadget on this wiki can play each chime in your browser via the [[Web Audio API]] for direct A/B comparison without leaving the page.
Stephen Hackett's [https://512pixels.net/2021/04/mac-chimes-of-death/ 512 Pixels] page hosts high-quality recordings of each variant. The decoder gadget on this wiki can play each chime in your browser via the Web Audio API for direct A/B comparison without leaving the page.


=== Slow chimes (24-bit-ROM cadence) ===
=== Slow chimes (24-bit-ROM cadence) ===
Line 463: Line 466:
A specific symptom worth noting: on machines with 24-bit-clean ROMs (notably the [[Macintosh IIcx|IIcx]] and original [[Macintosh II|II]]), a ROM-checksum failure plays the chime at roughly half its normal tempo. 32-bit-clean ROMs ([[Macintosh IIci|IIci]], [[Macintosh SE/30|SE/30]] later revisions, [[Macintosh IIfx|IIfx]]) play the chime at normal tempo regardless of which test failed. If you hear a slow chime on a IIcx or II, jump straight to checking the ROM chips — see the [[#Worked example: IIcx, slow Chimes of Death, code 0000FFFF 00000001|IIcx worked example]] above.
A specific symptom worth noting: on machines with 24-bit-clean ROMs (notably the [[Macintosh IIcx|IIcx]] and original [[Macintosh II|II]]), a ROM-checksum failure plays the chime at roughly half its normal tempo. 32-bit-clean ROMs ([[Macintosh IIci|IIci]], [[Macintosh SE/30|SE/30]] later revisions, [[Macintosh IIfx|IIfx]]) play the chime at normal tempo regardless of which test failed. If you hear a slow chime on a IIcx or II, jump straight to checking the ROM chips — see the [[#Worked example: IIcx, slow Chimes of Death, code 0000FFFF 00000001|IIcx worked example]] above.


== SE/30 Specific Issues: Simasimac ==
<span id="Simasimac"></span>
== SE/30 specific issues: Simasimac ==


[[File:Simasimac issue.jpg|thumb|right|''"Simasimac" vertical stripes'']]
[[File:Simasimac issue.jpg|thumb|right|''"Simasimac" vertical stripes'']]
Line 469: Line 473:
A common [[Macintosh SE/30|SE/30]] failure mode is known as '''Simasimac''' (Japanese ''shima-shima'' "stripes" + Mac), in which the screen shows alternating vertical stripes at power-on with '''no chime''' and '''no Sad Mac'''. Because the CPU never reaches the point of checksumming ROM and drawing the failure screen, this is not technically a Sad Mac fault at all — it is a more upstream failure.
A common [[Macintosh SE/30|SE/30]] failure mode is known as '''Simasimac''' (Japanese ''shima-shima'' "stripes" + Mac), in which the screen shows alternating vertical stripes at power-on with '''no chime''' and '''no Sad Mac'''. Because the CPU never reaches the point of checksumming ROM and drawing the failure screen, this is not technically a Sad Mac fault at all — it is a more upstream failure.


The cause is almost always corroded traces and via stitching from leaking surface-mount electrolytic capacitors on the logic board, particularly around the [[Glue Logic|GLU]] ASIC and the ROM SIMM socket. Common diagnostic steps:
The cause is almost always corroded traces and via stitching from leaking surface-mount electrolytic capacitors on the logic board, particularly around the GLU ASIC and the ROM SIMM socket. Common diagnostic steps:


# Remove the logic board and inspect under good light — even small green/black halos around capacitor pads are evidence of leakage.
# Remove the logic board and inspect under good light — even small green/black halos around capacitor pads are evidence of leakage.
Line 495: Line 499:
* '''Use caution with bench diagnostics.''' Running the full SCSI test ({{code|*T008800010000}}) on a board with a damaged NCR 5380 can latch the bus and require a power cycle. Some tests can also write to PRAM — clear PRAM ({{code|Cmd-Opt-P-R}}) after extensive testing.
* '''Use caution with bench diagnostics.''' Running the full SCSI test ({{code|*T008800010000}}) on a board with a damaged NCR 5380 can latch the bus and require a power cycle. Some tests can also write to PRAM — clear PRAM ({{code|Cmd-Opt-P-R}}) after extensive testing.
* '''The codes are register dumps, not error names.''' If a published table contradicts what you're seeing, prefer first the value you can read off the machine, then the [[#Test Manager (Serial Diagnostic Mode)|Test Manager]] output over serial, and only then any third-party table. Apple's own Developer Notes for the Portable are known to contain transcription errors that have propagated to most reference sites.
* '''The codes are register dumps, not error names.''' If a published table contradicts what you're seeing, prefer first the value you can read off the machine, then the [[#Test Manager (Serial Diagnostic Mode)|Test Manager]] output over serial, and only then any third-party table. Apple's own Developer Notes for the Portable are known to contain transcription errors that have propagated to most reference sites.
* '''The format does not directly apply to [[New World ROM]] machines.''' The original [[iMac G3|iMac]] (1998) and later use audio beep codes (Mac Beep Codes) rather than Sad Mac. PCI Power Macs sit in an awkward middle ground — they play the [[#By family|"glass shattering" Chime of Death]] but draw no icon.
* '''The format does not directly apply to New World ROM machines.''' The original iMac (1998) and later use audio beep codes (Mac Beep Codes) rather than Sad Mac. PCI Power Macs sit in an awkward middle ground — they play the [[#By family|"glass shattering" Chime of Death]] but draw no icon.


== See also ==
== See also ==
Line 505: Line 509:
* [[Sad Mac Decoder]] — interactive lookup tool on this wiki
* [[Sad Mac Decoder]] — interactive lookup tool on this wiki
* [[Macintosh Old World ROM|Old World ROM]]
* [[Macintosh Old World ROM|Old World ROM]]
* '''[[OS 8.1 Emergency Handbook 1998]]''' — Apple's own owner-level booklet. Its start-up symptom table routes a '''Sad Macintosh icon''' to: check external equipment is connected and switched on, then the correct start-up disk, then SCSI ID conflicts, extension conflicts, PRAM reset, hard disk test and repair, and system software reinstallation. Two of its entries are hardware checks that get skipped — '''reseat memory and expansion cards''' for an unusual start-up sound, and '''replace the backup battery''' for a machine that will not start at all. It names no battery voltage, part number or threshold.
* '''[[MacsBug Reference and Debugging Guide]]''' — Apple's developer manual for MacsBug 6.2. Its chapter 7, ''Debugging Strategies'', is the reference for separating a reproducible software crash from a hardware fault before opening the case; chapter 4 covers the Macintosh memory map and low-memory globals.
== Sources consulted ==


== References ==
The tables on this page are this wiki's own decoding work (see the notice at the top), checked
against the machines themselves. The following were consulted alongside that work; where they
disagree with a machine in front of you, prefer the machine.


* Apple Inc., "''Macintosh: 'Sad Macintosh' Error Code Meaning''", Apple Technical Information Library article TA46376 ([https://web.archive.org/web/20090617213904/http://support.apple.com/kb/TA46376?viewlocale=en_US archived]).
* Apple Inc., "''Macintosh: 'Sad Macintosh' Error Code Meaning''", Apple Technical Information Library article TA46376 ([https://web.archive.org/web/20090617213904/http://support.apple.com/kb/TA46376?viewlocale=en_US archived]).