home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD2.img
/
d4xx
/
d498
/
cpalette
/
src
/
includes
/
macros.asm
< prev
next >
Wrap
Assembly Source File
|
1991-06-06
|
6KB
|
308 lines
; *** MACROS.ASM
; *** SYSTEM MACRO DEFINITIONS
EVENPC MACRO ;WORD ALIGN PROGRAM COUNTER
DS.W 0
ENDM
ZERO MACRO ;CLEAR DATA REGISTER
MOVEQ #0,\1 ;\1 <= DATA REGISTER
ENDM
ZERA MACRO ;CLEAR ADDRESS REGISTER
SUBA.L \1,\1 ;\1 <= ADDRESS REGISTER
ENDM
PUSHREG MACRO ;PUSH REGISTERS TO THE STACK
MOVEM.L \1,-(SP) ;\1 <= REGISTERS
ENDM
PUSHALL MACRO ;PUSH ALL REGISTERS TO THE STACK
PUSHREG D0-D7/A0-A6
ENDM
PULLREG MACRO ;PULL REGISTERS FROM THE STACK
MOVEM.L (SP)+,\1 ;\1 <= REGISTERS
ENDM
PULLALL MACRO ;PULL ALL REGISTERS FROM THE STACK
PULLREG D0-D7/A0-A6
ENDM
LIBCALL MACRO ;GENERAL LIBRARY CALL
MOVE.L \1,A6 ;\1 <= LIBRARY BASE
JSR LVO.\2(A6) ;\2 <= FUNCTION OFFSET
ENDM
SYSLIB MACRO ;EXEC LIBRARY
LIBCALL SYSBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
DOSLIB MACRO ;DOS LIBRARY
LIBCALL _DOSBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
GFXLIB MACRO ;GRAPHICS LIBRARY
IFNC '\2','' ;\1 <= FUNCTION OFFSET
MOVE.L \2,A1 ;\2 <= [*RASTPORT]
ENDC
LIBCALL _GFXBASE,\1
ENDM
INTLIB MACRO ;INTUITION LIBRARY
LIBCALL _INTBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
MATHLIB MACRO ;MATH LIBRARY
LIBCALL _MATHBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
TRANSLIB MACRO ;TRANSMATH LIBRARY
LIBCALL _MATHTRANSBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
ICONLIB MACRO ;ICONS LIBRARY
LIBCALL _ICONBASE,\1 ;\1 <= FUNCTION OFFSET
ENDM
JUST MACRO ;RUN FUNCTION OF LIBRARY
JSR LVO.\1(A6) ;\1 <= FUNCTION OFFSET
ENDM ;A6 <= LIBRARY ADDRESS
EMERGENCY MACRO ;PUT ERROR CODE IN D0 AND EXIT
MOVE.L #\1,D0 ;\1 <= ERROR CODE
JMP _ERROR
ENDM
ALLOCPUBMEM MACRO ;ALLOCATE PUBLIC MEMORY
MOVE.L \1,D0 ;\1 <= SIZE
MOVE.L #MEMF_PUBLIC!MEMF_CLEAR,D1
SYSLIB ALLOCMEM
ENDM
FREEMEM MACRO ;FREE ALLOCATED MEMORY
MOVE.L \1,A1 ;\1 <= ADDRESS
MOVE.L \2,D0 ;\2 <= SIZE
SYSLIB FREEMEM
ENDM
; *** DOS MACRO DEFINITIONS
DOSREAD MACRO ;DOS READ
MOVE.L \1,D1 ;\1 <= *FILE HANDLE
MOVE.L \2,D2 ;\2 <= *BUFF
MOVE.L \3,D3 ;\3 <= LENGTH
DOSLIB READ
ENDM
DOSPRINT MACRO ;DOS PRINT
PUSHREG D1-D3/A0-A1 ;\1 <= *FILE HANDLE
MOVE.L \1,D1 ;\2 <= *BUFF
MOVE.L \2,D2 ;\3 <= [LENGTH]
IFC '\3',''
BSR DOSTEXTLEN ;GET LENGTH IF UNSPECIFIED
ENDC
IFNC '\3',''
MOVE.L \3,D3
ENDC
DOSLIB WRITE
PULLREG D1-D3/A0-A1
ENDM
IFD DOS
DOSTEXTLEN ;TEXT LENGTH SUBROUTINE
MOVE.L D2,A0 ;D2 <= ADDRESS
1$
TST.B (A0)+
BNE.S 1$
MOVE.L A0,D3
SUB.L D2,D3
SUBQ.L #1,D3
RTS
ENDC
; *** INTUITION MACRO DEFINITIONS
REMEMBERCHIPMEM MACRO ;CHIP MEMORY ALLOCATE REMEMBER
LEA \1,A0 ;\1 <= *REMEMBERKEY
MOVEQ.L #0,D0 ;\2 <= SIZE
MOVE \2,D0 ;\3 <= [SUBROUTINE]
MOVE.L #MEMF_CLEAR!MEMF_CHIP,D1
INTLIB ALLOCREMEMBER
IFNC '\3',''
TST.L D0
BEQ \3
ENDC
ENDM
REMEMBERPUBMEM MACRO ;PUBLIC MEMORY ALLOCATE REMEMBER
LEA \1,A0 ;\1 <= *REMEMBERKEY
MOVEQ.L #0,D0 ;\2 <= SIZE
MOVE \2,D0 ;\3 <= [SUBROUTINE]
MOVE.L #MEMF_CLEAR!MEMF_PUBLIC,D1
INTLIB ALLOCREMEMBER
IFNC '\3',''
TST.L D0
BEQ \3
ENDC
ENDM
; *** GRAPHICS MACRO DEFINITIONS
GFXPOINT MACRO ;LOCATION SELECTION
IFNC '\1','' ;\1 <= [*X COORDINATE]
MOVE.W \1,D0 ;\2 <= [*Y COORDINATE]
MOVE.W \2,D1
ENDC
EXT.L D0
EXT.L D1
ENDM
GFXPUSH MACRO ;PUSH 4 MAIN GRAPHICS REGISTERS
PUSHREG D0-D1/A0-A1
ENDM
GFXPULL MACRO ;PULL 4 MAIN GRAPHICS REGISTERS
PULLREG D0-D1/A0-A1
ENDM
LOADRGB MACRO ;LOAD COLORMAP
GFXPUSH ;\1 <= *VIEWPORT
MOVEA.L \1,A0 ;\2 <= COLORMAP
LEA \2,A1 ;\3 <= COUNT
MOVEQ #\3,D0
GFXLIB LOADRGB4
GFXPULL
ENDM
SETOPEN MACRO ;SET OUTLINE PEN COLOR
IFNC '\2','' ;\1 <= *RASTPORT
MOVE.W \2,D0 ;\2 <= [*COLOR]
ENDC
MOVE.L \1,A1
MOVE.B D0,RP.OPEN(A1)
ENDM
SETAPEN MACRO ;SET BACKGROUND DRAWING PEN FOR JAM1
GFXPUSH ;\1 <= *RASTPORT
IFNC '\2','' ;\2 <= [*COLOR]
MOVE.W \2,D0
ENDC
GFXLIB SETAPEN,\1
GFXPULL
ENDM
SETBPEN MACRO ;SET BACKGROUND DRAWING PEN FOR JAM2
GFXPUSH ;\1 <= *RASTPORT
IFNC '\2','' ;\2 <= [*COLOR]
MOVE.W \2,D0
ENDC
GFXLIB SETBPEN,\1
GFXPULL
ENDM
SETDRMD MACRO ;SET DRAWING MODE
GFXPUSH ;\1 <= *RASTPORT
IFNC '\2','' ;\2 <= [MODE]
MOVE.W \2,D0
ENDC
GFXLIB SETDRMD,\1
GFXPULL
ENDM
FILLWIN MACRO ;FILLS A WINDOW WITH A SOLID COLOR
ZERO D0 ;\1 <= WINDOW
MOVEA.L \1,A0 ;\2 <= [COLOR REGISTER]
MOVE.L WW.RPORT(A0),RP
IFNC '\2',''
MOVE.W #\2,D0
ENDC
SETAPEN RP
MOVE.W WW.WIDTH(A0),D2
SUBI.W #4,D2
MOVE.W WW.HEIGHT(A0),D3
SUBI.W #2,D3
MOVE.W #2,D0
MOVE.W #10,D1
RECTFILL RP
ENDM
RECTFILL MACRO ;FILLS A RECTANGLE ON A WINDOW
PUSHREG D0-D3 ;\1 <= *RASTPORT
MOVEA.L \1,A1 ;\2 <= [*X1 COORDINATE]
IFNC '\2','' ;\3 <= [*Y1 COORDINATE]
MOVE.W \2,D0 ;\4 <= [*X2 COORDINATE]
MOVE.W \3,D1 ;\5 <= [*Y2 COORDINATE]
MOVE.W \4,D2
MOVE.W \5,D3
ENDC
EXT.L D0
EXT.L D1
EXT.L D2
EXT.L D3
GFXLIB RECTFILL
PULLREG D0-D3
ENDM
DRAWPOINT MACRO ;DRAW POINT ON WINDOW
GFXPUSH ;\1 <= *RASTPORT
GFXPOINT \2,\3 ;\2 <= [*X COORDINATE]
GFXLIB WRITEPIXEL,\1 ;\3 <= [*Y COORDINATE]
GFXPULL
ENDM
READPOINT MACRO ;READ PIXEL ON WINDOW
PUSHREG D1 ;\1 <= *RASTPORT
GFXPOINT \2,\3 ;\2 <= [*X COORDINATE]
GFXLIB READPIXEL \1 ;\3 <= [*Y COORDINATE]
PULLREG D1
ENDM
DRAWLINE MACRO ;DRAW LINE ON WINDOW
PUSHREG D0-D3 ;\1 <= *RASTPORT
MOVE.L \1,A1 ;\2 <= [*X1 COORDINATE]
IFNC '\2','' ;\3 <= [*Y1 COORDINATE]
MOVE.W \2,D0 ;\4 <= [*X2 COORDINATE]
MOVE.W \3,D1 ;\5 <= [*Y2 COORDINATE]
MOVE.W \4,D2
MOVE.W \5,D3
ENDC
BSR _DRAWLINE
PULLREG D0-D3
ENDM
IFD GFX
_DRAWLINE ;DRAWLINE SUBROUTINE
PUSHREG D0-D1 ;A0 <= *RASTPORT
PUSHREG A1 ;D0 <= X1 COORDINATE
EXT.L D0 ;D1 <= Y1 COORDINATE
EXT.L D1 ;D2 <= X2 COORDINATE
GFXLIB MOVE ;D3 <= Y2 COORDINATE
MOVE.W D2,D0
MOVE.W D3,D1
EXT.L D0
EXT.L D1
PULLREG A1
JUST DRAW
PULLREG D0-D1
RTS
ENDC
; *** FLOATING POINT MACROS
RMATH MACRO ;REGULAR MATH
MOVE.L _MATHBASE,A6
ENDM
TMATH MACRO ;TRANSMATH
MOVE.L _MATHTRANSBASE,A6
ENDM
FLOAT MACRO ;FLOATING POINT MATH
MOVE.W \1,D0 ;\1 <= ?
EXT.L D0 ;\2 <= ?
JUST SPFlt
MOVE.L D0,\2
ENDM