Topic: Omega Micro Systems OMS-02 6507 Single Board Computer
Date:  2022 JUN 22
In 2011, Bill O’Neill contacted me about my 8085 SBC rev 2 project, with interest in building one himself. As luck would have it, I’d just run some of the boards at OSH Park (long enough ago it was called DorkbotPDX!). I had two spares, and ended up trading Bill for a single-board computer of his own design, based around the 6507 CPU. The 6507 is a cut-down 6502, with fewer address lines, no interrupt lines, etc. His SBC included an 8K SRAM, 8K EPROM, 6551 ACIA, and glue logic. RAM was presented as 4K from 0x0000
to 0x0FFF
, there was an I/O segment at 0x1000
to 0x13FF
, and 3K of ROM lived at 0x1400
to 0x1FFF
. Within the I/O page, the ACIA was based at 0x1200
.
Here’s a picture of my original build of Bill’s SBC:
The huge orange Sprague capacitor looks a bit silly on there, but I had several NOS packages of them at the time! It’s a pretty clean little SBC. There’s a two-position DIP switch in the upper-left corner, this allows selecting banks from the onboard RAM and ROM. Position 1 controls the ROM, pulling the ROM’s A12
address line to ground when closed. Position 2 controls the RAM, pulling its A12
line to ground when closed. Resistors pull both lines up when the switches are open.
The header at the top-center allows for I/O expansion, and includes several decoded I/O addressing lines, the data bus, low address bits, etc. A MAX232 provides level shifting to interface the 6551 ACIA to RS-232.
As can be seen from the small bridge rectifier and regulator, this board will run from AC or DC, with sufficient overhead to allow the 7805 to regulate. An input of 8V AC or 7.5V DC is sufficient.
Software Load
Bill provided a ROM with the bare board, which contains Microchess in one half, and a port of Tom Pittman’s Tiny BASIC in the other half. There’s a bootloader ahead of both that initializes the ACIA and prompts for cold or warm start. Tiny BASIC on a little platform like this SBC is pretty handy, and I’ve spent many hours hacking on small BASIC programs that can live within the 4K RAM confines of the board.
2022 Rebuild
In July 2022, I decided to redo some parts of the 6507 SBC in preparation for more hacking on it. Below is a picture of its current state:
Probably the most immediately obvious change is the removal of the large orange capacitor! This was necessary to reduce the overall height of the board, which will matter later on. Since I always power the board from a DC supply, the capacitor did not have to be as large a value as I’d originally used.
The expansion header was upgraded to a shrouded header with latches. This displaced a bypass capacitor, which was moved to the back of the board. The 74LS138 responsible for decoding memory into 1K segments was removed and socketed: the original had been squished at some point, and a potential future project would be made easier by having it socketed.
At some point, I’d stolen the MAX232 used in the original build for some other project. The replacement MAX232 wasn’t happy with the 0.1uF ceramic capacitors I’d originally used, so the capacitors were replaced with 0.33uF radial ceramics (blue components around the MAX232 above).
Reset Circuit
I added a small C&K pushbutton switch for reset, found in the junk drawer. Originally, the 6507 SBC used a simple reset arrangement: a capacitor was charged via a resistor to 5V, and the pushbutton shorted the capacitor to ground to generate a reset. This seemed to work OK with the original software load, but I encountered weird problems when porting GWMON-65 to the SBC. I ended up removing the original resistor and capacitor, and hacking in a DS1233 EconoReset:
The DS1233 monitors VCC
to provide power-up reset, but also allows for a manual pushbutton reset. Adding an external capacitor allows for control of the reset duration. I used a 0.01uF ceramic capacitor (red radial component) for this purpose. The DS1233 and capacitor fit pretty nicely in the space originally intended for the reset capacitor and resistor, with a little creative lead-forming on the DS1233.
Before this modification, GWMON-65 would not come on the 6507 SBC. The driver for the 6551 ACIA was known to be functional as it had been tested on another system. After hours of debug hacking, I was ready to shelve the SBC for a while, but decided to test some solder pull Rockwell R6551 ACIAs with it. To my surprise, GWMON-65 came up just fine with the Rockwell parts! The original ACIA Bill supplied was a RCA CDP65C51A, a CMOS part. I studied the datasheets for the two parts looking for initialization differences, major timing differences, etc. but could not find any. I then considered that perhaps CMOS vs. NMOS levels mattered with the shape and speed of the reset signal.
I dumped Bill’s original ROM and found a delay routine that was called pretty much immediately on reset. This seemed suspicious, as there is typically no reason to delay initializing the ACIA, following a hardware reset. With the DS1233 EconoReset hacked in, the CDP65C51A behaved perfectly, suggesting that reset speed or shape was holding the CMOS-levels CDP65C51A in reset longer than the TTL-levels R6551. I emailed Bill about it, who had encountered the problem himself and solved it with the delay loop initially, and a MOSFET circuit later on.
Final Thoughts
With the 6507 SBC cleaned up and GWMON-65 ported and running, I now have a nice little single-board to test general 6502 machine code programs. Previously, Tiny BASIC made it difficult to load machine code into memory, limiting the board’s use to BASIC programming and getting beaten by a 6507 in Microchess.
Staying within the limited confines of a cut-down 6502 does make for some more interesting projects than jumping into a system with 64K of RAM. I still need to adapt Tiny BASIC to coexist with GWMON-65. I will probably add a monitor option to the bootloader, so it presents C/W/M?
as e.g. Ohio Scientific systems with BASIC-in-ROM do. I also have a few small expansion projects in mind!
SBCs hacked on