53 lines
1.2 KiB
Tal
53 lines
1.2 KiB
Tal
(
|
|
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
|
|
|