OSDN Git Service

V303, newcomer: FastForth I2C TERMINAL
[fast-forth/master.git] / ADDON / ANS_COMPLEMENT.asm
diff --git a/ADDON/ANS_COMPLEMENT.asm b/ADDON/ANS_COMPLEMENT.asm
deleted file mode 100644 (file)
index 99f21c5..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-; -*- coding: utf-8 -*-
-; http://patorjk.com/software/taag/#p=display&f=Banner&t=Fast Forth
-
-; Fast Forth For Texas Instrument MSP430FRxxxx FRAM devices
-; Copyright (C) <2015>  <J.M. THOORENS>
-;
-; This program is free software: you can redistribute it and/or modify
-; it under the terms of the GNU General Public License as published by
-; the Free Software Foundation, either version 3 of the License, or
-; (at your option) any later version.
-;
-; This program is distributed in the hope that it will be useful,
-; but WITHOUT ANY WARRANTY; without even the implied warranty of
-; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-; GNU General Public License for more details.
-;
-; You should have received a copy of the GNU General Public License
-; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-
-    FORTHWORD "{ANS_COMP}"
-    mNEXT
-
-;https://forth-standard.org/standard/core/VARIABLE
-;C VARIABLE <name>       --                      define a Forth VARIABLE
-            FORTHWORD "VARIABLE"
-VARIABLE    CALL #HEADER            ; W = DDP = CFA + 2 words
-            MOV #DOVAR,-4(W)        ;   CFA = DOVAR, PFA is undefined
-            MOV #REVEAL,PC          ;   to link created VARIABLE in vocabulary
-
-;https://forth-standard.org/standard/core/CONSTANT
-;C CONSTANT <name>     n --                      define a Forth CONSTANT
-            FORTHWORD "CONSTANT"
-CONSTANT    CALL #HEADER            ; W = DDP = CFA + 2 words
-            MOV #DOCON,-4(W)        ;   CFA = DOCON
-            MOV TOS,-2(W)           ;   PFA = n
-            MOV @PSP+,TOS
-            MOV #REVEAL,PC          ;   to link created VARIABLE in vocabulary
-
-;https://forth-standard.org/standard/core/VALUE
-;( x "<spaces>name" -- )                      define a Forth VALUE
-;Skip leading space delimiters. Parse name delimited by a space.
-;Create a definition for name with the execution semantics defined below,
-;with an initial value equal to x.
-
-;name Execution: ( -- x )
-;Place x on the stack. The value of x is that given when name was created,
-;until the phrase x TO name is executed, causing a new value of x to be assigned to name.
-
-;TO name Run-time: ( x -- )
-;Assign the value x to name.
-
-            FORTHWORD "VALUE"
-            mDOCOL
-            .word CREATE
-            .word COMMA  ; compile x
-            .word DOES
-            FORTHtoASM
-            MOV @RSP+,IP
-            BIT #UF10,SR
-            JZ FETCH 
-            BIC #UF10,SR
-            JMP STORE
-
-; https://forth-standard.org/standard/core/TO
-;TO name Run-time: ( x -- )
-;Assign the value x to named VALUE.
-            FORTHWORD "TO"
-            BIS #UF10,SR
-            MOV @IP+,PC
-
-; https://forth-standard.org/standard/core/StoD
-; S>D    n -- d          single -> double prec.
-            FORTHWORD "S>D"
-STOD        SUB #2,PSP
-            MOV TOS,0(PSP)
-            JMP ZEROLESS
-
-    .IFDEF MPY
-
-;https://forth-standard.org/standard/core/UMTimes
-;C UM*     u1 u2 -- ud   unsigned 16x16->32 mult.
-            FORTHWORD "UM*"
-UMSTAR      MOV @PSP,&MPY       ; Load 1st operand
-            MOV TOS,&OP2        ; Load 2nd operand
-            MOV &RES0,0(PSP)    ; low result on stack
-            MOV &RES1,TOS       ; high result in TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/MTimes
-;C M*     n1 n2 -- dlo dhi  signed 16*16->32 multiply
-            FORTHWORD "M*"
-MSTAR       MOV     @PSP,&MPYS
-            MOV     TOS,&OP2
-            MOV     &RES0,0(PSP)
-            MOV     &RES1,TOS
-            mNEXT
-
-    .ELSE
-
-;https://forth-standard.org/standard/core/MTimes
-;C M*     n1 n2 -- dlo dhi  signed 16*16->32 multiply
-            FORTHWORD "M*"
-MSTAR       MOV     TOS,S           ; TOS= n2
-            XOR     @PSP,S          ; S contains sign of result
-            CMP     #0,0(PSP)       ; n1 > -1 ?
-            JGE     u1n2MSTAR       ; yes
-            XOR     #-1,0(PSP)      ; no : n1 --> u1
-            ADD     #1,0(PSP)       ;
-u1n2MSTAR   CMP     #0,TOS          ; n2 <= -1 ?
-            JGE     u1u2MSTAR       ; no
-            XOR     #-1,TOS         ; y: n2 --> u2 
-            ADD     #1,TOS          ;
-u1u2MSTAR   PUSHM   #2,IP           ;           PUSHM IP,S
-            ASMtoFORTH
-            .word UMSTAR            ; UMSTAR use S,T,W,X,Y
-            FORTHtoASM
-            POPM    #2,IP           ;           POPM S,IP
-            CMP     #0,S            ; result > -1 ?
-            JGE     MSTARend        ; yes
-            XOR     #-1,0(PSP)      ; no : ud --> d
-            XOR     #-1,TOS
-            ADD     #1,0(PSP)
-            ADDC    #0,TOS
-MSTARend    mNEXT
-
-    .ENDIF ;MPY
-
-;https://forth-standard.org/standard/core/UMDivMOD
-; UM/MOD   udlo|udhi u1 -- r q   unsigned 32/16->r16 q16
-            FORTHWORD "UM/MOD"
-UMSLASHMOD  PUSH #DROP          ;3 as return address for MU/MOD
-            MOV #MUSMOD,PC
-
-;https://forth-standard.org/standard/core/SMDivREM
-;C SM/REM   d1lo d1hi n2 -- n3 n4  symmetric signed div
-            FORTHWORD "SM/REM"
-SMSLASHREM  MOV TOS,S           ;1            S=divisor
-            MOV @PSP,T          ;2            T=rem_sign
-            CMP #0,TOS          ;1            n2 >= 0 ?
-            JGE d1u2SMSLASHREM  ;2            yes
-            XOR #-1,TOS         ;1
-            ADD #1,TOS          ;1
-d1u2SMSLASHREM                  ;   -- d1 u2
-            CMP #0,0(PSP)       ;3           d1hi >= 0 ?
-            JGE ud1u2SMSLASHREM ;2           yes
-            XOR #-1,2(PSP)      ;4           d1lo
-            XOR #-1,0(PSP)      ;4           d1hi
-            ADD #1,2(PSP)       ;4           d1lo+1
-            ADDC #0,0(PSP)      ;4           d1hi+C
-ud1u2SMSLASHREM                 ;   -- ud1 u2
-            PUSHM  #2,S          ;4         PUSHM S,T
-            CALL #MUSMOD
-            MOV @PSP+,TOS
-            POPM  #2,S          ;4          POPM T,S
-            CMP #0,T            ;1  -- ur uq  T=rem_sign>=0?
-            JGE SMSLASHREMnruq  ;2           yes
-            XOR #-1,0(PSP)      ;3
-            ADD #1,0(PSP)       ;3
-SMSLASHREMnruq
-            XOR S,T             ;1           S=divisor T=quot_sign
-            CMP #0,T            ;1  -- nr uq  T=quot_sign>=0?
-            JGE SMSLASHREMnrnq  ;2           yes
-NEGAT       XOR #-1,TOS         ;1
-            ADD #1,TOS          ;1
-SMSLASHREMnrnq                  ;   -- nr nq  S=divisor
-            mNEXT               ;4 34 words
-
-;https://forth-standard.org/standard/core/FMDivMOD
-;C FM/MOD   d1 n1 -- r q   floored signed div'n
-            FORTHWORD "FM/MOD"
-FMSLASHMOD  PUSH    IP
-            MOV     #FMSLASHMOD1,IP
-            JMP     SMSLASHREM
-FMSLASHMOD1 FORTHtoASM              ; -- remainder quotient       S=divisor
-            CMP     #0,0(PSP)       ;
-            JZ      FMSLASHMODEND
-            CMP     #1,TOS          ; quotient < 1 ?
-            JGE     FMSLASHMODEND   ;
-QUOTLESSONE ADD     S,0(PSP)        ; add divisor to remainder
-            SUB     #1,TOS          ; decrement quotient
-FMSLASHMODEND
-            MOV     @RSP+,IP
-            mNEXT                   ;
-
-;https://forth-standard.org/standard/core/NEGATE
-;C NEGATE   x1 -- x2            two's complement
-            FORTHWORD "NEGATE"
-            JMP NEGAT 
-
-;https://forth-standard.org/standard/core/ABS
-;C ABS     n1 -- +n2     absolute value
-            FORTHWORD "ABS"
-ABBS        CMP     #0,TOS       ; 1
-            JN      NEGAT 
-            mNEXT
-
-;https://forth-standard.org/standard/core/Plus
-;C +       n1/u1 n2/u2 -- n3/u3     add n1+n2
-            FORTHWORD "+"
-PLUS        ADD @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/Times
-;C *      n1 n2 -- n3       signed multiply
-            FORTHWORD "*"
-STAR        mDOCOL
-            .word   MSTAR,DROP,EXIT
-
-;https://forth-standard.org/standard/core/DivMOD
-;C /MOD   n1 n2 -- n3 n4    signed divide/rem'dr
-            FORTHWORD "/MOD"
-SLASHMOD    mDOCOL
-            .word   TOR,STOD,RFROM,FMSLASHMOD,EXIT
-
-;https://forth-standard.org/standard/core/Div
-;C /      n1 n2 -- n3       signed divide
-            FORTHWORD "/"
-SLASH       mDOCOL
-            .word   TOR,STOD,RFROM,FMSLASHMOD,NIP,EXIT
-
-;https://forth-standard.org/standard/core/MOD
-;C MOD    n1 n2 -- n3       signed remainder
-            FORTHWORD "MOD"
-MODD        mDOCOL
-            .word   TOR,STOD,RFROM,FMSLASHMOD,DROP,EXIT
-
-;https://forth-standard.org/standard/core/TimesDivMOD
-;C */MOD  n1 n2 n3 -- n4 n5    n1*n2/n3, rem&quot
-            FORTHWORD "*/MOD"
-SSMOD       mDOCOL
-            .word   TOR,MSTAR,RFROM,FMSLASHMOD,EXIT
-
-;https://forth-standard.org/standard/core/TimesDiv
-;C */     n1 n2 n3 -- n4        n1*n2/n3
-            FORTHWORD "*/"
-STARSLASH   mDOCOL
-            .word   TOR,MSTAR,RFROM,FMSLASHMOD,NIP,EXIT
-
-
-
-;https://forth-standard.org/standard/core/ALIGNED
-;C ALIGNED  addr -- a-addr       align given addr
-            FORTHWORD "ALIGNED"
-ALIGNED     BIT     #1,TOS
-            ADDC    #0,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/ALIGN
-;C ALIGN    --                         align HERE
-            FORTHWORD "ALIGN"
-ALIGNN      BIT     #1,&DDP   ; 3
-            ADDC    #0,&DDP   ; 4
-            mNEXT
-
-;https://forth-standard.org/standard/core/CHARS
-;C CHARS    n1 -- n2            chars->adrs units
-            FORTHWORD "CHARS"
-            mNEXT
-
-;https://forth-standard.org/standard/core/CHARPlus
-;C CHAR+    c-addr1 -- c-addr2   add char size
-            FORTHWORD "CHAR+"
-            ADD     #1,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/CELLS
-;C CELLS    n1 -- n2            cells->adrs units
-            FORTHWORD "CELLS"
-            ADD     TOS,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/CELLPlus
-;C CELL+    a-addr1 -- a-addr2      add cell size
-            FORTHWORD "CELL+"
-            ADD     #2,TOS
-            mNEXT
-
-;-------------------------------------------------------------------------------
-; STACK OPERATIONS
-;-------------------------------------------------------------------------------
-
-;https://forth-standard.org/standard/core/OVER
-;C OVER    x1 x2 -- x1 x2 x1
-            FORTHWORD "OVER"
-OVER        MOV TOS,-2(PSP)     ; 3 -- x1 (x2) x2
-            MOV @PSP,TOS        ; 2 -- x1 (x2) x1
-            SUB #2,PSP          ; 1 -- x1 x2 x1
-            mNEXT               ; 4
-
-;https://forth-standard.org/standard/core/ROT
-;C ROT    x1 x2 x3 -- x2 x3 x1
-            FORTHWORD "ROT"
-ROT         MOV @PSP,W          ; 2 fetch x2
-            MOV TOS,0(PSP)      ; 3 store x3
-            MOV 2(PSP),TOS      ; 3 fetch x1
-            MOV W,2(PSP)        ; 3 store x2
-            mNEXT               ; 4
-
-;https://forth-standard.org/standard/core/RFetch
-;C R@    -- x     R: x -- x   fetch from rtn stk
-            FORTHWORD "R@"
-            SUB #2,PSP
-            MOV TOS,0(PSP)
-            MOV @RSP,TOS
-            mNEXT
-
-;----------------------------------------------------------------------
-; DOUBLE OPERATORS
-;----------------------------------------------------------------------
-
-; https://forth-standard.org/standard/core/TwoFetch
-; 2@    a-addr -- x1 x2    fetch 2 cells ; the lower address will appear on top of stack
-            FORTHWORD "2@"
-TWOFETCH    SUB     #2, PSP
-            MOV     2(TOS),0(PSP)
-            MOV     @TOS,TOS
-            mNEXT
-
-; https://forth-standard.org/standard/core/TwoStore
-; 2!    x1 x2 a-addr --    store 2 cells ; the top of stack is stored at the lower adr
-            FORTHWORD "2!"
-TWOSTORE    MOV     @PSP+,0(TOS)
-            MOV     @PSP+,2(TOS)
-            MOV     @PSP+,TOS
-            mNEXT
-
-; https://forth-standard.org/standard/double/TwoVALUE
-            FORTHWORD "2VALUE"
-            mDOCOL
-            .word CREATE
-            .word COMMA,COMMA  ; compile hi then lo
-            .word DOES
-            FORTHtoASM
-            MOV @RSP+,IP
-            BIT #UF10,SR
-            JZ TWOFETCH 
-            BIC #UF10,SR
-            JMP TWOSTORE
-
-; https://forth-standard.org/standard/core/TwoDROP
-; 2DROP  x1 x2 --          drop 2 cells
-            FORTHWORD "2DROP"
-            ADD     #2,PSP
-            MOV     @PSP+,TOS
-            mNEXT
-
-; https://forth-standard.org/standard/core/TwoSWAP
-; 2SWAP  x1 x2 x3 x4 -- x3 x4 x1 x2
-            FORTHWORD "2SWAP"
-            MOV     @PSP,W          ; -- x1 x2 x3 x4    W=x3
-            MOV     4(PSP),0(PSP)   ; -- x1 x2 x1 x4
-            MOV     W,4(PSP)        ; -- x3 x2 x1 x4
-            MOV     TOS,W           ; -- x3 x2 x1 x4    W=x4
-            MOV     2(PSP),TOS      ; -- x3 x2 x1 x2    W=x4
-            MOV     W,2(PSP)        ; -- x3 x4 x1 x2
-            mNEXT
-
-; https://forth-standard.org/standard/core/TwoOVER
-; 2OVER  x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2
-            FORTHWORD "2OVER"
-            SUB     #4,PSP          ; -- x1 x2 x3 x x x4
-            MOV     TOS,2(PSP)      ; -- x1 x2 x3 x4 x x4
-            MOV     8(PSP),0(PSP)   ; -- x1 x2 x3 x4 x1 x4
-            MOV     6(PSP),TOS      ; -- x1 x2 x3 x4 x1 x2
-            mNEXT
-
-;https://forth-standard.org/standard/core/CFetch
-; C@     c-addr -- char   fetch char from memory
-            FORTHWORD "C@"
-CFETCH      MOV.B @TOS,TOS      ;2
-            mNEXT               ;4
-
-;https://forth-standard.org/standard/core/CStore
-; C!      char c-addr --    store char in memory
-            FORTHWORD "C!"
-CSTORE      MOV.B @PSP+,0(TOS)  ;4
-            ADD #1,PSP          ;1
-            MOV @PSP+,TOS       ;2
-            mNEXT
-
-;https://forth-standard.org/standard/core/CComma
-; C,   char --        append char
-            FORTHWORD "C,"
-CCOMMA      MOV &DDP,W
-            MOV.B TOS,0(W)
-            ADD #1,&DDP
-            MOV @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/AND
-;C AND    x1 x2 -- x3           logical AND
-            FORTHWORD "AND"
-ANDD        AND     @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/OR
-;C OR     x1 x2 -- x3           logical OR
-            FORTHWORD "OR"
-ORR         BIS     @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/XOR
-;C XOR    x1 x2 -- x3           logical XOR
-            FORTHWORD "XOR"
-XORR        XOR     @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/INVERT
-;C INVERT   x1 -- x2            bitwise inversion
-            FORTHWORD "INVERT"
-            XOR     #-1,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/less
-;C <      n1 n2 -- flag        test n1<n2, signed
-            FORTHWORD "<"
-LESS        SUB @PSP+,TOS   ;1 TOS=n2-n1
-            JL FALSETOS     ;2 signed
-            JZ LESSEND      ;2
-TRUETOS     MOV #-1,TOS     ;1 flag Z = 0
-LESSEND     mNEXT           ;4
-
-;https://forth-standard.org/standard/core/more
-;C >     n1 n2 -- flag         test n1>n2, signed
-            FORTHWORD ">"
-GREATER     SUB @PSP+,TOS   ;2 TOS=n2-n1
-            JL TRUETOS      ;2 --> +5
-FALSETOS    AND #0,TOS      ;1 flag Z = 1
-            mNEXT           ;4
-
-;https://forth-standard.org/standard/core/LSHIFT
-;C LSHIFT  x1 u -- x2    logical L shift u places
-            FORTHWORD "LSHIFT"
-LSHIFT      MOV     @PSP+,W
-            AND     #1Fh,TOS        ; no need to shift more than 16
-            JZ      LSH_X
-LSH_1       ADD     W,W
-            SUB     #1,TOS
-            JNZ     LSH_1
-LSH_X       MOV     W,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/RSHIFT
-;C RSHIFT  x1 u -- x2    logical R shift u places
-            FORTHWORD "RSHIFT"
-RSHIFT      MOV     @PSP+,W
-            AND     #1Fh,TOS        ; no need to shift more than 16
-            JZ      RSH_X
-RSH_1       BIC     #1,SR           ; CLRC
-            RRC     W
-            SUB     #1,TOS
-            JNZ     RSH_1
-RSH_X       MOV     W,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/TwoTimes
-;C 2*      x1 -- x2         arithmetic left shift
-            FORTHWORD "2*"
-TWOTIMES    ADD     TOS,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/TwoDiv
-;C 2/      x1 -- x2        arithmetic right shift
-            FORTHWORD "2/"
-TWODIV      RRA     TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/MAX
-;C MAX    n1 n2 -- n3       signed maximum
-            FORTHWORD "MAX"
-MAX         CMP     @PSP,TOS    ; n2-n1
-            JL      SELn1       ; n2<n1
-SELn2       ADD     #2,PSP
-            mNEXT
-
-;https://forth-standard.org/standard/core/MIN
-;C MIN    n1 n2 -- n3       signed minimum
-            FORTHWORD "MIN"
-MIN         CMP     @PSP,TOS    ; n2-n1
-            JL      SELn2       ; n2<n1
-SELn1       MOV     @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/PlusStore
-;C +!     n/u a-addr --       add to memory
-            FORTHWORD "+!"
-PLUSSTORE   ADD     @PSP+,0(TOS)
-            MOV     @PSP+,TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/CHAR
-;C CHAR   -- char           parse ASCII character
-            FORTHWORD "CHAR"
-CHARR       mDOCOL
-            .word   FBLANK,WORDD,ONEPLUS,CFETCH,EXIT
-
-;https://forth-standard.org/standard/core/BracketCHAR
-;C [CHAR]   --          compile character literal
-            FORTHWORDIMM "[CHAR]"        ; immediate
-BRACCHAR    mDOCOL
-            .word   CHARR
-            .word   lit,lit,COMMA
-            .word   COMMA,EXIT
-
-;https://forth-standard.org/standard/core/FILL
-;C FILL   c-addr u char --  fill memory with char
-            FORTHWORD "FILL"
-FILL        MOV     @PSP+,X     ; count
-            MOV     @PSP+,W     ; address
-            CMP     #0,X
-            JZ      FILL_X
-FILL_1      MOV.B   TOS,0(W)    ; store char in memory
-            ADD     #1,W
-            SUB     #1,X
-            JNZ     FILL_1
-FILL_X      MOV     @PSP+,TOS   ; pop new TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/HEX
-            FORTHWORD "HEX"
-HEX         MOV     #16,&BASE
-            mNEXT
-
-;https://forth-standard.org/standard/core/DECIMAL
-            FORTHWORD "DECIMAL"
-DECIMAL     MOV     #10,&BASE
-            mNEXT
-
-;https://forth-standard.org/standard/core/p
-;C (                \  --     paren ; skip input until )
-            FORTHWORDIMM "\40"      ; immediate
-PARENT       mDOCOL
-            .word   lit,')',WORDD,DROP,EXIT
-
-;https://forth-standard.org/standard/core/Dotp
-; .(                \  --     dotparen ; type comment immediatly.
-            FORTHWORDIMM ".\40"        ; immediate
-DOTPAREN    MOV #0,&CAPS
-            mDOCOL
-            .word   lit,')',WORDD
-            .word   COUNT,TYPE
-            .word   FBLANK,LIT,CAPS,STORE
-            .word   EXIT
-
-;https://forth-standard.org/standard/core/J
-;C J        -- n   R: 4*sys -- 4*sys
-;C                  get the second loop index
-            FORTHWORD "J"
-JJ          SUB #2,PSP      ; make room in TOS
-            MOV TOS,0(PSP)
-            MOV 4(RSP),TOS  ; index = loopctr - fudge
-            SUB 6(RSP),TOS
-            mNEXT
-
-;https://forth-standard.org/standard/core/SPACE
-;C SPACE   --               output a space
-            FORTHWORD "SPACE"
-SPACE       SUB #2,PSP              ;1
-            MOV TOS,0(PSP)          ;3
-            MOV #20h,TOS            ;2
-            JMP EMIT                ;17~  23~
-
-;https://forth-standard.org/standard/core/SPACES
-;C SPACES   n --            output n spaces
-            FORTHWORD "SPACES"
-SPACES      CMP #0,TOS
-            JZ SPACESNEXT2
-            PUSH IP
-            MOV #SPACESNEXT,IP
-            JMP SPACE               ;25~
-SPACESNEXT  FORTHtoASM
-            SUB #2,IP               ;1
-            SUB #1,TOS              ;1
-            JNZ SPACE               ;25~ ==> 27~ by space ==> 2.963 MBds @ 8 MHz
-            MOV @RSP+,IP            ;
-SPACESNEXT2 MOV @PSP+,TOS           ; --         drop n
-            mNEXT                   ;
-
-;https://forth-standard.org/standard/core/UNLOOP
-;UNLOOP   --   R: sys1 sys2 --  drop loop parms
-            FORTHWORD "UNLOOP"
-UNLOOP      ADD #4,RSP
-            MOV @IP+,PC
-
-;https://forth-standard.org/standard/core/LEAVE
-;C LEAVE    --    L: -- adrs
-            FORTHWORDIMM "LEAVE"    ; immediate
-LEAV        MOV &DDP,W              ; compile three words
-            MOV #UNLOOP,0(W)        ; [HERE] = UNLOOP
-            MOV #BRAN,2(W)          ; [HERE+2] = BRAN
-            ADD #6,&DDP             ; [HERE+4] = After LOOP adr
-            ADD #2,&LEAVEPTR
-            ADD #4,W
-            MOV &LEAVEPTR,X
-            MOV W,0(X)              ; leave HERE+4 on LEAVEPTR stack
-            mNEXT
-
-;https://forth-standard.org/standard/core/RECURSE
-;C RECURSE  --      recurse to current definition (compile current definition)
-            FORTHWORDIMM "RECURSE"  ; immediate
-RECURSE     MOV &DDP,X              ;
-            MOV &LAST_CFA,0(X)      ;
-            ADD #2,&DDP             ;
-            mNEXT
-
-;https://forth-standard.org/standard/core/SOURCE
-;C SOURCE   -- adr u    current input buffer
-            FORTHWORD "SOURCE"
-            SUB     #4,PSP
-            MOV     TOS,2(PSP)
-            MOV     &SOURCE_LEN,TOS
-            MOV     &SOURCE_ORG,0(PSP)
-            mNEXT
-
-;https://forth-standard.org/standard/core/BASE
-;C BASE    -- a-addr       holds conversion radix
-            FORTHWORD "BASE"
-            mDOCON
-            .word   BASE    ; VARIABLE address in RAM space
-
-;https://forth-standard.org/standard/core/toIN
-;C >IN     -- a-addr       holds offset in input stream
-            FORTHWORD ">IN"
-FTOIN       mDOCON
-            .word   TOIN    ; VARIABLE address in RAM space
-
-
-    .IFNDEF PAD
-;https://forth-standard.org/standard/core/PAD
-; PAD           --  pad address
-            FORTHWORD "PAD"
-PAD         mDOCON
-            .WORD    PAD_ORG
-
-    .ENDIF