On power up, the SerialICE Kernel initializes the SIO and the RAM, and then transfers control to the application (state0).
All exceptions are first checked by the application. The application should tranfer control to the SerialICE Kernel's exception handler under the following two conditions:
The SerialICE Kernel's exception handler (located at 0xbfc00180) saves a small number of registers (currently 9) in the RAM save area. This operation requires the use of general registers k0 and k1. This means that the SerialICE Kernel cannot be used to debug code in which registers k0 and k1 hold useful values while interrupts are enabled, or to set breakpoints in a region of code where k0 and k1 are in use.
Once the registers have been saved, the SerialICE Kernel checks the exception type. If it is an SIO interrupt, the byte on the SIO is checked for value. If the byte has a value of 0x55 (ATTN) the SerialICE Kernel will respond with an 0xaa (ACK) and move to state1. For all other values the SerialICE Kernel will remain in state0 and return control to the application without sending any bytes back to the SerialICE Controller. If any other exception occurs, the the SerialICE Kernel will respond with an 0xaa (ACK) and move to state1.
For all other cases, the words are written to the instruction buffer area in RAM. In this case, the SerialICE Kernel does not transmit any bytes back to the SerialICE Controller. The instruction buffer has a capacity of 27 instructions.