Update for ASPIC Assembler and ASxxxx Linker.

This update (2007_04_01) contains fixs for the
PIC assembler and ASxxxx Linker.

The PIC18 series has a PC address based on the
byte address of the memory.  (All other PIC
series have a PC address based on the word
address in memory.)

The PIC18 series (22-bit addressing range)
assembler has been corrected to use byte
addressing.  The assembler supports two
modes of operation for the CALL, GOTO,
and Branching instructions:

  1) The ASxxxx mode supports the direct
     use of program labels as an argument.
     The assembler and linker together
     process the label byte-address into
     the offset to be included in the
     instructions.

	.picgoto   0	; Select ASxxxx Mode (default)

	CALL DOIT	; PC <<--  Address of DOIT
	---
DOIT:
	---
	CALL DOIT	; PC <<--  Address of DOIT


  2) The PIC mode places the argument value
     directly into the instruction.  This
     requires the PC address or offset
     (in bytes) to be converted to an
     instruction offset (address or offset
     divided by 2).  This precludes the use
     of a relocatable address because the
     assembler only supports relocatable
     arguments +/- a constant.

	.picgoto   1	; Select PIC Mode

	CALL N		; PC <<--  2*N


     The Branching instruction argument can
     be manipulated to allow the use of
     labels:

	.picgoto   1	; Select PIC Mode

	BRA  +((1$ - (.+2))/2)	; Forward Branching Mode
	        \________/__Positive Absolute Number
   	---
1$:

	---
	BRA  -(((.+2) - 1$)/2)	; Backward Branching Mode
	        \________/__Positive Absolute Number


     Extreme care must be used in performing the
     required arithmetic to create the argument
     value.  ASxxxx treats all numbers as unsigned
     when performing arithmetic.  For example the
     representation of -2 is 0xFFFE (2-byte mode)
     which is 65534 in unsigned notation. If you
     now divide this by 2 (0x0002) the result is
     (0xFFFE/0x0002) = 32767 (0x7FFF), not -1 (0xFFFF).


