Table of Contents

SmileBASIC API Reference

This page is a series of notes gathered while reading the official SmileBASIC documentation and their Instruction List. It's not as clear to read as other code documentation sites out there, so my intent is to consolidate it to something easy to browse and reference.

Function names will be listed alphabetically. Feature-related lists of links will be provided as a convenience.

NOTE In case it's not obvious, this is a work in progress. NOTE

Names and Variables

SmileBASIC supports variable names that are alphanumeric, with optional underscores. Anything that matches this regex should do: [a-zA-Z0-9_]+

System Variables

Types

When defining a variable, you encode its type along with its name.

Strings

Strings are defined via the $ sigil:

A$ = "HELLO WORLD"
PRINT A$
' outputs 'HELLO WORLD'

Numbers

Numbers can be integers, or floating point numbers. Variables are integers by default.

B# = 4
PRINT B#
' outputs '4'

Operators

Every programming language has operators, and SmileBASIC is no exception.

Arithmetic

These operators are your standard addition, subtraction, multiplication, and division. Modulo is usually also included in this set.

Comparison

Comparison operators allow you to make decisions when you need to branch the behavior of a program with IF..THEN or fancy GOTO spaghetti.

These same operators can be used stand-alone in expressions to generate boolean values, which are typically 0 or 1.

Logical

Logical operators are often combined with expressions that contain comparison operators in order to make meaningful decisions in the program. This means most "business" problems in programming can be broken down into some variation of:

Solution = Logical operations of expressions, containing
           comparisons of variables, containing
           anything from numbers to text to lists.

If you can abstract a problem into this framework, you are mastering logical operators.

The more legible AND and OR may also be used, but precedence may differ. More testing is needed.

Logic and Control Flow

These functions or constructs are used to manipulate the flow, or structure, of your programs.

Input/Output

Graphics Layering

Sound Effects and Music

DIRECT Mode Commands

Function Reference

This section is where all the "proper" content lives. Other parts of the page should link back here where relevant.

At sign (@)

The sigil for a label for GOTO to target. Declare a label by typing @, then the name of the label. Later, use GOTO to point to it. Just be careful you don't put yourself into an infinite loop!

CLEAR

CLEAR

Initializes the internal BASIC memory.

TODO: Does this also erase/initialize variables away?

GOTO

GOTO @label

Jump to the specified label in the code, and continue execution.

SmileBASIC, being a derivative of BASIC, lacks many things that higher level languages take for granted today, like do/while, for loops, switch/case, list comprehensions, map/reduce, and so on. Most if not all of these can be implemented in GOTO, albeit it gets messy if your methods aren't rock-solid. This will be your go-to tool in getting anything out of BASIC that resembles these higher-level concepts.

INPUT

INPUT [message string ;] variable

Accepts keyboard input and stores it into the given variable; an optional message can be included as a quoted string, followed by a semicolon (;).

LOCATE

LOCATE [X coord][, Y coord][, Z coord]

Position the text cursor at the given (X,Y) coordinates (in character cell units instead of pixels), with an optional Z coordinate if the Nintendo 3DS is in 3D Mode.

Value Ranges

Axis Range
X 0-49
Y 0-29
Z -256-1024

The Z axis defaults to 0.

Any missing axes from a LOCATE call will be filled in with the last value used for that axis. All axes default to 0 if LOCATE is called after a CLEAR.

PRINT

PRINT [expression[; expression || : expression …]]

Output the given expression to the screen. Using a semicolon (;) as delimiter concatenates expressions without spaces between them, while the comma (,) adds TABSTEP spaces.

Using a question mark before an expression is a shorthand for calling PRINT:

?(7 + 2) ' outputs 9

String values can be concatenated with either the semicolon (;), or the addition operator (+):

A$ = "beep "
B$ = "boop"
?(A$+B$) ' outputs "beep boop"