1 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; and now
for something completely different
...
5 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 ;; Z80 Assembler
: DUP and INCLUDE instructions
7 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 also
-defs
: asm
-helpers
12 false value verbose
-include?
15 0 (include
-file
-name
) xtype
38 : (end-include
) ( -- eof
-flag
)
40 dup
-curr
" unfinished DUP" ?error
41 inc
-curr inc
->dupr@
to dup
-curr
42 inc
-curr inc
->prev@
to inc
-curr
45 true
to line
-start next
-token
47 verbose
-include?
if ." continue >: " .curr
-file cr
endif
52 next
-token tok
-type tk
-str
<> " quoted file name expected" ?error
53 token string
:>pad next
-token expect
-eol
55 inc
-curr over inc
->prev
! to inc
-curr
56 dup
-curr inc
-curr inc
->dupr
!
58 string
:pad
-cc@
0 0 (include
-no
-refill
)
59 verbose
-include?
if ." included <: " .curr
-file cr
endif
64 : inc
-dup
-label
( -- )
65 dup
-curr dup
->clabel@ ?dup
if
66 dup asm
-labels
:label
->value@
67 1+ swap asm
-labels
:label
->value
!
73 dup
-curr
" EDUP without DUP" ?not
-error
74 dup
-curr dup
->count@
1- dup
+if
76 dup
-curr dup
->line@
1- dup
-curr dup
->fofs@
(INCLUDE
-LINE
-SEEK
)
77 refill
-nocross
" wuta?" ?not
-error parse
-skip
-line
;; skip EDUP
80 else drop dup
-curr dup
->prev@
to dup
-curr
endif
84 next
-token asm
-expr
:expression
-const
86 token
-`
,`?
if next
-token
87 token
-id?
" label name expected" ?not
-error
88 token
0 asm
-labels
:define
-var
-simple
-res next
-token
92 dup
1 65536 within
" invalid DUP counter" ?not
-error
94 dup
-curr over dup
->prev
! to dup
-curr
96 0 (INCLUDE
-FILE
-LINE
) dup
-curr dup
->line
!
97 (INCLUDE
-LINE
-FOFS
) dup
-curr dup
->fofs
!
106 : INCLUDE
( -- ) asm
-helpers
:do-include
;
107 ALIAS
-FOR INCLUDE IS $INCLUDE
109 : EDUP
( -- ) asm
-helpers
:do-edup
;
111 ;;WARNING
! THIS MUST BE THE LAST ONE
!
112 : $DUP
( -- ) asm
-helpers
:do-dup
;