Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions arm/interpreter.s
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
.global _INTERPRETER
.type _INTERPRETER, STT_FUNC
_INTERPRETER:
.thumb_func
DOALIAS:
push {FIP}
ldr FIP, [FW]
NEXT
.thumb_func /* need to set the thumb bit on the DOCOLON symbol */
DOCOLON:
push {FIP}
Expand Down
90 changes: 46 additions & 44 deletions arm/mcu/ra4m1/words/flash.s
Original file line number Diff line number Diff line change
Expand Up @@ -43,26 +43,6 @@ COLON "callot" , CALLOT
.word XT_DP_CACHE
.word XT_EXIT
END CALLOT

COLON "~(c,)", TILDEDOCCOMMA
.word XT_FLASH_CACHE
.word XT_DP_CACHE
.word XT_PLUS
.word XT_CSTORE
.word XT_ONE
.word XT_DALLOT
.word XT_EXIT
END TILDEDOCCOMMA

COLON "~(,)", TILDEDOCOMMA
.word XT_FLASH_CACHE
.word XT_DP_CACHE
.word XT_PLUS
.word XT_STORE
.word XT_CELL
.word XT_DALLOT
.word XT_EXIT
END TILDEDOCOMMA

COLON "~!i", TILDESTORE_I /* ( x addr -- ) write x at addr in flash */
/* don't allow writing below dp0.flash */
Expand Down Expand Up @@ -132,9 +112,53 @@ COLON "ra!i", RASTORE_I /* ( x addr -- ) write x at addr in flash */
END RASTORE_I


#======================================================================
# PVFLASH primitives

CODEALIAS "~pvflash.erase", TILDEPVFLASH_ERASE, DOFLASH_ERASE /* ( addr -- ) erase PVFLASH page at addr */
END TILDEPVFLASH_ERASE

NONAME "~2!pvf", TILDE2STORE_PVF /* ( x1 x2 addr -- ) [addr] = x2, [addr+cellsize] = x1 (in the PV flash) */
/* don't allow writing below pvflash.start */
.word XT_DUP, XT_PVFLASH_START, XT_LESS, XT_DOCONDBRANCH, 1f /* # if */
.word XT_DOLITERAL, EFWADDR, XT_THROW
1: /* then */
/* back up flash.cache */
.word XT_FLASH_CACHE, XT_FLASH_SHADOW, XT_FLASH_CELL, XT_MOVE
.word XT_MROT /* ( addr x1 x2 ) */
.word XT_FLASH_CACHE, XT_STORE
.word XT_FLASH_CACHE, XT_CELLPLUS, XT_STORE
.word XT_DOFLASH_WRITE
/* restore flash cache */
.word XT_FLASH_SHADOW, XT_FLASH_CACHE, XT_FLASH_CELL, XT_MOVE
.word XT_EXIT
END TILDE2STORE_PVF

# ----------------------------------------------------------------------
# NFF3

COLON "~(dallot)", TILDEDODALLOT /* ( u -- allocate u bytes in the dictionary ) */
COLON "~c,", TILDECCOMMA
.word XT_FLASH_CACHE
.word XT_DP_CACHE
.word XT_PLUS
.word XT_CSTORE
.word XT_ONE
.word XT_DALLOT
.word XT_EXIT
END TILDECCOMMA

COLON "~,", TILDECOMMA
.word XT_DALIGN
.word XT_FLASH_CACHE
.word XT_DP_CACHE
.word XT_PLUS
.word XT_STORE
.word XT_CELL
.word XT_DALLOT
.word XT_EXIT
END TILDECOMMA

COLON "~dallot", TILDEDALLOT /* ( u -- allocate u bytes in the dictionary ) */
/* Are we crossing over to the next flash page? dp mod flash.page == 0 ? */
.word XT_DP, XT_FLASH_PAGE, XT_MOD, XT_ZEROEQUAL
.word XT_DOCONDBRANCH, 1f /* if */
Expand Down Expand Up @@ -174,26 +198,4 @@ COLON "~(dallot)", TILDEDODALLOT /* ( u -- allocate u bytes in the dictionary )
.word XT_R_FROM
.word XT_DROP
.word XT_DOLITERAL, EFCELLA, XT_THROW
END TILDEDODALLOT

#======================================================================
# PVFLASH primitives

CODEALIAS "~pvflash.erase", TILDEPVFLASH_ERASE, DOFLASH_ERASE /* ( addr -- ) erase PVFLASH page at addr */
END TILDEPVFLASH_ERASE

NONAME "~2!pvf", TILDE2STORE_PVF /* ( x1 x2 addr -- ) [addr] = x2, [addr+cellsize] = x1 (in the PV flash) */
/* don't allow writing below pvflash.start */
.word XT_DUP, XT_PVFLASH_START, XT_LESS, XT_DOCONDBRANCH, 1f /* # if */
.word XT_DOLITERAL, EFWADDR, XT_THROW
1: /* then */
/* back up flash.cache */
.word XT_FLASH_CACHE, XT_FLASH_SHADOW, XT_FLASH_CELL, XT_MOVE
.word XT_MROT /* ( addr x1 x2 ) */
.word XT_FLASH_CACHE, XT_STORE
.word XT_FLASH_CACHE, XT_CELLPLUS, XT_STORE
.word XT_DOFLASH_WRITE
/* restore flash cache */
.word XT_FLASH_SHADOW, XT_FLASH_CACHE, XT_FLASH_CELL, XT_MOVE
.word XT_EXIT
END TILDE2STORE_PVF
END TILDEDALLOT
1 change: 1 addition & 0 deletions core/amforth32.s
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,6 @@ RAMALLOT debug_buf, refill_buf_size, 4
.equ EFWADDR, -258 /* attempt to write below flash limit */
.equ ENFAZ, -259 /* NFA is not found */
.equ ENFANN, -260 /* NFA is from NONAME or HEADLESS */
.equ EALIALI, -261 /* attempt to alias an alias */


1 change: 1 addition & 0 deletions core/config.inc
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
.equ WANT_SEE , NO
.equ WANT_CODE , NO
.equ WANT_TABLE , NO
.equ WANT_SYNONYM , YES

# Other configuration parameters

Expand Down
5 changes: 5 additions & 0 deletions core/dict_secs.inc
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,10 @@
.include "words/table.s"
.endif

.if WANT_SYNONYM
.include "words/synonym.s"
.endif

#.include "words/does.s"
#.include "words/code.s"

Expand Down Expand Up @@ -266,3 +270,4 @@

.include "words/empty.s"
.include "words/builds.s"

7 changes: 7 additions & 0 deletions core/macros.inc
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ END FORTH_WORDLIST
.equ Flag_table, 0x0100
.equ Flag_pvalue, 0x0200
.equ Flag_child, 0x0400
.equ Flag_alias, 0x0800

/*
Note that ideally we would use the XT_\Label symbol as the function symbol, however, thanks to the ARM interworking garbage,
Expand Down Expand Up @@ -102,6 +103,12 @@ PFA_\Label:
HEADER Flag_none, "\Name", \Label, PFA_\Target
.endm

.macro COLONALIAS Name, Label , Target
HEADER Flag_alias, "\Name", \Label, DOALIAS
.word PFA_\Target
.word XT_EXIT
.endm

.macro COLON Name, Label
HEADER Flag_colon, "\Name", \Label, DOCOLON
.endm
Expand Down
1 change: 1 addition & 0 deletions core/words/ahead.s
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-3.0-only

IMMED "ahead", AHEAD /* ( -- )(C: -- a ) unconditional jump past then */
.word XT_QNOP
.word XT_COMPILE
.word XT_DOBRANCH
.word XT_GMARK
Expand Down
37 changes: 24 additions & 13 deletions core/words/ccomma.s
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
# SPDX-License-Identifier: GPL-3.0-only
COLON "c,", CCOMMA /* ( c -- ) append c to the dictionary */
.word XT_MEMMODE
.word XT_DOCONDBRANCH,CCOMMA_0001 /* if */
.word XT_DOCCOMMA
.word XT_DOBRANCH,CCOMMA_0002
CCOMMA_0001: # else
.word XT_DP
.word XT_CSTORE
.word XT_ONE
.word XT_DALLOT
CCOMMA_0002: # then
.word XT_EXIT
END CCOMMA

DEFER "c," , CCOMMA , XT_CARETCCOMMA /* ( c -- ) append c to the dictionary */

COLON "^c,", CARETCCOMMA
.word XT_DP
.word XT_CSTORE
.word XT_ONE
.word XT_DALLOT
.word XT_EXIT
END CARETCCOMMA

# COLON "c,", CCOMMA /* ( c -- ) append c to the dictionary */
# .word XT_MEMMODE
# .word XT_DOCONDBRANCH,CCOMMA_0001 /* if */
# .word XT_DOCCOMMA
# .word XT_DOBRANCH,CCOMMA_0002
# CCOMMA_0001: # else
# .word XT_DP
# .word XT_CSTORE
# .word XT_ONE
# .word XT_DALLOT
# CCOMMA_0002: # then
# .word XT_EXIT
# END CCOMMA
40 changes: 26 additions & 14 deletions core/words/comma.s
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
# SPDX-License-Identifier: GPL-3.0-only
COLON ",", COMMA /* ( x -- ) append x to the dictionary */
.word XT_CHKDALIGN
.word XT_MEMMODE
.word XT_DOCONDBRANCH,COMMA_0001 /* if */
.word XT_DOCOMMA
.word XT_DOBRANCH,COMMA_0002
COMMA_0001: # else
.word XT_DP
.word XT_STORE
.word XT_CELL
.word XT_DALLOT
COMMA_0002: # then
.word XT_EXIT
END COMMA

DEFER ",", COMMA , XT_CARETCOMMA /* ( x -- ) append x to the dictionary */

COLON "^,", CARETCOMMA /* ( x -- ) append x to RAM dictionary */
.word XT_DP
.word XT_STORE
.word XT_CELL
.word XT_DALLOT
.word XT_EXIT
END CARETCOMMA

# # SPDX-License-Identifier: GPL-3.0-only
# COLON ",", COMMA /* ( x -- ) append x to the dictionary */
# .word XT_CHKDALIGN
# .word XT_MEMMODE
# .word XT_DOCONDBRANCH,COMMA_0001 /* if */
# .word XT_DOCOMMA
# .word XT_DOBRANCH,COMMA_0002
# COMMA_0001: # else
# .word XT_DP
# .word XT_STORE
# .word XT_CELL
# .word XT_DALLOT
# COMMA_0002: # then
# .word XT_EXIT
# END COMMA
35 changes: 23 additions & 12 deletions core/words/dallot.s
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
# SPDX-License-Identifier: GPL-3.0-only
COLON "dallot", DALLOT /* ( u -- ) allocate u bytes in the dictionary */
.word XT_MEMMODE
.word XT_DOCONDBRANCH,DALLOT_0001 /* if */
.word XT_DODALLOT
.word XT_DOBRANCH,DALLOT_0002
DALLOT_0001: /* else */
.word XT_DP
.word XT_PLUS

DEFER "dallot" , DALLOT , XT_CARETDALLOT

COLON "^dallot", CARETDALLOT
.word XT_DP
.word XT_PLUS
.word XT_DOTO
.word XT_DP
DALLOT_0002: /* then */
.word XT_EXIT
END DALLOT
.word XT_DP
.word XT_EXIT
END CARETDALLOT

# COLON "dallot", DALLOT /* ( u -- ) allocate u bytes in the dictionary */
# .word XT_MEMMODE
# .word XT_DOCONDBRANCH,DALLOT_0001 /* if */
# .word XT_DODALLOT
# .word XT_DOBRANCH,DALLOT_0002
# DALLOT_0001: /* else */
# .word XT_DP
# .word XT_PLUS
# .word XT_DOTO
# .word XT_DP
# DALLOT_0002: /* then */
# .word XT_EXIT
# END DALLOT
2 changes: 2 additions & 0 deletions core/words/flag.s
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@ CONSTANT "flag.pvalue" , FLAGDOTPVALUE , 0x200
END FLAGDOTVALUE
CONSTANT "flag.child" , FLAGDOTCHILD , 0x400
END FLAGDOTCHILD
CONSTANT "flag.alias" , FLAGDOTALIAS , 0x800
END FLAGDOTALIAS
60 changes: 51 additions & 9 deletions core/words/flash-common.s
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,6 @@ END FLASH_MAX

/* flash primitives */

DEFER "(dallot)", DODALLOT, XT_TILDEDODALLOT /* ( u -- ) allocate u bytes in the dictionary */
END DODALLOT

DEFER "(,)", DOCOMMA, XT_TILDEDOCOMMA /* ( x -- ) append x to the dictionary */
END DOCOMMA

DEFER "(c,)", DOCCOMMA, XT_TILDEDOCCOMMA /* ( c -- ) append c to the dictionary */
END DOCCOMMA

DEFER "!i", STORE_I , XT_TILDESTORE_I /* ( x addr -- ) write x at addr in flash */
END STORE_I

Expand Down Expand Up @@ -77,3 +68,54 @@ NONAME "flash.flush", FLASHDOTFLUSH /* ( -- ) force flush (write) of flash.cache
.endif
.word XT_EXIT
END FLASHDOTFLUSH

# ----------------------------------------------------------------------
# NFF3

NONAME "ram>flash", RAM2FLASH /* ( -- ) assign defer targets for flash mode (memmode=true) */
.word XT_DOXLITERAL
.word XT_TILDECCOMMA
.word XT_DOXLITERAL
.word XT_CCOMMA
.word XT_DEFER_STORE
.word XT_DOXLITERAL
.word XT_TILDEDALLOT
.word XT_DOXLITERAL
.word XT_DALLOT
.word XT_DEFER_STORE
.word XT_DOXLITERAL
.word XT_TILDECOMMA
.word XT_DOXLITERAL
.word XT_COMMA
.word XT_DEFER_STORE
STRING "targeting flash..."
.word XT_TYPE
.word XT_CR
.word XT_EXIT
END RAM2FLASH
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
NONAME "flash>ram", FLASH2RAM /* ( -- ) assign defer targets for RAM mode (memmode=false) */
.word XT_DOXLITERAL
.word XT_CARETCCOMMA
.word XT_DOXLITERAL
.word XT_CCOMMA
.word XT_DEFER_STORE
.word XT_DOXLITERAL
.word XT_CARETDALLOT
.word XT_DOXLITERAL
.word XT_DALLOT
.word XT_DEFER_STORE
.word XT_DOXLITERAL
.word XT_CARETCOMMA
.word XT_DOXLITERAL
.word XT_COMMA
.word XT_DEFER_STORE
STRING "targeting ram..."
.word XT_TYPE
.word XT_CR
.word XT_EXIT
END FLASH2RAM
# ----------------------------------------------------------------------
#=====================================================================
#======================================================================
Loading
Loading