An 80188 based SBC

Last night I completed my 80188 based SBC-188 build. It is a ECB board designed by John Coffman in the Retrocomputers forum that provides an Intel 80188 coupled with 1Mb of RAM and 128k of ROM. It also provides a standard IBM compatible floppy and IDE drive interface as well as a serial port.

Multiple BIOS version have been written to allow display via a range of ECB based VGA cards, as well as a Wyse or ANSI serial terminal. The concept of revisiting the 80188 appealed to me as I owned an interesting LEO PC in the 80’s that was based on the 188.

So – What on earth is a 80188?

Likely you have heard of the famous Intel family line, starting with the 4004 and moving through 8008, 8080, 8085, 8088, 80286, 80386, 80486, Pentium, through to modern Core-i7 devices. The PC revolution started when IBM decided to use the 8088 as the CPU in their IBM PC.

Lets divert for a bit and talk about numbering systems – for a little while (up until the 80286) Intel had a numbering system that indicated the size of the external data bus in the last digit. 8086 had a 16 bit external memory bus, while the 8088 had an 8 bit external bus. likewise, 80188 – 8 bit external bus, 80186 – 16 bit external bus. The idea behind the 8088 and 80188 was that they were easy to integrate into existing 8 bit designs, as they directly interfaced into the 8 bit bus. This dual device strategy stopped with the 286 as the transition to 16 bits was complete enough that new designs were being developed with double the memory devices as standard.

IBM chose the 8088 because it was trivial to design a computer around, and being externally an 8 bit device reduced system costs enormously.

The focus of the 80186/80188 was that the 8088 needed a raft of other devices to implement the CPU, such as an interrupt controller, a clock generator and a system controller. The 80186/80188 had those devices built in reducing chip count.

The chip didn’t end up in many systems at the consumer level, as the transition from the 8088 to the 80286 happened so fast. The 286 had the advantage that it was a true 16 bit system with a external 16 bit bus so the apparent speed improvement was massive. My LEO from 1987 was a truly unique machine it turned out.

The SBC-188

The Retrocomputers community developed from the original line of N8VEM systems developed by Andrew Lynch and has grown considerably. John Coffman within the Retrocomputers community developed the original SBC-188 in about 2013. My board is a revision 3, from 2020, so most of the bugs have been ironed out, so it is a worthwhile project to jump onboard. As I mentioned above, it provides an Intel 80188 coupled with 1Mb of RAM and 128k of ROM. It also provides a standard IBM compatible floppy and IDE drive interface as well as a serial port. A custom BIOS provides a PC like video interface using an ANSI compatible serial terminal.

It is documented really well at the following wiki: https://www.retrobrewcomputers.org/doku.php?id=boards:sbc:sbc-188:start

Using the ECB bus allows access to a wide variety of expansion cards, providing functions including Dual SD, VGA, memory. Over time I will be getting these boards to extend my system into quite a capable PC machine.

As you can see above, the board is fairly dense, and uses a number of PLCC devices, maximising the number of functions on the board. P302 in the bottom right is a standard IBM PC 4 pin power connector, allowing the board to be powered out of a system, allowing it to be used as a single board computer. The 96 PIN ECB card edge connector is on the far right.

Populating the board was not very complex – I had much of the silicon, and just needed to spend a bit of money with Mouser to get the PLCC components. I was lucky to meet Richard, a fellow enthusiast in Victoria, who I brought the PCB from, he was also able to supply and program the two GAL chips for me.

I could not get a real Intel 80188 from Mouser, so I chose a 25Mhz drop in replacement IA188XL from Innovasic as a suitable second source component. Mouser sold them for about $40.

Having assembled the board and loaded the appropriate 128K BIOS for the ANSI terminal, I powered it up for a quick smoke test. The board consumed about 430ma at 5v, and everything was looking good. I connected the serial terminal, and hit reset and there was no activity. Turning on the oscilloscope, I saw valid clock signals and appropriate voltages, but no bus activity at all – almost as though the cpu had been halted.

I had a chat with Richard who reminded me about a couple of changes between the 3.1 and 3.2 boards that I had forgotten, such as lifting a couple of pins of the 74LS05 is the IDE connectors are not used, but that didn’t fix the problem.

Monitoring a random data line on the ROM, I set the oscilloscope to single trace capture mode and hit reset. Activity – the CPU was reading data – but after a while that dropped off and the bus was set high. I redid my test using the *RD line, so I could see how much activity there was. After carefully counting low pulses, I discovered that after approximately 140 reads, the CPU halted.

140 Reads

Ok – That’s new – What type of hardware error could cause the CPU to halt after 140 reads? I did the obvious and turned the board over and carefully checked the hundreds of solder joints to see if I had missed or shorted one. No – everything looked great. So I retried the test with the oscilloscope again – and surely enough after about 140 reads the CPU stopped.

This is not a hardware error. The CPU has to be being told to stop. I decided to dive into the BIOS.

The BIOS

The BIOS for the SBC-188 appears to also be developed by the Retrocomputers community and modified by John Coffman for the board. It is available here: https://www.retrobrewcomputers.org/doku.php?id=software:firmwareos:sbc-188:bios_3.5

Fortunately, full source code is provided as well as the binary image, so I dived straight in.

The code starts with a quick self check of the state of the CPU by performing various Conditional jumps based on status registers, as well as moving a bit pattern through all of the registers. If any of these tests fail, the CPU is halted. Unfortunately, these tests all happen within 100 instructions, so it wasn’t any of them.

Next, it performs a series of tests to verify that the CPU is an 80188, ending in this one;

Here, the 80188 specific relocation register is checked against the default reset value of 0x2ff. If it is not that value, the CPU is halted (The highlighted F4 instruction in blue…..). And surely enough, that check is about 140 read instructions into the code.

Yep, its 2am, and there I was literally counting bytes between the reset vector and where the CPU stopped.

Noooooooooooo – There is a difference between the Intel 80188 and the Innovasic IA188XL, even though the device is supposed to be a drop in replacement. Sigh.

I didn’t have the appropriate tool chain available to allow me to reassemble the BIOS code, so I simply patched the last Halt instruction to be a NOP.

Just change a F4 to a 90 and the instruction was never there.

Load the updated BIOS ROM code into the flash chip and hit reset and I was greeted with this:

WOHOO – The board works .

I setup the NVRAM, and it stored clock time and date values as well as what peripherals are onboard, and bingo – the board restarted and fell back into BASIC – Just like the original IBM PC.

Now I need an ECB backplane for extra cards.

I have added a 5.25 inch FDD to the board and it just works – Booting MSDOS 4.01 was simple so now all there is to do is to locate the small IDE drive somewhere that will allow me to put a disk onto this thing and I will be computing just like it was 1984….

Now…. Where is my copy of the Adventure for the original PC?…. I feel like I am in a maze of twisty passages all alike…. https://en.wikipedia.org/wiki/Colossal_Cave_Adventure

You May Also Like

About the Author: Doug

4 Comments

  1. Hi Doug, like your story… I built one too perhaps a year ago now, mine didn’t have a happy ending though. Unlike yours , on the first turn of the switch it gave me a nice sign on, reported the serial no etc of a hard drive i had connected, and then i waited, for the floppy to boot up. This never happened, and on investigation i found the 37c65 was never written to and initialized because a couple of pins stay tristate. I replaced the 65 with different variants too, I spent a week on it, even to the point of building a discrete decoder for its chip select instead of the pal. Still nothing.
    I contacted John Coffman, and i have to say I am in awe of this guy, a lovely gentleman who freely gave his time and possesses a keen intellect. After a bit more playing with it, I decided to put it aside for a rainy day (month). I believe it must be a faulty PCB with a crossed track somewhere, never found that either…….
    To complete the story, I bought a 6 euro backplane cheap on ebay at the time, (couldn’t believe my luck, sockets alone saved me a fortune – and now i know why i was so lucky of course), and built a propeller video board which i believe is also un-useable because msdos uses bios calls not supported and a video memory …… and didn’t think that through at the time with this project….
    All I saw was a set of cards which i thought were meant for each other, so bang, whipped them up….. LOL, So Doug, “that’s not a knife (story) , this is a knife”
    kind regards Chris VK4TCS

  2. Hi Chris,

    Great to hear from you – Yes, it is an interesting board, and John is an amazing human being. The whole BIOS / video ram thing is mildly frustrating, but I understand a lot more about what compatibility means. I am waiting for a VGA3 board to arrive as well as a backplane. Hopefully that will help a lot.

    It’s currently booting MSDOS and works well – but thing s like Turbo Pascal need mapped video.

  3. Hi Doug,

    Please ignore my previous comment.
    I built another PCB of SBC-188 and it worked straight away, it was definitely a faulty PCB, never found the fault….
    73, Kris

  4. Thats great to hear. The SBC188 is a fairly complex beast, and faultfinding it if there is a PCB issue would be quite daunting.

    As I think of that – I would be considering buring dedicated EPROMs containing small snippets of test code to help debugging.

    One area that shot me in the foot was using a non-intel 80188 – it turned out that it behaved slightly differently to the intel device to cause the POST to fail.

Leave a Reply

Your email address will not be published. Required fields are marked *