User Tools

Site Tools


sd:sd-8516_stellar_basic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sd:sd-8516_stellar_basic [2026/03/28 12:10] appledogsd: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,Y) -- returns the character at X, Y
 +
 +As an example of these commands, the game [[sdb:ROBOTS]] uses CHARXY to draw the map.
 +
 +== 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 "Famous Console" inspired mode. Here's a demo program:
 +
 +<codify>
 +    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"; A$
 +    70 MODE 1
 +</codify>
 +
 +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 "Ersatz-8" inspired mode.
 +
 +<codify>
 +    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"; A$
 +    70 MODE 1
 +</codify>
 +
 +As you can see, it's pretty much more of the same, but you may prefer this aspect ratio for classic "ersatz retro" games.
 +
  
 == 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.
  
 +=== Ode to Joy
 <codify BASIC> <codify BASIC>
     PLAY "T120 O3 L4 E E F G G F E D C C D E E D2"     PLAY "T120 O3 L4 E E F G G F E D C C D E E D2"
Line 239: Line 282:
 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. 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"
 +</codify>
 +
 +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"
 +</codify>
 +
 +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's take a closer look at the PLAY command by writing our first music program, FURELISE.BAS: Let's take a closer look at the PLAY command by writing our first music program, FURELISE.BAS:
  
Line 303: 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 347: Line 411:
 If you wish to learn more about how the MML system works under the hood, please refer to the Programmer's Reference Guide [[Appendix 5 Sound System]]. If you wish to learn more about how the MML system works under the hood, please refer to the Programmer's Reference Guide [[Appendix 5 Sound System]].
  
-== 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, -- puts character C (0-255on the screen at location (X,Y). + 
-* CHARFG X,Y,FG -- changes the foreground color of a single character on the screen +<codify BASIC> 
-CHARBG X,Y,BG -- changes the background color of a single character on the screen +    10 BANK 1 
-* CHARAT$(X,Y-- returns the character at XY+    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-
 +    120 PRINT D 
 +</codify> 
 + 
 +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 coursewe already have the WAIT command so this is not useful for waiting on time; but rather it can be used to measure approximately how long something took. 
 + 
 + 
 +== 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 it as an integer. Be careful because in BASIC integers are signed. So read the number like this; when it is negative, this shows how much space has been used (the zero page is reserved so it always shows -256 at start). When it is positivethen it shows how much space is left. 
 + 
 +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()
  
 +=== PRINT
 +This command prints a number, expression, variable or string. Examples:
  
 +    PRINT "HELLO WORLD!"
 +    PRINT A$
 +    PRINT ASC("*")
 +    PRINT 5
sd/sd-8516_stellar_basic.1774699850.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki