User Tools

Site Tools


sd:sd-8516_stellar_basic

This is an old revision of the document!


SD=8516 Stellar Basic

Stellar BASIC

Stellar BASIC started life as a typical microcomputer TinyBASIC and has grown to include several features of a more complete microcomputer BASIC such as DIM, READ/DATA, strings (ex. A$) and string operations. It is implemented in SD-8516 Machine Language, and comes standard in the VC-3 Kernal for the SD-8516.

If you have never programmed in BASIC before, please see Chapter 3 of the SD-8516 User's Guide for an introduction to BASIC. Stellar BASIC is a typical microcomputer TinyBASIC, so if you have programmed in BASIC before, you may find this tutorial moves at a pace you will find acceptable.

It's fast!

Stellar BASIC is a kind of 8 bit TinyBASIC, with a few improvements under the hood. It runs at 1800 lins per second at 4 MHz (1.28 MIPS). This is comparable to a C64 that can execute 150-200 lines of BASIC per second (at 1 MHz). The SD-8516 pulls ahead in speed because it has more registers available to hold temporary values, so it does not need to use memory as much as a C64 or other similar 80s microcomputer would need to. The extra registers, of course, were added precisely with BASIC execution speed in mind! No more register memory pressure, full speed ahead!

Graphics

MODE

One of the interesting commands you will come to use often is the MODE command.

Command Result
MODE 40 Reset into 40×25 TEXT mode.
MODE 80 Reset into 80×25 TEXT mode.
MODE 3 Reset into MODE 3: 320x200x16 graphics mode (4 bits per pixel)

Mode 80 is good! And, you might like the different color scheme it defaults to (more on that below). It's useful if you want to play some text adventure games, as many people today are much more used to 80 column displays than 40. I must say, I always found games like Pirate Adventure easily playable on 40 columns, but there's something to a game like Trinity played in 80 columns. Now, you can finally take your pick.

Mode 1 and Mode 2 are aliases for MODE 40 and MODE 80. MODE 3 is not a text mode, but enables GRAPHICS MODE.

Note that the terminal functions cease operation in GRAPHICS MODE. If you escape out of a program, you must type MODE 40<ENTER> or a similar command to return to TEXT mode, but you will not see your characters echo on screen.

So, while you can still type commands in mode 3, it is recommended that you use it within a program.

MODE 6

Mode 6 is a new mode in OS version 0.6.26, and is now fully supported by Stellar BASIC v1.0. However, the DEFCHAR and DRAWCHAR functions do not work with it because it relies on the DYNATERM 8800 TVC (text-to-video chip) which stores it's own font data. It is, however, a beautiful mode to work in. You can enter it by typing MODE 6 (and return to mode 1 or 2 any time).

POKE for Graphics

Here's a little expose on how to use POKE for drawing. Let's begin with a simple graphics demo. As you can see we are using POKE to write directly to the framebuffer:

    10 REM MODE 3 POKE DEMO 1 BY APPLEDOG 2026-03-01
    20 PRINT "MODE 3 DEMO (C) 1985 STELLAR DYNAMICS"
    30 INPUT "PRESS ENTER TO BEGIN MODE 3 DEMO", A$
    40 MODE 3
    50 REM MODE 3 FRAMEBUFFER STARTS AT $0000 IN BANK 2
    60 BANK 2
    70 REM DRAW HORIZONTAL BARS OF ALL 16 COLORS
    80 REM FILL SCREEN WITH 16 COLOR COLUMNS
    90 FOR Y = 0 to 199
   100 FOR C = 0 TO 15
   110 REM PACK TWO PIXELS OF SAME COLOR: (C << 4) | C
   120 LET V = C * 16 + C
   130 REM DRAW 10 BYTES WIDE (20 PIXELS) PER COLOR
   140 FOR X = 0 TO 9
   150 LET A = Y * 160 + C * 10 + X
   160 POKE A, V
   170 NEXT X
   180 NEXT C
   190 NEXT Y
   200 REM DRAW DIAGONAL LINE OF WHITE PIXELS
   210 FOR I = 0 TO 99
   220 POKE I * 160 + I, 2
   230 NEXT I
   240 REM WAIT FOR KEYPRESS
   250 INPUT A$ : REM PRESS A KEY TO END DEMO
   260 MODE 1

The problem with this is that it's a bit slow. In fact, it executes in 6 seconds at 100mhz.

The reason why it takes so long is because Mode 3 uses a packed pixel format – one byte holds two pixels (each pixel is four bits). In fact, if we wrote this program normally it would take over 12 seconds because we would have to PEEK the byte, modify it, and write it out again. The 6 seconds it took is much faster because we used an optimization that draws two pixels at once.

If you'd like to use something a bit faster, you can try the 2d accelerated graphics commands PIXEL and PEXEL.

PIXEL and PEXEL

Inside MODE 3 you can use the PIXEL command. This command is exactly like a POKE except that it parses the color variable into packed pixel format automatically. It is therefore much faster than using POKE to write directly to Video RAM.

To try the PIXEL command, enter mode 3 and type:

    PIXEL X, Y, COLOR

X and Y are the locations on the screen to plot, and COLOR is a palette number from 0 to 15. If a larger number is used only the lower four bits will be used to calculate the actual color.

Together with PIXEL is PEXEL, which reads a pixel color.

    LET A = PEXEL(5,10)

Here, 5 is the X location and 10 is the Y location on the screen of the pixel you are reading.

    10 MODE 3
    20 FOR C = 0 TO 15
    30 FOR X = 0 TO 19
    40 FOR Y = 0 TO 199
    50 PIXEL(C * 20 + X, Y, C)
    60 NEXT Y
    70 NEXT X
    80 NEXT C
    90 REM DIAGONAL LINE IN WHITE
   100 FOR I = 0 TO 199
   110 PIXEL(I, I, 3)
   120 NEXT I
   130 INPUT "PRESS ENTER"; A$
   140 MODE 1

If you time this program you will find that it is even slower than the POKE version. This is because we're writing out the full 64,000 pixels– the POKE version only wrote 32,000. If you weigh it pound for pound, comparably, PIXEL is about 30% faster than using POKE to draw.

160x200 CGA Mode

Regarding PIXEL vs POKE for drawing, the interesting thing about POKE is that it allows you to simulate a 160×200 graphics mode with just one write. Just use POKE to draw (COLOR*16)+COLOR and it will look like 160×200. This enables you to replicate CGA 160x200x16 mode, and similar modes like those found on a C64/128 (medium bitmap mode), Tandy 1000/2000, PC Jr. and so on. Many games (like Jumpman!) were written using these modes. Other games include like King's Quest, Maniac Mansion, Ghostbusters, California Games, and Bruce Lee. It's a very interesting mode!

On the C64 for example, all of these games also use 160×200 mode:

  • Pitfall II, the lost caverns
  • Flight Simulator 2.0
  • Dragon's Lair
  • Elevator Action
  • Ghosts 'n Goblins
  • Phantasie and Phantasie II
  • River Raid
  • Robotron 2048
  • Rygar
  • Smash TV

Some versions of infocom games (like ZORK) used 160×200 mode for display as well.

It's still slow to POKE, but if you're just drawing a scene or some letters or art, you can easily get away with POKE in 160×200 mode.

LINE

    10 MODE 3
    20 FOR C = 0 TO 15
    30 FOR X = 0 TO 19
    40 LINE C * 20 + X, 0, C * 20 + X, 199, C
    50 NEXT X
    60 NEXT C
    70 LINE 0, 0, 199, 199, 3
    80 INPUT "PRESS ENTER"; A$
    90 MODE 1

Line drawing is much faster. It takes 0.14 seconds at 100mhz. That is an incredible speed-up over the previous record. But there is an even faster command than this – the RECT drawing command.

RECT

Yes! What's even better than a LINE? A rectangle!

    10 MODE 3
    20 FOR C = 0 TO 15
    30 RECT C * 20, 0, C * 20 + 19, 199, C, 1
    40 NEXT C
    50 LINE 0, 0, 199, 199, 3
    60 INPUT "PRESS ENTER"; A$
    70 MODE 1

This program is even shorter than the others, and ever so much faster! Clocking in at well under a tenth of a second, it is the fastest version of this demo yet.

CIRCLE

Topping off our graphical journey is the CIRCLE command. It draws a circle or an ellipse on the screen.

    10 MODE 3
    20 CLS
    30 LINE 0,0,100,100,3
    40 CIRCLE 100,100,36,30,9
    50 INPUT A$
    60 MODE 1

Now you can create truly stunning art on the SD-8516!

DRAWCHAR

Some may feel the loss of characters on the mode 3 screen deep in their hearts and long for the days of alphanumeric bliss. For those of you, we have DRAWCHAR.

    10 MODE 3
    20 CLS
    30 DRAWCHAR 8, 8, 72, 15, 1
    40 DRAWCHAR 16, 16, 69, 14, 2
    50 DRAWCHAR 24, 24, 76, 13, 3
    60 DRAWCHAR 32, 32, 76, 15, 13
    70 DRAWCHAR 40, 40, 79, 3, 12
    80 DRAWCHAR 32, 72, 87, 10, 6
    90 DRAWCHAR 40, 64, 79, 9, 7
   100 DRAWCHAR 48, 56, 82, 11, 14
   110 DRAWCHAR 56, 48, 76, 7, 9
   120 DRAWCHAR 64, 40, 68, 6, 10
   130 INPUT A$
   140 MODE 1

The command is:

  DRAWCHAR X, Y, CHARCODE, FG, BG

It says “HELLO WORLD”, but in mode 3! You can omit the BG if you want and it will only draw the character. Good for preserving game backgrounds.

DEFCHAR

Life wouldn't be fun if you couldn't define your own characters for use in games! Try the DEFCHAR function.

  DEFCHAR char_code, b0, b1, b2, b3, b4, b5, b6, b7

This allows you to define your own PETSCII graphics characters *(almost none are included by default). Here's the DEFCHAR function in action:

    10 MODE 3
    20 CLS
    30 DEFCHAR 128, $3C,$42,$A5,$81,$A5,$99,$42,$3C
    40 DRAWCHAR 100, 100, 128, 15
    50 INPUT A$
    60 MODE 1

This draws a happyface in the middle of the screen in Mode 3.

VSTOP

You may be concerned that, during the execution of a clear and redraw cycle, your screen will show tearing since the video chip updates independently of framebuffer memory. The solution is to turn off the video update cycle.

  VSTOP

This will stop the video chip from updating the screen. The same image as before will be displayed.

  VSTEP

When you wish the screen to update, a maximum of 120FPS, you may issue a VSTEP command. This will redraw the screen.

  VSTART

VSTART will resume regular video chip scans of the framebuffer to video memory.

For more information about how this works (for use in assembly language programming) please see the SD-8516 Programmer's Reference Guide.

Terminal Control

  • STRXY A$, X, Y – print string at XY on the screen
  • CHARXY A$, X, Y – puts a character on the screen at X,Y
  • CHARFG X,Y,FG – changes the foreground color of a single character on the screen
  • CHARBG X,Y,BG – changes the background color of a single character on the screen
  • CHARAT$(X,Y) – returns the character at X, Y
sd/sd-8516_stellar_basic.1773769143.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki