;++++
;
; COM
; COMPLEMENTS THE ACCUMULATOR
;
;----
.DEFINE COM =
[
	CMA
	INR	A]
;++++
;
; CLC
; CLEARS THE CARRY BIT IN THE CONDITION CODES
;
;----
.DEFINE	CLC =
[
	ORA	A]
;++++
;
; TST REG
; SETS THE CONDITION CODES BASED ON THE VALUE OF THE
; GIVEN REGISTER, USES A
;
;----
.DEFINE	TST [REG] =
[
.IFN REG-A, [	MOV	A,REG]
	ORA	A]
;++++
;
; TSTD REG
; SETS THE CONDITION CODES LIKE TST ABOVE, BUT THE
; OPERAND REG IS ASSUMED TO REPRESENT A REGISTER
; PAIR, CLOBBERS A. REG MAY BE BC, DE, HL ONLY
;
;----
.DEFINE	TSTD [REG] =
[
	MOV	A,REG
	ORA	REG+1]
;++++
;
; CLR REG
; CLEARS (SETS TO 0) THE CONTENTS OF THE GIVEN
; REGISTER (DOES NOT KILL A)
;
;----
.DEFINE	CLR [REG] =
[
.IFN REG-A, [	MVI	REG,0][	XRA	A]]
;++++
;
; JSR REG
; MACRO TO DO A SUBROUTINE CALL TO ADDRESS GIVEN
; IN REG
;
;----
.DEFINE JSR [REG,%RET] =
[
.IFIDN [REG] [H], [	PUSH	H
	LXI	H,%RET
	XTHL
	PCHL
%RET:	.EXIT]
.IFIDN [REG] [X], [	PUSH	X
	LXI	X,%RET
	XTIX
	PCIX
%RET:	.EXIT]
.IFIDN [REG] [Y], [	PUSH	Y
	LXI	Y,%RET
	XTIY
	PCIY
%RET:	.EXIT]
.ERROR	/JSR - MUST USE X,Y OR H/]
;++++
;
; MVD DREG,SREG
; MOVES A 16-BIT VALUE FROM SREG TO DREG
; SREG,DREG MAY BE H,D,B,X,Y
;
;----
.DEFINE MVD [DREG,SREG] =
[
.IFIDN [SREG] [X], [	PUSH	X
	POP	DREG
	.EXIT]
.IFIDN [DREG] [X], [	PUSH	SREG
	POP	X
	.EXIT]
.IFIDN [DREG] [Y], [	PUSH	SREG
	POP	Y
	.EXIT]
.IFIDN [SREG] [Y], [	PUSH	Y
	POP	DREG
	.EXIT]
	MOV	DREG,SREG
	MOV	DREG+1,SREG+1]
;++++
;
; OPER CHAR1,CHAR2,PREC,TYPE,SUB
; DEFINES AN OPERATOR TABLE ENTRY FOR THE GIVEN
; OPERATOR (WITH PRECEDENCE, ETC.)
;
; NEEDS:
;   CHAR1 - LO ORDER CHARACTER OF OPERATOR
;   CHAR2 - HI ORDER CHARACTER OF OPERATOR
;	IF 0, IS A SINGLE CHAR OPERATOR
;   PREC - PRECEDENCE OF OPERATOR
;   TYPE - TYPE OF OPERATOR VALUES
;   SUB - ADDRESS OF SUBROUTINE TO EVALUATE OPER
;
;----
.DEFINE OPER[CHAR1,CHAR2,PREC,TYPE,SUB]=
[
	.BYTE	CHAR1
.IFB [CHAR2], [.BYTE	0] [.BYTE CHAR2]
	.BYTE	PREC
	.BYTE	TYPE
	.WORD	SUB]
O.CHAR	= 0	;OFFSET OF CHARACTER
O.PREC	= 2	;OFFSET OF PRECEDENCE
O.TYP	= 3	;OFFSET OF TYPE
O.SUB	= 4	;OFFSET OF EVALUATION SUBROUTINE
O.SIZ	= 6	;SIZE OF OPERATOR ENTRY
                                                                                                     