SuperBASIC: Difference between revisions

From F256 Foenix
Jump to navigationJump to search
No edit summary
(Added Character set information)
Line 156: Line 156:


===== Character Set =====
===== Character Set =====
* Access to the full character set can be obtained by using the <code>CPRINT</code> command instead of the normal <code>PRINT</code> command.
* Characters can also be set on the screen text matrix using the <code>POKE</code> 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).[[File:Full char set.png|left|thumb|104x104px|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 background color and the low nibble is the character color.
[[File:Colormatrix.png|alt=Default Colors|left|thumb|100x100px|Default Colors]]


===== Memcopy lockup =====
===== Memcopy lockup =====

Revision as of 16:04, 21 August 2024

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

An informal list of tips, "gotchas":

IF, THEN, ELSE
Source of this tip: Ernesto
  • 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

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
  • 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
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
  • 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

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
  • 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 background color and the low nibble is the character color.
Default Colors
Default Colors



Memcopy lockup
  • 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