Topic: Using and hacking the Dajen SCI
Date:  2011 NOV 03
Sometimes you end up with something not really knowing exactly what it is. Sometimes those things end up being cool…sometimes they’re awesome. The Dajen SCI is one of those awesome things. I picked it up cheaply because it seemed to carry an interesting assortment of devices on a S-100 board. Could it possibly serve as a one-size-fits-all monitor board for troubleshooting and working with S-100 systems?
What a nice layout! This board sure does seem to have a lot packed in there. It’s apparent that the SCI is a fairly old design…Motorola 6800 peripheral devices, 2708 EPROMs, and a widely spaced hand-laid board layout are among the most obvious indicators. Most of the ICs carry datecodes from 1976. There are no LSI RS-232 level shifters. Instead, this function is performed with OP-AMPs, transistors and resistors. There are two 2112 SRAMs, which are 256 bit x 4 devices.
Aside from what’s available through tracing out the board and looking up IC codes, there’s not a whole lot of information available on the Internet about the Dajen SCI. Fortunately, friend and fellow MARCHin Bill Degnan happened to have a Dajen SCI as well, as well as a photocopy of the manual! In exchange for checking his SCI out and building a serial cable, he sent me the board itself and a photocopy of the manual, which I have scanned and made available here: Glitch Works File Dump. The manual is invaluable, as it contains not only the hardware information about the board, but a guide to the Dajen ROM monitor as well.
UPDATE – I’ve recently obtained a scanned copy of the full manual from The Computer History Museum. It is available through their digital catalog here (mirrored here). The full manual contains the schematic, monitor source listing, and patching instructions for more software.
Another great thing about having Bill’s actual board to work with was that his board worked. After configuring it as the manual suggested, I was able to get the Dajen > prompt with a serial terminal connected at 110 baud. As it would turn out, my Dajen SCI did not come with its original monitor ROMs, but something entirely different/custom, and had several hardware problems that needed to be worked through before it could be used.
As mentioned above, there were some hardware problems that needed repaired before my SCI could be used. When it arrived, I was unable to read from memory locations using my Cromemco 4FDC’s RDOS monitor. This turned out to be the result of bad bus drivers – you can see the three newer 74LS467s that replaced the older (and dead) 81LS97 bus drivers just under the ROMs and gold-top SRAMs. After that, I was able to get the board to read ROMs – tested by placing the RDOS ROM in the SCI and setting its base address to 0xC000. At this point, I swapped in freshly burned SCI monitor ROMs, copied from Bill’s good ROMs using the SCI itself (did I mention it can also burn 2708s in-board?!).
At this point, my debug board showed that the ROMs were causing something to be written to ports. It wasn’t data for the 6850 ACIA though. Being a versatile little board, Dajen decided to skip jumper-select baud rates and use an Intel 8253 Programmable Interval Timer to generate a software-controlled baud rate from the 2 MHz system clock – neat! Why weren’t we getting past initialization though? Probing with the trusty Tektronix 7000-series showed a weird waveform on the baud clock pins of the ACIA. When I followed it back to the side-brazed pin of the 8253, the signal was nasty there as well…then suddenly, square, and the debug board showed the > prompt! A simple case of poor single-wipe sockets, quickly replaced with a dual-wipe gold plated Augat 24-pin socket. There was another lousy socket, an old TI single-wipe 14 pin socket, in the bottom-left corner of the board that had to be replaced, this time with a machine pin socket.The two status LEDs in the top-left corner were in bad shape, so they were replaced with standard red 5 mm LEDs from the parts bin.
Now the SCI is reliably booting its ROM monitor (even the onboard power-on-jump works!) and reading/writing to external memory. PROM burning functionality was tested by copying my “HELO” RAMless test routine for the debug board into a 2708 – this time with the characters in the correct order for a DL-2416! The parallel port connector at position 43 (third horizontal socket from the right, at the top-right edge of the board) had to be replaced as it was completely torn off when I received my SCI. A ground trace leading to pin 7 was blown off of the board as well…perhaps this explains the death of the bus tranceivers. The socket was replaced with another 14-pin machine pin socket, and the ground trace was repaired with a short 28-gauge Kynar jumper:
Now that the SCI was working, it was time to get it working the way I wanted to use it! The first modification that the board received was the addition of a 4-position DIP switch for selecting the base address, and a set of three machine pin sockets for enabling or disabling power-on-jump. These were originally setting selected with solder jumper, and repeated desoldering would eventually ruin the board. Installing the base address select switch was simple since the jumpers were already laid out in a 8-pin DIP pattern. It did require the removal of a tantalum power supply bypass capacitor though…since it was only a 4.7 uF capacitor and there were plenty scattered across the board, I completely removed it, though it could have been moved to the back of the board (you can see the + below the switches). Here’s a picture of the power-on-jump and base address switch modifications:
The next bit of hardware to get upgraded was the onboard SRAM. The SCI’s original SRAM tested fine and was stable at 2 MHz, but didn’t fare well with my Cromemco ZPU at 4 MHz. Solving this problem was a simple matter of finding higher speed replacement 2112 SRAMs and swapping them in. I found a nice pair of purple ceramic National Semiconductor devices with gold tops that were guaranteed to work by the seller, despite the lack of speed markings. Sure enough, they’re perfectly stable with my ZPU set to 4 MHz and no wait states. Here they are next to the two Intel 2708 EPROMs that hold the monitor:
The need for the next modification was discovered when attempting to get Bill’s SCI to work at 9600 BPS. The SCI seemed to be happy at any baud rate it could generate up to around 4800 BPS. After that, garbage appeared at the terminal even though the proper characters flashed by on the debug board’s display. I suspected that the baud rate wasn’t quite right on, but playing with the scaling factor failed to yield good results. Time to break out the scope…and the problem was immediately clear. The Intel 8253 PIT in Bill’s SCI wasn’t up to generating the clock necessary for 9600 BPS. Interestingly, my 8253 was. Bill’s 8253 was replaced with a NOS unit from the parts bin, which produced a clean, square clock. Still, garbage at the terminal, but the SCI seemed to receive characters, as it would respond to commands. Holding down a key on the terminal keyboard, I took a look at the RS-232 shifted output. Having worked with OP-AMPs in analog audio circuitry during college, it was clear that the LM2903 OP-AMP on the SCI’s output level shifter wasn’t capable of slewing the signal fast enough for 9600 BPS. Additionally, there was a lot of overshoot. I replaced the LM2903 with a Texas Instruments TL082, and after switching the SCI to 9600 BPS, I was greeted with the familiar > prompt! I replaced the output OP-AMP in my SCI with a TL082 as well – even found a CERDIP device in the parts bin:
Originally, I’d built a serial cable for the SCI using a 14-pin DIP ribbon cable plug with the required wires split off and individually soldered to a DB-25F connector. It worked, and for a board continuously mounted in a S-100 card cage with the connector bolted to the back panel, it’d be fine. I got tired of breaking 28 gauge stranded wire and having to stop working with my S-100 system to resolder the connector, so I built a new cable using a 14-pin DIP header, 24 gauge stranded wire and a bit of heat shrink. Don’t forget to connect pin 7 to pin 8 if you’re using RS-232 signaling:
By far, the most useful part of the SCI is its well-written ROM monitor. Check out the manual for a really complete description and guide to using the monitor. With the SCI, you can bring up a full serial monitor using nothing more than a CPU board and the SCI itself – no additional RAM boards are required, as the SCI uses its internal 256 bytes of static RAM for stack and variable storage. Of course, you’re going to want more RAM than that to do anything useful, aside from low-level hardware debugging.
The ability to burn 2708 EPROMs makes the SCI and its ROM monitor especially useful. Whether you’re copying a larger ROM into several 2708s (none of my current EPROM programmers support the 2708, support stops at the 2716), saving test code for later use with the SCI itself or another ROM board, or storing a small hand-assembled program – perhaps a bootloader – the ability to write to fairly fast, nonvolatile memory is wonderful. This feature even makes it possible to use the SCI to modify its own ROMs, with a little bit of extra RAM, as we’ll see later…
What makes the Dajen ROM monitor truly universal is its compatibility. The monitor is written for 8080-compatible CPUs, meaning it can be used with the original 8080 and later 8085. No Z80 or “undocumented” 8085 opcodes are used! Onboard power-on-jump circuitry allows the SCI to autoboot its ROM monitor (or anything else in the first ROM socket) even if your CPU board doesn’t support it…a handy feature even with front panel S-100 systems, since it eliminates a faulty front panel from the equation when debugging.
Software modifications too?! Why, of course! So far, the only modification I’ve made to the Dajen ROM monitor is changing the default console port speed. The stock monitor comes configured to initialize the console serial port to 110 baud. While I do have terminals that support 110 baud, many of the modernish machines I use as terminals from time to time don’t. My main terminal, a Heath/Zenith H19, also requires you to open the case and change the baud rate using DIP switches. This is less than desirable when the terminal is being used with more than one system. Additionally, Bill wanted his SCI to come up in 9600 BPS mode as well. Fortunately, the modification is easy and can be performed with only a processor board, the SCI and 1K of RAM somewhere in address space.
To begin, make sure you have a fully erased EPROM in the third ROM socket of the SCI. You’ll need to find the byte in ROM that sets the 8253 PIT’s scaling factor. This is easily accomplished with the Dajen monitor, by executing a byte pattern search command for the scale factor of 0x0470 for 110 baud: “S D000 D7FF 70 04” (remember, specify the bytes backwards!). This yields an address of 0xD7BB. Next, copy the contents of ROM #2 into 1K of RAM. I use an 8K IMS static RAM board addressed from 0x0000 to 0x2000, so the following command accomplishes that: “M D400 D7FF 0000”. You should now be able to see the console speed scaler at offset 0x03BB from your base RAM address – if your RAM starts at 0x0000, then “D 03BB” should show “70 04 .. .. ..”. Edit the value to your new default baud rate with the edit command: “E 03BB”. I replaced 03BB with 0D and 03BC with 00 for 9600 BPS.
Now comes the magic: set DIP switch 4 of the top-left configuration switches to “OFF” to enable the 2708’s programming voltage supply. Burn the contents of RAM at your starting address to the blank EPROM in the SCI using the program command: “P 0000 D800” in my case. After 2-3 minutes, barring any write errors (the monitor will notify you of any problems), you should now have a new Dajen monitor ROM #2 with a default console port speed of 9600 BPS!
More Features to Explore
As if the SCI wasn’t cool enough already, it also includes parallel ports and a cassette port. Aside from jumpering a parallel input port bit to ground and reading it, I haven’t exercised either of these features yet. The Dajen monitor includes routines for loading/storing from/to audio cassette, as many microcomputer systems of the time were capable of. Eventually I’ll get around to at least making use of the cassette port, so look here for future updates!
In addition to the Dajen SCI manual, I’ll be posting dumps of the original monitor ROM contents, as well as ROM images premodified for a default console speed of 9600 BPS. Links to follow!