• Please review our updated Terms and Rules here

Compaq Portable RAM Decoder PROM - reverse engineer help?

nztdm

Experienced Member
Joined
Mar 17, 2018
Messages
180
Location
New Zealand
Hello!

I have acquired a Compaq Portable, and in the usual restoration process, backed up all the socketed ROMs.
Including the U35 RAM Decoder PROM (256 x 8; 82S123 type; mine is a TI TBP18S030N). According to the service manual, this can be changed to a version that will allow using 256Kx1 DRAMs in bank 2 and 3, instead of 64Kx1. This means 640K RAM on the system board instead of 256K, meaning a RAM card is no longer needed.
Another requirement is BIOS C or newer. Mine has BIOS C. I cannot find any of the later ones online.

The Compaq part numbers for these Bipolar PROMs are:
256K: 100349-001 (my one)
448K: 101256-001
640K: 101257-001 (the goal)

I have read the 256K one, and traced out where the pins go. I have tried to trace further but it is a neverending maze. This is probably not enough information; if you need more, please ask. I understand if this is too ambitious of a mission; just seeing if someone may have an idea. Everything in the pic below.

tRk9wMT.png


Cheers!
JD
 
Last edited:
Since the banks are always the same in number, the RAS and CAS decoding will be spread apart within the address space. The input of the PROM is probably a registered set of addresses from CPU. Another thing that the PROM (or some other bit of logic) must do is supply the additional address line of the 256Kx1 DRAM chips with respect to the 64Kx1 chips. The additional address line is on pin 1, so you might trace back the connection going to pin 1 of the banks that can accept 256kx1 chips and get more clues.
However, it's not a simple task if you don't start some stateful logging of the machine (you need a logic analyzer) or you get a much more complete schematic of the thing.
Frank IZ8DWF
 
Well, now with the schematic, it's all more clear :)
First of all, U35 PROM only decodes the banks' RAS/CAS lines.
So, if all the banks are 64k, then A16 and A17 inputs must be the only RAS/CAS source, so verify that D2-D5 outputs only depend on A16/A17, only one output should go low for each 4 possible combinations of A16/A17 (And with A18/A19 always =0 possibly). If all banks are 256K, the same should happen for A18/A19 as inputs, ignoring completely the state of A16/A17 that will be instead the input of the MA8 line on the RAM banks (pin 1).
Dack0 input and D6 output to the CAS decoder are probably part of the refresh logic, and once recovered the logic equations that produce D6, it must also changed to use A18/A19 instead of A16/A17 if present in the equations.
Now, if the new prom is installed, then RAM banks must be fed with A16/A17 and that's on page 1 of the schematic:
U83 LS158 2:1 multiplexer. It must be connected to A16 on pin 2, A17 on pin3 and drives MA8 line from pin 4. E36, E37 might be jumpers connecting those lines to a supply rail or to the correct Address bus lines depending on the chip's size populating the banks or might even be always connected to A16/A17 even with 64K banks, since the 64kbit chips would ignore the input on pin 1 anyway.
HTH
Frank IZ8DWF
 
Thanks for that!

First of all, U35 PROM only decodes the banks' RAS/CAS lines.

Doesn't it also select RAM and ROM via G and G2B ?

---

I have just examined and confirmed that my truth table is indeed correct. Rather than wiring up and reading the PROM in my programmer as a 2716, I connected up a DIP switch and some LEDs and went through the 32 bytes.
I have made a less condensed truth table for better visualisation.
PauVPYv.png


Bank 0 and Bank 1 are soldered 64Kx1 ICs.
Bank 2 and Bank 3 are sockets. If Bank 2 and Bank 3 contain 256Kx1 ICs, then there is now 640K total. This was the intended configuration when using Compaq's 101257-001 PROM. In the Compaq documentation, it doesn't mention jumper changes are required for upgrading to 640K. I don't think 1MiB was an intended configuration, but will probably work with the correct PROM (or GAL) like it does in the IBM XT, and allow UMBs.

Here is a photo of my board:
You can see the socketed U35 PROM next to Bank 3. The SW2 DIP switch for setting RAM quantity isn't present, as this must be a newer board, as it has BIOS Rev C, which supports Option ROMs, and autodetects RAM quantity. I see one jumper location on the board, next to the System ROM. J111. It's joined on the PCB from pins 1-2. This jumper is on second page of the schematic PDF. 1-2 connects ROM-A14 to Pin2 U41 LS138. 2-3 connects +5V to Pin2 U41 LS138. Perhaps it's something to do with the many non-present ROM sockets.

p85Xd2K.jpg
 
Last edited:
Ok, so I didn't read the truth table enough to realize the RAM RAS enables are active high. They only depend on A16/A17 and A18/A19 both Low. So you must change the truth table to make them depend on A18/A19 only and extend probably /G to remain low on the new extended ram space (though it must remain high when A16,A17,A18,A19 are all high, since that's where ROMs are).
You can't obviously have all 1Mbyte of RAM mapped since that would conflict with the ROM space.
Frank
 
Hello

Yes of course I can't have all 1MiB. I was meaning installing all 256Kx1 chips, and having a region of about 192K mapped above 640K for UMB. This is what is sometimes done with the IBM XT's PROM.

The LS158 chip has inverting outputs. So when the PROM goes HIGH, a CAS will go LOW, unless /SEL is HIGH (when DACK0 is LOW), which will make all CAS lines HIGH.

So for Bank 0 and 1 being 64K each, and Bank 2 and 3 being 256K each, maybe this truth table, if I'm understanding correctly?
hpY9J8V.png



Thanks
JD
 
Just curious--how does this compare with the mapping ROM on the 5160?

I am not sure as I don't have a 5160, I just read about it.
From what I can see, it uses an 82S129 equivalent, which is quite different to this 82S123 equivalent.
82S129 has 8 address lines and 4 data lines, two chip-enables.
82S123 has 5 address lines and 8 data lines, one chip-enable (always enabled in the Compaq).
 
No, I meant in terms of function.

I am not sure sorry.
I imagine it is similar.

If you're referring to my comment "Yes of course I can't have all 1MiB. I was meaning installing all 256Kx1 chips, and having a region of about 192K mapped above 640K for UMB. This is what is sometimes done with the IBM XT's PROM.", I was meaning the HIMEMV2 I read about, a third party replacement for the XT's PROM.
 
Yes, you'll note that I worked out the GAL equations for that one. I asked because that's what I was familiar with.

Ahh right.
Yea I'd intend to prototype and probably use a GAL in a small adapter board in the final design if I manage to figure this out.
I have never designed a GAL, but have been experimenting.

For starters, I am trying to recreate the original 256K PROM. Truth table seen in post #6.
I am using the "table" method in WinCUPL. I am using some "don't care" symbols in binary notation.
When I use the PLD file attached and program an ATF16V8B, it makes all outputs HIGH when all inputs are LOW, or only DACK0 is HIGH. Otherwise, all outputs will be LOW.
Any idea what I'm doing wrong?
View attachment CompaqPortable256KU35.zip
 
I'll have a look at it when I get a chance. I normally code GALs with equations. One thing I ran into was the lack of cells to use a 16V8 for the 5160. A 22V10 could be configured with the right logic and almost be an exact fit to the socket.
 
nztdm contacted me via my website, and asked for some help on this. I've took a look at it this evening, and came up with what I think is a solution. The table code in WinCUPL isn't always the most reliable, and there were some compiler errors in the '*.so' file. I simplified the equations and built an equivalent that simulates as expected. I've attached them below.

simulation.JPG

View attachment COMPAQPORTABLEDECODER.zip
 
I'll have a look at it when I get a chance. I normally code GALs with equations. One thing I ran into was the lack of cells to use a 16V8 for the 5160. A 22V10 could be configured with the right logic and almost be an exact fit to the socket.

Thanks :)
Just an update: someone has helped me with the GAL stuff.
I'll now make an adapter PCB to test it in the machine.

I've attached the WinCUPL file and .JED file for 16V8. Check the WinCUPL file for pin assignments. View attachment CompaqPortable 256K U35 GAL Replacement.zip
The pinout may not be the most optimal for an adapter, but I didn't put too much thought into it at this stage.

Now the task of figuring out what the truth table of the 640K version would be...
If that is successful, maybe figuring out a UMB version, but that means desoldering the 64Kx1 ICs to replace with sockets, which I'd rather not do for fear of damaging the multilayer board.

JD
 
Success!

I've made a lil adapter, and it works perfectly in the machine.
So if you've lost/killed your U35 RAM Decoder PROM (for 256KB on the System Board) in your Compaq Portable, it is fairly easy to recreate with a GAL and prototype board.

20190327_014722.jpg


I changed the pinout a little bit from the upload on post #16, to more easily make the adapter PCB.
The GAL pretty much goes in the U35 socket backwards, with the GAL's pins bent away that'd go into the VCC and GND holes on the socket (probably unnecessary, as these pins -should- be high-Z), and wires connecting the GAL's VCC and GND pins.
The adapter PCB is a more elegant solution.

Pinout for the adapter PCB is in the .PLD file.
Programmable file is the .JED, for GAL16V8B or ATF16V8B. View attachment CompaqPortable 256K U35 GAL Replacement.zip

Now to figure out how to make the 640K version...

JD
 
Have tested the following truth table, and the system works, but only counts up to 256K.

Screenshot_20190327-033613_Excel.jpg


http://minuszerodegrees.net/manuals/Compaq Portable_Plus_286 - Maintenance and Service Guide.pdf

According to Page 117 of the Service Guide, maybe it's something to do with SW1 switch 3 and 4? In the manual, these switches are called "memory on processor board", but the switch settings aren't provided.

However, the fact that the system still works as 256K with this PROM table (as far as counting RAM and loading DOS), means the 256K PROM would be redundant if this worked at 640K too, so it is likely not correct.
I wonder if it's using the first half of bank 2, and none of bank 3, or if it's using 64K of each bank like usual. Might have to get the scope out.

It is late. Will do more testing tomorrow.
 
Fwiw, I have a late model (rev C BIOS) Compaq Portable with 640k of RAM on board. It has 256Kx1 DRAMs in banks 2 and 3, and 64Kx1 in banks 0 and 1. There is a 74S288 PROM in socket U35, with no Compaq part number to be seen. I was able to read this chip with my GQ-4X and can confirm that the truth table in your above post is an exact match:
Capture.jpg

Capture2.jpg
 
Back
Top