 Introduction
 Arithmetic      - Add, Subtract, Multiply, Divide
 Complement      - Negate (2's Comp) and Complement (1's)
 Logical         - And, Or, Xor
 Rotate / Shift  - Left and Right
:Introduction

These routines are for 16-bit unsigned arithmetic.  All use HL
as the accumulator or the result, and HL and DE contain the
operands required (if only one operand is needed, HL is used).

The available routines are:

	ADDHD  -- HL = HL + DE     SUBHD -- HL = HL - DE
	MULHD  -- HL = HL * DE     DIVHD -- HL = HL / DE
	NEGH   -- HL = 2's Complement of HL
	CMPH   -- HL = 1's Complement of HL
	ROTLH  -- HL is rotated left one bit position
	ROTRH  -- HL is rotated right one bit position
	SHFTLH -- HL is shifted left one bit position
	SHFTRH -- HL is shifted right one bit position
	ANDHD  -- HL = HL AND DE
	ORHD   -- HL = HL OR DE
	XORHD  -- HL = HL XOR DE

:                  Arithmetic Functions 

All of these routines operate on HL and DE, placing the result
in HL.  The Carry Flag is frequently used to indicate overflow.

ADDHD - 16-bit Addition

  ENTER: HL = Operand #1
	 DE = Operand #2
  EXIT : HL = Operand #1 + Operand #2
	  Carry Set (C) if Overflow, otherwise Clear (NC)
  USES : F,HL

 Usage:  This routine is not really needed since a simple
  "ADD  HL,DE" one-byte instruction accomplishes the same
  thing with only one byte instead of a 3-byte call.

SUBHD - 16-bit Subtraction

  ENTER: HL = Minuend
	 DE = Subtrahend
  EXIT : HL = Minuend - Subtrahend
	  Carry Set (C) if DE > HL, otherwise Clear (NC)
  USES : F,HL

 Usage:  This routine is no longer needed with Z80 processors
  since the "SBC  HL,DE" operation accomplishes the same
  function without resorting to a function call.

MULHD - 16-bit Multiplication

  ENTER: HL = Operand #1
	 DE = Operand #2
  EXIT : HL = Operand #1 times Operand #2
	  Carry Set (C) if result is > 65535
  USES : F,HL

 Usage:  This general-purpose routine may be used at any time
  to multiply two numbers.  It is optimized for speed, with a
  minor sacrifice on size, and it always takes 16 loops to
  perform any multiplication.

DIVHD - 16-bit Division

  ENTER: HL = Dividend
	 DE = Divisor
  EXIT : HL = HL / DE
  USES : HL

 Usage:  This routine may be used at any time to divide two
  numbers.  It is optimized for speed, with a minor sacrifice
  on size, and always takes 16 loops to perform any division.

:NEGH - Two's Complement (Negate) a 16-bit Number

  ENTER: HL = 16-bit Operand
  EXIT : HL = Two's Complement of Operand
  USES : HL

 Usage:  This routine simply used to return the 2's
	 Complement of a 16-bit number.


CMPH - One's Complement a 16-bit Number

  ENTER: HL = 16-bit Operand
  EXIT : HL = One's Complement of Operand
  USES : HL

 Usage:  This routine simply used to return the 1's
	 Complement of a 16-bit number.

:ANDHD - Logically AND two 16-bit values
 ORHD  - Logically OR two 16-bit values
 XORHD - Logically XOR two 16-bit values

  ENTER: HL = Operand #1
	 DE = Operand #2
  EXIT : HL = Bitwise Logical AND of two Operands (ANDHD)
	      Bitwise Logical OR of two Operands  (ORHD)
	      Bitwise Logical XOR of two Operands (XORHD)
  USES : HL

 Usage: These routines simply perform the specified Boolean
	operation on the two supplied 16-bit values, and
	return the result.

:              Rotate and Shift Operations 

ROTLH - One bit Right Rotation of 16-bit value
ROTRH - One bit Left Rotation of 16-bit value

  ENTER: HL = 16-bit operand to rotate
  EXIT : HL = Rotated operand Left (ROTLH) or Right (ROTRH)
  USES : HL

 Usage:  These routines simply rotate the furnished 16-bit
  value left (ROTLH) or right (ROTRH) one bit position.  These
  are circular rotates, in which the most significant bit of H
  is rotated into the least significant bit position of L
  (ROTLH), and least significant bit of L is rotated into the
  most significant bit position of H (ROTRH).


SHFTLH - One bit Right Shift of 16-bit value, Zero Fill
SHFTRH - One bit Left Shift of 16-bit value, Zero Fill

  ENTER: HL = 16-bit operand to shift
  EXIT : HL = Shifted operand Left (SHFTLH) or Right (SHFTRH)
  USES : HL

 Usage:  These routines simply shift the furnished 16-bit
  value left (SHFTLH) or right (SHFTRH) one bit position filling
  the cleared position with a Zero.  In SHFTLH, HL is shifted
  left one bit position with the least significant bit of L
  filled with a Zero.  In SHFTRH, HL is shifted right one bit
  position with the most significant bit of H filled with a Zero.

  Note that SHFTLH is equivalent to the more efficient single
  byte "ADD  HL,HL" operation and SHFTRH is equivalent to the
  four byte Z80 sequence:

		SRL	H
		RR	L
