SE3K Survivors Experience 3000

VOLUME B -- BASIC QUICK REFERENCE

SC-3000 BASIC Level III-B — part of the SE3K documentation library, also readable inside the emulator.

============================================================================
SC-3000  BASIC LEVEL III-B
VOLUME B -- BASIC QUICK REFERENCE
============================================================================
Usage      : dictionary -- alphabetical syntax, no examples
Level      : all
References : Vol. A1 (guide with examples)  *  Vol. D (ML interface)
TABLE OF CONTENTS
----------------------------------------------------------------------------
Variable names (naming rules, 2-char limit) ........................... B-1
Commands -- direct mode (alphabetical) .................................. B-2
Commands -- program statements (alphabetical) .......................... B-5
Built-in functions (alphabetical) ..................................... B-14
Operators and precedences ............................................. B-20
System limitations .................................................... B-21
SOUND frequency table ................................................. B-22
Token table (internal codes) .......................................... B-23
SC-3000 ASCII codes ................................................... B-25

VARIABLE NAMES

VARIABLE NAMES
============================================================================
Numeric variable    letter followed by zero or more letters/digits
X   CR   NR   K4   W1
String variable     numeric name followed by $
A$  NAME$   (NAME$ and NA$ are the same: NA$)
Array               variable name with parenthesised subscript(s)
A(n)  M(r, c)  T(i, j, k)   max 3 dimensions
+---------------------------------------------------------------------+
|  CRITICAL: only the FIRST 2 CHARACTERS of a name are significant.  |
|  All longer names are silently truncated -- no error is reported.    |
|                                                                     |
|  SPEED and SPRITE  ->  both become SP  ->  one overwrites the other  |
|  DIM FRR(11) and DIM FRC(11)  ->  both become DIM FR(11)            |
|  NAME$ and NADDR$  ->  both become NA$                              |
+---------------------------------------------------------------------+
A scalar and an array with the same 2-char prefix can coexist:
A = 99  :  DIM A(5)       -- scalar A and array A(n) are distinct
All names are case-insensitive: SCORE = Score = score.
See Vol. A1 ch. 2 for naming conventions and conflict-avoidance rules.

COMMANDS -- DIRECT MODE

COMMANDS -- DIRECT MODE
============================================================================
LIST
LIST [m][-[n]]  --  m=first line, n=last line
Display program. SPACE pauses, BREAK stops.
LLIST
LLIST [m][-[n]]  --  Same as LIST but to serial printer.
AUTO
AUTO [m][, n]  --  m=start line (def 10), n=step (def 10)
Auto line-number generation.
DELETE
DELETE m[-n]  --  Remove program lines m through n.
RUN
RUN [m]  --  m=start line (default=first). Start execution.
CONT
CONT  --  Resume after STOP or BREAK.
LOAD
LOAD ["filename"]  --  Load program from cassette.
SAVE
SAVE "filename"  --  Save program to cassette (name <= 16 chars).
VERIFY
VERIFY ["filename"]  --  Compare tape file with program in memory.
NEW
NEW  --  Clear program and variables.
RENUM
RENUM [m1][, m2][, m3]  --  m1=new start(def 10), m2=from line(def 1st), m3=step(def 10)
Renumber program lines.

COMMANDS -- PROGRAM STATEMENTS

COMMANDS -- PROGRAM STATEMENTS
============================================================================
REM
REM  --  Comment; rest of line ignored.
STOP
STOP  --  Stop execution; resume with CONT.
END
END  --  Terminate program.
LET
LET d=s  --  Assign expression s to variable d (LET optional).
PRINT
PRINT [s1{,|;}s2...]  --  Display values.
, = tab to next zone; ; = no space; : at end = no newline.
Special: CHR$(&H10)=8x8 font, CHR$(&H11)=16x8 font.
LPRINT
LPRINT [s1{,|;}s2...]  --  Same as PRINT but to serial printer.
INPUT
INPUT [d$;]d1[, d2...]  --  d$=optional prompt. Read keyboard -> variables.
READ
READ d1[, d2...]  --  Read next DATA item(s) into variables.
DATA
DATA c1[, c2...]  --  Store constants for READ.
RESTORE
RESTORE [m]  --  Reset READ pointer.
DIM
DIM d(n1[, n2, n3])[,...]  --  Declare array up to 3 dimensions.
Without DIM, max index=10.
ERASE
ERASE [d1, d2...]  --  Invalidate array declarations (all if omitted).
DEF
DEF FN d(x)=z  --  Define user function d, argument x, body z.
Up to 8 user functions.
GOTO
GOTO m  --  Jump to line number m.
GOSUB
GOSUB m  --  Call subroutine at line m.
RETURN
RETURN  --  Return from GOSUB. Stack depth <= 15.
ON
ON s GOTO/GOSUB m1[, m2...]  --  s=1 -> m1, s=2 -> m2 ...
FOR
FOR m=n1 TO n2 [STEP n3]  --  Loop. n3 default=1. Nesting <= 8.
NEXT
NEXT [m1[, m2...]]  --  End of FOR loop.
IF
IF r THEN s  --  Execute s if r is true (non-zero).
GOTO can be omitted: IF r THEN line#
CONSOLE
CONSOLE [v][, l][, c][, s]  --  v=scroll upper (0-22), l=scroll lower (2-24),
c=click sound(1/0), s=small-caps(1/0).
CLS
CLS  --  Clear screen.
SCREEN
SCREEN n[, m]  --  n=write screen(1=text,2=gfx), m=display screen.
COLOR
COLOR n[, m,(x1, y1)-(x2, y2), b]  --  n=colour of bit 1(0-15), m=bit 0,
coords=range for bg colour, b=backdrop colour.
Text mode: only n and m are used.
PATTERN
PATTERN mn, d  --  m=C#(text,32-255) or S#(sprite,0-255); n=char code; d=hex string.
16 bytes per char (2 bytes x 8 rows). Odd-byte "*" = repeat.
VRAM $1800-$1FFF (swapped with RAM $8B36-$9335).
CURSOR
CURSOR x, y  --  Set cursor position. Text: x=0-37, y=0-24. Gfx: x=0-255, y=0-192.
POSITION
POSITION (x, y), a, b  --  Set graphics origin. a=x-dir(0=right,1=left), b=y-dir(0=down,1=up).
PSET
PSET (x, y), c  --  Draw pixel at (x, y) colour c(0-15).
PRESET
PRESET (x, y)  --  Erase pixel at (x, y).
LINE
LINE [(x1, y1)]-(x2, y2), c[, f]  --  Draw line; f=B (box) or BF (filled box).
Omit start to continue from last point.
BLINE
BLINE [(x1, y1)]-(x2, y2)[, c[, f]]  --  Erase line/box (colour ignored).
CIRCLE
CIRCLE (x, y), r[, c, l, m, n, o]  --  Draw circle/ellipse.
l=aspect ratio, m=start angle(0-1), n=end angle(0-1), o=B/BF.
BCIRCLE
BCIRCLE (x, y), r[, c, l, m, n, o]  --  Erase circle (colour ignored).
PAINT
PAINT (x, y), c  --  Flood fill enclosed area at (x, y) with colour c.
SPRITE
SPRITE n,(x, y), p, c  --  Display sprite n at (x, y), pattern p, colour c(0-15).
MAG
MAG m  --  Sprite size: 0=8x8, 1=16x16, 2=8x8 magnified, 3=16x16 magnified.
SOUND
SOUND c, f, v  --  PSG output. c=channel(0=mute,1-3=tone,4=white noise,5=periodic noise),
f=frequency (see table), v=volume(0-15).
BEEP
BEEP [m]  --  m=0 stop, 1=continuous, 2=single. Omit=single beep.
HCOPY
HCOPY  --  Print screen text to serial printer.
Can print: digits, Latin letters (upper+lower), ASCII symbols.
Cannot print: SC-3000 tile/graphic characters, Dieresis chars.
CALL
CALL a  --  Call machine code at address a (-32767 to 32767).
POKE
POKE a, d  --  Write byte d(0-255) to address a. ROM $0000-$7FFF ignored.
OUT
OUT p, d  --  Write byte d(0-255) to I/O port p(0-255).
VPOKE
VPOKE a, d  --  Write byte d(0-255) to VRAM address a(0-16383).
MOTOR
MOTOR n  --  n=0 CMT motor off, n<>0 on, omit=toggle.
TTL relay-control signal on PPI Port C bit 3 (I/O $DE); the
console emits it on the cassette connector's motor-remote pin.

BUILT-IN FUNCTIONS

BUILT-IN FUNCTIONS
============================================================================
ABS
ABS(x)  --  Absolute value of x.
RND
RND(f)  --  f=0 init seed, f=1 next random (0 <= r < 1), f=-1 swap seed.
SIN
SIN(x)  --  Sine (x in radians).
COS
COS(x)  --  Cosine (x in radians).
TAN
TAN(x)  --  Tangent (x in radians).
ASN
ASN(x)  --  Arcsine; x in [-1,1]; result in radians.
ACS
ACS(x)  --  Arccosine; x in [-1,1].
ATN
ATN(x)  --  Arctangent; result in (-pi/2, pi/2).
LOG
LOG(x)  --  Natural logarithm (base e).
LGT
LGT(x)  --  Common logarithm (base 10).
LTW
LTW(x)  --  Binary logarithm (base 2).
EXP
EXP(x)  --  e^x.
RAD
RAD(x)  --  Degrees to radians.
DEG
DEG(x)  --  Radians to degrees.
PI
PI  --  pi = 3.1415926536.
SQR
SQR(x)  --  Square root of x.
INT
INT(x)  --  Largest integer <= x.
SGN
SGN(x)  --  Sign: +1, 0, or -1.
ASC
ASC(s)  --  ASCII code of first character of string s.
LEN
LEN(s)  --  String length.
VAL
VAL(s)  --  Convert numeric string to number.
PEEK
PEEK(a)  --  Read byte from address a (-32768 to 32767).
INP
INP(p)  --  Read byte from I/O port p (0-255).
FRE
FRE  --  Free RAM bytes available.
VPEEK
VPEEK(a)  --  Read byte from VRAM address a (0-16383).
STICK
STICK(f)  --  Joystick f(1=P1,2=P2): 0=none,1=up,2=upR,3=R,4=dnR,5=dn,6=dnL,7=L,8=upL.
STRIG
STRIG(f)  --  Trigger buttons f(1=P1,2=P2): 0=none,1=T1,2=T2,3=both.
CHR$
CHR$(x)  --  Character for ASCII code x (0-255).
HEX$
HEX$(x)  --  Convert x (-32768..32767) to hexadecimal string.
INKEY$
INKEY$  --  Current key as string, or null string if none pressed.
LEFT$
LEFT$(s, x)  --  First x characters of string s.
RIGHT$
RIGHT$(s, x)  --  Last x characters of string s.
MID$
MID$(s, x[, y])  --  y chars from position x of s (default: to end).
STR$
STR$(x)  --  Number x to string.
TIME$
TIME$  --  Read/write timer as string "hh:mm:ss".
SPC
SPC(n)  --  Insert n spaces at current print position (PRINT only).
Characters in the skipped positions are overwritten.
TAB
TAB(n)  --  Advance print cursor to column n (PRINT only).
No effect if cursor already past column n; does not erase.

OPERATORS AND PRECEDENCES

OPERATORS AND PRECEDENCES
============================================================================
Priority  Symbol  Numeric  String  Meaning
--------  ------  -------  ------  -------------------------------
1      ^         o       x     Exponentiation (0^0 = 1)
2      + / -     o       x     Unary sign
3      * /       o       x     Multiply / Divide
4      MOD       o       x     Integer remainder
5      +         o       o     Add / String concatenation
5      -         o       x     Subtract
6      = < > <= >= <>    o    o  Comparison (true=-1, false=0)
7      NOT       o       x     Logical NOT
8      AND       o       x     Logical AND
8      OR        o       x     Logical OR
8      XOR       o       x     Logical XOR

SYSTEM LIMITATIONS

SYSTEM LIMITATIONS
============================================================================
String length (max)              255 characters
String workspace area            300 characters
Screen input buffer              256 characters
Line buffer (tokenised)          256 characters
Operator precedence levels        32 levels
FOR-NEXT nesting (max)            16 levels  -- error [23] if exceeded
GOSUB-RETURN nesting (max)         8 levels  -- error [21] if exceeded
Array dimensions (max)             3 (DIM A(x,y,z))
Numeric range          +/-9.9999999999E-99 to +/-9.9999999999E+99
Integer form           -32768 to 32767 (&HFFFF = -1 in BASIC)
Hexadecimal literal    &H0000 to &HFFFF (two's complement, 16-bit)
Variable name          any length; only first 2 characters significant
Line number            1 to 65535
POKE/PEEK address      &H8000 to &HFFFF (RAM); ROM &H0000-&H7FFF read-only
VRAM address           0 to 16383 (&H0000-&H3FFF)
I/O port               0 to 255 (&H00-&HFF)
HEX$(x) argument       -32768 to 32767 (two's complement hex output)
CHR$(x) argument       0 to 255

SOUND FREQUENCY TABLE

SOUND FREQUENCY TABLE
============================================================================
Scale    f1    f2     f3     f4     f5     f6
C              131    262    523   1047   2094
C+             139    277    554   1109   2218
D              147    294    587   1175   2350
D+             156    311    622   1245   2490
E              165    330    659   1319   2638
F              175    349    698   1397   2794
F+             185    370    740   1480   2960
G              196    392    784   1568   3136
G+             208    415    831   1661   3322
A        110   220    440    880   1760   3520
A+       117   233    466    932   1864
B        123   247    494    988   1976
f1=octave 1 (32'), f2=octave 2 (16'), f3=octave 3 (8'),
f4=octave 4 (4'), f5=octave 5 (2'), f6=octave 6 (1').  Frequencies in Hz.

TOKEN TABLE -- STATEMENT KEYWORDS ($17C0)

TOKEN TABLE -- STATEMENT KEYWORDS  ($17C0)
============================================================================
ROM format: ASCII bytes + token byte.  Range: $82-$E5.
Character data $10C0-$17BF (before this table).
$82   LIST
$83   LLIST
$84   AUTO
$85   DELETE
$86   RUN
$87   CONT
$88   LOAD
$89   SAVE
$8A   VERIFY
$8B   NEW
$8C   RENUM
($8D-$8F: reserved/internal)
$90   REM
$91   PRINT
$91   ?  <- alias
$92   LPRINT
$92   L?  <- alias
$93   DATA
$94   DEF
$95   INPUT
$96   READ
$97   STOP
$98   END
$99   LET
$9A   DIM
$9B   FOR
$9C   NEXT
$9D   GOTO
$9E   GOSUB
$9F   GO
$A0   ON
$A1   RETURN
$A2   ERASE
$A3   CURSOR
$A4   IF
$A5   RESTORE
$A6   SCREEN
$A7   COLOR
$A8   LINE
$A9   SOUND
$AA   BEEP
$AB   CONSOLE
$AC   CLS
$AD   OUT
$AE   CALL
$AF   POKE
$B0   PSET
$B1   PRESET
$B2   PAINT
$B3   BLINE
$B4   POSITION
$B5   HCOPY
$B6   SPRITE
$B7   PATTERN
$B8   CIRCLE
$B9   BCIRCLE
$BA   MAG
$BB   VPOKE
$BC   MOTOR
($BD-$BF: reserved/internal)
$C0   ^
$C1   *
$C2   /
$C3   MOD
$C4   +
$C5   -
$C6   <>
$C6   ><  <- alias
$C7   >=
$C7   =>  <- alias
$C8   <=
$C8   =<  <- alias
$C9   >
$CA   <
$CB   =
$CC   NOT
$CD   AND
$CE   OR
$CF   XOR
($D0-$DF: reserved/internal)
$E0   FN
$E1   TO
$E2   STEP
$E3   THEN
$E4   TAB
$E5   SPC
Unique tokens: 78   Total entries: 83

TOKEN TABLE -- FUNCTION KEYWORDS ($1960)

TOKEN TABLE -- FUNCTION KEYWORDS  ($1960)
============================================================================
Stored in tokenised programs as: $80 (prefix) + sub-token.
$80   ABS
$81   RND
$82   SIN
$83   COS
$84   TAN
$85   ASN
$86   ACS
$87   ATN
$88   LOG
$89   LGT
$8A   LTW
$8B   EXP
$8C   RAD
$8D   DEG
$8E   PI
$8F   SQR
$90   INT
$91   SGN
$92   ASC
$93   LEN
$94   VAL
$95   PEEK
$96   INP
$97   FRE
$98   VPEEK
$99   STICK
$9A   STRIG
($9B-$9F: unassigned)
$A0   CHR$
$A1   HEX$
$A2   INKEY$
$A3   LEFT$
$A4   RIGHT$
$A5   MID$
$A6   STR$
$A7   TIME$
Total: 35 function tokens

SC-3000 ASCII CODES

SC-3000 ASCII CODES
============================================================================
CHR$(x) prints the character with code x. ASC(s$) returns the code of
the first character of s$.

A -- Control codes (0-31, &H00-&H1F)

A -- Control codes (0-31, &H00-&H1F)
----------------------------------------------------------------------------
Code  Hex   Name  Effect on cursor / terminal
----  ----  ----  ------------------------------------------------------
0  &H00  NUL  ignored
7  &H07  BEL  emits a short beep (same as BEEP)
8  &H08  BS   backspace -- cursor left 1
9  &H09  HT   tab -- cursor to next tab stop (every 8 columns)
10  &H0A  LF   line feed -- cursor down 1 row
11  &H0B  VT   cursor to home (col 0, row 0)
12  &H0C  FF   clear screen + cursor to home (= CLS)
13  &H0D  CR   beginning of current line (without advancing)
16  &H10  DLE  switch to 8x8 pixel-per-character font
17  &H11  DC1  switch to 16x8 pixel-per-character font (wider)
28  &H1C  FS   cursor right 1
29  &H1D  GS   cursor left 1 (= BS)
30  &H1E  RS   cursor up 1
31  &H1F  US   cursor down 1 (= LF)
Note: codes 1-6, 14-15, 18-27 produce no known visible effect.

B -- Printable ASCII (32-127, &H20-&H7F)

B -- Printable ASCII (32-127, &H20-&H7F)
----------------------------------------------------------------------------
Identical to the standard US-ASCII set. Grid with column/row offset:
_0  _1  _2  _3  _4  _5  _6  _7  _8  _9  _A  _B  _C  _D  _E  _F
2_   SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
3_    0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
4_    @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
5_    P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
6_    `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
7_    p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~  DEL
Reading: row 2_ col _0 = code &H20 = 32 = space.
row 4_ col _1 = code &H41 = 65 = 'A'.

C -- Extended characters (128-255, &H80-&HFF)

C -- Extended characters (128-255, &H80-&HFF)
----------------------------------------------------------------------------
Codes 128-255 depend on the ROM revision and the active keyboard mode
(KANA, GRAPH).
&H80-&H9F  (128-159)
SC-3000 special graphic characters: block graphics symbols, extended
punctuation, box-drawing characters.
Accessible via the GRAPH key + letter.
&HA0-&HDF  (160-223)
Half-width Katakana (Japanese version).
Corresponds to the JIS X 0201 standard (Katakana subset).
Accessible via the KANA key.
&HA1 ヲ  &HA2 ァ  &HA3 ィ  &HA4 ゥ  &HA5 ェ  &HA6 ォ  &HA7 ャ  &HA8 ュ
&HA9 ョ  &HAA ッ  &HAB ー  &HAC ア  &HAD イ  &HAE ウ  &HAF エ  &HB0 オ
&HB1 カ  &HB2 キ  &HB3 ク  &HB4 ケ  &HB5 コ  &HB6 サ  &HB7 シ  &HB8 ス
&HB9 セ  &HBA ソ  &HBB タ  &HBC チ  &HBD ツ  &HBE テ  &HBF ト  &HC0 ナ
&HC1 ニ  &HC2 ヌ  &HC3 ネ  &HC4 ノ  &HC5 ハ  &HC6 ヒ  &HC7 フ  &HC8 ヘ
&HC9 ホ  &HCA マ  &HCB ミ  &HCC ム  &HCD メ  &HCE モ  &HCF ヤ  &HD0 ユ
&HD1 ヨ  &HD2 ラ  &HD3 リ  &HD4 ル  &HD5 レ  &HD6 ロ  &HD7 ワ  &HD8 ン
&HD9 ゙  &HDA ゚  &HDB-&HDF: reserved
&HE0-&HFF  (224-255)
Additional graphic characters and special symbols.
Exact content depends on the ROM revision.

D -- Keyboard -> ASCII code mapping

D -- Keyboard -> ASCII code mapping
----------------------------------------------------------------------------
The lookup tables used by BASIC to convert the keyboard matrix code to
ASCII code are located in ROM at the following addresses:
$3FA0  Normal characters (alphanumeric + symbols)
$3FE0  SHIFT + key
$4020  KANA (Katakana)
$4060  SHIFT + KANA
$40A0  GRAPH (graphic characters)
$40E0  SHIFT + GRAPH
$4120  CTRL + key (produces codes 1-31)
$4160  FUNC function keys (ends at $4298)
The KEYREAD routine ($4918) scans the matrix; BASIC then uses the
lookup table corresponding to the active modifier combination.
============================================================================