
;********** SYSTEM MACROS
EVENPC	macro
	ds.w	0
	endm
ZERO	macro
	moveq	#0,\1
	endm
ZERA	macro
	suba.l	\1,\1
	endm
PUSHREG	macro
	movem.l	\1,-(sp)
	endm
PUSHALL	macro
	PUSHREG	d0-d7/a0-a6
	endm
PULLREG	macro
	movem.l	(sp)+,\1
	endm
PULLALL	macro
	PULLREG	d0-d7/a0-a6
	endm
LIBCALL	macro
	move.l	\1,a6
	jsr	LVO.\2(a6)
	endm
SYSLIB	macro
	LIBCALL	SYSBASE,\1
	endm
DOSLIB	macro
	LIBCALL	_DOSBASE,\1
	endm
GFXLIB	macro
	ifnc	'\2',''
	move.l	\2,a1
	endc
	LIBCALL	_GFXBASE,\1
	endm
INTLIB	macro
	LIBCALL	_INTBASE,\1
	endm
MATHLIB	macro
	LIBCALL	_MATHBASE,\1
	endm
TRANSLIB	macro
	LIBCALL	_MATHTRANSBASE,\1
	endm
ICONLIB	macro
	LIBCALL	_ICONBASE,\1
	endm
JUST	macro
	jsr	LVO.\1(a6)
	endm
EMERGENCY	macro
	move.l	#\1,d0
	jmp	_ERROR
	endm
ALLOCPUBMEM	macro
	move.l	\1,d0
	move.l	#MEMF_PUBLIC!MEMF_CLEAR,d1
	SYSLIB	ALLOCMEM
	endm
FREEMEM	macro
	move.l	\1,a1
	move.l	\2,d0
	SYSLIB	FREEMEM
	endm
;********** DOS MACROS
DOSREAD	macro
	move.l	\1,d1
	move.l	\2,d2
	move.l	\3,d3
	DOSLIB	READ
	endm
DOSPRINT	macro
	PUSHREG	d1-d3/a0-a1
	move.l	\1,d1
	move.l	\2,d2
	ifc	'\3',''
	bsr	DOSTEXTLEN
	endc
	ifnc	'\3',''
	move.l	\3,d3
	endc
	DOSLIB	WRITE
	PULLREG	d1-d3/a0-a1
	endm
	ifd	DOS
DOSTEXTLEN	move.l	d2,a0
1$	tst.b	(a0)+
	bne.s	1$
	move.l	a0,d3
	sub.l	d2,d3
	subq.l	#1,d3
	rts
	endc
;*********** INTUITION MACROS
REMEMBERCHIPMEM	macro
	lea	\1,a0
	moveq.l	#0,d0
	move	\2,d0
	move.l	#MEMF_CLEAR!MEMF_CHIP,d1
	INTLIB	ALLOCREMEMBER
	ifnc	'\3',''
	tst.l	d0
	beq	\3
	endc
	endm
REMEMBERPUBMEM	macro
	lea	\1,a0
	moveq.l	#0,d0
	move	\2,d0
	move.l	#MEMF_CLEAR!MEMF_PUBLIC,d1
	INTLIB	ALLOCREMEMBER
	ifnc	'\3',''
	tst.l	d0
	beq	\3
	endc
	endm
;*********** GRAPHICS MACROS
GFXPOINT	macro
	ifnc	'\1',''
	move.w	\1,d0
	move.w	\2,d1
	endc
	ext.l	d0
	ext.l	d1
	endm
GFXPUSH	macro
	PUSHREG	d0-d1/a0-a1
	endm
GFXPULL	macro
	PULLREG	d0-d1/a0-a1
	endm
LOADRGB	macro
	GFXPUSH
	movea.l	\1,a0
	lea	\2,a1
	moveq	#\3,d0
	GFXLIB	LOADRGB4
	GFXPULL
	endm
SETOPEN	macro
	ifnc	'\2',''
	move.w	\2,d0
	endc
	move.l	\1,a1
	move.b	d0,RP.OPEN(a1)
	endm
SETAPEN	macro
	GFXPUSH
	ifnc	'\2',''
	move.w	\2,d0
	endc
	GFXLIB	SETAPEN,\1
	GFXPULL
	endm
SETBPEN	macro
	GFXPUSH
	ifnc	'\2',''
	move.w	\2,d0
	endc
	GFXLIB	SETBPEN,\1
	GFXPULL
	endm
SETDRMD	macro
	GFXPUSH
	ifnc	'\2',''
	move.w	\2,d0
	endc
	GFXLIB	SETDRMD,\1
	GFXPULL
	endm
FILLWIN	macro
	ZERO	d0
	movea.l	\1,a0
	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
	PUSHREG	d0-d3
	movea.l	\1,a1
	ifnc	'\2',''
	move.w	\2,d0
	move.w	\3,d1
	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
	GFXPUSH
	GFXPOINT	\2,\3
	GFXLIB	WRITEPIXEL,\1
	GFXPULL
	endm
READPOINT	macro
	PUSHREG	d1
	GFXPOINT	\2,\3
	GFXLIB	READPIXEL,\1
	PULLREG	d1
	endm
DRAWLINE	macro
	PUSHREG	d0-d3
	move.l	\1,a1
	ifnc	'\2',''
	move.w	\2,d0
	move.w	\3,d1
	move.w	\4,d2
	move.w	\5,d3
	endc
	bsr	_DRAWLINE
	PULLREG	d0-d3
	endm
	ifd	GFX
_DRAWLINE	PUSHREG	d0-d1
	PUSHREG	a1
	ext.l	d0
	ext.l	d1
	GFXLIB	MOVE
	move.w	d2,d0
	move.w	d3,d1
	ext.l	d0
	ext.l	d1
	PULLREG	a1
	JUST	DRAW
	PULLREG	d0-d1
	rts
	endc
;*********** F.P. MACROS
RMATH	macro
	move.l	_MATHBASE,a6
	endm
TMATH	macro
	move.l	_MATHTRANSBASE,a6
	endm
FLOAT	macro
	move.w	\1,d0
	ext.l	d0
	JUST	SPFlt
	move.l	d0,\2
	endm
	
;*********** MY MACROS

MOUSEWAIT	MACRO
\@	BTST	#6,$BFE001
	BNE.S	\@
	ENDM
	
STARTCODE	MACRO

	opt	o+,ow-
	bra	_START
	incdir	"df0:includes/"
	include	"header.asm"
	ENDM
