Software
BIOS
At initial boot time, the ROM bank containing the BIOS is banked in. The BIOS initializes the hardware, such as the UART and the video chip, and tries to load the steckOS loader executable (usually LOADER.PRG) from SD card and executes it. If that fails, the BIOS expects a PRG binary uploaded via XMODEM. UART baud rate and the name of the steckOS loader executable can be configured and are stored in the RTC’s NVRAM.
steckOS
The operating system loader (LOADER.PRG) contains the actual steckOS kernel, and the startup code that loads the OS and starts up the kernel. The OS loader as well as any executable in steckOS are in PRG format with the load address in the first two bytes as known from Commodore computers.
kernel
After having been loaded by the OS loader, the kernel initializes the hardware (again), mounts the SD card and tries to find the shell executable, which it then executes. The steckOS kernel provides basic interrupt handling, text display routines for the VDP and a jumptable with kernel calls.
library
Most driver code (VDP, FAT32) is located in the library, so that BIOS and kernel can share the same code. Library calls are documented here
shell
The steckShell is the user interface of steckOS, very much like COMMAND.COM on DOS or sh/bash on Linux. steckOS’s primary purpose is to be able to navigate the file system and start programs. For that, steckShell provides a couple of internal and external commands. External meanins that those are separate PRG files which are loaded from the file system and executed as any other program.
For example, on typing “fsinfo” followed by enter the sheckShell will first search it’s internal command table, will not find an entry “fsinfo” there and will then search a list of directories (the PATH) for an executable named FSINFO.PRG, and execute it if found.
internal commands
The following commands are internally built into the shell executable.
ls, dir
Displays directory contents, like a mix of the DOS “dir” command and the “ls” command in Unix/Linux. The “dir” command is an alias for “ls -l”.
pwd, mkdir, rmdir, rm, cls
These commands do pretty much what you think they do.
up
up jumps to the kernel xmodem upload routine which expects an executable in PRG format to be sent via xmodem.
pd
pd (page dump) shows a memory page (256 bytes) or a range of memory pages in hexdump format.
ms
ms (memory set) sets the content of a memory address plus the following bytes
go
go starts executing code at the given memory location
load
load the contents of a file to a given memory location
save
save a memory area (from address, to address) to a file
bd
bd (block dump) loads a block (512 bytes) from SD card and displays it’s contents like pd
external commands and tools
Every other command is searched for in a hard coded “PATH” and executed. Commands and tools are mostly named after their Unix / DOS counterparts.
help
The “help”-command lists the most important commands.
stat
Much like the Unix/Linux stat command, stat shows meta information about a file or directory, including file attributes.
attrib
Much like it’s DOS counterpart, attrib is used to set/unset certain FAT attributes such as the hidden bit.
fsinfo
fsinfo lists some information about the currently mounted FAT32 file system.
nvram
nvram shows and/or modifies the contents of the RTCs NVRAM. The NVRAM is used to store the OS loader filename, UART settings like baud rate and line parameters, and the keyboard delay and repeat rate.
date and setdate
date and setdate are used to display or set the RTC time.
banner
A version of the Unix SYS V banner command taken from here. One of the few tools written in C. The source compiled with cc65 without modifications. We changed some int variables to unsigned char anyway to fit our 8bit CPU.
wozmon
Steve Wozniak’s legendary memory monitor fitting in one page (256 bytes). The effort of adapting it to steckOS is documented in this blog post
Programming languages
An 8bit computer is nothing without period correct interpreter languages like BASIC and Forth.
EhBasic
EhBasic is a quite common BASIC interpreter among homebrew enthusiasts because of it’s easy portability. Our version is based on the 65c02 version by forum.6502.org user floobydust. We extended it with a few graphics commands that interface with the V9958’s command engine and implemented the LOAD and the SAVE command to load and save the BASIC program as ASCII source instead of binary.
TaliForth2
TaliForth 2 is a subroutine threaded code (STC) implementation of an ANS-based Forth for the 65c02 written by Scot W. Stevenson.
Games
A computer is nothing without games, so we had to write/port a few.
dinosaur
An endless runner, just like the one built-in into the Chrome browser.
pong
Our pong clone uses the TMS9918’s multicolor mode with 64x48 pixels. Yes, those squares are single pixels.
MicroChess
MicroChess is a chess game, written in 1976 for the MOS/Commodore KIM-1 by Peter Jennings, making the KIM-1 the first affordable chess computer. Our version is based on the serial line version by Daryl Rictor which includes display of a chess board.
Other neat stuff
unrclock
An unary clock, nice to look at, useful as screen saver, and like pong another showcase for the 64x48 pixel multicolor mode.