total-carnage/MACROS.HDR

237 lines
4.3 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

*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