SUB #2,R15
MOV R14,0(R15)
MOV &$180A,R14
- SUB #400,R14
+ SUB #401,R14
COLON
$0D EMIT
- ABORT" FastForth V4.0 please!"
+ ABORT" FastForth V4.1 please!"
RST_RET
;
CODE IF
SUB #2,R15
MOV R14,0(R15)
- MOV &$1DC0,R14
- ADD #4,&$1DC0
- MOV #$4096,0(R14)
+ MOV &$1DBE,R14
+ ADD #4,&$1DBE
+ MOV #[THEN]+$52,0(R14)
ADD #2,R14
MOV @R13+,R0
ENDCODE IMMEDIATE
CODE THEN
- MOV &$1DC0,0(R14)
+ MOV &$1DBE,0(R14)
MOV @R15+,R14
MOV @R13+,R0
ENDCODE IMMEDIATE
[UNDEFINED] ELSE [IF]
CODE ELSE
- ADD #4,&$1DC0
- MOV &$1DC0,R10
- MOV #$409C,-4(R10)
+ ADD #4,&$1DBE
+ MOV &$1DBE,R10
+ MOV #[THEN]+$58,-4(R10)
MOV R10,0(R14)
SUB #2,R10
MOV R10,R14
ENDCODE IMMEDIATE
CODE UNTIL
- MOV #$4096,R9
-BW1 ADD #4,&$1DC0
- MOV &$1DC0,R10
+ MOV #[THEN]+$52,R9
+BW1 ADD #4,&$1DBE
+ MOV &$1DBE,R10
MOV R9,-4(R10)
MOV R14,-2(R10)
MOV @R15+,R14
ENDCODE IMMEDIATE
CODE AGAIN
- MOV #$409C,R9
+ MOV #[THEN]+$58,R9
GOTO BW1
ENDCODE IMMEDIATE
CODE DO
SUB #2,R15
MOV R14,0(R15)
- ADD #2,&$1DC0
- MOV &$1DC0,R14
+ ADD #2,&$1DBE
+ MOV &$1DBE,R14
MOV #XDO,-2(R14)
ADD #2,&$1C00
MOV &$1C00,R10
CODE LOOP
MOV #XLOOP,R9
-BW2 ADD #4,&$1DC0
- MOV &$1DC0,R10
+BW2 ADD #4,&$1DBE
+ MOV &$1DBE,R10
MOV R9,-4(R10)
MOV R14,-2(R10)
BEGIN
[UNDEFINED] UM/MOD [IF]
CODE UM/MOD
PUSH #DROP
- MOV #$4028,R0
+ MOV #<#+8,R0
ENDCODE
[THEN]
[UNDEFINED] CR [IF]
CODE CR
- MOV #$409E,R0
+ MOV #[THEN],R0
ENDCODE
:NONAME
; end of definitions we need
; --------------------------
+ CODE 2*DUP
+ SUB #2,R15
+ ADD R14,R14
+ MOV R14,0(R15)
+ MOV @R13+,R0
+ ENDCODE
+
[UNDEFINED] S? [IF]
CODE S?
- MOV #S"+10,R0
+ MOV #S"+$0A,R0
ENDCODE IMMEDIATE
[THEN]
MOV.B @R9+,R14
RRA R14
MOV R14,R10
+ ADD #1,R14
BIT #1,R10
0= IF
ADD #1,R10
0<> WHILE
MOV @R15,R9
REPEAT
- MOV R9,0(R15)
MOV @R13+,R0
ENDCODE
[THEN]
RST_RET
ECHO
ESC [8;42;80t
+ CR
ESC [7m
CR ." FastForth V"
$180A @
- U. ." bytes"
ESC [0m
CR
+
." /COUNTED-STRING = 255" CR
." /HOLD = 34" CR
." /PAD = 84" CR
." ADDRESS-UNIT-BITS = 16" CR
- [DEFINED] {CORE_ANS}
- [IF]
." FLOORED DIVISION = "
- $180E @
- 0< IF ." true"
- ELSE ." false"
- THEN CR
- [THEN]
+ [DEFINED] SM/REM [IF] ." false" [THEN]
+ [DEFINED] FM/MOD [IF] ." true" [THEN]
+ CR
." MAX-CHAR = 255" CR
." MAX-N = 32767" CR
." MAX-U = 65535" CR
." MAX-UD = 4294967295" CR
." STACK-CELLS = 48" CR
." RETURN-STACK-CELLS= 48" CR
- ." Definitions are always UPPERCASE." CR
- CR ESC [7m ." Kernel add-ons" ESC [0m CR
+ ." Definitions are forced UPPERCASE" CR
+
+ CR ESC [7m ." KERNEL add-ons" ESC [0m CR
$180E @
- 2* DUP 0< IF ." 32.768kHz LF XTAL" CR THEN
- 2* DUP 0< IF ." /RTS /CTS " 2*
- ELSE 2* DUP
- 0< IF ." /RTS " THEN
- THEN
- 2* DUP 0< IF ." XON/XOFF " THEN
- 2* DUP 0< IF ." Half-Duplex " THEN
- 2* DUP 0< IF ." I2C_Master TERMINAL"
- ELSE ." UART TERMINAL" THEN CR
- 2* DUP 0< IF 2* DUP 0< IF ." DOUBLE and "
- THEN ." Q15.16 numbers handling" CR
- ELSE 2* DUP 0< IF ." DOUBLE numbers handling" CR
- THEN
+ 2*DUP 0< IF ." 32.768kHz LF XTAL" CR THEN
+ 2*DUP 0< IF ." /CTS " THEN
+ 2*DUP 0< IF ." /RTS " THEN
+ 2*DUP 0< IF ." XON/XOFF " THEN
+ 2*DUP 0< IF ." Half-Duplex " THEN
+ 2*DUP 0< IF ." I2C_Master TERMINAL"
+ ELSE ." UART TERMINAL"
+ THEN CR
+ 2*DUP 0< IF 2*DUP
+ 0< IF ." DOUBLE and "
+ THEN ." Q15.16 numbers handling" CR
+ ELSE 2*DUP
+ 0< IF ." DOUBLE numbers handling" CR
+ THEN
THEN
- 2* DUP 0< IF ." MSP430_X assembler with TI's syntax"
- CR 2* 2*
- ELSE
- 2* DUP
- 0< IF ." MSP430 Assembler"
- 2* DUP
- 0< IF ." , 20bits extended addresses,"
- THEN
- ELSE 2*
+ 2*DUP 0< IF ." MSP430 16/20bits"
+ ELSE 2*DUP ." MSP430 16bits"
+ 0< IF ." (20bits addr)"
THEN
- ." with TI's syntax" CR
- THEN DROP
+ THEN ." assembler, with TI's syntax" CR
+ DROP
[DEFINED] FORTH [IF] ." word-set management" CR
[THEN]
- [DEFINED] LOAD" [IF] ." SD_CARD Load" CR
+ [DEFINED] LOAD" [IF] ." SD_CARD Load + Bootloader" CR
+ [THEN]
+ [DEFINED] READ" [IF] ." SD_CARD Read/Write/Del/CopyTERM2SD" CR
+ [THEN]
+
+ CR ESC [7m ." EXTENSIONS" ESC [0m
+ [DEFINED] {CORE_ANS} [IF] CR ." CORE ANS94 'CORETEST passed'"
+ [THEN]
+ [DEFINED] {DOUBLE} [IF] CR ." DOUBLE numbers set"
+ [THEN]
+ [DEFINED] {UTILITY} [IF] CR ." UTILITY"
+ [THEN]
+ [DEFINED] {FIXPOINT} [IF] CR ." Q15.16 ADD SUB MUL DIV"
+ [THEN]
+ [DEFINED] {CORDIC} [IF] CR ." CORDIC engine"
[THEN]
- [DEFINED] BOOT [IF] ." SD_CARD Bootloader" CR
+ [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS"
[THEN]
- [DEFINED] READ" [IF] ." SD_CARD Read/Write" CR
+ [DEFINED] {RTC} [IF] CR ." RTC utility"
[THEN]
- $1DC2
+ [DEFINED] {UARTI2CS} [IF] CR ." UART to I2C_FastForth bridge"
+ [THEN]
+ CR
+
+ $1DC0
BEGIN
@ ?DUP
WHILE
- CR ESC [7m
+ ESC [7m
DUP $180C @ 2* -
[DEFINED] FORTH
- [IF] DUP BODY>SQNFA
+ [IF] DUP BODY>SQNFA
[ELSE] OVER @
IF S" hidden"
ELSE S" FORTH"
THEN
- [THEN]
- TYPE ." word-set"
+ [THEN] TYPE
+ ." word-set"
ESC [0m CR
$1CE4
$180C @ 2*
DO
DUP I $1CE4 + @
U< IF
- DROP DROP
- I DUP $1CE4 + @
+ DROP DROP I
+ DUP $1CE4 + @
THEN
2 +LOOP
?DUP
DROP
CR
REPEAT
- DROP
- CR ESC [7m ." EXTENSIONS" ESC [0m
- [DEFINED] {CORE_ANS} [IF] CR ." CORE ANS94"
- [THEN]
- [DEFINED] {DOUBLE} [IF] CR ." DOUBLE numbers set"
- [THEN]
- [DEFINED] {UTILITY} [IF] CR ." UTILITY"
- [THEN]
- [DEFINED] {FIXPOINT} [IF] CR ." Q15.16 ADD SUB MUL DIV"
- [THEN]
- [DEFINED] {CORDIC} [IF] CR ." CORDIC engine"
- [THEN]
- [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS"
- [THEN]
- [DEFINED] {RTC} [IF] CR ." RTC utility"
- [THEN]
- [DEFINED] {UARTI2CS} [IF] CR ." UART to I2C_FastForth bridge"
- [THEN]
- CR
SYS
;