Merge branch 'main' into win_break
This commit is contained in:
2
Makefile
2
Makefile
@ -12,7 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
VERSION=7.0.7.4
|
||||
VERSION=7.0.7.7
|
||||
STABLE_VERSION=7.0.6.19
|
||||
OLD_STABLE_VERSION=7.0.5.4
|
||||
REVISION=$(shell git rev-parse HEAD | head -c 20)
|
||||
|
||||
@ -15,9 +15,12 @@
|
||||
( Interpret time conditionals )
|
||||
|
||||
: DEFINED? ( "name" -- xt|0 )
|
||||
bl parse find state @ if aliteral then ; immediate
|
||||
begin bl parse dup 0= while 2drop refill 0= throw repeat
|
||||
find state @ if aliteral then ; immediate
|
||||
defer [SKIP]
|
||||
: [THEN] ; : [ELSE] [SKIP] ; : [IF] 0= if [SKIP] then ;
|
||||
: [THEN] ; immediate
|
||||
: [ELSE] [SKIP] ; immediate
|
||||
: [IF] 0= if [SKIP] then ; immediate
|
||||
: [SKIP]' 0 begin postpone defined? dup if
|
||||
dup ['] [IF] = if swap 1+ swap then
|
||||
dup ['] [ELSE] = if swap dup 0 <= if 2drop exit then swap then
|
||||
|
||||
@ -109,6 +109,9 @@ static cell_t same(const char *a, const char *b, cell_t len) {
|
||||
}
|
||||
|
||||
static cell_t find(const char *name, cell_t len) {
|
||||
if (len == 0) {
|
||||
return 0;
|
||||
}
|
||||
for (cell_t ***voc = g_sys->context; *voc; ++voc) {
|
||||
cell_t xt = (cell_t) **voc;
|
||||
while (xt) {
|
||||
|
||||
@ -12,19 +12,23 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifdef HAS_SIGNALS
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
#if defined(HAS_SIGNALS) || defined(ENABLE_ESP32_FORTH_FAULT_HANDLING)
|
||||
# include <setjmp.h>
|
||||
#endif
|
||||
#if defined(HAS_SIGNALS)
|
||||
# include <signal.h>
|
||||
#endif
|
||||
|
||||
#define JMPW goto **(void **) w
|
||||
#define NEXT w = *ip++; JMPW
|
||||
#define ADDROF(x) (&& OP_ ## x)
|
||||
|
||||
#ifdef HAS_SIGNALS
|
||||
#if defined(HAS_SIGNALS) || defined(ENABLE_ESP32_FORTH_FAULT_HANDLING)
|
||||
static __thread jmp_buf g_forth_fault;
|
||||
static __thread int g_forth_signal;
|
||||
#endif
|
||||
|
||||
#if defined(HAS_SIGNALS)
|
||||
static void forth_signal_handler(int sig) {
|
||||
g_forth_signal = sig;
|
||||
sigset_t ss;
|
||||
@ -34,6 +38,17 @@ static void forth_signal_handler(int sig) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_ESP32_FORTH_FAULT_HANDLING)
|
||||
# include "soc/soc.h"
|
||||
# include <xtensa/xtensa_api.h>
|
||||
static __thread uint32_t g_forth_setlevel;
|
||||
static void IRAM_ATTR forth_exception_handler(XtExcFrame *frame) {
|
||||
g_forth_signal = frame->exccause;
|
||||
XTOS_RESTORE_INTLEVEL(g_forth_setlevel);
|
||||
longjmp(g_forth_fault, 1);
|
||||
}
|
||||
#endif
|
||||
|
||||
static cell_t *forth_run(cell_t *init_rp) {
|
||||
static const BUILTIN_WORD builtins[] = {
|
||||
#define Z(flags, name, op, code) \
|
||||
@ -50,20 +65,35 @@ static cell_t *forth_run(cell_t *init_rp) {
|
||||
if (!init_rp) {
|
||||
g_sys->DOCREATE_OP = ADDROF(DOCREATE);
|
||||
g_sys->builtins = builtins;
|
||||
#ifdef HAS_SIGNALS
|
||||
#if defined(HAS_SIGNALS)
|
||||
struct sigaction sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sa_handler = forth_signal_handler;
|
||||
sigaction(SIGSEGV, &sa, 0);
|
||||
sigaction(SIGBUS, &sa, 0);
|
||||
sigaction(SIGINT, &sa, 0);
|
||||
sigaction(SIGFPE, &sa, 0);
|
||||
#endif
|
||||
#if defined(ENABLE_ESP32_FORTH_FAULT_HANDLING)
|
||||
xt_set_exception_handler(EXCCAUSE_LOAD_STORE_ERROR, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_PRIVILEGED, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_UNALIGNED, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_DIVIDE_BY_ZERO, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_INSTR_ERROR, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_ILLEGAL, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_LOAD_PROHIBITED, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_STORE_PROHIBITED, forth_exception_handler);
|
||||
xt_set_exception_handler(EXCCAUSE_INSTR_PROHIBITED, forth_exception_handler);
|
||||
uint32_t default_setlevel = XTOS_SET_INTLEVEL(XCHAL_EXCM_LEVEL);
|
||||
XTOS_RESTORE_INTLEVEL(default_setlevel);
|
||||
g_forth_setlevel = default_setlevel;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
register cell_t *ip, *rp, *sp, tos, w;
|
||||
register float *fp, ft;
|
||||
rp = init_rp; UNPARK;
|
||||
#ifdef HAS_SIGNALS
|
||||
#if defined(HAS_SIGNALS) || defined(ENABLE_ESP32_FORTH_FAULT_HANDLING)
|
||||
if (setjmp(g_forth_fault)) {
|
||||
rp = *g_sys->throw_handler;
|
||||
*g_sys->throw_handler = (cell_t *) *rp--;
|
||||
|
||||
@ -143,9 +143,15 @@ vocabulary rtos rtos definitions
|
||||
transfer rtos-builtins
|
||||
forth definitions
|
||||
|
||||
vocabulary bluetooth bluetooth definitions
|
||||
transfer bluetooth-builtins
|
||||
forth definitions
|
||||
DEFINED? SerialBT.new [IF]
|
||||
vocabulary bluetooth bluetooth definitions
|
||||
transfer bluetooth-builtins
|
||||
forth definitions
|
||||
[ELSE]
|
||||
internals definitions
|
||||
transfer bluetooth-builtins
|
||||
forth definitions
|
||||
[THEN]
|
||||
|
||||
vocabulary oled oled definitions
|
||||
transfer oled-builtins
|
||||
|
||||
@ -12,6 +12,8 @@
|
||||
\ See the License for the specific language governing permissions and
|
||||
\ limitations under the License.
|
||||
|
||||
DEFINED? bluetooth [IF]
|
||||
|
||||
( Lazy loaded Bluetooth Serial Terminal )
|
||||
: bterm r|
|
||||
vocabulary bterm bterm definitions
|
||||
@ -34,3 +36,5 @@ name 0 bt SerialBT.begin drop
|
||||
only forth definitions
|
||||
bterm 500 ms bt-on
|
||||
| evaluate ;
|
||||
|
||||
[THEN]
|
||||
|
||||
@ -86,7 +86,7 @@ static cell_t ResizeFile(cell_t fd, cell_t size);
|
||||
#define REQUIRED_SYSTEM_SUPPORT \
|
||||
X("MS-TICKS", MS_TICKS, PUSH millis()) \
|
||||
XV(internals, "RAW-YIELD", RAW_YIELD, yield()) \
|
||||
XV(internals, "RAW-TERMINATE", RAW_TERMINATE, exit(n0))
|
||||
XV(internals, "RAW-TERMINATE", RAW_TERMINATE, ESP.restart())
|
||||
|
||||
#define REQUIRED_SERIAL_SUPPORT \
|
||||
XV(serial, "Serial.begin", SERIAL_BEGIN, Serial.begin(tos); DROP) \
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
|
||||
internals definitions
|
||||
transfer camera-builtins
|
||||
DEFINED? esp_camera_init [IF]
|
||||
forth definitions
|
||||
|
||||
( Lazy loaded camera handling for ESP32-CAM )
|
||||
@ -124,4 +125,6 @@ forth definitions
|
||||
camera
|
||||
| evaluate ;
|
||||
|
||||
[ELSE]
|
||||
forth definitions
|
||||
[THEN]
|
||||
|
||||
@ -52,6 +52,11 @@
|
||||
# define ENABLE_RMT_SUPPORT
|
||||
#endif
|
||||
|
||||
// ESP32-C3 doesn't support fault handling yet.
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
# define ENABLE_ESP32_FORTH_FAULT_HANDLING
|
||||
#endif
|
||||
|
||||
// Uncomment this #define for OLED Support.
|
||||
// You will need to install these libraries from the Library Manager:
|
||||
// Adafruit SSD1306
|
||||
@ -63,9 +68,10 @@
|
||||
// camera support and BluetoothSerial.
|
||||
// ESP32-CAM always have PSRAM, but so do WROVER boards,
|
||||
// so this isn't an ideal indicator.
|
||||
// Also limiting to ESP32 classic only, as these can't be ESP32-CAM.
|
||||
// Some boards (e.g. ESP32-S2-WROVER) don't seem to have
|
||||
// built the serial library, so check if its enabled as well.
|
||||
#if defined(BOARD_HAS_PSRAM) || defined(SIM_PRINT_ONLY)
|
||||
#if (defined(CONFIG_IDF_TARGET_ESP32) && defined(BOARD_HAS_PSRAM)) || defined(SIM_PRINT_ONLY)
|
||||
# define ENABLE_CAMERA_SUPPORT
|
||||
# if (defined(CONFIG_BT_ENABLED) && \
|
||||
defined(CONFIG_BLUEDROID_ENABLED)) || \
|
||||
|
||||
@ -39,6 +39,9 @@ PLATFORM_SIMULATED_OPCODE_LIST
|
||||
#define heap_caps_get_largest_free_block(x) SIM_HEAP_SIZE
|
||||
#define heap_caps_get_free_size(x) SIM_HEAP_SIZE
|
||||
|
||||
// Fault handling can't work in the simulator for now.
|
||||
#undef ENABLE_ESP32_FORTH_FAULT_HANDLING
|
||||
|
||||
#include "common/bits.h"
|
||||
#include "common/core.h"
|
||||
#include "common/interp.h"
|
||||
|
||||
@ -28,21 +28,26 @@ vocabulary xtensa xtensa definitions
|
||||
numeric operand im
|
||||
: imm4 im im im im ;
|
||||
: imm8 imm4 imm4 ;
|
||||
: imm12 imm4 imm4 imm4 ;
|
||||
: imm16 imm8 imm8 ;
|
||||
: sr imm8 ;
|
||||
|
||||
( Offsets for J )
|
||||
( Offsets for J and branches )
|
||||
: >ofs ( n -- n ) chere - 4 - ;
|
||||
: ofs. ( n -- ) 18 sextend address @ + 4 + . ;
|
||||
' >ofs ' ofs. operand ofs
|
||||
: offset 18 for aft ofs then next ;
|
||||
: ofs8. ( n -- ) 8 sextend address @ + 4 + . ;
|
||||
: ofs12. ( n -- ) 12 sextend address @ + 4 + . ;
|
||||
: ofs18. ( n -- ) 18 sextend address @ + 4 + . ;
|
||||
' >ofs ' ofs8. operand ofs8
|
||||
' >ofs ' ofs12. operand ofs12
|
||||
' >ofs ' ofs18. operand ofs18
|
||||
: offset8 8 for aft ofs8 then next ;
|
||||
: offset12 12 for aft ofs12 then next ;
|
||||
: offset18 18 for aft ofs18 then next ;
|
||||
|
||||
( Offsets for CALL* )
|
||||
: >cofs ( n -- n ) chere - 2 rshift 1- ;
|
||||
: cofs. ( n -- ) 18 sextend 1+ 2 lshift address @ 3 invert and + . ;
|
||||
' >cofs ' cofs. operand cofs
|
||||
: coffset 18 for aft cofs then next ;
|
||||
: coffset18 18 for aft cofs then next ;
|
||||
|
||||
( Frame size of ENTRY )
|
||||
: >entry12 ( n -- n ) 3 rshift ;
|
||||
@ -119,27 +124,27 @@ $4 ALU2 XORB,
|
||||
$8 ALU2 MULL, $a ALU2 MULUH, $b ALU2 MULSH,
|
||||
$c ALU2 QUOU, $d ALU2 QUOS, $e ALU2 REMU, $f ALU2 REMS,
|
||||
|
||||
: BRANCH1 imm8 4 bits ssss tttt o l l l OP ;
|
||||
: BRANCH1 offset8 4 bits ssss tttt o l l l OP ;
|
||||
$0 BRANCH1 BNONE, $1 BRANCH1 BEQ, $2 BRANCH1 BLT, $3 BRANCH1 BLTU,
|
||||
$4 BRANCH1 BALL, $5 BRANCH1 BBC,
|
||||
imm8 o l l b ssss bbbb o l l l OP BBCI,
|
||||
offset8 o l l b ssss bbbb o l l l OP BBCI,
|
||||
$8 BRANCH1 BANY, $9 BRANCH1 BNE, $a BRANCH1 BGE, $b BRANCH1 BGEU,
|
||||
$c BRANCH1 BNALL, $d BRANCH1 BBS,
|
||||
imm8 l l l b ssss bbbb o l l l OP BBSI,
|
||||
offset8 l l l b ssss bbbb o l l l OP BBSI,
|
||||
|
||||
: BRANCH2 imm12 ssss 4 bits o l l o OP ;
|
||||
: BRANCH2a imm8 rrrr ssss 4 bits o l l o OP ;
|
||||
: BRANCH2 offset12 ssss 4 bits o l l o OP ;
|
||||
: BRANCH2a offset8 rrrr ssss 4 bits o l l o OP ;
|
||||
: BRANCH2e entry12 ssss 4 bits o l l o OP ;
|
||||
( $0 J, ) $1 BRANCH2 BEQZ, $2 BRANCH2a BEQI, $3 BRANCH2e ENTRY,
|
||||
( $4 J, ) $5 BRANCH2 BNEZ, $6 BRANCH2a BNEI, ( BRANCH2b's )
|
||||
( $8 J, ) $9 BRANCH2 BLTZ, $a BRANCH2a BLTI, $b BRANCH2a BLTUI,
|
||||
( $c J, ) $d BRANCH2 BGEZ, $e BRANCH2a BGEI, $f BRANCH2a BGEUI,
|
||||
offset o o o l l o OP J,
|
||||
: BRANCH2b imm8 4 bits ssss o l l l o l l o OP ;
|
||||
offset18 o o o l l o OP J,
|
||||
: BRANCH2b offset8 4 bits ssss o l l l o l l o OP ;
|
||||
$0 BRANCH2b BF, $1 BRANCH2b BT,
|
||||
$8 BRANCH2b LOOP, $9 BRANCH2b LOOPNEZ, $a BRANCH2b LOOPGTZ,
|
||||
|
||||
: CALLOP coffset 2 bits o l o l OP ;
|
||||
: CALLOP coffset18 2 bits o l o l OP ;
|
||||
0 CALLOP CALL0, 1 CALLOP CALL4, 2 CALLOP CALL8, 3 CALLOP CALL12,
|
||||
|
||||
: CALLXOP o o o o o o o o o o o o ssss l l 2 bits o o o o OP ;
|
||||
|
||||
@ -117,6 +117,9 @@ function BUILTIN_CODE(i) {
|
||||
}
|
||||
|
||||
function Find(name) {
|
||||
if (name.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
name = name.toUpperCase();
|
||||
var raw = unescape(encodeURIComponent(name));
|
||||
for (var voc = i32[g_sys_context>>2]; i32[voc>>2]; voc += 4) {
|
||||
|
||||
Reference in New Issue
Block a user