SWTPC 6800
Return to Home
Return to Resources
The Story
In spring 2025, I inadvertently came across a SWTPC 6800 in a North Texas antique radio auction and recognized it as a significant early computer that was worth bidding on. Fortunately during the auction, I did not encounter much competition and easily bought the computer alongside with a Lear-Siegler ADM3 terminal. The previous owner had lived in Arlington, Texas (between Dallas and Ft. Worth) so this computer and components likely have remained in Texas since they were first produced. Fortunately, there are plenty of resources and documentation posted online about the SWTPC 6800 that I was able to figure out exactly what I had on my hands and tinker with it.
- Southwest Technical Products Corporation (SWTPC) based in San Antonio, Texas was founded in 1967 by Daniel Meyer to sell electronics kits for hobbyists. Kits were inspired by projects featured in Popular Electronics and Radio-Electronics magazine articles. In November 1975, SWTPC entered the computer market with its first microcomputer, the SWTPC 6800, based on the Motorola 6800 processor. The company also introduced the SS-50 bus standard, which was adopted by many other manufacturers developing accessories for the fledgling hobby computer market. The year 1975 marked a pivotal point in the personal computer revolution. The Altair 8800 had made headlines in the January issue of Popular Electronics, and that same year, Microsoft launched its first product: Altair BASIC. The following year, 1976, brought another milestone with the debut of the Apple I, a complete, standalone microcomputer featuring an integrated keyboard and video output.
- Southwest Technical Products Corporation - Wikipedia
- SWTPC 6800 - Wikipedia
- SWPTC 6800 at Deramp.com (Mike Douglas), a treasure trove of hardware and software documentation
- SWTPC documents on archive.org
- SWTPC 6800 at Old Computer Museum
- SWTPC 6800 at Sardis Technologies
- SWTPC by Michael Holley (archived), also available on deramp.com
- SWTPC history by pc-history.org (archived)
- SWTPC 6800 at Vintage Computer.com
- Reproduction SWTPC 6800 boards
- SWTPC product catalogs - SWTPC 6800 featured in catalogs from 1976-80.
- Mike Douglas's SWTPC 6800 Youtube Channel
- Dave Dunfield's SWTPC 6800 (archived)
- Percom Data Company based in Garland, Texas (north of Dallas) was founded in 1976 by Harold and Lucy Mauch. Percom started by providing cassette tape solutions for data storage on personal computers. In 1978, Percom formally incorporated and expanded to developing and selling floppy disk drives and accessories for SS-50 bus and other low-cost computers. Among the products produced and sold for the SWTPC 6800 were the LFD-400 disk drive controller and SBC/9 single board computer 6809 upgrade.
- Percom - Wikipedia
- Percom history by Roger Arrick, a former employee of Percom
- Percom history by TRS-80.org
- Percom history on archive.org by Margo Mauch, daughter of the founder
- Smoke Signal Broadcasting based in Hollywood, California was founded in 1976 by Frederic Hammond. Their first product was the M-16-A 16KB memory card for the SWTPC 6800 released in 1977.
- SSB - Wikipedia
- Smoke Signal Broadcasting documents on archive.org
SWTPC 6800 system configuration and board pictures
This is a picture of my SWTPC 6800 as found in the auction listing. The computer was missing the aluminum trim on the front and back corners of the case that I had to reproduce.Board | Memory/ROM | Memory Range | Notes |
---|---|---|---|
SWTPC MP-16 | 16KB DRAM | 0x0000-0x3FFF | Original configuration |
SSB M-16-A | 16KB SRAM | 0x4000-0x7FFF | DIP switches S1-S5 configured to 00100 (no write protect, start address x4000) |
SWTPC MP-LA | Parallel peripheral interface | x8018-x801B | Original configuration plugged in port 7 of MP-B. Peripheral ports are memory mapped in 4 byte increments starting at x8000. |
SWTPC MP-8M2 | 8KB SRAM | xC000-xDFFF | DIP switches S1-S4 configured to 0000, address decoder wiring modification to use 7th 8KB block |
Percom LFD-400 | ROM #1 | xE000-xE3FF | MiniDOS 1980 version 1.01. The disk controller board had address decoder wiring modification to change base address of disk controller to xE000 as recommended by the MPX/9 user manual for use with the TSC FLEX OS. |
ROM #2 | xE400-xE7FF | Empty slot (normally MPX DOS for 6800) | |
MiniDOS ROM (custom) | xE800-xEFFF | Empty slot (normally MiniDisk for 6800) | |
Percom SBC/9 | 1K RAM and I/O | xF000 - xFBFF | |
Psymon ROM | xFC00 - xEFFF | Original 1979 version 1.2 firmware matching documented binary in Psymon User Manual. | |
SWTPC MP-B | SS-50 motherboard | N/A | Original configuration |
- MiniDOS (Percom LFD-400 2708 ROM at xC000, mine is modified to be located at xE000)
- minidos9_v1.00.asm
- minidos9_v1.00.hex (assembled from minidos9_v1.00.asm file, works the same as v1.01 below)
- minidos9_v1.01.hex (actual ROM dump from my system)
- PSYMON (Percom SBC/9 2708 ROM at xFC00)
- psymon_v1.20.asm
- psymon_v1.20.hex (ROM dump from my system at xFC00)
- MPX/9 (slightly over 4KB stored on hard 10-sector floppy disk)
- mpx9_boot_v1.20.asm (this section loads from disk to RAM at address x0100)
- mpx9_boot_v1.20.hex (RAM dump from my system at x0100)
- mpx9_v1.20.asm (this section loads from disk to RAM in first available 4KB below the LFD-400 base address, e.g. xD000 on my system. Entry point is xD503.)
- mpx9_v1.20.hex (RAM dump from my system at xD000)
Percom SBC/9
The SBC/9 is a complete Single Board Computer with a 6809 microprocessor, RAM, serial and parallel ports, and a simple monitor ROM firmware. This board was marketed as an upgrade to replace the original SWTPC 6800 CPU board. The board was produced in 1980 by Percom and the ROM contains Percom's system monitor called Psymon.
Documentation
- Percom SBC/9 User Manual - deramp.com, Appendix A5 is especially relevant for a system with a SBC/9 + LFD-400.
- Percom 6809 System Monitor "Psymon" User Manual - deramp.com
Percom LFD-400
The LFD-400 is a disk controller produced by Percom. This controller board was made in 1977 and was designed to work with the newly introduced Shugart SA-400 single 5.25" mini floppy drive. Prior to the introduction of the mini floppy, the standard size for a floppy disk was 8 inches. Shugart Associates had introduced the SA-400 drive in late 1976 and released in early 1977.
Documentation
- Percom LFD-400 User Manual - deramp.com, discusses MiniDOS typically in ROM #1
- Percom MPX/9 Disk Operating System User Manual - deramp.com
SWTPC MP-8M2
The MP-8M2 is a 8KB RAM card consisting of sixteen 2102 static RAM chips produced and sold by SWTPC. Each 2102 is 4K by 1-bit. The board was made in circa 1977-78. This was a manually assembled kit, the factory assembled version was MP-8A. The kit was priced at $200 in 1978.
SSB M-16-A
The M-16-A is a 16KB RAM card consisting of thirty-two Texas Instruments TMS4044 static RAM chips. Each TMS4044 is 4K by 1-bit and drop-in equivalent to the 2102 that the board was originally designed for. The board was produced in 1977 and sold by Smoke Signal Broadcasting (SSB). This board was the first non-SWTPC product made for the SWTPC 6800 SS-50 bus and was originally priced at $529 in early 1977 and later reduced to $379 in 1978.
Documentation
- SSB M-16A installation instructions - deramp.com
SWTPC MP-16
The MP-16 appears to be a rebranded Motorola SMS3506 board. It is a 16KB dynamic RAM card consisting of sixteen 4116-equivalent 16K by 1-bit dynamic RAM chips produced by Semiconductor Memory Systems (SMS) division of Motorola, the photo shows only half of the sockets populated. The user manual for the board mentions it was designed for Motorola MCM6616 chips (equivalent to the 4116 according to this source), but the obscure and undocumented DO8385W124 labeling on the Motorola chips themselves do not match. The 7801 is likely the date code for week 1 of 1978. I believe this may be intentional mislabeling to avoid patent infringement or licensing fees.
The board contains all the DRAM refresh control logic so memory could be accessed from the SS-50 bus in the same basic manner as if it were a static RAM card. In 1978, this board was priced at $400 and for an additional $250 could be expanded to 32KB by ordering the M16-X expansion kit for 16 more DRAM chips to plug into the empty memory sockets on this board.
Documentation
SWTPC MP-LA
The MP-LA is a parallel peripheral/printer interface produced and sold by SWTPC using the 6820 PIA. This board was produced in 1976 at an introduction price of $35.
Documentation
- SWTPC MP-LA schematic/assembly instructions - deramp.com
SWTPC MP-B
The MP-B is the main SWTPC 6800 SS-50 bus motherboard for power distribution, data and address line sharing. Address decoding was sometimes modified on this board, but this example is original. The board was priced at $40 when introduced in 1975.
Documentation
- SWTPC MP-B schematic/assembly instructions - deramp.com
SWTPC MP-68 Mini Floppy Disk System
The MP-68 is a dual 5.25" floppy drive assembled and sold by SWTPC for the 6800 computer. It requires a SWTPC DC2 floppy drive controller board that did not come with this computer when I bought it. I'm uncertain if it was ever used and the SWTPC 6800 setup may have relied entirely on the LFD-400 and the single Shugart drive.
Documentation
- SWTPC DC2/MP-68 assembly instructions - deramp.com
Using this SWTPC 6800
As this SWTPC 6800 system includes the Percom SBC/9 and LFD-400, its operation follows the user manual instructions for Percom hardware and software, rather than instructions for SWTPC's own disk controllers and the MIKBUG or SWTBUG monitors.
The SBC/9 has a serial port that connects to a serial terminal that in my case is either a laptop running PuTTY or a period-correct Lear-Siegler ADM3 terminal. The board has configurable baud rates and my board happened to be configured for 9600 baud, 8 data bits, 2 stop bits, and no parity. The ADM3 terminal has configurable DIP switches to match the SBC/9 settings for proper communication.
At first power up of the SWTPC 6800, the SBC/9 6809 processor starts a read at the reset vector address xFFFE in the Psymon ROM space that is programmed to xFC00 instructing the processor to jump to xFC00 where the Psymon firmware starts. The first thing that prints out on the terminal is a "CMD?" prompt. The Psymon User Manual describes the supported commands in this monitor:
M <address> - Memory examine/change (e.g. peek/poke) G <address> - Go to address R <register> - Register examine/change L - Load program from tape S <start> <end> - Save program to tape B <address> - Set/list breakpoints U <address> - Unset breakpoints Z - Jump to address xC000 (DEPRECATED! See note below)
Note that the PSYMON user manual mentions a Z command that is a shortcut equivalent to 'G C000' to jump to address xC000 where the LFD-400 MiniDOS ROM #1 is located. However, this command appears to be deprecated and is not in the command look up table of the PSYMON 1.0 6809 assembly code. Therefore, to jump to LFD-400 MiniDOS, the 'G' command is used instead.
A simple 6809 program
The simplest way to interact with the 6809 processor via the monitor firmware is manually entering or examining memory contents.
- Memory dump - typing "M 0000" in the terminal and press the SPACE bar returns the byte at address x0000. Pressing SPACE again reads the byte from the next address x0001. Pressing SPACE continuously is useful to dump the entire memory space contents from x0000 to xFFFF. I was able to examine the Psymon ROM contents itself at xFC00 to xFFFE to compare against the published firmware contents in the Psymon user manual to verify they match.
- Simple RAM program - by typing in "M 0000", pressing SPACE to examine the read byte, then type in a new byte followed by SPACE would modify the content. In doing this, I wrote a simple 6809-compatible machine code entered in manually starting at address x0000 to write an incrementing value from 0 to 127 starting at RAM address x1000.
8E 10 00 ; LDX #$1000 - Load X register with 0x1000 86 01 ; LDA #$01 - Load A register with 0x01 A7 80 ; STA ,X+ - Store A at address in X, then increment X 4C ; INCA - Increment A 81 80 ; CMPA #$80 - Compare A with 0x80 26 F9 ; BNE -7 (to STA) - Loop back if A not equal to 0x80 (127 decimal) 7E FC 00 ; JMP $FC00 - Jump to address 0xFC00
Using the LFD-400
The Percom LFD-400 controller in this computer has a MiniDOS 1.01 ROM from 1980 that supports loading MPX/9 from a floppy disk. This version of MiniDOS is assembled for the 6809 and does not match any of the 6800 based code that is documented in the LFD-400 user manual. The SBC/9 user manual also has an Appendix A5 section near the back discussing using the LFD-400 in a SBC/9 system. The "MPX/9" ROM mentioned in Appendix A5 is really referring to a 6809-compatible MiniDOS/9 ROM placed in any slot on the LFD-400 controller, see the Software source code section.
Basic usage is to turn on both the computer and the Shugart disk drive, type in PSYMON after the "CMD?" prompt this command 'G E000' to jump to address xE000 (base address of the LFD-400 on my system, other systems may have this at xC000). The disk drive will start spinning and if a valid disk is present, the disk will stop after a few seconds and the screen will display "MPX/9 VERSION 1.20 COPYRIGHT (c) 1980 BY PERCOM DATA CO. INC." followed by a "MPX>" prompt. Then MPX commands as documented in the user manual (listed below) are usable:
COMMAND ENTRY FORMAT S(ave) S <FNAME> <BEGA> <ENDA> [<EXEC>] L(oad) L <FNAME> <Address> D(elete) D <FNAME> F(iles) F <N> I(nitial) I <N> [<CMD>] R(ename) R <OLDNAME> <NEWNAME> G(o) G <EXEC> [<PARAMETERS>] M(onitor) M
The LFD-400 controller has memory mapped control and status IO to a Shugart SA-400 disk. The memory-mapped control signals are mapped with an address offset of 0x0C00 + N where N is the 74LS138 3:8 decoder output index relative to the base of the controller. For example, "MON" for Motor On is at x0C05 + xC000 = xCC05 if the LFD-400 base is at xC000. Mine was modified for xE000 so "MON" is actually located at address xEC05.
LFD-400 controller signals:
Signal | Offset | Direction | Purpose |
---|---|---|---|
SWE | xC00 | read | Controller status |
SYNC | xC00 | write | Sync word port |
RDE | xC01 | read | Received data |
RDE | xC01 | write | Write data port |
SCTR | xC02 | read | Sector counter |
SCTR | xC02 | write | Fill word port |
DVST | xC03 | read | Drive status |
DVST | xC03 | write | Drive and track select |
RRST | xC04 | read | Receiver restart pulse |
RRST | xC04 | write | Write pulse |
MON | xC05 | read | Disk motor on pulse |
MOF | xC06 | read | Disk motor off pulse |
The motor controller circuitry on the LFD-400 has an astable multivibrator using a 74LS122 that relies on the computer sending "MON" Motor On pulses on a regular basis to keep the disk spinning, otherwise the multivibrator automatically turns off the disk after approximately 3 seconds if the computer happens to become non-responsive. The multivibrator circuit is timed with a simple analog RC circuit consisting of a 330K resistor and 33uF electrolytic capacitor. After nearly 50 years, the capacitor failed on my controller so the disk was not spinning up. MiniDOS/9 would return a "DISK ERROR 04" indicating that it thinks there is no disk present. Once the capacitor was replaced, executing "G E000" from PSYMON to jump to MiniDOS/9 will spin up the disk as expected. A debugging technique for the motor control is to execute PSYMON 'M EC05' followed by ENTER to read this address causing a pulse to 'MON' Motor On to verify the astable multivibrator flipped state to enable the disk motor on signal to the Shugart drive.
The LFD-400 only works with hard sectored disks that have 10 index holes punched on the disk. Many later 5.25" floppy disks are soft sectored with only 1 index hole and will not work. The controller looks at the TRACK 0 pulses from the Shugart drive and relies on timing between holes to determine if a disk is present, so a soft-sectored disk will cause MiniDOS to return "DISK ERROR 04" because the less-frequent TRACK 0 pulses cause it to think the disk is missing.
The circa 1980 MPX/9 disk that came with my system surprisingly appeared to be readable at least for the MPX/9 section. If the disk is flipped backwards and appears blank, MiniDOS/9 returns "DISK ERROR 06" indicating that it is unable to find an expected disk header. With the disk inserted in the proper orientation, MPX/9 will load into RAM. First a bootloader is loaded into RAM at 0x0100, and then this loads the rest of MPX/9 into RAM at xD000 with the lower sections being used for stack memory. The executable code entry point for MPX/9 is at 0xD503, e.g. after MPX/9 is loaded into RAM and you decide to return to PSYMON with the MPX/9 'M' command, you can jump back into MPX/9 with a PSYMON 'G D503' command.
The files in the screenshot above are what is present on the disk that came with this SWTPC 6800 system. This disk has BASIC09 files, but unfortunately does not read and has data corruption. There are some other interesting files on this disk that provide clues as to what this SWTPC 6800 system may have originally been used for. There are inventory control serial numbers etched on the back of the SWTPC 6800 and on the Percom Shugart drive, and given that there are files related to THERMAL and LOGGER, I suspect the computer used the MP-LA parallel port to query temperature data from some external 1970s-era monitoring equipment and logged it to disk. Likely the logging program was written in BASIC so the computer would first load MPX/9 and then BASIC, then run BASIC to run the data logging program. If true, this is an interesting early example of computer automated data logging using a relatively affordable 1976 computer. National Instruments was founded in 1976 to solve this exact application of using computers to control test equipment and automate data collection.
Back to Top