sd:sd-8516_stellar_basic
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| sd:sd-8516_stellar_basic [2026/03/28 09:45] – appledog | sd:sd-8516_stellar_basic [2026/04/05 14:18] (current) – appledog | ||
|---|---|---|---|
| Line 9: | Line 9: | ||
| 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! | 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 | ||
| + | == Terminal Control | ||
| + | There are some basic terminal interface commands you may wish to know. These will allow you to make character mode games; see next chapter for graphics mode. | ||
| + | |||
| + | * STRXY X, Y, A$ -- print string at XY on the screen | ||
| + | * CHARXY X, Y, C -- puts character C (0-255) on the screen at location (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, | ||
| + | |||
| + | As an example of these commands, the game [[sdb: | ||
| + | |||
| + | == Graphics | ||
| === MODE | === MODE | ||
| One of the interesting commands you will come to use often is the MODE command. | One of the interesting commands you will come to use often is the MODE command. | ||
| Line 229: | Line 240: | ||
| VSTART will resume regular video chip scans of the framebuffer to video memory. | VSTART will resume regular video chip scans of the framebuffer to video memory. | ||
| + | |||
| + | === Mode 4 | ||
| + | Mode 4 is a 256x224 " | ||
| + | |||
| + | < | ||
| + | 10 MODE 4 | ||
| + | 20 FOR C = 0 TO 15 | ||
| + | 30 RECT C * 16, 0, C * 16 + 15, 223, C, 1 | ||
| + | 40 NEXT C | ||
| + | 50 LINE 0, 0, 223, 223, 3 | ||
| + | 60 INPUT "PRESS ENTER"; | ||
| + | 70 MODE 1 | ||
| + | </ | ||
| + | |||
| + | As you can see, it's pretty much more of the same, but you may prefer the aspect ratio for classic 8bit and 16bit console games. | ||
| + | |||
| + | === Mode 8 | ||
| + | Mode 8 is a 128x128 " | ||
| + | |||
| + | < | ||
| + | 10 MODE 8 | ||
| + | 20 FOR C = 0 TO 15 | ||
| + | 30 RECT C * 8, 0, C * 8 + 7, 127, C, 1 | ||
| + | 40 NEXT C | ||
| + | 50 LINE 0, 0, 127, 127, 3 | ||
| + | 60 INPUT "PRESS ENTER"; | ||
| + | 70 MODE 1 | ||
| + | </ | ||
| + | |||
| + | As you can see, it's pretty much more of the same, but you may prefer this aspect ratio for classic " | ||
| + | |||
| == Music | == Music | ||
| Music and sound effects are an important part of any game. For many of us it is impossible to forget the iconic video game themes of yesteryear. Stellar BASIC honors this tradition with the PLAY command. | Music and sound effects are an important part of any game. For many of us it is impossible to forget the iconic video game themes of yesteryear. Stellar BASIC honors this tradition with the PLAY command. | ||
| - | Let' | + | === Ode to Joy |
| + | <codify BASIC> | ||
| + | PLAY "T120 O3 L4 E E F G G F E D C C D E E D2" | ||
| + | </ | ||
| + | |||
| + | The above PLAY statement plays a theme from "Ode to Joy". The structure of the PLAY statement is easy enough to understand: Tempo 120, Octave 3, Note Length 4 (Quarter notes), and then the music: E E F G, G F E D, and on, notes played in order. | ||
| + | |||
| + | === Jingle Bells | ||
| + | <codify BASIC> | ||
| + | PLAY "T200 L4 O3 MN E E L2 E L4 E E L2 E L4 E G L3 C L8 D L1 E" | ||
| + | PLAY "L4 F F L3 F L8 F L4 F E L2 E L8 E E L4 E D D E L2 D G" | ||
| + | PLAY "L4 E E L2 E L4 E E L2 E L4 E G L3 C L8 D L1 E" | ||
| + | PLAY "L4 F F L3 F L8 F L4 F E L2 E L8 E F L4 G G F D L2 C" | ||
| + | </ | ||
| + | |||
| + | Here, we see the MN command and L commands used to great effect. MN means normal, and L# sets the length of the next notes. However, you can also write it like this: | ||
| + | |||
| + | <codify BASIC> | ||
| + | PLAY "T200 L4 O3 MN" | ||
| + | PLAY "E E E2 E E E2 E G C3 D8 E1" | ||
| + | PLAY "F F F F8 F8 F E E E8 E8 E D D E D2 G2" | ||
| + | PLAY "E E E2 E E E2 E G C3 D8 E1" | ||
| + | PLAY "F F F F8 F8 F E E E8 F8 G G F D C2" | ||
| + | </ | ||
| + | |||
| + | Here, instead of using a lot of L commands, we just add the length to the end of the note for any note that is not the default length. | ||
| + | |||
| + | === FURELISE.BAS | ||
| + | Let' | ||
| <codify BASIC> | <codify BASIC> | ||
| Line 297: | Line 367: | ||
| That's it! It's a very simple system. | That's it! It's a very simple system. | ||
| - | === FURELISE.BAS | + | === Program Listing |
| Here is the complete program listing. | Here is the complete program listing. | ||
| Line 338: | Line 408: | ||
| XW - wait (sync point — all active voices must reach XW) | XW - wait (sync point — all active voices must reach XW) | ||
| + | === Further Study | ||
| + | If you wish to learn more about how the MML system works under the hood, please refer to the Programmer' | ||
| - | == Terminal Control | + | == Benchmarking your Code |
| - | * STRXY A$, X, Y -- print string at XY on the screen | + | You might want to know how fast your code runs. This simple benchmarking program gives you an insight on how to create a simple timer: |
| - | * CHARXY X, Y, C -- puts character | + | |
| - | * CHARFG X, | + | <codify BASIC> |
| - | * CHARBG X,Y,BG -- changes | + | 10 BANK 1 |
| - | * CHARAT$(X,Y) -- returns the character | + | 20 LET T=PEEK($EF06) |
| + | 30 FOR I=1 TO 1000 | ||
| + | 40 LET A=I*3+7 | ||
| + | 50 LET B=A/2-1 | ||
| + | 60 LET C=A+B | ||
| + | 70 LET S=S+C | ||
| + | 80 IF C>100 THEN LET P=P+1 | ||
| + | 90 NEXT I | ||
| + | 100 LET U=PEEK($EF06) | ||
| + | 110 LET D=U-T | ||
| + | 120 PRINT D | ||
| + | </ | ||
| + | |||
| + | The memory location $EF06 is the second byte of the hardware clock, which ticks once every .256 seconds. it's a bit rough but if you need a simple timer you can do something like this. On my computer this returns 14, which indicates 7000/(14*.256) or 1,953 BASIC lines per second. Of course, we already have the WAIT command so this is not useful for waiting | ||
| + | |||
| + | |||
| + | == Dictionary | ||
| + | === FREE() | ||
| + | This is like MEM in that it calculates the free space in bank 0 between the end of the BASIC program and VARTOP, however it returns | ||
| + | |||
| + | Also see: MEM | ||
| + | |||
| + | === MEM | ||
| + | This command calculates the free space in bank 0 between the end of the BASIC program and VARTOP, which roughly estimates how much free space you have left in bank 0 for BASIC. | ||
| - | under construction | + | Also see: FREE() |
| + | |||
| + | This command prints a number, expression, variable or string. Examples: | ||
| + | PRINT "HELLO WORLD!" | ||
| + | PRINT A$ | ||
| + | PRINT ASC(" | ||
| + | PRINT 5 | ||
sd/sd-8516_stellar_basic.1774691115.txt.gz · Last modified: by appledog
