Bootloader
This small bootloader can be toggled into a SCELBI in about
10 minutes. The data bytes in the ADDRESS:DATA field of
the below table must be toggled into the SCELBI using the
front panel.
2400 BAUD SERIAL BOOT LOADER
LABEL
|
ADDRESS:DATA
|
SOURCE CODE
|
COMMENT
|
| INPUT |
000:113 |
INP INPORT |
|
|
001:240 |
NDA |
check start bit |
|
002:160 000 000 |
JTS INPUT |
|
|
005:026 010 |
LCI 8 |
|
| TIMER |
007:021 |
DCC |
1 1/2 bit times |
|
010:110 007
000 |
JFZ TIMER |
|
|
013:036 010 |
LDI 8 |
grab 8 bits |
| DATAIN |
015:113 |
INP INPORT |
get 1 bit |
|
016:022 |
RAL |
move to carry |
|
017:301 |
LAB |
fetch current byte |
|
020:032 |
RAR |
shift in this bit |
|
021:310 |
LBA |
save in B |
|
022:026 003 |
LCI 3 |
delay 1 bit time |
| BITTMR |
024:021 |
DCC |
|
|
025:110 024
000 |
JFZ BITTMR |
|
|
30:031 |
DCD |
8 bits captured? |
|
031:110 015
000 |
JFZ DATAIN |
no, continue |
|
034:371 |
LMB |
store byte |
|
035:060 |
INL |
increment pointer |
|
036:110 000
000 |
JFZ INPUT |
wrap? |
|
041:050 |
INH |
increment MSB |
|
042:104 000
000 |
JMP INPUT |
continue |
- This version of the bootloader is assembled to run out of
location zero. Some applications need to be loaded
into page 0, which conflicts with the bootloader. To
run bootloader from a different address, toggle the
bootloader into address of your choice, changing the red values in the jump instructions
to reflect the correct address that the bootloader is being
loaded into.
- The bootloader is assembled to read data from port
5. In order to read from a different port, change the
green INP instructions to
reflect the port that your serial device is connected to.
- The bootloader is optimized to run at 2400 baud.
Baud rate can be changed by changing the blue values in the timing loop
setup.
BAUD
|
LOCATION 006 VALUE
|
LOCATION 023 VALUE
|
2400
|
010
|
003
|
1200*
|
020
|
012
|
300*
|
113
|
062
|
110*
|
322
|
214
|
*Calculated, but not tested
Summarized Boot Loader Instructions
- Toggle in boot strap program using the SCELBI front panel
- Set source of serial data to 2400 baud, 8 bits, no parity
- Use the SCELBI front panel to set H and L registers to
start address of program
- Set PC to 0
- Push RUN button on front panel
- Send binary data from source, pattern of lights on the
front panel should change while data is being loaded
- Interrupt SCELBI front panel when data has been sent
- Decrement L register (memory address) using 8008 DCL
instruction (assumes L is not zero, which would require
decrementing both H and L)
- Using panel, verify last byte with 8008 LAM instruction -
address, then data will appear on front panel as you step
through the LAM instruction
- Set to starting PC address of program using front panel
and the 8008 JMP instruction
- Step the processor several times to ensure the program is
starting correctly, then press run button to run your
downloaded program
MemTest - An 8008 Based Memory Test Program
This was ported to the 8008 from my 6502 memory test
program by Mark Arnold. I have made some modifications to his
port, so any problems are solely my fault. It has a second entry
point at 0-120 that will set up the ending page based on what is in
register A. The program defaults to checking from starting at the
next location after the end of the program (002-026) to 12k
(057-377). If you modify the program and make it larger, you
should change the starting address. It takes a little over 30
seconds to check 1K of memory, making it about 15 times slower than the
6502 version running on a 1MHz computer.
It contains a couple of enhancements over the 6502 version.
- It doesn't stop on error
- It reports a total number of errors (up to 255) every pass
After each pass of the test, "PASS XXX E XXX" is displayed on the
terminal and the test will start over. In keeping with the octal
notation used on the 8008, all numbers are reported in octal. The
number after the PASS is the number of passes executed and the number
after E is the total number of errors encountered since loading the
memory test program.
The following is displayed if it detects an error.
test_number high_address low_address expected_data actual_data
Here is an example where all zeros test reads all ones. The
location 060-006 is past the end of the 12K of memory on the system that
reported this error.
000 060 006 000 377
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
memtest8008
|
1K
|
not used
|
016
|
2400
|
000-100
|
002-025
|
000-100
|
000-000 |
Starshooter - a SCELBI Game as published in Byte magazine
http://www.vintagecomputer.net/stars.cfm
This is a surprisingly difficult solitaire type game. Try
it and see. I have ported the source to this game to make
it assemble using the AS8 assembler found
here.
I have also shrunk it down a bit so it will fit in a 1K memory
system. Among the things I removed are the instructions,
but you should be able to figure it out by reading the article
(link above) or the original source listing.
Note that though this game was apparently written on a SCELBI,
the author did not leave any registers available for
processing a bit banged serial port in the input and output
calls. My assumption is that he had some kind of UART
interfaced to his SCELBI so that I/O could be as simple as
reading or writing a byte from an I/O register in this
UART. Without available registers, it was impossible
to control a bit banged type interface, without rewriting
portions of the main StarShooter program. So that is what
I did. Note that while it runs well in emulation, I still
need to do some tweaking to I/O to make it work well on a real
SCELBI connected to a PC running a terminal emulation
program. If you decide to fix it up, let me know.
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
STARSHOOTER
|
1K
|
005
|
016
|
2400
|
000-060
|
003-264
|
000-100
|
003-300
|
PI Generation on the SCELBI -Two 8008 Benchmarks by
Egan Ford
Egan Ford has generated some benchmarks on some eight bit
systems and sent me these programs that generates PI on the
8008. He used an assembler called Macro Assembler AS
V1.42.
The first runs in 1K and generates PI to 100
places. It takes about 30 seconds.
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
PI
|
1K
|
N/A
|
016
|
2400
|
000-050
|
003-370
|
000-100
|
000-000
|
The second runs in 4K and generates PI to 1000
places. You have to wait about half an hour
before output is generated. This program has only
been run in emulation and expects a UART to be present on port
014 for output purposes. It will need serial driver work
in order to run on real hardware. Download by right
clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
PI
|
4K
|
N/A
|
016
|
N/A
|
000-000
|
017-332
|
000-100
|
TBD |

Concentric Circle Generation on the SCELBI - by Mark
Arnold
When I first built my SCELBI 8H, I only had 1K of memory and
needed a program to demonstrate it's capabilities. Mark
Arnold obliged by coming up with this program that uses SCELBI's
floating point package to generate concentric circles.
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
CONCIRC2
|
1K
|
N/A
|
016
|
2400
|
000-000
|
003-200
|
000-254
|
003-300 |
Mandelbrot Generation on the SCELBI - by Mark Arnold
Mark outdid himself by using SCELBI's floating point package to
generate Mandlebrot images with only 1K of memory. It's
slow, but it's very cool. There are two versions.
The program stops after each image is generated. Press the
RUN button to continue onto the next pass.
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
MANDEL4
|
1K
|
N/A
|
016
|
2400
|
000-000
|
003-301
|
000-100
|
003-310 |
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
MANDEL5
|
1K
|
N/A
|
016
|
2400
|
000-000
|
003-320
|
000-100
|
003-330
|
SCELBI Calculator - by Nat Wadsworth
This 4 function floating point calculator was demonstrated
by Nat Wadsworth and Robert Findley to potential investors
in order to get funding for SCELBI Computer
Consulting. In 1974, calculators were expensive
luxury items, so this sort of demo was enough to interest
those investors. The program was published in the
book "Machine Language Programming for the '8008' and
similar microcomputers". This
scan
of the book is on Cameron Cooper's scelbi.com site.
I have left the divide by zero error unimplemented, the computer
will halt when you try it. Jump to 001-000 to
resume. Also, multiply is indicated by the symbol "X", not
"*". Input parsing is rather primitive. Type a space
or = sign if the computer will not take your input. There
are some issues with rounding in this floating point package,
which were later fixed by the time SCELBAL was released.
Download by right clicking on the file name.
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
CALC
|
2K
|
05
|
016
|
2400
|
001-000
|
007-375
|
001-000
|
000-000 |
Galaxy - by Robert Findley
This is port of the classic "Star Trek"
computer game to the 8008 and 8080. Though
most versions of this game are in BASIC, Bob ported it to
8008 and 8080 assembly and published it in the SCELBI book
"SCELBI's GALAXY GAME FOR THE 8008/8080". A
scan
of this book can be found on Cameron Cooper's
scelbi.com website.
Download by right clicking on the file name.
- original source - trekorig.asm
- modified to allow room in a 4k system for a bootloader and
serial drivers. Among other things removed are the
line feeds, so if you have an output device that needs them,
you have work to do. - trek.asm
- binary - trek.bin
- intel hex object - trek.hex
NAME
|
MEMORY REQUIRED
|
IN PORT
|
OUT PORT
|
BAUD RATE
|
BEGIN ADDRESS
|
END ADDRESS
|
START ADDRESS
|
BOOTLOADER START
|
CALC
|
4K
|
05
|
016
|
110
|
000-000
|
017-271
|
000-100
|
017-300 |