Main page...           Popular tags: Electronics (11), Linux (11), Hack (8), DIY (6), Other (6), Retrocomputing (6), Debian (5), Curiosities (4)

Restoring the old PC-XT clone mainboard

2018-10-27 01:42:04,  In: Electronics, Retrocomputing

A long time ago I got an XT mainboard. The history of it is known: previous owner got it from someone else, who told that it is damaged and cannot be easily repaired, so it became an interesting exhibit in a bookshelf. It was for last 2 years in my stuff and finally I decided to restore it to the working condition.

The mainboard is a really old one - it has an additional ISA edge connector on the side, all TTL chips from around 1984-85, socketed, but it was not an IBM. The logo, visible on a silkscreen under the processor, resembles a stylish written "S" letter with its center line shaped in an american resistor symbol.
It was a clone, but a clone made with some uncertainity. Not that there are circuit errors, it electrically still is a 5160, but the design itself is... like someone took schematics from the technical manual, looked at original PCB and said "OK, let's try to design it again", and this was the first try, made quickly to verify is everything OK. The mainboard has a piece of breadboard in one of its corners produced by design. Tracks are not led with straight angles, like in IBM, but they are curved and round. All chips are socketed and there are their models written on the silkscreen, but they have lots of typos, like "74LS5244" instead of "74LS244" (generally silkscreen designer put digit 5 too many times in a chip types), there are also typos in descriptions like "ROM SEPRAATION" or "16K RANS". The mainboard had a Nec 8088 processor, most components are from Nec and TI.

The first thing before powering on was removing each chip and checking it in TTL tester. This way, 2 blown 74LS244 and 74LS74 with partially damaged output have been replaced. CPU has been tested in another XT and it didn't started. So I replaced it too.

I dumped the PROM and compared with 5160's dump. It was OK. Dumped EPROM - a surprise, it was a BIOS from 08/16/1982 (see binary), this ROM was never officially released, and comparing code I find that it is (in at least 4 places) different than another copy which is in the Internet, it was probably patched during board development. I decided to try it in my XT Turbo to see what the result will be - XT BIOSes are quite interchangeable if no custom chipsets are used, and I already tried a 1986 5160 BIOS in it. So, comparing to the 1986 one, this unofficial BIOS is slow as hell, it chews through 640kB of RAM in about a minute, has no support for 720kB drives and is too greedy about some cards' ROMs. I will probably save the chip as it was originally, but I'll prepare a chip with 1986 BIOS, or maybe even a Phoenix (although I don't like Phoenix - it boots up very quickly, but may not see some board ROMs).
Let's proceed further. Before powering it on I did a quick configuration review: DIP switches all in "ON", this should not be like that, especially when most of circuitry is like 5160 and DIP switches are described on silkscreen like a 5160, I configured it as in the original. Next, the jumpers.
First thing I found was that one jumper block is really similar to the one in XT, responsible for 64-256K or 256-640K board mode. And it really could have this function, but someone soldered it in the solder side to 256-640 option. Some jumper pins are present in the black plastic bases, but are not soldered into PCB. And there are much more jumpers than in 5160. Especially near ROM sockets, there are 5 sockets in this mainboard and their system is different than in 5160, with more jumpers.

The first difference is a presence of 74LS30 on the way to /CE of ROM, and /OE ends in some unknown jumper block. I decided to try to power it on, but before connecting power supply I tested it with ohmmeter. SHORT.
Tantalum capacitors? Another bad chip? Short in clock generator? Nope. Someone jumpered Vcc with GND. After this discovery I decided not to trust existing jumper configuration, and after removing "risky" jumpers the machine of course shown no signs of life, but at least nothing blown PSU's fuses. In the meantime I burned a diagnostic ROM from MinusZegoDegrees site. OK, because this mainboard is not known at all, even in TH99, I had to do a comparison - with 5160 schematics.

   How XT sees its ROM?

Intel 8088 has 1MB of addressable space. In this 1MB processor has to "see" all places from which it can read and to which it can write. In PC XT, the first 640kB of this space is reserved for system RAM, and that's why system expansion behind 640kB was so troublesome. Next, a 128k is reserved for future expansion and graphics adapter I/O area. Next 96kB is for various video board memory (first 32k) and sometimes registers. Next 192K is where ROMs of boards are placed, such as network board boot ROMs or SCSI controller ROMs. The last 64kB, from F0000 until FFFFF is where the BIOS ROMs are. System starts running BIOS from there, which is the last 8kB, but sometimes, especially in original PCs, there is additional ROM with BASIC before. If a ROM BIOS is driven to the point in which it is not possible to boot from anywhere and it's not programmed with an error condition (like with memory map problems), it may try to boot BASIC ROM and if, as in most PC clone cases, it's not present it will halt with "NO ROM BASIC" message. The full memory map can be seen in the figure below (Source:

ROM area starts in F0000. So our 8kB ROM has to pop in FE000 location, which corresponds to having 1 on A13-A15 and A16-A19 lines, while if we use 32K ROM it may pop in A16-A19 ones only. Then, all other lines are addressing ROM space.
Read: The easiest way to plug the ROM into addressing space is to pop it in the last 8kB of memory, and, if possible, connect it the way that additional address lines are still there, as we won't use ROM BASIC, but 32kB diagnostic ROM which may need more address lines.

The first thing I found was the ROM in socket "ROM0", while it is not possible by LS138 to mount the ROM0 socket in F0000 in this board. The LS138 has all of its IBM's "unused" lines used in ROM sockets to make it appear under different addresses, and leftover lines are formed in a strange loop with an originally-unused inverter on the other corner of the board. A whole circus ends with a jumper: This thing or GND can be used to control one of active-low gates of LS138. How beautiful, what the hell is this thing?
After thinking exactly how this circuit works, I found that the only possible function of this thing is injecting delays to make the board run with slower EPROMs. And by slower I think about 350-400ns. These times 250 was a standard, 300 was obsolete, but usually acceptable even for most XTs. Nevertheless, this goes to ground, my EPROMs are all 150-200.
Now let's go to 18 pins sticking from the board. First, I found all Vccs and GNDs. Next, I identified all EPROM sockets pinouts - all from ROM0..3, no use for me, it's 4 and 5 for system ROM. Let's go to the next, 10-pin header, identifying the same things. So I understand that there are address lines you can connect to ROMs pins. There may be even a /CE, which comes from LS138, while /OE can be tied to A16 or to /MEMR, which is a reasonable choice because there is no /MEMR in any other place near ROMs and this line must be used as a select for reading ROM. There is an option to connect A14 to pin 1 of socket to fit these fancy 32kB mask ROMs which have it, but I totally do not understand the possibility to connect /MEMW to A14. Do they expected to turn this board into ROM develoment platform, in which it's possible to install some SRAM, blow the contents inside from the system itself, reboot and try how it boots?

Another enigma is option to short IRQ2 to EPROM's A12 address line. Or board's A15. Or Vcc.
I finally made some nice alignment assuming that other address lines are OK. Installed an orignal ROM, power on. Mainboard dead.
Changed to diagnostic ROM and flipped a jumper for 27256, as the original was 2764. Mainboard dead. TTL probe: No access to ROM. OK, so let's try to finally go through the circuit to generate this /CE signal. The thing should start with address lines 15, 16 and 17, and end with /CE. During its progress, there should A18 and A19 come, as well as /MEMR, which in this board is already solved with /OE. What's near LS138? 74LS30 and more jumpers!

This is much more complicated than in IBM PC, when things use only LS138 A, B and C inputs (and one gate) to select address lines. Let's compare two alignments side by side, a simplified IBM's ROM selection circuit from IBM 5160 schematic and this one:

So additional jumpers allowed to connect A,B and C inputs of 74LS138 multiplexer to address lines, 12-17 to be exact. And of course they located ROM around the network adapter's hypothetical space, so it was obvious that the board did not started. Some inputs of LS30, a multi-input NAND gate gating LS138, were going to pads for a jumper for disabling ROM entirely (but what for?). Small corrections, original ROM and boot.
The board started POST, slowly processing its 512kB of RAM I put in two first banks of chips. Good, but I found a very interesting problem:
- The mainboard runs BIOS without problems.
- The mainboard can even boot ROM BASIC if I put it in.
- Before boot, BIOS beeps me that it cannot detect video board, while displaying the memory test using the video board.
- Diagnostic ROM test hangs when testing MDA memory, with a different Hercules (sorry, no MDA) displaying a "soup" on screen, CGA behaves erratically.

Well, this was not a video board's fault. I decided to observe the jumpers more carefully through a magnifying glass to see how they were connected. I noticed something odd: Some jumpers were cut from double-in-line block and soldered separately. Why? And why these two pins are bent a little distant from their base, and the other two so close to their base? Maybe the jumper doesn't go horizontally or vertically, but... diagonally? The line A18 completed a set of signals for 74LS30, which could then drive gate of LS138 multiplexer, so the BIOS has finally disappeared from video memory space. Finally I modified this jumper block as it was probably intended, with jumper inserted proper way, because the jumper responsible for A18 line was not connected to anything. Test executed OK!

System passed the diagnostic tests. With Phoenix BIOS it even booted off a 720K floppy. With old ROM... well, that's all it can show us:

Then I decided to give an old CPU a try - it started. It looks like the problem was only in frequency rating, as the XT I was testing components in was a Turbo XT (although not in turbo mode).
And the last photo, with the mainboard in a "test bed":

Older post...       Main page       Newer post...