1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level
1: self
-hosting
32-bit Forth compiler
3 ;; Copyright
(C
) 2020 Ketmar Dark
// Invisible Vector
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 $uservar
"(HLD)" ua_ofs_hld
0
11 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12 : HEX
( -- ) 16 base
! ;
13 : DECIMAL
( -- ) 10 base
! ;
14 : OCTAL
( -- ) 8 base
! ;
15 : BINARY
( -- ) 2 base
! ;
18 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
19 : (HLD
-INIT
-ADDR
) ( -- addr
) pad
1- ;
22 (hld
) @
1- dup
(hld
) ! c
!
26 : HOLDS
( addr count
-- )
27 begin dup
+while 1- 2dup
+ c@ hold repeat
2drop
31 -if [char
] - hold
endif
35 (hld
-init
-addr
) (hld
) !
42 : #
> ( d
-- addr count
)
43 2drop
(hld
) @
(hld
-init
-addr
) over
-
47 base @ uds
/mod dup
9 > if 7 + endif
52 begin #
2dup or not
-until
56 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
57 : (U
.) ( u
-- addr count
) <#u #s #
> ;
58 : (.) ( n
-- addr count
) dup abs
<#u #s rot sign #
> ;
60 : (x
.r
) ( fldlen addr count
-- ) rot over
- spaces type
;
62 : U
.R
( u fldlen
-- ) swap
(u
.) (x
.r
) ;
63 : .R
( n fldlen
-- ) swap
(.) (x
.r
) ;
65 : U
. ( u
-- ) (u
.) type space
;
66 : . ( n
-- ) (.) type space
;
69 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70 : (UD
.) ( ud
-- addr count
) <# #s #
> ;
71 : (D
.) ( d
-- addr count
) dup nrot dabs
<# #s rot sign #
> ;
73 : UD
.R
( ud fldlen
-- ) nrot
(ud
.) (x
.r
) ;
74 : D
.R
( d fldlen
-- ) nrot
(d
.) (x
.r
) ;
76 : UD
. ( ud
-- ) (ud
.) type space
;
77 : D
. ( ud
-- ) (d
.) type space
;
80 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82 $uservar
"(hex-print-buf)" ua_ofs_hexprbuf
0
86 ;; uses
(hex
-print
-buf
)
87 code: (.HEX8) ( u -- addr count )
88 lea edi
,[ua_ofs_hexprbuf
+8]
92 ld eax
,ebx
;; to break register dependency
99 $
if URFORTH_TLS_TYPE
= URFORTH_TLS_TYPE_FS
100 ;; convert from TLS
to real address
101 add edi
,ts
:[ua_ofs_baseaddr
]
108 : .HEX8
( u
-- ) (.hex8
) type
;
110 : (.HEX2
) ( u
-- addr count
) (.hex8
) drop
6 + 2 ;
111 : .HEX2
( u
-- ) (.hex2
) type
;
113 : (.HEX4
) ( u
-- addr count
) (.hex8
) drop
4 + 4 ;
114 : .HEX4
( u
-- ) (.hex4
) type
;