***************** ESP32 ROM console ***************** When an ESP32 is unable to boot from flash ROM (and the fuse disabling it hasn't been blown), it boots into a rom console. The console is based on TinyBasic, and statements entered should be in the form of BASIC statements. As is common in the BASIC language, without a preceeding line number, commands entered are executed immediately; lines with a prefixed line number are stored as part of a program. Full list of supported statements and functions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ System ------ - BYE - *exits Basic, reboots ESP32, retries booting from flash* - END - *stops execution from the program, also "STOP"* - MEM - *displays memory usage statistics* - NEW - *clears the current program* - RUN - *executes the current program* IO, Documentation ----------------- - PEEK( address ) - *get a 32-bit value from a memory address* - POKE - *write a 32-bit value to memory* - USR(addr, arg1, ..) - *Execute a machine language function* - PRINT expression - *print out the expression, also "?"* - PHEX expression - *print expression as a hex number* - REM stuff - *remark/comment, also "'"* Expressions, Math ----------------- - A=V, LET A=V - *assign value to a variable* - +, -, \*, / - *Math* - <,<=,=,<>,!=,>=,> - *Comparisons* - ABS( expression ) - *returns the absolute value of the expression* - RSEED( v ) - *sets the random seed to v* - RND( m ) - *returns a random number from 0 to m* - A=1234 - * Assign a decimal value* - A=&h1A2 - * Assign a hex value* - A=&b1001 - *Assign a binary value* Control ------- - IF expression statement - *perform statement if expression is true* - FOR variable = start TO end - *start for block* - FOR variable = start TO end STEP value - *start for block with step* - NEXT - *end of for block* - GOTO linenumber - *continue execution at this line number* - GOSUB linenumber - *call a subroutine at this line number* - RETURN - *return from a subroutine* - DELAY - *Delay a given number of milliseconds* Pin IO ------ - IODIR - *Set a GPIO-pin as an output (1) or input (0)* - IOSET - *Set a GPIO-pin, configured as output, to high (1) or low (0)* - IOGET - *Get the value of a GPIO-pin* Example programs ~~~~~~~~~~~~~~~~ Here are a few example commands and programs to get you started... Read UART_DATE register of uart0 -------------------------------- :: > PHEX PEEK(&h3FF40078) 15122500 Set GPIO2 using memory writes to GPIO_OUT_REG --------------------------------------------- Note: you can do this easier with the IOSET command :: > POKE &h3FF44004,PEEK(&h3FF44004) OR &b100 Get value of GPIO0 ------------------ :: > IODIR 0,0 > PRINT IOGET(0) 0 Blink LED --------- Hook up an LED between GPIO2 and ground. When running the program, the LED should blink 10 times. :: 10 IODIR 2,1 20 FOR A=1 TO 10 30 IOSET 2,1 40 DELAY 250 50 IOSET 2,0 60 DELAY 250 70 NEXT A RUN Credits ~~~~~~~ The ROM console is based on "TinyBasicPlus" by Mike Field and Scott Lawrence, which is based on "68000 TinyBasic" by Gordon Brandly