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.

============================================================================