SuperBASIC

From F256 Foenix
Jump to navigationJump to search

SuperBASIC is inspired by BBC BASIC but offers quite a bit more.

An informal list of tips, "gotchas":[edit | edit source]

IF, THEN, ELSE[edit | edit source]
Source of this tip: Ernesto[edit | edit source]
  • A regular if then condition can't contain an else statement, as in this example:

10 if a=0 then x=10

  • If you need to do an if then else structure, you actually have to do an if else endif structure like in the following example, skipping the then statement.

10 if a=0
20 x=1
30 else
40 x=2
50 endif

  • If you do it in one line it needs to have some colons added, making it look weird like this:

10 if a=0:x=1:else:x=2:endif

  • if you dare to omit the endif thinking that the if statement won't need it, (mmm.., everything is in one line, so no need, right?) -Nope...all hell breaks loose!-

10 if a=0:x=1:else:x=2: REM "<-- Error, omited the endif"

  • be careful not to add an extra then statement by mistake to an if else endif structure, if you do -All hell breaks loose again!!-

10 if a=0 then  : rem "<-- Error, THEN is not needed!!!"
20 x=1
30 else
40 x=2
50 endif

Debugging hint: If you encounter an error like "open structure" or "endproc without a proc": do not trust the line number that you are given. The root of the problem is probably in a structure earlier on in the code.

Evaluating multiple conditions in IF statements[edit | edit source]

SUPERBASIC doesn't have the dedicated keywords AND , OR so you have to use the bitwise operators to evaluate multiple conditions, please consider the following examples:

  • AND if (a=1)&(b=2) then c=1
  • OR if (a=1)^(b=2) then c=1

This should work as long as you use parenthesis in all evaluated expressions (Since parenthesis makes bitwise operators behave like logical operators).

Using procedures[edit | edit source]
  • The proc keyword is only valid if it appears after an end statement.
  • When calling a procedure use the procedure name followed by parenthesis (), even if the procedure has no parameters.
  • Avoid any space between the procedure name and the parenthesis, else it will produce an error.
Keyboard shortcuts[edit | edit source]
Key combination Effect
ctrl-c or RUN STOP on the F256K Stops a listing or a running program
ctrl-l Clears the screen
ctrl-a or CLR/HOME on the F256K Move cursor to the first character in the current line
ctrl-e Move cursor to the last character in the current line
ctrl-i Move cursor 8 characters to the right
ctrl-k Deletes characters from cursor position to line end
Behaviour of load and bload[edit | edit source]
  • The bload statement does not print Completed when loading is successfull whereas load does.
  • bload can load anywhere on memory not just under the first 64k
  • An exception is that bload can't load I/O parameters that reside in $C000 - $DFFF
Control characters for cursor and colour control[edit | edit source]

In BASIC the following character codes can be used with print to control the cursor position and colours on the screen.

Code Effect
chr$(12) Clear screen and set cursor to upper left corner
chr$(16) Cursor up
chr$(14) Cursor down
chr$(2) Cursor left
chr$(6) Cursor right
chr$(1) Set cursor to leftmost position in current line
chr$(5) Set cursor to righmost position in current line
chr$(128) - chr$(143) Set foreground color. Code 128 is black 143 is white. The rest follows the sequence given below
chr$(144) - chr$(159) Set background color. Code 144 is black 159 is white. The rest follows the sequence given below
Colour code Colour Colour code Colour
0 Black 8 Dark grey
1 Grey 9 Light grey (default foreground)
2 Dark blue (default background colour) 10 Blue
3 Green 11 Light green
4 Purple 12 Light purple
5 Brown 13 Red
6 Orange 14 Yellow
7 Light blue 15 White
Character Set / Text matrix[edit | edit source]
  • Access to the full character set can be obtained by using the CPRINT command instead of the normal PRINT command.
  • Characters can also be set on the screen text matrix using the POKE command starting at $C000 providing the MMU I/O control is set to 2 by executing a POKE 1,2 command first (remember to restore the MMU I/O once you're done).
F256 Character Set
  • Color can also be set on the screen color matrix using the POKE command starting at $C000 providing the MMU I/O control is set to 3 by executing a POKE 1,3 command first (remember to restore the MMU I/O once you're done).
  • When poking colors on the screen, the high nibble is the character color and the low nibble is the background color.
Default Colors
Default Colors
Memcopy lockup[edit | edit source]
  • In certain situations the memcopy command can lockup.
  • A machine language utility that performs the same function as memcopy is available if memcopy fails.
  • mlcopy is a short routine that replaces memcopy and is more reliable. It can be loaded into memory with a BLOAD command in your program, or with a basic loader that can be added to your program.
  • In place of the memcopy command you would use 3 POKEL commands and a CALL command to engage the DMA engine.
POKEL $0903,data source
POKEL $0906,destination 
POKEL $0909,number of bytes to copy
CALL $0900