SCELBAL (SCELBI Basic)
The Ad introducing SCELBAL in
BYTE
Magazine, June, 1976 - There also is an article about
SCELBAL in that issue by Nat Wadsworth and Mark Arnold.
SCELBAL was called the SCientific ELementary BAsic for the 8008
and 8080 by SCELBI Computer Consulting. SCELBAL could be
run on a SCELBI or other 8008 based machine that had 8K of
memory. The second generation SCELBI 8B supported up to
16K of memory. I know of at least one of the
earlier SCELBI 8H systems, which normally only supported
4K of memory, that was upgraded to 16K of memory in order
to run this interpreter. Upgrading an 8H to 16K required
some serious hacking. There also was a variation of
SCELBAL developed for the 8080 micro-processor.
SCELBAL completely supported floating point math with 6 digits
of precision. As time went on, additional packages
including matrix arithmetic and math functions were added.
This interpreter was also ported to the 8008 based,
Mark-8. For many purposes, especially for engineering and
scientific applications, this Basic interpreter was far and away
superior to Apple’s integer basic, which lacked floating point
math capability.
Here is corrected scan of
SCELBI's
SCELBAL book. The one at scelbi.com has a lot page ordering issues that have been fixed by Len of
8008chron.com.
Here is the
Mathematical Functions Supplement
Here is the
Strings Supplement
and here is the
an update document that was published back in the old days.
Mark Arnold who wrote SCELBAL approached Nat Wadsworth, one of
the founders of SCELBI Computer Consulting, about publishing a
BASIC language for the 8008. Here is the story of SCELBAL
from Mark Arnold, himself.
"The published 8008/8080 version of SCELBAL was an
extracurricular activity. My first contact with SCELBI was when
I was a senior in high school. I was a 'nerd' and already knew
several professors at the University of Wyoming (including the
dean of the graduate school, who was a computer hobbyist), and
had access to its Sigma-7 mainframe (an IBM-360 clone with very
nice timeshare operating system). I had written a BASIC
interpreter on that mainframe--it became the outline of SCELBAL
later. I also developed an 8008 cross assembler and
emulator on the university mainframe in 1974. In 1975,
when I was a UW freshman, I originally pitched a compiled
version of SCELBAL to Nat (using multiple cassette-tape passes)
that would have made the full features available on a 4K (8H)
system but would be tedious to use. Because one of the
references I gave Nat was the dean of the graduate school, Nat
assumed I was a graduate student. Nat preferred an
interpreter (as we know needing 8K) to be competitive with
Altair BASIC, so I dropped the compiler project and developed
published SCELBAL on my 8B, using the Sigma-7 BASIC version that
I had done the previous year as an outline. It took months (I
think in part due to Nat's health problems) to get the contract
with Scelbi and for me to get my 8B. If I had used my
cross-assembler/emulator, and not ventured down the compiler
avenue, and/or if Nat could have responded quicker, SCELBAL
could have come to market perhaps a year earlier--at about the
same time MITS BASIC appeared. "
VERSIONS of SCELBAL for the 8008
Below you will find different versions of SCELBAL in source,
binary, and Intel Hex formats. The source will
assemble with a version AS8 8008
assembler that I modified to support a few missing
instructions and to suite my tastes in I/O port numbering.
Original SCELBAL (1976)
SCELBAL was released in two forms, paper tape and in book
form. In a way, the book form was one of the first
versions of open source software distribution. My
understanding is that most people purchased the book and then
entered the program using whatever input system that their
particular computer had. They would also
have to write or adapt I/O routines for their particular
system.
This version has a built in 110 baud input and output drivers
using input port 5 and output port 016. You will have to
modify the I/O drivers to use other ports or bit rates.
Load starting at 0 and run at 000-100.
- source
- intel hex (use to load into
my SCELBI OS/X emulator or POSIX 8008 debugger)
- binary (use to load into a
real SCELBI) with a bootstrap program
Faster SCELBAL (2012)
By modern standards, original SCELBAL's performance is pretty
poor. A significant part of the performance comes
from a design decision to completely reparse each line after
each keyword. Mark Arnold has changed this behavior in
this version which results in much faster performance. The
downside is that correct formatting of the program is more
important, with spaces between keywords required in this
version. Mark says this change could have been done back
in the day.
This version has a built in 110 baud input and output drivers
using input port 5 and output port 016. You will have to
modify the I/O drivers to use other ports or bit rates.
Load starting at 0 and run at 000-100.
- source
- intel hex (use to load
into my SCELBI OS/X emulator or POSIX 8008 debugger)
- binary (use to load
into a real SCELBI) with a bootstrap program
Tiny SCELBAL (2013)
I was looking for some interesting applications to run on my
SCELBI 8H and Mark Arnold suggested that he might be able to
make a version that would run in the 4K of memory in a SCELBI
8H. This was something that was considered
back in the day, but not pursued. This version only
supports about 360 bytes of program data, so programs need to
be kept small.
This version has a built in 2400 baud input and output
drivers using input port 5 and output port 016. You will
have to modify the I/O drivers to use other ports or bit
rates. Load starting at 0 and run at 000-100.
- source
- intel hex (use to load
into my SCELBI OS/X emulator or POSIX 8008 debugger)
- binary (use to load into
a real SCELBI) with a bootstrap program
Here is an simple guessing game that Mark helped me port from
David Ahl's "BASIC COMPUTER GAMES" book. It easily fits
with tiny SCELBAL into a SCELBI 8H's 4k of memory. Note
that Tiny SCELBAL doesn't have a built in RND function.
The first three lines generate a random number from value 0 to
99, using a seed S. You can change the starting number
of the pseudo random sequence by assigning S, a value of your
choice, before running the program. Note that spaces are
omitted where possible and lines numbers use as few digits as
possible to save memory.
1 S=1829*S+3565
2 S=((S>0)-(S<0))*S
3 Y=S/128*100/256
4 B=0
5 PRINT"YR GUESS";
6 INPUTA
7 B=B+1
8 IFA=YTHEN 16
9 IFA>YTHEN 12
10 PRINT"LOW"
11 GOTO13
12 PRINT"HIGH"
13 IFB<6THEN 5
14 PRINT"U LOSE"
15 GOTO1
16 PRINT"U WIN"
20 GOTO1