nanoFORTH  v2.2
n4_core.h
Go to the documentation of this file.
1 
6 #ifndef __SRC_N4_CORE_H
7 #define __SRC_N4_CORE_H
8 #include "n4.h"
12 constexpr U16 N4_DIC_SZ = 0x400;
13 constexpr U16 N4_STK_SZ = 0x80;
14 constexpr U16 N4_TIB_SZ = 0x80;
15 #if ARDUINO
17 #define show(s) { io->print(F(s)); io->flush(); }
18 #else
19 #define show(s) log(s)
20 #endif // ARDUINO
21 #define ENC8(p, c) (*(U8*)(p)++=(U8)(c))
36 #define ENCA(p, a) { IU x=(IU)(a); ENC8(p,(x)>>8); ENC8(p,(x)&0xff); }
37 #define GETA(p) (((IU)(*(U8*)(p))<<8) + *((U8*)(p)+1))
38 #define STORE(p, v) { DU x=(DU)(v); ENC8(p,(x)>>8); ENC8(p,(x)&0xff); }
39 #define FETCH(p) (((DU)(*(U8*)(p))<<8) + *((U8*)(p)+1))
40 typedef struct {
45  IU *rp;
46  DU *sp;
47 } N4Task;
48 
49 namespace N4Core
50 {
51  extern N4Task vm;
52  extern U8 *dic;
53  extern U8 trc;
54  extern Stream *io;
55 
56  void init_mem();
57  void mstat();
58 
59  void set_pre(const char *code);
60  void set_io(Stream *s);
61  void set_hex(U8 f);
62  void set_ucase(U8 uc);
63  char uc(char c);
67  char key();
68  void d_chr(char c);
69  void d_adr(IU a);
70  void d_str(U8 *p);
71  void d_ptr(U8 *p);
72  void d_nib(U8 n);
73  void d_u8(U8 c);
74  void d_num(DU n);
75  void d_pin(U16 p, U16 v);
76  U16 d_in(U16 p);
77  void d_out(U16 p, U16 v);
78  void d_mem(
79  U8 *base,
80  U8 *p0,
81  IU sz,
82  U8 delim
83  );
84  void d_name(U8 *p);
85  void d_name(
86  U8 op,
87  const char *lst,
88  U8 space
89  );
90  U16 a_in(U16 p);
91  void a_out(U16 p, U16 v);
92  void clear_tib();
97  U8 ok();
98  U8 *get_token(U8 rst=0);
99  U8 number(
100  U8 *tkn,
101  DU *num
102  );
106  U8 scan(
107  U8 *tkn,
108  const char *lst,
109  IU *id
110  );
112 };
113 #endif //__SRC_N4_CORE_H
N4Core::vm
N4Task vm
VM context.
Definition: n4_core.cpp:17
N4Core::a_in
U16 a_in(U16 p)
fetch from analog port
Definition: n4_core.cpp:100
N4Core::scan
U8 scan(U8 *tkn, const char *lst, IU *id)
Definition: n4_core.cpp:284
N4Task
Definition: n4_core.h:44
N4_DIC_SZ
constexpr U16 N4_DIC_SZ
Definition: n4_core.h:12
N4_STK_SZ
constexpr U16 N4_STK_SZ
Definition: n4_core.h:13
N4Core::key
char key()
Arduino's Serial.getchar(), yield to user tasks when waiting.
Definition: n4_core.cpp:66
N4Core::clear_tib
void clear_tib()
reset input buffer
Definition: n4_core.cpp:173
N4_TIB_SZ
constexpr U16 N4_TIB_SZ
Definition: n4_core.h:14
N4Core::d_str
void d_str(U8 *p)
handle dot string (byte-stream leading with length)
Definition: n4_core.cpp:114
N4Core::number
U8 number(U8 *str, DU *num)
Definition: n4_core.cpp:149
N4Core::get_token
U8 * get_token(U8 rst)
get a token from console input
Definition: n4_core.cpp:247
N4Core::trc
U8 trc
tracing control flag
Definition: n4_core.cpp:22
N4Core::set_hex
void set_hex(U8 f)
enable/disable hex numeric radix
N4Core::set_io
void set_io(Stream *s)
initialize or redirect IO stream
N4Core::d_in
U16 d_in(U16 p)
fetch from GPIO port
Definition: n4_core.cpp:82
N4Core::d_out
void d_out(U16 p, U16 v)
send output to GPIO ports
Definition: n4_core.cpp:83
N4Core::d_mem
void d_mem(U8 *base, U8 *p0, IU sz, U8 delim)
Definition: n4_core.cpp:121
N4Core::d_chr
void d_chr(char c)
print a char to console
Definition: n4_core.cpp:71
N4Task::sp
DU * sp
top of data stack
Definition: n4_core.h:46
N4Core::mstat
void mstat()
display MMU statistics
Definition: n4_core.cpp:45
N4Core
Definition: n4_core.cpp:12
DU
S16 DU
16-bit data unit (CELL)
Definition: n4.h:76
N4Core::dic
U8 * dic
base of dictionary
Definition: n4_core.cpp:16
N4Core::d_u8
void d_u8(U8 c)
print a 8-bit hex number
Definition: n4_core.cpp:116
N4Core::d_adr
void d_adr(IU a)
print a 12-bit address
Definition: n4_core.cpp:78
N4Core::d_num
void d_num(DU n)
sent a number literal to console
Definition: n4_core.cpp:80
N4Core::ok
U8 ok()
check whether input buffer is empty
Definition: n4_core.cpp:219
U16
uint16_t U16
16-bit unsigned integer, for return stack, and pointers
Definition: n4.h:66
N4Core::d_pin
void d_pin(U16 p, U16 v)
set pin a given pinMode (INPUT, OUTPUT)
Definition: n4_core.cpp:81
N4Core::io
Stream * io
default to Arduino Serial Monitor
Definition: n4_core.cpp:21
N4Core::uc
char uc(char c)
Definition: n4_core.cpp:39
N4Core::init_mem
void init_mem()
initialize MMU
Definition: n4_core.cpp:30
N4Core::a_out
void a_out(U16 p, U16 v)
send output to GPIO ports
Definition: n4_core.cpp:101
N4Core::d_nib
void d_nib(U8 n)
print a nibble
Definition: n4_core.cpp:115
U8
uint8_t U8
8-bit unsigned integer, for char and short int
Definition: n4.h:65
N4Task::rp
IU * rp
base of return stack
Definition: n4_core.h:45
N4Core::d_ptr
void d_ptr(U8 *p)
print a pointer
Definition: n4_core.cpp:79
N4Core::d_name
void d_name(U8 *p)
print 3 characters name
Definition: n4_core.cpp:133
N4Core::set_ucase
void set_ucase(U8 uc)
set case sensitiveness
n4.h
nanoForth main controller
IU
U16 IU
16-bit instruction unit (ADDR)
Definition: n4.h:75
N4Core::set_pre
void set_pre(const char *code)
set embedded Forth code
Definition: n4_core.cpp:35