1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level
1: self
-hosting
32-bit Forth compiler
3 ;; Natural
-syntax x86 assembler
4 ;; Modelled after SMAL32 built
-in assembler
5 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12 >r
;; save size on the rstack
18 ;; allow strings in any more
; they will still be one
-byte strings
, though
19 \ r@
4 = ERRID_ASM_TYPE_MISMATCH not
-?asm
-error
20 lexer
:tkvalue count over
+ swap ?
do
21 i c@
1 asm
-n
-allot asm
-c
!
30 r@
4 = ERRID_ASM_TYPE_MISMATCH not
-?asm
-error
32 *ImmName ccount
( *ImSize
) 4 *ImmForthType asm
-Label
-Fixup
37 1 of $ff and asm
-c
, endof
38 2 of $ffff and asm
-w
, endof
40 otherwise ERRID_ASM_INTERNAL_ERROR asm
-error
49 ;; convert size
to reserve word cfa
54 otherwise ERRID_ASM_INTERNAL_ERROR asm-error
57 dup 0< ERRID_ASM_INVALID_OPERAND ?asm-error
58 0 ?do 0 over execute loop
63 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64 : DB ( -- ) 1 (defx) ;
65 : DW ( -- ) 2 (defx) ;
66 : DD ( -- ) 4 (defx) ;
68 : DEFB ( -- ) 1 (defx) ;
69 : DEFW ( -- ) 2 (defx) ;
70 : DEFD ( -- ) 4 (defx) ;
73 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
74 ;; "reserve" fills with zeroes
75 : RB ( -- ) 1 (resx) ;
76 : RW ( -- ) 2 (resx) ;
77 : RD ( -- ) 4 (resx) ;