Mac ROM Fehlercodes

On the original ROMs (128k, 512k, 512ke, Plus):

When you press the interrupt button on the side of your Macintosh whenbooting, you should get a sad Mac icon with '0F000D' and some bits cyclingunder the icon indicating it is performing a memory test.

This numeric code is in two parts: the first two characters are theclass code and the second four are the sub code.
The class code tells what part of the diagnostic program found theerror and the sub class code tells what the error was. In the case of abad RAM chip, the sub class identifies the bad chip (this was very helpfulto homegrown upgraders).
Class CodeSub Code
1 = ROM test failed Meaningless
2 = Memory test - bus subtest identifies bad chips
3 = Memory test - byte write identifies bad chips
4 = Memory test - Mod3 test identifies bad chips
5 = Memory test - address uniqueness identifies bad chips

Single Chip Identification
Data BitLocationSub Code Bits
F5 0001
F6 0002
F7 0004
F8 0008
F9 0010
F10 0020
F11 0040
F12 0080
G5 0100
G6 0200
10 G7 0400
11 G8 0800
12 G9 1000
13 G10 2000
14 G11 4000
15 G12 8000
Class CodeSub Code
F = Exception 0001 Bus error
0002 Address error
0003 Illegal instruction
0004 Zero divide
0005 Check instruction
0006 Traps instruction
0007 Privilege violation
0008 Trace
0009 Line 1010
000A Line 111
000B Other exception
000C Nothing
000D NMI (normal indication)
0064 Couldn't Read System File into Memory

Macintosh SE & Macintosh II ROMs:

The Sad Mac error codes have been changed to incorporate additional powerfor testing and to support the 32-bit world. Generally, the same codesare used for 68000 exceptions as the Macintosh, however they are displayeddifferently.

The traditional Macintosh error codes are displayed like this: 0F0003

Where "F" indicates an exception occurred, and "3" indicates an illegalinstruction occurred. On the Macintosh SE and II, the display would appear:


Please note that 00000003 is a hex number.

The new power-on error codes have the following format:


Where XXXX is internal test manager state information (ignorethis), YYYY contains codes that indicate either an exception code,or the test number for a power on test failure. The ZZZZZZZZ codecontains additional failure information to help track down the problem.

YYYY Error Codes:

The ROM checksum test failed. Ignore the Z field.
The first small chunk of RAM to be tested failed. The Z field indicateswhich RAM Bit(s) failed. This small chunk of RAM is always in Bank B.



Example: $AABBCCDD
AA=8 bit mask for bits 31-24
BB=8 bit mask for bits 23-16
CC=8 bit mask for bits 15-8
DD=8 bit mask for bits 7-0

The RAM test failed while testing bank B, after passing the chunk testedfor code $0002. The Z field indicates which bits failed as in code $0002.
The RAM test failed while testing bank A. The Z field indicates which bitsfailed as in code $0002.
The RAM External addressing test failed. The Z field indicates a failedaddress line.
Unable to properly address the VIA1 chip. The Z field is not applicable.
Unable to properly address the VIA2 chip (Macintosh II only). The Z fieldis not applicable.
Unable to properly access the Front Desk Bus. The Z field is not applicable.
Unable to properly access the MMU. The Z field is not applicable.
Unable to properly access NuBus. The Z field is not applicable.
Unable to properly access the SCSI Chip. The Z field is not applicable.
Unable to properly access the IWM chip. The Z field is not applicable.
Unable to properly access the SCC Chip. The Z field is not applicable.
Failed Data Bus test. The Z field indicated the bad bit(s) as a 32-bitmask for bits 0-31. This may indicate either a bad SIMM or data bus failure.
Reserved for Macintosh compatibility.
A 680xx exception occurred during power on testing. The xx indicates theexception:

Macintosh Portable ROMs:

The bootup code in the Mac Portable contains a series of startup teststhat are run to ensure that the fundamental operations of the machine areworking properly. If any of those tests fail, a Sad Mac icon appears onthe screen with a code below that describes what failure occurred. Hereis a typical example of a Sad Mac display with an error code below it:


The two codes are actually the contents of the two CPU data registersD6 and D7. The upper word (upper 4 hex digits, in this case 0546) of D7contains miscellaneous flags that are used by the start-up test routinesand are unimportant to just about everybody except a few test engineerswithin Apple. The lower word of D7 is the major error code. The major errorcode identifies the general area the test routines were in when a failureoccurred. D6 is the minor error and usually contains additional informationabout the failure, something like a failed bit mask.

The major error is broken into the upper byte that contains the numberof any 68000 exception that occurred ($00 meaning that no exception occurred),and the lower byte that usually contains the test that was being run atthe time of failure. If an unexpected exception occurred during a particulartest, then the exception number is logically ORed into the major errorcode. This way both the exception that occurred as well as the test thatwas running can be decoded from the major error code:


In this example, the code says that an address error exception ($0200)occurred during the RAM test for Bank A ($03); $0200 ORed with $03 = $0203.

Major error codes

Below is a brief description of the various test codes that might appearin the major error code:

Warning: Some of these codes may mean slightly different things in Macintoshmodels other than the Macintosh Portable. These descriptions describe specificallyhow they are used in the Macintosh Portable.

Minor error codes--Power Manager processor failures

If a communication problem occurs during communication with the Power Manager,the following error codes will appear somewhere in the minor error code(usually in the lower half of the code, but not always):

Diagnostic Code Summary

Below is a summarized version of the Sad Mac error codes:

Test Codes

$01 ROM checksum test.
$02 RAM test.
$05 RAM addressing test.
$06 VIA 1 chip access.
$08 Data bus test at top of memory.
$0B SCSI chip access.
$0C IWM (or SWIM) chip access.
$0D Not applicable to Macintosh Portable. SCC chip access.
$0E Data bus test at location $0.
$10 Video RAM test.
$11 Video RAM addressing test.
$14 Power Manager board power on.
$15 Power Manager self-test.
$16 RAM sizing.

Power Manager communication error codes

$CD38 Initial handshake.
$CD37 No reply to initial handshake.
$CD36 During send, no start of a handshake.
$CD35 During a send, no finish of a handshake.
$CD34 During a receive, no start of a handshake.
$CD33 During a receive, no finish of a handshake.

CPU exception codes (as used by the startup tests)

$0100 Bus error exception code
$0200 Address error exception code
$0300 Illegal error exception code
$0400 Zero divide error exception code $0500 Check inst error exceptioncode
$0600 cpTrapcc,Trapcc,TrapV exception code
$0700 Privilege violation exception code
$0800 Trace exception code
$0900 Line A exception code
$0A00 Line F exception code
$0B00 Unassigned exception code
$0C00 CP protocol violation
$0D00 Format exception
$0E00 Spurious interrupt exception code
$0F00 Trap inst exception code
$1000 Interrupt level 1
$1100 Interrupt level 2
$1200 Interrupt level 3
$1300 Interrupt level 4
$1400 Interrupt level 5
$1500 Interrupt level 6
$1600 Interrupt level 7