677 lines
8.8 KiB
Plaintext
Executable File
677 lines
8.8 KiB
Plaintext
Executable File
*MACS.EQU
|
|
*
|
|
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
|
|
*ALL RIGHTS RESERVED
|
|
*
|
|
|
|
|
|
LDLH .MACRO LONG_VALUE,REG
|
|
.DATA
|
|
VALUEI? .WORD :LONG_VALUE:
|
|
.sect "THECODE"
|
|
LDI @VALUEI?,:REG:
|
|
.ENDM
|
|
|
|
LDLFH .MACRO LONG_VALUE,REG
|
|
.DATA
|
|
VALUEI? .FLOAT :LONG_VALUE:
|
|
.sect "THECODE"
|
|
LDF @VALUEI?,:REG:
|
|
.ENDM
|
|
|
|
LONGROUT .MACRO
|
|
BR jago?
|
|
.sect "THECODE"
|
|
jago?
|
|
.ENDM
|
|
|
|
END_LONGROUT .MACRO
|
|
.text
|
|
.ENDM
|
|
|
|
|
|
COLORM .MACRO FLAG,X1,Y1,X2,Y2,PAL
|
|
LDI :FLAG:,R0
|
|
STI R0,@_ACNTL
|
|
LDI :X1:,AR2
|
|
LDI :Y1:,R2
|
|
LDI :X2:,R3
|
|
LDI :Y2:,RC
|
|
LDI :PAL:,RS
|
|
LDI 0,RE
|
|
CALL _rdma
|
|
.ENDM
|
|
|
|
DP_MACROS .set 0 ;1 = ACTIVATE
|
|
|
|
|
|
PTR .MACRO VARIABLE
|
|
.const
|
|
.globl :VARIABLE:I
|
|
:VARIABLE:I .word VARIABLE
|
|
.text
|
|
.ENDM
|
|
|
|
ADDAUD .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL AUDIT_ADD
|
|
.ENDM
|
|
|
|
ADDFL .MACRO CONSTANT,REG
|
|
.data ;sect "THEDATA"
|
|
LL? .float :CONSTANT:
|
|
.text
|
|
ADDF @LL?,:REG:
|
|
.ENDM
|
|
|
|
|
|
BCLR .MACRO BIT,REG
|
|
LDI 1,R0
|
|
LSH :BIT:,R0
|
|
ANDN R0,:REG:
|
|
.ENDM
|
|
|
|
BSET .MACRO BIT,REG
|
|
LDI 1,R0
|
|
LSH :BIT:,R0
|
|
OR R0,:REG:
|
|
.ENDM
|
|
|
|
LCALL .MACRO LABEL
|
|
PUSH R0
|
|
CALL JIJO?
|
|
POP R0
|
|
BU ENDIT?
|
|
l14? .word :LABEL:
|
|
JIJO?
|
|
PUSH DP
|
|
LDP @l14?
|
|
LDI @l14?,R0
|
|
POP DP
|
|
BU R0
|
|
ENDIT?
|
|
.ENDM
|
|
|
|
CEILI .MACRO VALUE,REG
|
|
CMPI :VALUE:,:REG:
|
|
LDIGT :VALUE:,:REG:
|
|
.ENDM
|
|
|
|
CLRC .MACRO
|
|
ANDN 1,ST
|
|
.ENDM
|
|
|
|
CLRF .MACRO REG
|
|
LDF 0.0,:REG:
|
|
.ENDM
|
|
|
|
CLRI .MACRO REG
|
|
SUBI :REG:,:REG:
|
|
.ENDM
|
|
|
|
CLRIM .MACRO MEM
|
|
SUBI R0,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
DEC .MACRO REG
|
|
SUBI 1,:REG:
|
|
.ENDM
|
|
|
|
DECF .MACRO REG
|
|
SUBF 1.0,:REG:
|
|
.ENDM
|
|
|
|
DECM .MACRO MEM
|
|
LDI :MEM:,R0
|
|
SUBI 1,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
DINT .MACRO
|
|
PUSH IE ;disable interrupts
|
|
LDI 0,IE ;watch for pipeline conflicts
|
|
NOP ;2 NOPS can be replaced with
|
|
NOP ;useful instructions
|
|
AND 0DFFFh,ST ;turn off GIE.
|
|
POP IE
|
|
.ENDM
|
|
|
|
DMA_WT .MACRO REG
|
|
LDP @FIFO_STATUS
|
|
WTLP? LDI @FIFO_STATUS,:REG:
|
|
AND FIFO_STATUS_DMA_ACTIVE,:REG:
|
|
BNZ WTLP?
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
EINT .MACRO
|
|
CALL ENABLEGIE
|
|
.ENDM
|
|
|
|
FIFO_CLRP .MACRO REG
|
|
LDP @FIFO_STATUS
|
|
wt2? LDI @FIFO_STATUS,:REG:
|
|
AND FIFO_STATUS_FIFO_NEMPTY,:REG:
|
|
BNZ wt2?
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
FIFO_INC .MACRO
|
|
LDP @FIFO_INC
|
|
LDI @FIFO_INC,R0
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
FIFO_WT .MACRO REG
|
|
LDP @FIFO_STATUS
|
|
wt2? LDI @FIFO_STATUS,:REG:
|
|
AND FIFO_STATUS_MAX_FLAG,:REG:
|
|
BNZ wt2?
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
FLOATP .MACRO MEM,REG
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
LDP :MEM:
|
|
.endif
|
|
FLOAT :MEM:,:REG:
|
|
.ENDM
|
|
|
|
FLOORF .MACRO VALUE,REG
|
|
CMPF :VALUE:,:REG:
|
|
LDFLT :VALUE:,:REG:
|
|
.ENDM
|
|
|
|
FLOORI .MACRO VALUE,REG
|
|
CMPI :VALUE:,:REG:
|
|
LDILT :VALUE:,:REG:
|
|
.ENDM
|
|
|
|
FPGA_WT .MACRO REG
|
|
LDP @FSTAT
|
|
WT1? LDI @FSTAT,:REG:
|
|
BN WT1?
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
HARDWTM .MACRO REG
|
|
LDP @CPU_WS
|
|
LDI HARD_WS,:REG:
|
|
STI :REG:,@CPU_WS
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
HIGHBITS .MACRO BITS,REG
|
|
LSH -(32-:BITS:),:REG:
|
|
LSH 32-:BITS:,:REG:
|
|
.ENDM
|
|
|
|
INC .MACRO REG
|
|
ADDI 1,:REG:
|
|
.ENDM
|
|
|
|
INCM .MACRO MEM
|
|
LDI :MEM:,R0
|
|
ADDI 1,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
INCMF .MACRO MEM
|
|
LDF :MEM:,R0
|
|
ADDF 1.0,R0
|
|
STF R0,:MEM:
|
|
.ENDM
|
|
|
|
|
|
INCAUD .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL AUDIT_INC
|
|
.ENDM
|
|
|
|
INCF .MACRO REG
|
|
ADDF 1.0,:REG:
|
|
.ENDM
|
|
|
|
LDIL .MACRO LWORD,REG
|
|
LDI :LWORD:>>16,REG
|
|
LSH 16,REG
|
|
OR :LWORD:&0FFFFH,REG
|
|
.ENDM
|
|
|
|
|
|
LDL .MACRO LONG_VALUE,REG
|
|
.DATA
|
|
VALUEI? .WORD :LONG_VALUE:
|
|
.TEXT
|
|
LDI @VALUEI?,:REG:
|
|
.ENDM
|
|
|
|
|
|
LDLF .MACRO LONG_VALUE,REG
|
|
.DATA
|
|
VALUEI? .FLOAT :LONG_VALUE:
|
|
.TEXT
|
|
LDF @VALUEI?,:REG:
|
|
.ENDM
|
|
|
|
|
|
|
|
|
|
LDPI .MACRO MEM,REG
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
LDP :MEM:
|
|
.endif
|
|
LDI :MEM:,:REG:
|
|
.ENDM
|
|
|
|
LDSP .MACRO STRING,REG
|
|
.data
|
|
l1? .word l4?
|
|
l4? .string ":STRING:",0
|
|
.text
|
|
LDI @l1?,:REG:
|
|
.ENDM
|
|
|
|
LOCKUP .MACRO
|
|
OR 0,ST ;MASK INTERRUPTS
|
|
B $
|
|
.ENDM
|
|
|
|
LOWBITS .MACRO BITS,REG
|
|
LSH 32-:BITS:,:REG:
|
|
LSH -(32-:BITS:),:REG:
|
|
.ENDM
|
|
|
|
LS .MACRO CNT,REG ;SHIFT (LOGICAL)
|
|
LSH :CNT:,:REG:
|
|
.ENDM
|
|
|
|
LSA .MACRO CNT,REG ;SHIFT (ARITHMETIC)
|
|
ASH :CNT:,:REG:
|
|
.ENDM
|
|
|
|
MPYFL .MACRO VAL,REG
|
|
.data
|
|
i? .float :VAL:
|
|
.text
|
|
MPYF @i?,:REG:
|
|
.ENDM
|
|
|
|
ORM .MACRO VAL,MEM
|
|
LDI :MEM:,R0
|
|
OR :VAL:,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
POPFL .MACRO REG
|
|
POPF :REG:
|
|
POP :REG:
|
|
.ENDM
|
|
|
|
POPFM .MACRO LIST ;POP FLOATING POINT MULTIPLE
|
|
.VAR ITEM
|
|
.LOOP
|
|
.BREAK ($ISMEMBER(ITEM, LIST) == 0)
|
|
POPF ITEM
|
|
.ENDLOOP
|
|
.ENDM
|
|
|
|
POPM .MACRO LIST ;POP MULTIPLE
|
|
.VAR ITEM
|
|
.LOOP
|
|
.BREAK ($ISMEMBER(ITEM, LIST) == 0)
|
|
POP ITEM
|
|
.ENDLOOP
|
|
.ENDM
|
|
|
|
PUSHFL .MACRO REG
|
|
PUSH :REG:
|
|
PUSHF :REG:
|
|
.ENDM
|
|
|
|
PUSHFM .MACRO LIST ;PUSH FLOATING POINT MULTIPLE
|
|
.VAR ITEM
|
|
.LOOP
|
|
.BREAK ($ISMEMBER(ITEM, LIST) == 0)
|
|
PUSHF ITEM
|
|
.ENDLOOP
|
|
.ENDM
|
|
|
|
PUSHM .MACRO LIST
|
|
.VAR ITEM
|
|
.LOOP
|
|
.BREAK ($ISMEMBER(ITEM, LIST) == 0)
|
|
PUSH ITEM
|
|
.ENDLOOP
|
|
.ENDM
|
|
|
|
RANDN .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL RANDU0
|
|
.ENDM
|
|
|
|
READADJ .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL ADJUSTMENT_READ
|
|
.ENDM
|
|
|
|
READAUD .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL AUDIT_READ
|
|
.ENDM
|
|
|
|
RGB .MACRO R,G,B
|
|
.word (((:R:>>3)&01Fh)<<10)|(((:G:>>3)&01Fh)<<5)|(((:B:>>3)&01Fh))
|
|
.ENDM
|
|
|
|
RS .MACRO CNT,REG
|
|
LSH -:CNT:,:REG:
|
|
.ENDM
|
|
|
|
RSA .MACRO CNT,REG
|
|
ASH -:CNT:,:REG:
|
|
.ENDM
|
|
|
|
SETADJ .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL ADJUSTMENT_WRITE
|
|
.ENDM
|
|
|
|
SETAUD .MACRO NUMBER
|
|
LDI :NUMBER:,AR2
|
|
CALL AUDIT_WRITE
|
|
.ENDM
|
|
|
|
SETC .MACRO
|
|
OR 1,ST
|
|
.ENDM
|
|
|
|
SOFTWTM .MACRO REG
|
|
LDP @CPU_WS
|
|
LDI SOFT_WS,:REG:
|
|
STI :REG:,@CPU_WS
|
|
CLRI DP
|
|
.ENDM
|
|
|
|
SOND1 .MACRO SOND
|
|
LDI :SOND:,AR2
|
|
CALL ONESND
|
|
.ENDM
|
|
|
|
SONDFX .MACRO SOND
|
|
LDI :SOND:,AR2
|
|
CALL ONESNDFX
|
|
.ENDM
|
|
|
|
SPTR .MACRO STRING
|
|
.sect "THEDATA"
|
|
l? .string ":STRING:",0
|
|
.text
|
|
.word l?
|
|
.ENDM
|
|
|
|
STIM .MACRO VALUE,MEM
|
|
LDI :VALUE:,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
STPF .MACRO REG,MEM
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
.endif
|
|
STF :REG:,:MEM:
|
|
.ENDM
|
|
|
|
STPI .MACRO REG,MEM
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
.endif
|
|
STI :REG:,:MEM:
|
|
.ENDM
|
|
|
|
STPIM .MACRO VALUE,MEM
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
.endif
|
|
LDI :VALUE:,R0
|
|
STI R0,:MEM:
|
|
.ENDM
|
|
|
|
SUBPI .MACRO MEM,REG
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
.endif
|
|
SUBI :MEM:,:REG:
|
|
.ENDM
|
|
|
|
SUBPF .MACRO MEM,REG
|
|
.if DP_MACROS
|
|
PUSH R0
|
|
LDI DP,R0
|
|
LDP :MEM:
|
|
CMPI R0,DP
|
|
BNE $
|
|
POP R0
|
|
.endif
|
|
SUBF :MEM:,:REG:
|
|
.ENDM
|
|
|
|
TEXTIT .MACRO LABEL,X,Y
|
|
.DATA
|
|
IT? .WORD :LABEL:
|
|
.TEXT
|
|
LDI :X:,R2
|
|
LDI :Y:,R3
|
|
LDI @IT?,AR2
|
|
CALL _outtextxyc
|
|
.ENDM
|
|
|
|
TEXTITT .MACRO THETEXT,X,Y
|
|
.sect "THEDATA"
|
|
ITT? .string ":THETEXT:",0
|
|
.data
|
|
IT? .word ITT?
|
|
.TEXT
|
|
LDI :X:,R2
|
|
LDI :Y:,R3
|
|
LDI @IT?,AR2
|
|
CALL _outtextxyc
|
|
.ENDM
|
|
|
|
|
|
|
|
*
|
|
*HIGH LEVEL MACROS
|
|
*
|
|
*IFI IF integer
|
|
*IFF IF float
|
|
*
|
|
*IFRI IF registers integer
|
|
*IFRF IF registers float
|
|
*
|
|
|
|
LT EQU 'LT'
|
|
GT EQU 'GT'
|
|
LE EQU 'LE'
|
|
GE EQU 'GE'
|
|
EQ EQU 'EQ'
|
|
NE EQU 'NE'
|
|
|
|
|
|
|
|
IFI .MACRO REG,OP,VALUE,LABEL
|
|
CMPI :VALUE:,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
|
|
IFF .MACRO REG,OP,VALUE,LABEL
|
|
CMPF :VALUE:,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
|
|
IFFL .MACRO REG,OP,LONG,LABEL
|
|
.data
|
|
iffl? .float :LONG:
|
|
.text
|
|
CMPF @iffl?,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
|
|
IFIL .MACRO REG,OP,LONG,LABEL
|
|
.data
|
|
iffl? .word :LONG:
|
|
.text
|
|
CMPI @iffl?,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
|
|
IFMF .MACRO REG,OP,MEM,LABEL
|
|
CMPF :MEM:,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
|
|
IFMI .MACRO REG,OP,MEM,LABEL
|
|
CMPI :MEM:,:REG:
|
|
B:OP: :LABEL:
|
|
.ENDM
|
|
*----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
FBSS .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect oncram,:SIZEOF:
|
|
.ENDM
|
|
|
|
fbss .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect oncram,:SIZEOF:
|
|
.ENDM
|
|
|
|
pbss .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect pbss,:SIZEOF:
|
|
.ENDM
|
|
|
|
lobss .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect lobss,:SIZEOF:
|
|
.ENDM
|
|
|
|
hibss .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect hibss,:SIZEOF:
|
|
.ENDM
|
|
|
|
phibss .MACRO LABEL,SIZEOF
|
|
:LABEL: .usect phibss,:SIZEOF:
|
|
.ENDM
|
|
|
|
|
|
romdata .MACRO
|
|
.sect "THEDATA"
|
|
.ENDM
|
|
|
|
diagtext .MACRO
|
|
.sect "DIAGTXT"
|
|
.ENDM
|
|
|
|
|
|
|
|
SLT EQU 'LT'
|
|
SGT EQU 'GT'
|
|
SLE EQU 'LE'
|
|
SGE EQU 'GE'
|
|
SEQ EQU 'EQ'
|
|
SNE EQU 'NE'
|
|
SC EQU 'C'
|
|
SNC EQU 'NC'
|
|
SZ EQU 'Z'
|
|
SNZ EQU 'NZ'
|
|
SU EQU 'U'
|
|
|
|
|
|
LOCKON .MACRO UCASE
|
|
.if PRINTER
|
|
CALL:UCASE: PRINTER_LOG
|
|
.endif
|
|
.if DEBUG
|
|
B:UCASE: $
|
|
.endif
|
|
.ENDM
|
|
|
|
SETDP .MACRO
|
|
SUBI DP,DP
|
|
.ENDM
|
|
|
|
*
|
|
*SYMBOLIC LOCKON
|
|
*
|
|
SLOCKON .MACRO UCASE,UTEXT
|
|
.if PRINTER
|
|
.data
|
|
ii? .word i?
|
|
i? .string ":UTEXT:",13,0
|
|
.text
|
|
|
|
B:UCASE: DOIT?
|
|
BU DONTDO?
|
|
DOIT? PUSH ST
|
|
ADDI 1,SP ;need this for later...
|
|
PUSH R0
|
|
PUSH DP
|
|
LDP @ii?
|
|
LDI @ii?,R0
|
|
CALL PRINTER_LOG_SYMBOLIC
|
|
DONTDO?
|
|
.endif
|
|
.if DEBUG
|
|
B:UCASE: $
|
|
.endif
|
|
.ENDM
|
|
*
|
|
*
|
|
ERRON .MACRO UCASE,EID
|
|
.if DEBUG
|
|
B:UCASE: $
|
|
.endif
|
|
B:UCASE: DOIT?
|
|
BU DONTDO?
|
|
DOIT?
|
|
PUSH ST
|
|
PUSH R0
|
|
LDI :EID:,R0
|
|
CALL ERROR_LOG
|
|
POP R0
|
|
POP ST
|
|
DONTDO?
|
|
.ENDM
|