The Mecrisp REPL¶
Terminal handlers¶
emit, emit?, key and key? are the UART handlers.
If you wish to use blocking IO, you can set hook-emit? and hook-key? statically to true.
Repl Maximum Character Length¶
You can change the accepted length in forth-core.s for “Maximaleeingabe” which is currently set to 200 characters.
Ledcomm Example from Matthias¶
https://sourceforge.net/p/mecrisp/discussion/general/thread/e29549a8d5/?limit=25#4afd/6b1e [matthias.koch]
key? ( -- ? ) is giving you a flag meaning if there is (at least) one character in the receive buffer.
key ( -- c ) is waiting until a character is received (it calls key? internally in a loop) and gives back that character.
The hooks are just vectors, accepting a pointer to a definition.
hook-key takes a definition which works as "key" and hook-key? takes a definition which works as "key?"
Look at this snipplet:
0 variable tx-puffer
0 variable rx-puffer
Communication is done from/to buffer variables driven by timers/interrupts
Then wire the buffers in accordingly:
: ledcomm-key? ( -- ? ) rx-puffer @ 0<> ;
: ledcomm-key ( -- c ) begin ledcomm-key? until rx-puffer @ 0 rx-puffer ! ;
: ledcomm-emit? ( -- ? ) tx-puffer @ 0= ;
: ledcomm-emit ( c -- ) begin ledcomm-emit? until tx-puffer ! ;
Switch terminal to new definitions:
['] ledcomm-key? hook-key? !
['] ledcomm-key hook-key !
['] ledcomm-emit? hook-emit? !
['] ledcomm-emit hook-emit !