
Object file format:

.o file:

	'RCC-OBJ',0 (8 bytes)
	<major version> (4 bytes), currently 0
	<minor version> (4 bytes), currently 7
	<info table offset> (4 bytes)
	... <pcode> ...
	... <string heap> ...

	Info table:
	Service info:

		<service count> (4 bytes)

		For each service:

			<null-terminated name>
			<pcode address> (4 bytes)

	String info:

		<string count> (4 bytes)

		For each string:

			<string address> (4 bytes, points into string heap)

	<EOF>


-----------------------


Notes:


The I_CALL and I_CALLD instructions change the IP to the pcode  
address given by the immediate operand (I_CALL takes its operand  
from the expression stack).  The routine entry frame is just 2  
DWORDs.  The first DWORD is the amount of space to reserve on the  
execution stack for local variables.  The second DWORD is the count  
of args to transfer from the expression stack to the beginning of  
the locals area (reserved space on the execution stack).  The I_RET  
instruction is followed by an immediate operand that is the amount  
to adjust the execution stack.

The I_JTAB instruction is followed by a jump table.  The jump table  
commands are enumerated in RCCOBJ.H.  Commands are followed by data  
as described below.  All commands except JT_END compare in some way  
the value on top of the expression stack to some immediate data.   
If the comparison yields TRUE, then the IP is changed to the pcode  
address of that comparison.  JT_END marks the end of a jump table  
(all comparisons failed).

JT_END
JT_EQ v addr
JT_NE v addr
JT_LT v addr
JT_GT v addr
JT_LE v addr
JT_GE v addr
JT_RANGE v1 v2 addr
