+ ;; MARKER is a word that pushes the address after itself, then exits
+ ;; ( -- p )
+ WORD_assembler marker, 'MARKER'
+ push qword rsi
+ jmp exit_code
+
+ ;; MARKER@ is a word that pushes a the value after itself, then exits
+ ;; ( -- v )
+ WORD_assembler marker_get, 'MARKER@'
+ push qword [rsi]
+ jmp exit_code
+
+ ;; DOFORTH begins a FORTH defintion
+ WORD_assembler doforth, 'DOFORTH'
+ pushr rsi
+ lea rsi, [rax + 8]
+ next
+
+ ;; LIT is a word that pushes a the value after itself, then continues
+ ;; ( -- v )
+ WORD_assembler lit, 'LIT'
+ push qword [rsi]
+ add rsi, 8
+ next
+
+ ;; HERE is a variable pointing to the free heap
+ WORD here, 'HERE', marker
+ dq heap_start ; initialise to first "free" data
+
+ ;; WORDS is the list of words
+ WORD words, 'WORDS', marker
+ dq forth_tfa ; initialise to last forth word
+
+ ;; FORTH is the last word of the VOCABULARY
+ WORD forth, 'FORTH', marker_get
+ dq forth_tfa
+
+heap_start:
+