INSIDER's Command Protocol.

Every transfer is initiated by the TARGET to the INSIDER... This way the tool
will sync with the target on behalf of the width of the first low-high start pulses
and the following 9 low pulses. All "cyc" refers to Target-cycles (Fosc/4).

The first 2-sync pulses MUST be: low_256cyc and high_512cyc (low=high/2).
And the following 9-low-sync pulses MUST be: 256cyc.
For speeds: DBN=2x 4x 8x 16x 32x all sync pulses MUST be exactly divided by DBN.

This way, the INSIDER can filter any user-I/O-activity and sync a real 1Bit tranfer
from the Target and decode it at any TARGETs Freq from 30KHz to 50MHz.

Target -> INSIDER: must has 10x same width low sync pulses
   <-START-><------   DATA=1<--->=640cyc   DATA=0<--->=384cyc   ------>
 __256 ____256 ___256 ___256 ___256 ___256 ___256 ___256 ___256 ___256 _
   \__/512 \__/D0 \__/D1 \__/D2 \__/D3 \__/D4 \__/D5 \__/D6 \__/D7 \__/

INSIDER -> TARGET: must has 9x same width low sync pulses
  START<----  DATA=1<--->=768cyc   DATA=0<--->=256cyc  -------->
 __256 ___256 ___256 ___256 ___256 ___256 ___256 ___256 ___256 _
   \__/D0 \__/D1 \__/D2 \__/D3 \__/D4 \__/D5 \__/D6 \__/D7 \__/


When the TARGET code reaches a breakpoint, it executes a call to the DBUG bootstrap routine
that sends the break number byte to the INSIDER... Then the tool enters its ON-BRK mode
and responds one of three possibilities:

1.- Read_cmd + addressH + addressL
2.- Write_cmd+ addressH + addressL + data
3.- Quit_cmd (break_ret or G/C nnnnnn)

Command Structure:

CmdByte1:  Byte2   Byte3
7654 3210  7---0   7---0
111addrUU  adrHH   adrLL   ---> QUIT_cmd SET PC G nnnnnn
101addrUU  adrHH   adrLL   ---> QUIT_cmd SET PC C nnnnnn
1001 xxxx  -------------------> SEND DBN SPEED
1000 xxxx  -------------------> QUIT_cmd BRK RET
0100 adrH  adrLL   data    ---> WR_CMD DATA RAM
0000 adrH  adrLL  ------------> RD_CMD DATA RAM
0101 xxxx  data   ------------> WR_CMD W_TMP
0001 xxxx  -------------------> RD_CMD W_TMP
0110 xxxx  data   ------------> WR_CMD STATUS_TMP
0010 xxxx  -------------------> RD_CMD STATUS_TMP
0x11 adrH  adrLL  ------------> RD_EEPROM_CMD

Debug Sequence:

.....	Init ON-SCAN mode executing INSIDER G cmd
.....	Power up TARGET to start code run

TARGET  sends:  bkn (hex byte)		- First BreakPoint query initiated by the Target
INSIDER sends:  SEND DBN SPEED cmd	- Only on First Break Query
TARGET  sends:  DBN value (hex byte)	- Only on First Break Query
INSIDER sends:  RD_CMD W_TMP
TARGET  sends:  W_TMP (hex byte)
INSIDER sends:  RD_CMD STATUS_TMP
TARGET  sends:  STATUS_TMP (hexbyte)	- INSIDER will show: BRKnn W/STATUS and PIC Freq.
					  and enters ON-BREAK mode - Led Red ON
INSIDER sends:  RD_CMD DATA RAM
TARGET  sends:  data (hex byte)

INSIDER sends:  WR_CMD DATA RAM
TARGET  sends:  nothing

.....	and so on until:

INSIDER sends:  QUIT_cmd BRK RET	- INSIDER enters ON-SCAN mode - Led Green ON
TARGET  sends:  nothing			- Target will run the user-code from BRKn

.....	or

INSIDER sends:  QUIT_CMD SET PC		- INSIDER enters ON-SCAN mode
TARGET  sends:  nothing			- Target will run the user-code from nnnnnn

.....	then TARGET rerun its CODE and INSIDER enters its ON-SCAN mode
	waiting for the next breakpoint query from the TARGET.

All the INSIDER's commands available during its ON-BRK mode, are nothing more than
long sequences of read/write commands byte by byte between the INSIDER and TARGET.
