| Bob,
Here's what I've collected from this notes file and a few other
places.
tom
===========================================================================
A M I G A ' S I N I T I A L I Z A T I O N C O L O R S
------------- --------------------------- -----------
Dark gray Ok Hardware
Light gray Ok Software
Red Bad ROM Checksum
Green Bad RAM
Blue Bad Custom Chips
Yellow Exception
A M I G A ' S I N I T I A L I Z A T I O N
------------- ---------------------------
Clear Chips
Disable DMA and Interrupts
Clear the Screen
Check the Hardware
Pass or fail the Hardware to the Screen
Checksum the ROMs
Pass or fail the ROMs to the Screen
System setup
Check the for RAM at $C00000
Move SYS_BASE to $C00000 if it exists
RAM Test
Pass or fail the RAM to the Screen
Check the Software
Pass or fail the Software to the Screen
Set up the RAM
Link the Libraries
Find External RAM and link it to the list
Set up Interrupts and DMA
Start default Task
Check for 68010, 68020, and 68881
Check for an Exception
System Reset
Here's a quick explanation.
nnnnnnnn.nnnnnnnn
________ ________
/ \
error# address
The error# is a combination of standard 68000 exception #'s and Amiga
specific error codes as described in the exec/alerts.h (or .i) header.
Low numbers here (like your 000000004.) are straight 68000 codes:
0 Call to Debug
1 -- ? --
2 Bus Error
3 Address Error
4 Illegal Instruction
5 Division by Zero
6 CHK inst. (shouldn't happen)
7 TRAPV inst. (shouldn't happen)
8 Priviledged inst.
9 trace (single step)
A Line 1010 emulator
B Line 1111 emulator
2x Trap instructions 0-E
2F Normal break point
"Illegal instruction" (4) often happens when you've trashed some
memory containing code or vectors. "Address Error" (3) can occur when
code attempts to do word or longword manipulations on an odd address.
This often occurs if you pass an invalid, no-longer-valid, or zero
pointer to a sytem routine. Gurus 3 and 4 are the most common Gurus.
If you ever get the higher Guru numbers, exec/alerts.h can help
you decipher them. Values in alerts.h are OR'd together to create
the Guru #. Example:
80038007.nnnnnnnn
80000000 = Dead End Alert
00030000 = OpenLibrary error
00008007 = on dos.library
Some Guru's can even help diagnose hardware problems. For example,
87000008. (Key already free) or 8700000B. (Key out of range) can be
a symptom of keyboard or static problems.
The address (righthand) portion of the Guru number is either the
address where the error occurred (often helpful in debugging) OR
the address of the task that had the error (not so helpful unless
you are running many tasks). Your $97B0 is the usual address of
the initial CLI process under 1.1. I guess you started your program
from the initial CLI. Under 1.1, the usual address starts with $A.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Carolyn Scheppner -- CBM >>Amiga Technical Support<<
UUCP ...{allegra,caip,ihnp4,seismo}!cbmvax!carolyn
PHONE 215-431-9180
"You Too Can Be An Amiga Guru!"
by Dave Boulton
('New & Improved' version as of 11 Feb 86)
Arrrrrrgh!, you snarl as the dreaded System Request box pops on to
the Workbench screen:
Software error - task held
Finish ALL disk activity
Select CANCEL to reset/debug
You stare at the computerese for a moment, and then hit the CANCEL
button. The current screen is pushed down and you find yourself
staring at the orange and black finality of:
Software Failure. Press left mouse button to continue.
Guru Meditation #02010009.00009310
Specific error code -----+ +--- Task Address
| |
02 01 0009 . 00009310
| |
Subsystem number -+ +--- General error code
An alert number is divided into several parts. The section to the
right of the decimal point is simply the address in RAM of the
task that was running when the error occurred. This helps tell
someone who is debugging a program which of the many different
programs running in the Amiga caused the problem. In the example
given above, the running task was at 9310 hex. In this case that
happens to mean that the error occurred in CLI process number 1.
The first two digits tell which module of the operating system
reported the error (this is technically known as the 'alert
object' or a Subsystem ID). In the example above the alert object
is 02, which tells me that the error was reported by the Graphics
library.
The first digit can be encoded in a funny way. The 'most
significant bit' of this digit says whether or not this alert is a
'dead-end'; that is, does the system have a chance of recovering
from the error or not. If the alert object had been given as 82
instead of 02, then the alert would be a 'dead-end'.
In practice, this is a pretty narrow distinction. By the time you
have gotten to the Alert Box the system is in such dire straits
that the only choices left are to reboot, or to enter the system
debugger. The 'dead-end' bit could possibly cause some confusion
if you aren't used to dealing in hexadecimal. If the first digit
of the alert object is ever greater than 7 (hexadecimal) then
subtract 8 from it. Thus if the first two digits were B1, then the
alert is a dead-end error reported by the Workbench (Subsystem ID
code 31). (B minus 8 equals 3, for those of you without the
required 16 fingers!)
The Subsystem ID codes are as follows:
Exec Library 01 Console Device 11
Graphics Library 02 GamePort Device 12
Layers Library 03 Keyboard Device 13
Intuition Library 04 TrackDisk Device 14
Math Library 05 Timer Device 15
CList Library 06 CIA Resource 20
DOS Library 07 Disk Resource 21
RAM Library 08 Misc Resource 22
Icon Library 09 BootStrap 30
Audio Device 10 Workbench 31
The next two digits specify the general type of error which has
occurred. For many specialized types of errors this field is 00,
instead of one of the general error codes below. This field is
often very useful, since the user can easily tell such things as
out-of-memory conditions, and missing libraries or device drivers
(if you have deleted files from the LIBS or DEVS directories of
your boot disk). In the example given above the general error code
is 01, which means the the Graphics Library was not able to find
enough free memory to allocate for some reason.
The general error codes are:
Insufficient memory 01 OpenDevice error 04
MakeLibrary error 02 OpenResource error 05
OpenLibrary error 03 I/O error 06
The last four digits of the alert number give specific information
about exactly what error has occurred. The interpretation of the
specific error code depends on which subsystem we are talking
about. Each subsystem reuses the same values for the specific
error code with different meanings. In our example the specific
error code is 0009. Since we are talking about an error in the
graphics library, we determine that the error is called
'TextTmpRas' which means that a call to the Text() routine (trying
to draw characters on the screen) ran out of memory when it tried
to allocate memory for a TmpRas (temporary raster work area) data
structure.
If the error had been in a different subsystem (say the Intuition
library) then the same error code of 0009 would have had a
completely different interpretation (for Intuition it would mean
that the Screen Type parameter to an OpenScreen call was not a
valid type).
There is one special case in dealing with Guru Meditation Numbers.
Everything that we have discussed so far has to do with alerts
that are detected and generated by the Amiga ROM Kernel. There is
another case, which is when an alert is caused by a 68000
processor exception (or 'trap'). Whenever a CPU trap occurs (for
instance, an illegal opcode is executed) the Exec will generally
cause an alert. A program can intercept this trap processing, and
insert its own 'trap handler' to perform some other function, but
usually these traps end up causing an alert. When this happens,
the left hand part of the guru number will be a small value. The
subsystem ID and the general error code will both be zero. The
specific error code will be the 'trap number' of the trap that
occurred. The trap numbers are part of the 68000 chip, and are not
assigned by the ROM kernel like other error codes are.
The following is a list of all the possible CPU traps. A few of
these will never show up as an alert because they are always
handled by the ROM Kernel. I list all of them here for
completeness (and just in case I'm wrong, and they ever _do_ show
up).
Bus Error 02 Priviledge Violation 08
Address Error 03 Instruction Trace 09
Illegal Instruction 04 Line A Emulation 0A
Divide by Zero 05 Line F Emulation 0B
CHK instruction 06 TRAP 0 ... 15 20 ... 2F
TRAPV (Overflow) 07
The following is a list of the specific error codes and a short
comment about their meaning. The descriptions are a slightly
edited version of the exec/alerts file, so they are very cryptic.
Exec Library
------------
ExcptVect 81000001 CPU trap vector checksum
BaseChkSum 81000002 ExecBase checksum error
LibChkSum 81000003 library checksum failure
LibMem 81000004 no memory to make library
MemCorrupt 81000005 corrupted free memory list
IntrMem 81000006 no memory for interrupt servers
Graphics Library
----------------
CopDisplay 82010001 copper display list, no memory
CopInstr 82010002 copper instruction list, no mem.
CopListOver 82000003 copper list too long
CopIListOver 82000004 copper intermediate list too long
CopListHead 82010005 copper list head, no memory
LongFrame 82010006 long frame, no memory
ShortFrame 82010007 short frame, no memory
FloodFill 82010008 flood fill, no memory
TextTmpRas 02010009 text, no memory for TmpRas
BltBitMap 8201000A BltBitMap, no memory
Intuition Library
-----------------
GadgetType 84000001 unknown gadet type
CreatePort 84010002 create port, no memory
ItemAlloc 84010003 item plane alloc, no memory
SubAlloc 84010004 sub alloc, no memory
PlaneAlloc 84010005 plane alloc, no memory
ItemBoxTop 84000006 item box top < RelZero
OpenScreen 84010007 open screen, no memory
OpenScrnRast 84010008 OpenScreen's AllocRast, no mem.
SysScrnType 84000009 open sys screen, unknown type
AddSWGadget 8401000A add SW gadgets, no memory
OpenWindow 8401000B open window, no memory
BadState 8400000C Bad State Return entering Int.
BadMessage 8400000D Bad Message received by IDCMP
WeirdEcho 8400000E Weird echo causing problem
NoConsole 8400000F couldn't open the Console Device
DOS Library
-----------
StartMem 07010001 no memory at startup
EndTask 07000002 EndTask didn't
QPktFail 07000003 Qpkt failure
AsyncPkt 07000004 Unexpected packet received
FreeVec 07000005 Freevec failed
DiskBlkSeq 07000006 Disk block sequence error
BitMap 07000007 Bitmap corrupt
KeyFree 07000008 Key already free
BadChkSum 07000009 Invalid checksum
DiskError 0700000A Disk Error
KeyRange 0700000B Key out of range
BadOverlay 0700000C Bad overlay
TrackDisk Device
----------------
TDCalibSeek 14000001 calibrate: seek error
TDDelay 14000002 delay: error on timer wait
Timer Device
------------
TMBadReq 15000001 bad request
Disk Resource
-------------
DRHasDisk 21000001 get unit: already has disk
DRIntNoAct 21000002 interrupt: no active unit
BootStrap
---------
BootError 30000001 boot code returned an error
This comes from the V1.2 include files.
/*********************************************************************
* Format of the alert error number:
* +-+-------------+----------------+--------------------------------+
* |D| SubSysId | General Error | SubSystem Specific Error |
* +-+-------------+----------------+--------------------------------+
* D: DeadEnd alert
* SubSysId: indicates ROM subsystem number.
* General Error: roughly indicates what the error was
* Specific Error: indicates more detail
**********************************************************************/
/* General Dead-End Alerts:*/
/*------ alert types */
#define AT_DeadEnd 0x80000000
#define AT_Recovery 0x00000000
/*------ general purpose alert codes */
#define AG_NoMemory 0x00010000
#define AG_MakeLib 0x00020000
#define AG_OpenLib 0x00030000
#define AG_OpenDev 0x00040000
#define AG_OpenRes 0x00050000
#define AG_IOError 0x00060000
#define AG_NoSignal 0x00070000
/*------ alert objects: */
#define AO_ExecLib 0x00008001
#define AO_GraphicsLib 0x00008002
#define AO_LayersLib 0x00008003
#define AO_Intuition 0x00008004
#define AO_MathLib 0x00008005
#define AO_CListLib 0x00008006
#define AO_DOSLib 0x00008007
#define AO_RAMLib 0x00008008
#define AO_IconLib 0x00008009
#define AO_ExpansionLib 0x0000800A
#define AO_AudioDev 0x00008010
#define AO_ConsoleDev 0x00008011
#define AO_GamePortDev 0x00008012
#define AO_KeyboardDev 0x00008013
#define AO_TrackDiskDev 0x00008014
#define AO_TimerDev 0x00008015
#define AO_CIARsrc 0x00008020
#define AO_DiskRsrc 0x00008021
#define AO_MiscRsrc 0x00008022
#define AO_BootStrap 0x00008030
#define AO_Workbench 0x00008031
/* Combine the above to get the actual number */
/* Specific Dead-End Alerts: */
/*------ exec.library */
#define AN_ExecLib 0x01000000
#define AN_ExcptVect 0x81000001 /* 68000 exception vector checksum */
#define AN_BaseChkSum 0x81000002 /* execbase checksum */
#define AN_LibChkSum 0x81000003 /* library checksum failure */
#define AN_LibMem 0x81000004 /* no memory to make library */
#define AN_MemCorrupt 0x81000005 /* corrupted memory list */
#define AN_IntrMem 0x81000006 /* no memory for interrupt servers */
#define AN_InitAPtr 0x81000007 /* InitStruct() of an APTR source */
#define AN_SemCorrupt 0x81000008 /* a semaphore is in illegal state */
#define AN_FreeTwice 0x81000009 /* freeing memory already freed */
#define AN_BogusExcpt 0x8100000A /* illegal 68k exception taken */
/*------ graphics.library */
#define AN_GraphicsLib 0x02000000
#define AN_GfxNoMem 0x82010000 /* graphics out of memory */
#define AN_LongFrame 0x82010006 /* long frame, no memory */
#define AN_ShortFrame 0x82010007 /* short frame, no memory */
#define AN_TextTmpRas 0x02010009 /* text, no memory for TmpRas */
#define AN_BltBitMap 0x8201000A /* BltBitMap, no memory */
#define AN_RegionMemory 0x8201000B /* regions, memory not available */
#define AN_MakeVPort 0x82010030 /* MakeVPort, no memory */
#define AN_GfxNoLCM 0x82011234 /* emergency memory not available */
/*------ layers.library */
#define AN_LayersLib 0x03000000
#define AN_LayersNoMem 0x83010000 /* layers out of memory */
/*------ intuition.library */
#define AN_Intuition 0x04000000
#define AN_GadgetType 0x84000001 /* unknown gadet type */
#define AN_BadGadget 0x04000001 /* Recovery form of AN_GadgetType */
#define AN_CreatePort 0x84010002 /* create port, no memory */
#define AN_ItemAlloc 0x04010003 /* item plane alloc, no memory */
#define AN_SubAlloc 0x04010004 /* sub alloc, no memory */
#define AN_PlaneAlloc 0x84010005 /* plane alloc, no memory */
#define AN_ItemBoxTop 0x84000006 /* item box top < RelZero */
#define AN_OpenScreen 0x84010007 /* open screen, no memory */
#define AN_OpenScrnRast 0x84010008 /* open screen, raster alloc, no memory */
#define AN_SysScrnType 0x84000009 /* open sys screen, unknown type */
#define AN_AddSWGadget 0x8401000A /* add SW gadgets, no memory */
#define AN_OpenWindow 0x8401000B /* open window, no memory */
#define AN_BadState 0x8400000C /* Bad State Return entering Intuition */
#define AN_BadMessage 0x8400000D /* Bad Message received by IDCMP */
#define AN_WeirdEcho 0x8400000E /* Weird echo causing incomprehension */
#define AN_NoConsole 0x8400000F /* couldn't open the Console Device */
/*------ math.library */
#define AN_MathLib 0x05000000
/*------ clist.library */
#define AN_CListLib 0x06000000
/*------ dos.library */
#define AN_DOSLib 0x07000000
#define AN_StartMem 0x07010001 /* no memory at startup */
#define AN_EndTask 0x07000002 /* EndTask didn't */
#define AN_QPktFail 0x07000003 /* Qpkt failure */
#define AN_AsyncPkt 0x07000004 /* Unexpected packet received */
#define AN_FreeVec 0x07000005 /* Freevec failed */
#define AN_DiskBlkSeq 0x07000006 /* Disk block sequence error */
#define AN_BitMap 0x07000007 /* Bitmap corrupt */
#define AN_KeyFree 0x07000008 /* Key already free */
#define AN_BadChkSum 0x07000009 /* Invalid checksum */
#define AN_DiskError 0x0700000A /* Disk Error */
#define AN_KeyRange 0x0700000B /* Key out of range */
#define AN_BadOverlay 0x0700000C /* Bad overlay */
/*------ ramlib.library */
#define AN_RAMLib 0x08000000
#define AN_BadSegList 0x08000001 /* no overlays in library seglists */
/*------ icon.library */
#define AN_IconLib 0x09000000
/*------ expansion.library */
#define AN_ExpansionLib 0x0A000000
#define AN_BadExpansionFree 0x0A000001
/*------ audio.device */
#define AN_AudioDev 0x10000000
/*------ console.device */
#define AN_ConsoleDev 0x11000000
/*------ gameport.device */
#define AN_GamePortDev 0x12000000
/*------ keyboard.device */
#define AN_KeyboardDev 0x13000000
/*------ trackdisk.device */
#define AN_TrackDiskDev 0x14000000
#define AN_TDCalibSeek 0x14000001 /* calibrate: seek error */
#define AN_TDDelay 0x14000002 /* delay: error on timer wait */
/*------ timer.device */
#define AN_TimerDev 0x15000000
#define AN_TMBadReq 0x15000001 /* bad request */
#define AN_TMBadSupply 0x15000002 /* power supply does not supply ticks */
/*------ cia.resource */
#define AN_CIARsrc 0x20000000
/*------ disk.resource */
#define AN_DiskRsrc 0x21000000
#define AN_DRHasDisk 0x21000001 /* get unit: already has disk */
#define AN_DRIntNoAct 0x21000002 /* interrupt: no active unit */
/*------ misc.resource */
#define AN_MiscRsrc 0x22000000
/*------ bootstrap */
#define AN_BootStrap 0x30000000
#define AN_BootError 0x30000001 /* boot code returned an error */
/*------ Workbench */
#define AN_Workbench 0x31000000
/*------ DiskCopy */
#define AN_DiskCopy 0x32000000
|