;++++ ; ; 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