*DEFS FOR SYMBOLS REFERENCED FROM MACROS .GLOBL ERRORLOG *------- Macros for TMS34010 assembly language programs ---------------- * Swap contents of two registers that reside in same file SWAP $MACRO R1,R2 XOR :R1.S:,:R2.S: XOR :R2.S:,:R1.S: XOR :R1.S:,:R2.S: $END * Test a register for zero TEST $MACRO R1 MOVE :R1.S:,:R1.S: $END *EQUATES FOR XY COMPARES(MOTOLORA STYLE) JRXEQ $MACRO P1 JRXZ P1.S $END JRXNE $MACRO P1 JRXNZ P1.S $END JRXGE $MACRO P1 JRXNN P1.S $END JRXLT $MACRO P1 JRXN P1.S $END JRYEQ $MACRO P1 JRYZ P1.S $END JRYNE $MACRO P1 JRYNZ P1.S $END JRYGE $MACRO P1 JRYNN P1.S $END JRYLT $MACRO P1 JRYN P1.S $END * *SUBTRACT REGISTER FROM MEMORY * SUBRM REG,ADDR,FIELD SIZE *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * SUBRM $MACRO P1,P2,P3 MOVE :P2:,A14,:P3: SUB :P1:,A14 MOVE A14,:P2:,:P3: $END * *ADD REGISTER TO MEMORY * ADDRM REG,ADDR,FIELD SIZE *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * ADDRM $MACRO P1,P2,P3 MOVE :P2:,A14,:P3: ADD :P1:,A14 MOVE A14,:P2:,:P3: $END *INCREMENT LOCATION *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY ** INCW $MACRO P1 MOVE :P1:,A14 INC A14 MOVE A14,:P1: $END * *DECREMENT WORD *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY ** DECW $MACRO P1 MOVE :P1:,A14 DEC A14 MOVE A14,:P1: $END * *SUBTRACT MEMORY * SUBM ADDR,REG,FIELD SIZE *SUBTRACTS ADDRESS FROM REGISTER *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * SUBM $MACRO P1,P2,P3 MOVE :P1:,A14,:P3: SUB A14,:P2: $END * *ADD MEMORY * ADDM ADDR,REG,FIELD SIZE *ADDS ADDRESS FROM REGISTER *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * ADDM $MACRO P1,P2,P3 MOVE :P1:,A14,:P3: ADD A14,:P2: $END * *NEGATE MEMORY * NEGM ADDR,FIELD SIZE *NEGATES ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * NEGM $MACRO P1,P2 MOVE :P1:,A14,:P2: NEG A14 MOVE A14,:P1:,:P2: $END * *COMPARE MEMORY * CMPM ADDR,REG,FIELD SIZE *COMPARES ADDRESS TO REGISTER *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * CMPM $MACRO P1,P2,P3 MOVE :P1:,A14,:P3: CMP A14,:P2: $END * *CLEAR MEMORY * CLRM ADDR,FIELD SIZE *CLEARS ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * CLRM $MACRO P1,P2 CLR A14 MOVE A14,:P1:,:P2: $END * *COMPLEMENT MEMORY * COMM ADDR,FIELD SIZE *COMPLEMENTS ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * COMM $MACRO P1,P2 MOVE :P1:,A14,:P2: NOT A14 MOVE A14,:P1:,:P2: $END * *SHIFT LEFT MEMORY * SLLM SHIFT COUNT,ADDR,FIELD SIZE *SHIFTS ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * SLLM $MACRO P1,P2,P3 MOVE :P2:,A14,:P3: SLL :P1:,A14 MOVE A14,:P2:,:P3: $END * *SHIFT RIGHT ARITHMETIC MEMORY * SRAM SHIFT COUNT,ADDR,FIELD SIZE *SHIFTS ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * SRAM $MACRO P1,P2,P3 MOVE :P2:,A14,:P3: SEXT A14,:P3: SRA :P1:,A14 MOVE A14,:P2:,:P3: $END * *SHIFT RIGHT LOGICAL MEMORY * SRLM SHIFT COUNT,ADDR,FIELD SIZE *SHIFTS ADDRESS CONTENTS *A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY * SRLM $MACRO P1,P2,P3 MOVE :P2:,A14,:P3: ZEXT A14,:P3: SRL :P1:,A14 MOVE A14,:P2:,:P3: $END *PUSH REGISTER(S) ONTO THE STACK *USAGE: ONE OPERAND -> PUSH OP 2 OR MORE OPS -> PUSH (OP1,OP2,...,OPN) PUSH $MACRO REG MOVE :REG:,-*SP,1 $END *PULL REGISTER(S) OFF OF THE STACK *USAGE: ONE REGISTER -> PULL REG 2 OR MORE REGS -> PULL (REG1,REG2,...,REGN) PULL $MACRO REG MMFM SP,:REG: $END *PUSH LOW WORD OF REGISTER ON TO STACK *ONE REGISTER ONLY! *USAGE: PUSHW REG PUSHW $MACRO REG MOVE :REG:,-*SP,0 $END *PULL LOW WORD OF REGISTER OFF OF STACK *ONE REGISTER ONLY! *USAGE: PULLW REG PULLW $MACRO REG MOVE *SP+,:REG:,0 $END *MAKE A SINGLE SOUND USING THE GSP SOUND PROCESSOR SOUND1 $MACRO SNDNUM MOVI :SNDNUM:,A0 CALLA ONESND $END *NULL LONG WORD LONGNULL:$MACRO .LONG 0 $END * *LOCKUP MACRO * LOCKUP $MACRO DINT JRUC $ $END * *CALLERR - CALL THE ERROR LOG MACRO *REGS = # OF REGISTERS PUSHED ON THE STACK BY THIS SUBROUTINE * CALLERR $MACRO NUM,REGS MMTM SP,A1,A2 MOVE *SP((:REGS:+2)*20H),A1,L MOVI :NUM:,A2 CALLA ERRORLOG MMFM SP,A1,A2 $END