*** Registers
	GR0	*always zero
	GR1	scratch
	GR2	normal return register
	GR27	Global Data Pointer (Must be set in crt0)
	GR30	SP stack pointer
	GR31	milicode return pointer

	SR*	Space registers	

	CR24-31	Temporary Control Registers
	CR14	Vector Table Register (like VBR on an m68020)
	CR0	Put in a count, causes exception when decremented to 0.

FORTH's magic number is 031240

***
    Series 700/800
      The following options are also supported:

           -snnn          set the initial system load (ISL) start address to
                          nnn in the volume label.  This is useful when
                          building boot media for Series 700/800 systems.

           -lnnn          specifies the length in bytes of the ISL code in
                          the LIF volume.

           -ennn          set the ISL entry point to nnn bytes from the
                          beginning of the ISL.  For example, specifying -
                          e3272 means that the ISL entry point is 3272
                          (decimal) bytes from the beginning of the ISL
                          object module.

           -Knnn          forces the directory start location to be the
                          nearest multiple of nnn x 1024 bytes from the
                          beginning of the volume.  This is necessary for
                          booting Series 700/800 systems from LIF media.

	   -n xxx  	  Sets the volume name to be xxx.
	lifinit -v64000000 -d64 -nISL10 -K2 -s4096 -l61440 -e5336 this_lif

# lifcp --
#	-r	Forces RAW mode copying. (file type BIN (-23951))
#	-T	Sets the file type of the directory entry.
#	-Knnn	forces each file copied in to begin on a nnn x
#               1024-byte boundary from the beginning of the volume
#	Note: the word echoed below MUST be 10 characters exactly.
#
	(echo "FORTH    ") | lifcp -r -T-030001 -K2 - this_lif:AUTO	


#
# somxtract infile outfile --
#	converts a series 800 file *only* into a raw image

It turns out the native cc and our current gcc produce series 700
output, so in this case it runs till if fills up the hard disk.

*** rombootlf5 is a FORTH interpreter in a "boot" image. (it won't run on
the HP742 board)

lifls -l rombootlf5
volume ISL10 data size 249984 directory size 8 94/04/20 10:26:36
filename   type   start   size     implement  created
===============================================================
ISL        -12800 16      240      0          94/04/20 10:26:36
HPUX       -12928 256     496      0          94/04/20 10:26:37
 IOMAP      -12960 752     1504     0          94/04/20 10:26:37
AUTO       -12289 2256    1        0          94/04/20 10:26:38
FORTH      -12960 2264    208      0          94/04/20 10:26:38
HPFORTH    ASCII  2472    420      0          94/04/20 10:26:38
BOOTROM    ASCII  2896    3849     0          94/04/20 10:26:40
PAD1       -12290 6752    1172     0          94/04/20 10:26:40

*** The ISL is only needed when booting the raw hardware. As we're runing
on a monitor (barely) all we need is a crt0 that initiallizes the GR27
Global Data Pointer and zero's bss.

*** Initial Program Load
--------------------
From page 11-56, architecture book.
0x00000000 +------------------------------------+ 0
	   |	LIF_MAGIC	|		|
0x00000004 +------------------------------------+ 4
	   |					|
0x000000F0 +------------------------------------+ 240
	   |		IPL_ADDR		|
0x000000F4 +------------------------------------+ 244
	   |		IPL_SIZE		|
0x000000F8 +------------------------------------+ 248
 	   |		IPL_ENTRY		|
0x000000FC +------------------------------------+ 252
	   |					|
IPL_ADDR   +------------------------------------+ IPL_ADDR
	   |	    Position Independant	|
	   |		IPL Code		|
	   |	(including IPL_CHECKSUM)	|
	   +------------------------------------+ IPL_ADDR + IPL_SIZE
	   |					|
	   +------------------------------------+

IPL_ADDR	2 Kbyte aligned, nonzero
IPL_SIZE	Multiple of 2Kbytes, <= 256 Kbytes
IPL_ENTRY	Word aligned, less than IPL_SIZE

Loads at IPL_START

This is based on Cobra/Coral hardware:
      LED register at 0xf080024
      I/O status register at 0xf0800000
      EEPROM at 0xf0810000 (LAN ID begins at byte 0)

Here's a dump of the LIF volume header using "xd" (od with hex output)

*
00000f0 0000 1000 0000 9800 0000 0000 0000 0000
                       ^^^^
		This is the size
*
0000800 5445 5354 2020 2020 2020 a271 0000 0010
	^^^^ ^^^^ ^^^^ ^^^^ ^^^^           ^^^^<-- this is the ipl offset
	this is the vol name	 ^^^^<- this is the type

0000810 0000 0098 9407 1919 1426 8001 0000 0000
	     ^^^^
	This is the ipl size

Interupts
---------
The vector table is access by %iva (%cr14). The address here must be a
multiple of 2048. The indexes are:
1	high-priority
2	power failure
3	recovery counter
4	external interrupt
5	low-priority machine check
6	instruction TLB miss/instruction page fault
7	instruction memory protection
8	illegal instruction
9	break instruction
10	priviledged operation
11	priviledged register
12	overflow
13	conditional
14	assist exception
15	data TLB miss fault/data page fault
16	non access instruction TLB miss fault
17	non access page TLB miss fault/non access data page fault
18	data memory protection/unaligned data reference
19	data memory break
20	TLB dirty bit
21	page reference
22	assist emulation
23	higher-priority transfer
24	lower-priority transfe
25	taken branch
