Нажмите здесь, чтобы прочитать русскоязычную версию
Every old hardware enthusiast has a fetish. In the eastern Europe it's often a clone of Sinclair ZX Spectrum, as they were extremely popular there, as well as in Britain and Spain though. Unfortunately, ZX Spectrum left very little legacy. IBM PC 5150 is a different beast. Many love this computer for its heritage. For it has eventually became an ultimate PC. The PC. But although the history of this computer is very well known, surprisingly enough not many people know what was under the bonnet of the very first IBM PC.
For example, many people i spoke to were surprised to find out that the amount of RAM the 5150 had was not 640KB. At the time, 640KB was a huge amount of RAM and was indeed sufficient for anyone. The first revision of IBM 5150 motherboard could accommodate no more than 64KB of RAM. Yup, that's right, just as much as your Commodore 64 would have had. And a bit more than a 48K version of ZX Spectrum, the most popular one. Of course, there were memory upgrade cards available in the market, but they appeared after IBM started to sell 5150, and of course the second revision of the motherboard was capable of handling as much as 256KB, but if you had bought a basic version of an early IBM 5150 you would have ended up with a 16KB IBM computer. Can you imagine 16KB of RAM in an IBM PC? You would not be able to run DOS there…
And you would not need to: the basic version did not ship with any kind of a floppy drive. In fact, it did not ship with any drive at all, a hard drive was not even present in options list for 5150, and the power supply of the first IBM PC could not handle a hard drive too. So how would you have run this computer at all? Well, just like you have done it with your Commodore 64 or ZX Spectrum. You would have power it on and it would have booted into ROM Basic. And, just like on a Commodore on ZX Spectrum again, you would have used cassettes to save and load Basic programs. Yes, IBM PC 5150 came equipped with a cassette port standard. Having said that I need to mention that actually the PC itself had a lot of common with 8 bit PCs of the era. Yes, IBM PC 5150 had a 16 bit Intel 8088 CPU inside, but the CPU data bus was only 8 bit wide, to save on component costs. Yes, the address bus was full blown 20 bit wide, and all the devices could use full address space (this is the reason for the first MB of RAM being so important for ISA bus devices: an ISA slot can only accommodate 20 address lines, thus addressing a maximum of 1 MB), but all the data exchange was performed through an 8 bit data bus. Just like in your Commodore 64 or ZX Spectrum. Even simplier, because unlike Sinclair Research or Acorn who used custom ULAs in their computers, or Commodore, who owned MOS Technology and some of the chips used in thier machines were made exclusively for Commodore and unavailable to other manufacturers, IBM decided to use off the shlef components only to build the 5150. So anyone could easily build their own clone of 5150, with the exception of IBM BIOS that was copyright protected.
And when looking at the display adapter the story only gets funnier. IBM PC 5150 was introduced with a monochrome text-only display adapter (MDA). It was not capable of any type of graphics at all. On the other hand, the quality of the text displayed was superb. This adapter though required an appropriate monitor to be plug into, and was a great fit for business users (provided an optional floppy drive was installed to run DOS applications). After some time a Color Graphics Adapter (CGA) appeared in the options list. This adapter could display 4 colours at once in a graphics mode and had a composite video out for connecting to your TV set. This video adapter was significantly worse at displaying text, but it was a good fit for the home users: you would not need a dedicated monitor, and the 4 colour limit could be breached with a bit of magic when using a composite out. So all in all, a CGA card was not as bad as you could potentially remember from playing CGA games on a VGA video card emulating a CGA. A TV set was a better fit.
I've had an IBM PC 5150 for some time already but I did not touch it for a simple reason: it did not power on. At first, when i just received the PC i quickly found a capacitor that was shorted and i took it out. It was sitting on a -12V rail and was not essential for my use, so i did not even bother replacing it. But after that i found out that the PC had some major issues with its RAM.
Here i need to explain something first. The thing is, there was no any BIOS Setup in the 5150. The BIOS program was reading 2 switch blocks located on the motherboard, SW1 and SW2 to configure the hardware. The RAM configuration was set in 2 steps. First, you would need to set SW1 to tell the BIOS how many of 4 RAM banks on the motherboard were populated. Then, you would set up SW2 to indicate the total amount of RAM, on the motherboard and all the extension cards installed that was available to the PC.
You can see SW1 and SW2 as 2 cyan bricks on the picture
Each memory bank on the motherboard contained 9 memory chips: 8 bits and 1 parity bit. The fist revision of the motherboard supported 16 KB per bank, later revisions supported 64 KB per bank. Here is where the problems started. First of all, there is a bug in the BIOS program, that makes the PC think that, no matter what revision the motherboard is, there is only 16 KB of RAM per bank if some of the banks on the motherboard are left unpopulated. So if you for example install 192 KB of RAM on a 256KB motherboard by filling up 3 banks and leaving the 4th bank empty, the BIOS will only see 48 KB. There is also another bug in the BIOS that was causing phantom memory errors on later revision motherboards if some banks on the motherboard were left unpopulated. These two bugs make me thinking that later revision IBM PC 5150s were never shipped with less than 256 KB of memory, otherwise a customer would encounter power on errors and would not be able to use all of the memory installed in the system, when the RAM prices were quite steep.
Okay, so i had a 5150 with a late revision motherboard and an external memory card fitted with 256 KB of memory. But when powering on, my PC indicated 0800 201 error and stopped the POST with PARITY CHECK 1 message.
Quick googling revealed that this type of errors are often caused by incorrect SW1 and SW2 settings. I started experiments. First of all i removed the extension memory card and set SW2 accordingly. This had no effect. I though, «Okay, this must be caused by the onboard memory». So i decided to remove all the memory that could be removed. Only bank 0 was left, as it was soldered on the board. And the error went away! The computer booted to Basic and reported seeing 12 KB of memory.
My first thought was, «wait a second, i am supposed to have 64 KB, ROM Basic cannot eat that much memory!» A thoughtful reader would understand by now that this was caused by a BIOS bug described earlier. But i did not know that at the time.
After spending quite a bit of time googling, i found this amazing website, that became an IBM PC Bible for myself and that would help me a lot more going forward in this story. It was there where i discovered that my board was only able to see 16KB if only 1 memory bank was filled, and that 0800 201 error indicated a failure in Bank 0 Parity Bit IC, that was soldered onto the mainboard, and that the error was located in upper 3/4s of the chip, so it was not wisible to the system when it was adressing only 16 KB out of 64 KB in the bank 0. To my regret, after i desoldered the IC and intalled a socket with a new IC, the motherboard died. It did not show any signs of life ever since. I did not find any damage caused by my soldering, but, since i was using a hot air gun to desolder the faulty chip, i assumed that some other memory chips might have gone bad, and if there is an error in the first 16 KB of RAM the motherboard appears dead in an IBM 5150. Or the ROM might become corrupted from the heat. To put it short, this board required a thorough check and i did not have time for that, so i put this PC away for the time being.
Time passed and once i came upon a book titled ZX Spectrum ULA: How to design a microcomputer in one of The Ben Heck Show episodes. Building a ZX Spectrum clone was my dream for quite some time already and the book promised a 100% compatible design based on off the shelf 74HC series logic ICs. I was interested. I bought both the book and a PCB designed by the book author. I know that this is cheating but i have an excuse: I wanted a working ZX Spectrum clone first so that i could experiment with it, and buying a factory-made PCB accelerates the process quite significantly. And it was a very affordable pricing as well. After all, i liked the process of putting together this ZX Spectrum clone so much that after finishing it i started looking for something else to solder.
And i found THIS
Yes, this is an extremely accurate copy of an original IBM PC 5150 late revision motherboard, but it is a completely new PCB, very well made, of an excellent quality. I found very few differences between this clone board and the original one, one of them being a delay generator chip (used for generating RAM refresh signal, as far as i understood):
big package on the left is the original delay generation IC, while a small DIP-8 on the right is a modern one.
and the routing of ceramic capacitors: while the tantalums use the same 3-hole pinout as on the original board, the middle pin being ground so that they cannot be fitted the wrong way during the assembly process, all ceramic capacitors on the clone board follow the same 3-hole ceter ground pinout as the tantalums, and on the original board ceramic capacitors' middle hole is not used, and the ground is on one of the outer holes, because these capacitors are not polarized, and the orientation does not matter for them. This makes the assembly of a clone board a little bit harder, becasue the legs of the ceramic capacitors are too close together on the board, but it's not a big deal. Apart from that, boards appear identical to me, and the most interesting part is that the kit includes all the chips and passive components needed to assemble a fully functional board. Including an EPROM with IBM PC compatible BIOS. If you decide to find all these chips yourself, please bear in mind that some of them are quite difficult to source nowdays, and an EPROM needs to be programmed too, and IBM did not use JEDEC conmatible pinout for this EPROM. You can build an interposer, of course, but with an interposer the board doesn't look this clean. Not every chip in the kit was a new old stock, some traces of old solder were visible on some of them, but the overal condition of all these chips was excellent. The kit had a feel of a product of an exceptional quality. The main drawback is the price. You can buy 2 or 3 used motherboards on eBay for this money. But this did not stop me from buying the kit, i already had a used motherboard in my PC and it did not help me much. More importantly, the joy of putting a ZX Spectrum together was still fresh in my memory, and for the Spectrum i had to source all the parts myself (it was not that difficult to be honest, 74HC series chips are still available at very affordable pricing and i already had a lot of them in my shelf, as well as a bunch of Z80 processors). So, a couple of nights later, the clone board was indistinguishable from the original one, and i fitted it with an original IBM PC EPROM sets to have an original BIOS and Basic on board:
It's a pure joy to put a board like this together, and although i do plan to restore the original one some time in the future, this one will do for now. Ok, so after comleting the board and installing it into the case we will need:
1. A floppy controller:
Original IBM PC 5150 can only write Double Density disks. One 5 1/4 inch disk fits 360KBof data, one 3 1/2 inch disk fits 720 KB. My PC came equipped with one 5 1/4 inch drive, and i have connected the drive to a more modern (486) computer to create a bootable floppy with IBM PC DOS 3.30 on it.
2. Some additional memory:
Look how big this board is comparing to a modern keyboard.
This board plugs into an 8 bit ISA bus slot. Back in the days, ISA was not a slow legacy bus, it was a local bus for a 8088 processor, and even more than that, it was demultiplexed, providing different pins for data and address, unlike the processor itself. The bus ran at 4.17 MHz, same clock as the CPU itself.
The memory extension board also homes a Real Time Clock (yup, there was no RTC on the motherboard), but the clock requires a driver to be loaded on the startup. This driver serves to extract the time and date from the chip and to set the DOS time/date accordingly. Apart from that, the board is equipped with a serial and a parallel ports, which is handy. I installed maximum possible 384KB of memory on the board to have 640 KB of total memory in the system. Yes this is a bit of an ovekill for a 5150, but with the memory, the more the better.
3. Video card:
I started testing the system was known good VGA video card that was designed for a 16 bit bus, but was perfectly functional on an 8 bit bus. VGA is a good card, but it's not period correct. An IBM PC asks for a CGA or a Hercules card (no MDA, i want some graphics too). Like this one, for example:
All the screenshots up to this time were made using a VGA card, and here is the CGA:
OK, everything is set up and works, system bootable floppy is at hand, a monitor with a composite input is ready, we can start the tests? Not quite. We need a keyboard too. IBM PC 5150 and PC XT 5160 used the same DIN5 keyboard connector, as later IBM PC AT did. But although IBM PC AT keyboard is fully compatible with IBM PS/2 keyboards that are widely available (with a simple passive adapter), an IBM PC XT keyboard is different. You cannot plug an AT keyboard to an XT PC — it will not work. Of course, you can buy an old XT compatible keyboard on eBay, but sellers ask insane prices for those. And although i really like Model F keyboard, i am not ready to pay the price.
Luckily enough, the solution is simple:
Small PIC MC, 3 resistors, one diod and a capacitor. This is all it takes to make you PS/2 keyboard XT compatible. And the funny fact is, the MC here can run at 20 MHz, providing more computational power than the 5150 it serves to.
My first IBM PC-compatible encounter was a PC-clone in my mom's office. It was based on a 286 processor. I used it a lot to play Golden Axe, Death Track, Prince of Persia. I also had some experience with an 8088 based machine in the past. It was a soviet clone called Poisk. We played a lot of games on it, and it was extremely slow version of an IBM PC clone, but in my memory it ran games very well.
But as always, human memory is an unreliable source. Original IBM 5150 was a very slow machine for games. This is how long it took to load Lemmings from a diskette (my composite to VGA converter failed to produce colour, so the picture is black and white):
This is how the computer was actually used: you would boot it from a system diskette, swap it for a working diskette (or would buy a second floppy drive to use 2 diskettes at once), load a program. Hard drives made it to public a lot later, and were not suitable for 5150's weak power supply unit.
And it's very tempting to try and integrate a 5150 into a TCP/IP home network. Surely enough, I cannot do it with current hardware configuration: a 360KB floppy won't fit a TCP/IP stack with a network card driver. So i will have to step away from period correctness once again:
4. This is a network adapter:
It was designed to use a 16 bit bus, but it works flawlessly on an 8 bit bus. It has an RJ-45 socket for UTP cable and has all chances to be the fastest device in the entire system.
5. Fifth and the last expansion slot will be taken by a hard disk controller (Yes, IBM 5150 had only 5 expansion slots. IBM 5160 had 8, but there were issues, too):
This is an open source XT-IDE controller. I wish I had an MFM-drive to fit in this build, but they are quite difficult to come by. And unfortunately this controller had some weird bugs when running on original AMD 8088 CPU, the computer was constantly locking up displaying memory parity errors. It took me a few week to figure out, but upgrading to a NEC V20 CPU solved these issues completely:
I fitted a 2.5 inch hard drive just because it fit in nicely:
It was quite forward-looking for IBM engineers to reserve a possibility of installing a 2.5 inch hard drive to a 5150!
And in general the PC looks like an old-school treasure chest!
Ok, booting from the hard drive:
I have made a small batch file that starts the network. I could have put all the commands to my autoexec.bat, but LAN card packet driver takes up quite a bit of RAM and is not always needed, so i opted for a separate batch:
Let's check if the internet access works:
and if I can access my ftp server, after all, this was the ultimate goal of putting this all together in the first place:
Good! And what's inside?
And finally just one more example of how slow an IBM 5150 was:
Btw, note that there are definitely more than 4 colours!
P.S. After all, i did manage to restore the original board. Of course, i was so certain that my soldering skills are mad that i could not even imagine that i damaged the board while desoldering the parity bit IC. I suspected something else was damanged by the age and heat. It took me desoldering the entire bank 0 and checking every single memory chip to finally realize that i damaged the metallization layer that connected the upper side traces on the motherboard to the lower side. Yes, i did check the continuity of all the traces as soon as the computer refused to power on for the first time, but i was unlucky: i did verify the memory write signal that came from the damaged IC i desoldered to Bank 1, but not to Bank 0. And these two traces were connected by the metallization layer that i damaged. So bank 0 did not receive memory write signal from the board, and was not functioning. After all, i had to solder a jumper wire, and the board came back to life.