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