SCELBI boot loader

One of the challenges of working with the SCELBI 8H, which doesn’t have a built in monitor, is loading software.

To address this, I have written a minimal serial boot loader that can receive serial data and write to memory. It takes a few minutes to toggle in the thirty-seven bytes, but it should save plenty of time, compared to toggling in an entire practical program. In the days of the SCELBI, the most common serial device was a TTY, that could dump data from paper tape at 110 baud using a current loop interface. This loader has it’s timing loops configured to receive 8 bit data at 2400 baud, but some hobbyist may want to retime to run at a TTY’s 110 baud.

This loader will work with a current loop or RS232 interface, depending upon what is connected to the TTL input port 5, bit 8. In my case, I connected a TTL to RS232 dongle that I had built for another task. This dongle is very simple. It consists of a MAX202 chip, some capacitors and some connectors. The other side of the dongle is connected to a modern PC, which can be used as a terminal and a source for dumping data to the SCELBI. Eventually I plan on building reproduction SCELBI current loop boards for those that want to interface to a TTY or other current loop device.

This loader is assembled to run from location zero, but it would be trivial to move it elsewhere.

Here is the listing for the minimal loader.


INPUT:
000:113 INP INPORT
001:240 NDA ; check start bit
002:160 000 000 JTS INPUT
005:026 010 LCI 8
TIMER: ; 1 1/2 bit times
007:021 DCC
010:110 007 000 JFZ TIMER
013:036 010 LDI 8 ; grab 8 bits
DATAIN: ; get 1 bit
015:113 INP INPORT
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
030: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

Here are the instructions:

  • Toggle in program with front panel
  • Set source to 2400, 8 bits, no parity
  • Set H and L with panel to start addr
  • Set PC to 0
  • Run
  • Send data from source
  • Interrupt when data has been sent
  • Decrement address
  • Using panel, check last byte with LAM
  • In the next few days I’ll put together “put char” and a “get char” routines that will also run over the 2400 baud, 8 bit interface. These will be used as the I/O drivers for downloaded apps, and should be combined with any app that is to be downloaded.

    One last thing. The SCELBI is very tolerant of CPU clock speeds, but for this loader to work correctly, the CPU clock has to be very close to 500KHZ. If your recieved data is garbled, there is a good chance your CPU clock is not correct.