1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level
1: self
-hosting
32-bit Forth compiler
3 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
20 mov esp
,ts
:[ua_ofs_sp0
]
25 code: (SP-CHECK) ( -- ok-flag )
26 cp esp
,ts
:[ua_ofs_sp0
]
28 mov esp
,ts
:[ua_ofs_sp0
]
39 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40 code: DUP ( n -- n n )
45 code: 2DUP ( n0 n1 -- n0 n1 n0 n1 )
54 code: ?DUP ( n0 -- n0 n0 || 0 -- 0 )
66 code: 2DROP ( n0 n1 -- )
72 code: SWAP ( n0 n1 -- n1 n0 )
77 code: 2SWAP ( n0 n1 n2 n3 -- n2 n3 n0 n1 )
81 xchg
[esp
],eax
;; EAX
=n0
88 code: OVER ( n0 n1 -- n0 n1 n0 )
94 code: 2OVER ( n0 n1 n2 n3 -- n0 n1 n2 n3 n0 n1 )
103 code: ROT ( n0 n1 n2 -- n1 n2 n0 )
112 code: NROT ( n0 n1 n2 -- n2 n0 n1 )
124 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
126 code: NIP ( n1 n2 -- n2 )
132 code: TUCK ( n1 n2 -- n2 n1 n2 )
140 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
141 code: DEPTH ( -- stack-depth-before-this-call )
143 ld TOS
,ts
:[ua_ofs_sp0
]
151 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
152 ;; remove idx
, copy nth item
; 0 PICK is the same as DUP
153 code: PICK ( ... idx -- ... n[top-idx-1] )
160 ;; remove idx and val
, set nth item
(numbered as in PICK
)
161 code: POKE ( ... val idx -- ... )
168 ;; remove idx
, move item
; 0 ROLL is the same as NOOP
169 code: ROLL ( ... idx -- ... n[top-idx-1] )
187 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
188 code: ALLOCA ( bytes -- addr )
196 code: DEALLOCA ( bytes -- )