IchigoJam BASIC reference ver 1.4

commanddescriptionexample
LED num / LEDlight on the LED when n equals 1, light off when n equals 0LED 1
WAIT num{,num2} / waitwait n frames (60frame = 1sec) (if num2 eqauls 0 low power consumption mode, if num1 is minus short wait mode -261 same as WAIT1)WAIT 60
: / colonseries the commandsWAIT 60:LED 1
linenum commands / onememory commands as line number. Remove line without commands10 LED1
RUN / runexecute program in memory [F5]RUN
LIST {linenum1{,linenum2}} / listshow the program in memory [F4] (line num1: show the line, if minus to the line / line num2: show to the line, if 0 to the end / ESC to stop)LIST 10,300
GOTO linenum / gotochange the execution line (it's OK as using variables)GOTO 10
END / endend this programEND
IF num {THEN} command1 {ELSE command2} / ifif num does not equals 0 execute command1, else execute command2 (you can ommit THEN / ELSE, need to use : after hex)IF BTN() END
IF num {THEN} command1 {ELSE command2} / thenif num does not equals 0 execute command1, else execute command2 (you can ommit THEN / ELSE, need to use : after hex)IF BTN() THEN END
IF num {THEN} command1 {ELSE command2} / elseif num does not equals 0 execute command1, else execute command2 (you can ommit THEN / ELSE, need to use : after hex)IF BTN() END ELSE CONT
BTN({num}) / buttonreturn 1 if you push the botton, else 0 (num:0(embeded button)/UP/DOWN/RIGHT/LEFT/SPACE/X(88), 0:if ommit, -1:all)LED BTN()
NEW / newdelete all program in the memoryNEW
PRINT {num or strings} / printwrite the letter or nunmber to the screen (strings must surround ["], connect pars with [;]) Abbreviation:?PRINT "HI!";15
? {num or strings} / questionwrite the letter or nunmber to the screen (strings must surround ["], connect pars with [;]) Abbreviation:??"HI!";15
LOCATE x{,y{,num}} / locateset the position to write (if y equals -1 no write mode). x as X+Y*W when set only x. show the cursor if num not equals 0. Abbreviation:LCLOCATE 3,3
LC x{,y{,num}} / locateset the position to write (if y equals -1 no write mode). x as X+Y*W when set only x. show the cursor if num not equals 0. Abbreviation:LCLC 3,3
CLS / clear screenclear the screenCLS
RND(num) / randomreturn the random number 0 to num - 1PRINT RND(6)
SAVE {num} / savesave the program (num:0-3, 100-227:optional EEPROM, if omit using number)SAVE 1
LOAD {num} / loadload the program (num:0-3, 100-227:optional EEPROM, if omit using number)LOAD
FILES {num1{,num2}} / filesshow the file list from num1 to num2 (all if num1 equals 0, ESC to stop)FILES
BEEP {num1{,num2}} / beepsound the BEEP, num1 is period(1-255), num2:length(1/60sec) (you can omit num1 and num2) *to connect the sounder on SOUND(EX2)-GNDBEEP
PLAY {mml} / playplay the music specified mml as MML(Music Macro Language) just PLAY to stop the music. MML: CDEFGAB=tone R=rest, + half tone higher, - half tone lower, with num specified length, with . half stretch the length, < octave up, > octave down, Tn set the tempo (you can change with TEMPO command) initial value:120, Ln default length (1,2,3,4,8,16,32) initial value:4, On set the octave from O1C to O5B initial value:3, Nn sound a tone specified 1-255 (same as BEEP command), ' end of music, $ repeat play after this mark, space is just skip *to connect the sounder on SOUND(EX2)-GNDPLAY "$CDE2CDE2"
TEMPO num / tempochange the tempo of playing musicTEMPO 1200
x + y / plusreturn x plus yPRINT 1+1
x - y / minusreturn x minus yPRINT 2-1
x * y / asteriskreturn x times yPRINT 7*8
x / y / slashreturn integer of x divide yPRINT 9/3
x % y / percentreturn reminder of x divide yPRINT 10%3
(num) / blacketreturn calculate the number in priorityPRINT 1+(1*2)
LET var,num / letset the number to 1 letter of alphabet as named memory(variable) (series put to the array) Abbreviation:var=numLET A,1
= / equal1. set the number to 1 letter of alphabet as named memory(variable) 2. same as == when using as numberA=1
INPUT strings,var / inputset the number to var from keyboard input (you can omit strings and comma)INPUT "ANS?",A
TICK({num}) / tickreturn the time count from CLT(count up in 1/60sec) *if nu=1, 1/(60*261)PRINT TICK()
CLT / clear tickclear the time countCLT
INKEY() / inkeyreturn from keyboard or UART (0:no input, #100:0 input from UART)PRINT INKEY()
LEFT / left28. using with INKEY and SCROLLIF INKEY()=LEFT LED1
RIGHT / right29. using with INKEY and SCROLLIF INKEY()=RIGHT LED1
UP / up30. using with INKEY and SCROLLIF INKEY()=UP LED1
DOWN / down31. using with INKEY and SCROLLIF INKEY()=DOWN LED1
SPACE / space32. using with INKEY and SCROLLIF INKEY()=SPACE LED1
CHR$(num) / characterIn PRINT, return the letter string specified the num (you can set series with comma)PRINT CHR$(65)
ASC("string") / asciireturn the letter code from stringPRINT ASC("A")
SCROLL num / scrollscroll the screen (0/UP:up、1/RIGHT:right、2/DOWN:down、3/LEFT:left)SCROLL 2
SCR({x,y}) / screenreturn the letter code located x, y on the screen (if omit x and y, using current position) Alias:VPEEKPRINT SCR(0,0)
VPEEK({x,y}) / V peekreturn the letter code located x, y on the screen (if omit x and y, using current position) Alias:VPEEKPRINT VPEEK(0,0)
x == y / equal equalreturn 1 if x equals y else 0IF A==B LED 1
x != y / not equal toreturn 1 if x does not equal y else 0IF A!=B LED 1
x <> y / less than and greater thanreturn 1 if x does not equal y else 0IF A<>B LED 1
x <= y / less than or equalreturn 1 if x <= y, else 0IF A<=B LED 1
x < y / less thanreturn 1 if x < y else 0IF A<B LED 1
x >= y / greater than or equalreturn 1 if x >= y else 0IF A>=B LED 1
x > y / greater thanreturn 1 if x < y else 0IF A>B LED 1
x AND y / andreturn 1 if x and y else 0IF A=1 AND B=1 LED 1
x && y / andreturn 1 if x and y else 0IF A=1 && B=1 LED 1
x OR y / orreturn 1 if x or y else 0IF A=1 OR B=1 LED 1
x || y / orreturn 1 if x or y else 0IF A=1 || B=1 LED 1
NOT x / notreturn 1 if x equals 0 else 0IF NOT A=1 LED 1
! X / notreturn 1 if x equals 0 else 0IF !(A=1) LED 1
REM / remarknot execute after this command (comment)REM START
' / single quotenot execute after this command (comment) START
FOR var=num1 TO num2 {STEP num3} / NEXT / forset num1 to var, execute the loop to the NEXT until var reach num2 by step num3 (you can omit STEP, nest limit:6)FOR I=0 TO 10:?I:NEXT
FOR var=num1 TO num2 {STEP num3} / NEXT / toset num1 to var, execute the loop to the NEXT until var reach num2 by step num3 (you can omit STEP, nest limit:6)FOR I=0 TO 10:?I:NEXT
FOR var=num1 TO num2 {STEP num3} / NEXT / stepset num1 to var, execute the loop to the NEXT until var reach num2 by step num3 (you can omit STEP, nest limit:6)FOR I=0 TO 10:?I:NEXT
FOR var=num1 TO num2 {STEP num3} / NEXT / nextset num1 to var, execute the loop to the NEXT until var reach num2 by step num3 (you can omit STEP, nest limit:6)FOR I=0 TO 10:?I:NEXT
POS({n}) / positionreturn a positon of cursor (num 0:X+Y*W?POS(0),POS(1)
DRAW x1,y1{,x2,y2}{,n} / drawdraw a line or a point (n 0:clearDRAW 1,5,10,15
POINT(x,y) / pointreturn a point on the screen or not?POINT(1,5)
OUT num1{,num2} / outoutput num2 to the output pin specified num1 (num1:OUT1-11, you can set all states when you omit num2, if num2 equals -1 the output pin switch into the input pin, if num2 equals -2 the output pin switch into the input with pull-up)OUT 1,1
IN({num}) / inreturn 1 if when input terminal pin is high else 0 (num:0-11 (IN0/1/4/9 pull up, IN5-8,10-11:if switched, IN0,9:button), you can get all states when you omit num)LET A,IN(1)
ANA({num}) / analogreturn the value 0-1023 specified voltage of input terminal (2:IN2, 5-8:IN5-8(OUT1-4), 0,9:BTN, 0:omitted)?ANA()
PWM num1,num2{,num3} / PWMoutput num2(0.01msec) length pulse in num3(if omit 2000) period to the output pin specified num1 (num1:OUT2-5, OUT2-4 same period)PWM 2,100
CLV / clear variablesclear (set to zero) variables and array variablesCLV
CLEAR / clearclear (set to zero) variables and array variablesCLEAR
CLK / clear keysclear key buffer and key statusCLK
CLO / clear outputinitialize the input and output pinsCLO
ABS(num) / absolutereturn the absolute value?ABS(-2)
[num] / arrayarray variables (from [0] to [101] 102 series variables) you can set in series using LET[0],1,2,3[3]=1
GOSUB linenum / gosubmove to linenum and execute after this command when RETURN/RTN (nest limit:30)GOSUB 100
GSB linenum / gosubmove to linenum and execute after this command when RETURN/RTN (nest limit:30)GSB 100
RETURN / returnback to linunum last GOSUB/GSB calledRETURN
RTN / returnback to linunum last GOSUB/GSB calledRTN
DEC$(num1{,num2}) / deciIn PRINT, return strings from num1 with beam specified num2 (you can omit num2)?DEC$(99,3)
#hexnum / hashreturn the number specified in hexadecimal *if you omit THEN after this, use : to separate#FF
HEX$(num1{,num2}) / hexIn PRINT, return hexadecimal strings from num1 with beam specified num2 (you can omit num2)?HEX$(255,2)
`binnum / back quotereturn the number specified in binary number`1010
BIN$(num1{,num2}) / binaryIn PRINT, return binary number strings from num1 with beam spcified num2 (you can omit num2)?BIN$(255,8)
x & y / ampersandreturn x logical and y (bit calculation)?3&1
x | y / pipereturn x logical or y (bit calculation)?3|1
x ^ y / hatreturn x logical exclusive or y (bit calculation)?A^1
x >> y / shift rightreturn x shift down y bits (bit calculation)?A>>1
x << y / shift leftreturn x shift up y bits (bit calculation)?A<<1
~x / tldareturn bit inverted x (bit calculation)?~A
COS(deg) / cosinereturn cosine number times 256 by degrees *for ver1.4 or later?COS(90)
SIN(deg) / sinereturn sine number times 256 by degrees *for ver1.4 or later?SIN(90)
STOP / stopstop the programSTOP
CONT / continuecontinue the same line or stop lineCONT
SOUND() / soundreturn 1 if sound playing else 0?SOUND()
FREE() / freereturn free memory of program (up to 1024 bytes)?FREE()
VER({num}) / versionn=0 or default: return the version number of IchigoJam BASIC (n=0 or default) 1: return the language number of IchigoJam BASIC(1:Japanese 2:Mongol, 3:Vietnam)?VER()
RENUM {num1{,num2}} / renumberrenumber the line number of program from num1 step num2 (num1:10, num2:10 if omit, you may have to change manually line number specified in GOTO/GOSUB)RENUM
LRUN {{num1},num2} / load and runLOAD num1 and RUN or GOTO num2LRUN 1
FILE() / filereturn the number of last using FILE?FILE()
LINE() / linereturn the line number of last execution?LINE()
SRND num / S randominitialize the seed of randomSRND 0
HELP / helpdisplay the memory mapHELP
PEEK(num) / peekread 1 byte number from the memory in address specified num2?PEEK(#700)
POKE num1,num2 / pokewrite 1 byte num1 specified to the memory in address specified num2POKE #700,#FF
COPY num1,num2,num3 / copymemory copy from num1 to num2 length specified num3 (if num3 is minus, copy direction is inverted)COPY #900,0,256
CLP / clear patterninitialize the character pattern memory (#700-#7FF)CLP
"strings" / double quotereturn the address of strings on the memoryA="ABC"
STR$(num1{,num2}) / stingsIn PRINT, return strings from address specified num1 (num2:length you can omit)PRINT STR$(A)
LEN("strings") / lengthreturn the length of stringsPRINT LEN("ABC")
@label / at markPut in front of the line, you can as destination line number (type GOTO @LOOP)@LOOP
VIDEO num1{,num2} / videoswitch the video signal enabled or disabled (num0:0 disabled / 1 enable[F8] / 2 invert black and white / greater than bigmode, num2:when num0 is 0 clock down mode clock=1/num2)VIDEO 0
RESET / resetreboot the IchigoJamRESET
SLEEP / sleepsleep the IchigoJam (after push the button, execute and run file 0)SLEEP
UART num1{,num2} / UARTset UART mode (num1 0:off 1:with PRINT 2:with PRINT/LC/CLS/SCROLL 3:with PRINT and enter code is \r\n, echo back input with +4, disable screen put with +8, initial value:2) (num2 0:UART recv off, 1:on, +2:ignore ESC, +4:CR change(13→10), initial value:1)UART 0
BPS num1{,num2} / BPSnum1: set UART speed (0:115,200bps -1:57600bps -2:38400bps or 9600 and so on ... if -100 or less, -100 times speed. For example, if it is -2604, it is 260400 initial value:0), num2: set I2C speed(unit kHz, 0:400kHz default value:0)BPS 9600
OK {num} / OKshow OK and error messages (1: message on if omit, 2: message off)OK 2
I2CR(num1,num2,num3,num4,num5) / I two C readread from I2C device num1:I2C address, num2:address of command, num2:length of command, num4:address of return data, num5:length of return data (if command is 1byte you can omit num2, if no commands num2/num3 you can omit)R=I2CR(#50,#114A,2,#114C,2)
I2CW(num1,num2,num3,num4,num5) / I two C writewrite to I2C device num1:I2C address, num2:address of command, num2:length of command, num4:address of return data, num5:length of return data (you can omit num4/num5, if command is 1byte you can omit num2)R=I2CW(#50,#114A,2,#114C,2)
IoT.IN() / IoT inget a received number from the sakura.io moduleR=IoT.IN()
IoT.OUT num / IoT outsend a number to send via the sakura.io module as the 0 channelIoT.OUT 100
WS.LED num1{,num2} / WS LEDThe WS2812B connected to LED lights up by num1 with values ​​set in the order of green, red, and blue from the beginning of the array. If the num2 is specified, it repeats that number. *for ver 1.4WS.LED 3
SWITCH {num} / switchswitch the video output, TV or LCD (0:TV 1:LCD)SWITCH
USR(address{,num}) / userCall the machine language (Arm Cortex-M0) of the address specified by the num1 with the num2 as a parameter (0 for num2 omitted)A=USR(#700,0)
CC BY IchigoJam(DATA: https://github.com/ichigojam/doc/