1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level
1: self
-hosting
32-bit Forth compiler
4 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13 ;; the following can be customized
for special builds
14 : reladdr
, ( cfa
-- ) tc
-reladdr
, ;
17 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
18 : c@
( addr
-- value
) tc
-c@
;
19 : w@
( addr
-- value
) tc
-w@
;
20 : @
( addr
-- value
) tc
-@
;
22 : c
! ( value addr
-- ) tc
-c
! ;
23 : w
! ( value addr
-- ) tc
-w
! ;
24 : ! ( value addr
-- ) tc
-! ;
26 : +c
! ( value addr
-- ) dup tc
-c@ rot
+ swap tc
-c
! ;
27 : +w
! ( value addr
-- ) dup tc
-w@ rot
+ swap tc
-w
! ;
28 : +! ( value addr
-- ) dup tc
-@ rot
+ swap tc
-! ;
30 : -c
! ( value addr
-- ) dup tc
-c@ rot
- swap tc
-c
! ;
31 : -w
! ( value addr
-- ) dup tc
-w@ rot
- swap tc
-w
! ;
32 : -! ( value addr
-- ) dup tc
-@ rot
- swap tc
-! ;
35 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
36 ;; sorry
for this hack
!
38 : constant
( val
-- ) \ name
40 parse
-name tc
-(constant
-header
-str
) tc
-, tc
-create
;
43 : var
( val
-- ) \ name
45 parse
-name tc
-(variable
-header
-str
) tc
-, tc
-create
;
48 : variable
( val
-- ) \ name
50 parse
-name tc
-(variable
-header
-str
) 0 tc
-, tc
-create
;
53 : value
( val
-- ) \ name
54 parse
-name tc
-(enum
-mode
) if
55 ( etype enextvalue addr count
)
56 tc
-(constant
-header
-str
)
57 dup nrot
;; for "tc-,"
58 over ?dup
if + else ?dup
if 1 lshift
else 1 endif endif ;; advance current value
67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
68 : } ( etype evalue
-- )
70 2drop false
to tc
-(enum
-mode
)
73 : set
( etype evalue newvalue
-- etype newvalue
) tc
-(?enum
) nip
;
74 : set
-bit
( etype evalue newbit
-- etype
1<<newbit
) tc
-(?enum
) nip
1 swap lshift
;
75 : -set
( etype evalue delta
-- etype evalue
-delta
) tc
-(?enum
) - ;
76 : +set
( etype evalue delta
-- etype evalue
+delta
) tc
-(?enum
) + ;
78 : enum
{ ( -- etype enextvalue
) tc
-(?not
-enum
) 1 0 true
to tc
-(enum
-mode
) ;
79 : bitenum
{ ( -- etype enextvalue
) tc
-(?not
-enum
) 0 1 true
to tc
-(enum
-mode
) ;