A bigger hard disk drive for your 80286 PC
What is it?Enable your 80286 PC to handle hard disk drives (HDD) larger than 512 MB.
BackgroundThere are various Commodore 80286 PCs. The ones I know: the PC30-III, PC35-III, PC40-III and PC45-III. All these systems use the PC40-III motherboard. In case of the PC30 the VGA chipset and connector have been ommited. This enabled the user to use a cheaper mono-chrome card and monitor. The PC35 has VGA on board. AFAIK the PC40 and PC45 have more memory using an extra card and the PC45 has a bigger HDD.
What they have in common is the fact that all these PCs only support HDDs up to 512 MB. This was a quite normal limit for those days and only servers were equiped with HDDs larger than 100 MB. The problem however is that HDDs smaller than 512 MB hardly can be found and HDDs larger than 512 MB won't be recognised.
The solutionThe solution is a piece of software to enable the PC to handle these larger HDDs: XTIDE Universal BIOS. It was originally meant to enable XTs to handle 16-bits IDE HDDs on their 8-bits ISA bus. But is has been expanded in such a way that ATs and larger PCs could benefit from its features as well.
I used this Universal BIOS for my PC35. I'm quite sure that this solution works for the other Commodore 80286 PCs as well but I cannot guarantee it.
The hardwareNormally the Universal BIOS has to be burnt into an EPROM and then this EPROM should be made available somewhere inside the memory range 0C8000h - 0E0000h. This could be done by inserting it in the not used BootROM socket of a network card. But ISA network cards aren't that easy to find these days. And I wanted to equip my card with a BootROM.
To make a long story short, I found out that my PC35 can handle a 64 KB BIOS but only uses a 32 KB one. This means we have been left with 32 KB of memory space that can be used for our own purposes. The Universal BIOS is only 16 KB so no problem here.
The problemsUnfortunately it isn't that simple as just burning a new EPROM. There were a few small problems I had to overcome:
- 80286 PCs need two 8-bit EPROMs to be able to handle 16-bits data. This means that we have to split the original BIN file of the Universal BIOS in an "odd" an an "even" part as well.
- AFAIK most PCs, including the PC35, only scan up to 0E0000h to look for external ROMs. I know because I disassembled the BIOS. The BIOS has to be told to look a bit futher.
- All the PC BIOSes I encountered so far have a routine on board to calculate its checksum. I either had to calculate a new checksum or to disable the routine.
- After inserting the new EPROMs I found out that the Universal BIOS wasn't started. Only after executing DEBUG.EXE and having a look at the complete memory range from 0F0000h to 0FFFFFh I found out that the range 0F0000h to 0F7FFFh contained a mirror of 0F8000h to 0FFFFFh. Of course I solved that otherwise you wouldn't be reading this.
The solutons - the mirroring problemStarting with the mirroring problem, I noticed this mirroring before the whole operation but I thought that it had to do with the original EPROMs: 27128s. To make things work I had to connect address line A15 to the A14 input of the new 27256 EPROMs. The good news: it has been forseen in some way on the motherboard. The not so good news: the board has to be removed from case.
To remove the board the plastic front cover has to be romeved first by removing three little screw at the back/top of the cover. Then the plate holding the drives and the power supply has to be removed by removing four screws at the front and two at the back plus unplugging the power supply connector to the motherboard. Then it is a matter of removing some screws that hold the motherboard.
Alongside the pins 26, 27 and 28 of both EPROMs you will find a small white rectangle enclosing three VIAs. The solder of these three VIA has to be removed first. Look for these holes on the bottom side of the motherboard. You will see that holes alongside the pins 26 and 27 are connected with each other. Cut these connections. Now you can do two things: use a wire to connect the holes alongside the pins 27 and 28 or place two 3-pins headers that enables you to use jumpers to make the connection. I used the last option.
Here are two pictures showing the result. Don't pay attention to the arrows on the EPROMS; they were made for other reasons. You'll find the jumpers near the top of the EPROMS, which on their turn point to the bottom of the picture:
Now it is just a matter of reversing the previous operations to install the board again.
Tip: I used the occasion to desolder the old battery back-upped real time clock and to replace it with a 'not such an old one' on a socket.
The solutions - the scanning rangeAs said before, I disassembled the BIOS and searched for the routine that scans for external ROMs. It was just a matter of changing the value 0E0h into 0F8h telling the BIOS to scan up to 0F8000h. This meant changing one byte.
The solutions - the checksumI could either calculate a new checksum or disable the routine. The last was the most simple solution by replacing a 'je' command (Jump if Equal, read: jump if checksum is zero) by a 'jp' command (JumP). Again changing only one byte.
The solutions - the odd and even EPROMI first read the two original EPROMs and combined the data using the built in routines of my progammer. Then I added the Universal BIOS and split the result in two parts using a small Pascal program I created myself.
The binariesthe original BIOS of the PC35
U1101: the right one on the picture
U1102: the right one on the picture
You can verify the positions by looking at the printed code near pin 12 of U1101 and pin 8..10 of U1102. The last code can be seen clearly on the bottom picture.
You can email me here.