1 ;; ////////////////////////////////////////////////////////////////////////// //
16 ;; ////////////////////////////////////////////////////////////////////////// //
19 0x0001 CONSTANT FWF
-BRANCH
20 0x0002 CONSTANT FWF
-NUMLIT
21 0x0004 CONSTANT FWF
-STRLIT
22 0x0008 CONSTANT FWF
-NORETURN
23 0x0010 CONSTANT FWF
-NOTURNKEY
24 0x0020 CONSTANT FWF
-IMMEDIATE
25 0x0040 CONSTANT FWF
-UNCONDITIONAL
;; unconditional branch
26 0x0080 CONSTANT FWF
-USED
-MARK
27 0x0100 CONSTANT FWF
-CODEBLOCK
28 0x0200 CONSTANT FWF
-COMPILE
31 ;; ////////////////////////////////////////////////////////////////////////// //
32 \
: 1+! ( addr
-- ) DUP @
1+ SWAP
! ;
37 \ DUP
0> IF 0 DO SPACE LOOP
ELSE DROP
ENDIF
42 1 = IFNOT
." [CHAR] expects a char" UFE
-FATAL
ENDIF
47 : ZX
-BCOUNT
( addr
-- zxaddr
+1 bytecount
)
54 : ABS
( n
-- n
) DUP
0< IF NEGATE
ENDIF ;
57 ;; ////////////////////////////////////////////////////////////////////////// //
58 : STR
-CAT
-CHAR
( addr count char
-- addr count
+ )
63 : STR
-CAT
( addr count addr1 count1
-- addr count
+count1
)
73 ;; copy string
to PAD
(count is not set
)
74 : STR
-TO-PAD
( addr count
-- pad
+1 count
)
75 PAD
1+ 0 2SWAP STR
-CAT
79 ;; ////////////////////////////////////////////////////////////////////////// //
80 0 VARIABLE
(#BUF
-CURR
-OFS
)
81 312 VALUE
(#BUF
-PAD
-OFS
)
83 : (#BUF
) ( -- addr
) PAD
(#BUF
-PAD
-OFS
) + ;
86 (#BUF
) (#BUF
-CURR
-OFS
) @
-
87 DUP HERE
<= IF " number too long" UFE
-FATAL
ENDIF
96 : <#n
( n
-- n
) \ exactly the same as
"<#", but different
for ZX
100 : #
> ( n
-- addr count
)
102 (#BUF
) (#BUF
-CURR
-OFS
) @
- 1+
107 DUP BASE @ UMOD
48 + ;; ( n ch
)
108 DUP
57 > IF 7 + ENDIF ;; ( n ch
)
110 BASE @ U
/ ;; ( n
/base
)