(
	heap functions

	The heap is an area of memory that is written from the bottom up. These
	are a few convenience functions to do that writing.

	There is a global short called "heap" that must be written to before using
	these functions, otherwise the zero page and program memory could be
	overwritten.

	A simple program could use all unallocated memory for the heap like so:

		|0100 @reset
			;my-heap ;heap STA2

			(the rest of your code)

		@my-heap

	Note that if there is a risk that the heap may overflow its bounds, it is
	strongly recommended to check where it is writing to. ";heap LDA2" will
	tell you where the next byte is written.
)

@heap $2

@append-heap-byte ( byte -- )
	,heap LDR2 ( byte heap* )
	INC2k ,heap STR2
	STA
	JMP2r

@append-heap-short ( short^ -- )
	,heap LDR2 ( short^ heap* )
	INC2k INC2 ,heap STR2
	STA2
	JMP2r

@append-heap-string ( string* -- )
	( copies a null-terminated string onto the heap, including the null )
	STH2 ,heap LDR2 ( heap* / string* )
	#01 JMP ( skip past INC2r )

	&loop
	INC2r ( heap* / string* )
	LDAkr DUPr STH2k STAr ( heap* / string* byte )
	INC2
	LITr f7 JCNr ( f7 is the value ",&loop" would produce )
	POP2r ( heap* )
	,heap STR2
	JMP2r