;
; Heap.mac - Heap macros
;
; Copyright © 1989, Claris Corporation
;
; 1-13-89 Kevin A. Watts
; 1-17-89 kaw	- added Deref


; BeginZ - prologue for use with Zero Page

	MACRO
	BeginZ
	phd
	lda	#0	; Replace with the address of the zero page
	tcd
	ENDM
	

; ReturnZ - epilog for use with Zero Page

	MACRO
	ReturnZ
	pld
	rtl
	ENDM


; DefineZ - modify routine using BeginZ prologue.
; Zero page address must be in accumulator, and data bank must equal code bank

	MACRO
	DefineZ	&routine
	sta	&routine+2
	ENDM
	

; Deref Ptr - equivalent to "MoveLong [Ptr],Ptr", but this one works.
;  Ptr should be a direct page variable
;  Regs: a, x, y
;  Side-effect: leaves Ptr in ax

	MACRO
	Deref	&Ptr
	ldy	#2
	lda	[&Ptr],y
	tax
	lda	[&Ptr]
	sta	&Ptr
	stx	&Ptr+2
	ENDM


; DivByPwr2 Var,Divisor - divide Var by Divisor,
;			- where Divisor is a power of 2

	MACRO
	DivByPwr2	&Var,&Divisor
	LCLA	&count
&count:	SETA	&eval( &Divisor )
	WHILE	&count > 1 DO
		lsr	&Var
&count:	SETA	&count/2
	ENDWHILE
	ENDM


; MulByPwr2 Var,Multiplier - multiply Var by Multiplier,
;			   - where Multiplier is a power of 2

	MACRO
	MulByPwr2	&Var,&Multiplier
	LCLA	&count
&count:	SETA	&eval( &Multiplier )
	WHILE	&count > 1 DO
		asl	&Var
&count:	SETA	&count/2
	ENDWHILE
	ENDM
