Extracted heap library from asma
This commit is contained in:
parent
7058122d25
commit
be2e01e9b3
|
@ -0,0 +1,52 @@
|
|||
(
|
||||
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
|
||||
|
|
@ -143,9 +143,9 @@
|
|||
|
||||
@asma-print-heap-usage ( -- )
|
||||
;asma/log-level LDA #08 AND #00 EQU ,&skip JCN
|
||||
;asma/heap LDA2 ;asma-heap SUB2 ;asma-print-short JSR2
|
||||
;heap LDA2 ;asma-heap SUB2 ;asma-print-short JSR2
|
||||
;&str1 ;asma-print-string JSR2
|
||||
;asma-heap/end ;asma/heap LDA2 SUB2 ;asma-print-short JSR2
|
||||
;asma-heap/end ;heap LDA2 SUB2 ;asma-print-short JSR2
|
||||
;&str2 ;asma-print-string JSR2
|
||||
&skip
|
||||
JMP2r
|
||||
|
@ -242,7 +242,7 @@
|
|||
;asma/error STA2
|
||||
;asma-trees/labels STA2
|
||||
;asma-trees/macros STA2
|
||||
;asma-heap ;asma/heap STA2
|
||||
;asma-heap ;heap STA2
|
||||
;asma-opcodes/_entry ;asma-trees/opcodes STA2
|
||||
( fall through )
|
||||
|
||||
|
@ -339,7 +339,7 @@ include projects/library/file-read-chunks.tal
|
|||
@asma [
|
||||
&pass $1 &state $1 &line $2 &break $1 &eof $1
|
||||
&token $2 &orig-token $2
|
||||
&heap $2 &addr $2 &written-addr $2 &flush-fn $2
|
||||
&addr $2 &written-addr $2 &flush-fn $2
|
||||
&src-filename $2 &dest-filename $2
|
||||
&error $2 &log-level $1
|
||||
]
|
||||
|
@ -559,27 +559,7 @@ include projects/library/file-read-chunks.tal
|
|||
;asma-write-buffer .File/save DEO2
|
||||
JMP2r
|
||||
|
||||
@asma-append-heap-byte ( dummy byte -- dummy )
|
||||
;asma/heap LDA2
|
||||
OVR2 OVR2 STA POP
|
||||
INC2 ;asma/heap STA2
|
||||
POP
|
||||
JMP2r
|
||||
|
||||
@asma-append-heap-short ( dummy short* -- dummy )
|
||||
SWP
|
||||
,asma-append-heap-byte JSR
|
||||
,asma-append-heap-byte JMP ( tail call )
|
||||
|
||||
@asma-append-heap-string ( string* -- )
|
||||
LDAk
|
||||
DUP ,asma-append-heap-byte JSR
|
||||
,&keep-going JCN
|
||||
POP2 JMP2r
|
||||
|
||||
&keep-going
|
||||
INC2
|
||||
,asma-append-heap-string JMP
|
||||
include projects/library/heap.tal
|
||||
|
||||
@asma-traverse-tree ( incoming-ptr* -- binary-ptr* 00 if key found
|
||||
OR node-incoming-ptr* 01 if key not found )
|
||||
|
@ -615,12 +595,12 @@ include projects/library/binary-tree.tal
|
|||
;asma-msg-macro ;asma/error STA2
|
||||
JMP2r
|
||||
|
||||
¬-exist
|
||||
¬-exist ( incoming-ptr* )
|
||||
( define macro by creating new node )
|
||||
;asma/heap LDA2 SWP2 STA2
|
||||
#0000 ;asma-append-heap-short JSR2 ( less-than pointer )
|
||||
#0000 ;asma-append-heap-short JSR2 ( greater-than pointer )
|
||||
;asma/token LDA2 ;asma-append-heap-string JSR2 ( key )
|
||||
;heap LDA2 SWP2 STA2
|
||||
#0000 ;append-heap-short JSR2 ( less-than pointer )
|
||||
#0000 ;append-heap-short JSR2 ( greater-than pointer )
|
||||
;asma/token LDA2 ;append-heap-string JSR2 ( key )
|
||||
#04 asma-STATE-SET
|
||||
JMP2r
|
||||
|
||||
|
@ -630,12 +610,12 @@ include projects/library/binary-tree.tal
|
|||
|
||||
@asma-macro-body
|
||||
;asma/state LDA #10 AND ,&skip JCN
|
||||
;asma/token LDA2 ;asma-append-heap-string JSR2
|
||||
;asma/token LDA2 ;append-heap-string JSR2
|
||||
&skip
|
||||
JMP2r
|
||||
|
||||
@asma-macro-end
|
||||
#00 ;asma-append-heap-byte JSR2
|
||||
#00 ;append-heap-byte JSR2
|
||||
#14 asma-STATE-CLEAR
|
||||
JMP2r
|
||||
|
||||
|
@ -643,7 +623,7 @@ include projects/library/binary-tree.tal
|
|||
;asma-trees/labels ,asma-label-helper JSR
|
||||
,&already-existed JCN
|
||||
|
||||
#0000 ;asma-append-heap-short JSR2 ( data2: subtree incoming ptr )
|
||||
#0000 ;append-heap-short JSR2 ( data2: subtree incoming ptr )
|
||||
|
||||
&already-existed
|
||||
#0002 ADD2 ;asma-trees/scope STA2
|
||||
|
@ -665,14 +645,14 @@ include projects/library/binary-tree.tal
|
|||
|
||||
&new-label ( incoming-ptr* )
|
||||
( define label by creating new node )
|
||||
;asma/heap LDA2 SWP2 STA2
|
||||
#0000 ;asma-append-heap-short JSR2 ( less-than pointer )
|
||||
#0000 ;asma-append-heap-short JSR2 ( greater-than pointer )
|
||||
;asma/token LDA2 ;asma-append-heap-string JSR2 ( key )
|
||||
;heap LDA2 SWP2 STA2
|
||||
#0000 ;append-heap-short JSR2 ( less-than pointer )
|
||||
#0000 ;append-heap-short JSR2 ( greater-than pointer )
|
||||
;asma/token LDA2 ;append-heap-string JSR2 ( key )
|
||||
|
||||
;asma/heap LDA2
|
||||
;heap LDA2
|
||||
|
||||
;asma/addr LDA2 ;asma-append-heap-short JSR2 ( data1: address )
|
||||
;asma/addr LDA2 ;append-heap-short JSR2 ( data1: address )
|
||||
#00 JMP2r
|
||||
|
||||
@asma-pad-absolute
|
||||
|
@ -862,8 +842,8 @@ include projects/library/binary-tree.tal
|
|||
|
||||
@asma-include-filename
|
||||
#08 asma-STATE-CLEAR
|
||||
;asma/heap LDA2
|
||||
;asma/token LDA2 ;asma-append-heap-string JSR2
|
||||
;heap LDA2
|
||||
;asma/token LDA2 ;append-heap-string JSR2
|
||||
;asma-assemble-file-pass JSR2
|
||||
;asma/break LDAk INC ROT ROT STA
|
||||
JMP2r
|
||||
|
|
Loading…
Reference in New Issue