Announcement

Collapse

Forum etiquette

Our mission ...

This forum is part of our mission to promote the preservation of vintage computers through education and outreach. (In real life we also run events and have a museum.) We encourage you to join us, participate, share your knowledge, and enjoy.

This forum has been around in this format for over 15 years. These rules and guidelines help us maintain a healthy and active community, and we moderate the forum to keep things on track. Please familiarize yourself with these rules and guidelines.


Remain civil and respectful

There are several hundred people who actively participate here. People come from all different backgrounds and will have different ways of seeing things. You will not agree with everything you read here. Back-and-forth discussions are fine but do not cross the line into rude or disrespectful behavior.

Conduct yourself as you would at any other place where people come together in person to discuss their hobby. If you wouldn't say something to somebody in person, then you probably should not be writing it here.

This should be obvious but, just in case: profanity, threats, slurs against any group (sexual, racial, gender, etc.) will not be tolerated.


Stay close to the original topic being discussed
  • If you are starting a new thread choose a reasonable sub-forum to start your thread. (If you choose incorrectly don't worry, we can fix that.)
  • If you are responding to a thread, stay on topic - the original poster was trying to achieve something. You can always start a new thread instead of potentially "hijacking" an existing thread.



Contribute something meaningful

To put things in engineering terms, we value a high signal to noise ratio. Coming here should not be a waste of time.
  • This is not a chat room. If you are taking less than 30 seconds to make a post then you are probably doing something wrong. A post should be on topic, clear, and contribute something meaningful to the discussion. If people read your posts and feel that their time as been wasted, they will stop reading your posts. Worse yet, they will stop visiting and we'll lose their experience and contributions.
  • Do not bump threads.
  • Do not "necro-post" unless you are following up to a specific person on a specific thread. And even then, that person may have moved on. Just start a new thread for your related topic.
  • Use the Private Message system for posts that are targeted at a specific person.


"PM Sent!" messages (or, how to use the Private Message system)

This forum has a private message feature that we want people to use for messages that are not of general interest to other members.

In short, if you are going to reply to a thread and that reply is targeted to a specific individual and not of interest to anybody else (either now or in the future) then send a private message instead.

Here are some obvious examples of when you should not reply to a thread and use the PM system instead:
  • "PM Sent!": Do not tell the rest of us that you sent a PM ... the forum software will tell the other person that they have a PM waiting.
  • "How much is shipping to ....": This is a very specific and directed question that is not of interest to anybody else.


Why do we have this policy? Sending a "PM Sent!" type message basically wastes everybody else's time by making them having to scroll past a post in a thread that looks to be updated, when the update is not meaningful. And the person you are sending the PM to will be notified by the forum software that they have a message waiting for them. Look up at the top near the right edge where it says 'Notifications' ... if you have a PM waiting, it will tell you there.

Copyright and other legal issues

We are here to discuss vintage computing, so discussing software, books, and other intellectual property that is on-topic is fine. We don't want people using these forums to discuss or enable copyright violations or other things that are against the law; whether you agree with the law or not is irrelevant. Do not use our resources for something that is legally or morally questionable.

Our discussions here generally fall under "fair use." Telling people how to pirate a software title is an example of something that is not allowable here.


Reporting problematic posts

If you see spam, a wildly off-topic post, or something abusive or illegal please report the thread by clicking on the "Report Post" icon. (It looks like an exclamation point in a triangle and it is available under every post.) This send a notification to all of the moderators, so somebody will see it and deal with it.

If you are unsure you may consider sending a private message to a moderator instead.


New user moderation

New users are directly moderated so that we can weed spammers out early. This means that for your first 10 posts you will have some delay before they are seen. We understand this can be disruptive to the flow of conversation and we try to keep up with our new user moderation duties to avoid undue inconvenience. Please do not make duplicate posts, extra posts to bump your post count, or ask the moderators to expedite this process; 10 moderated posts will go by quickly.

New users also have a smaller personal message inbox limit and are rate limited when sending PMs to other users.


Other suggestions
  • Use Google, books, or other definitive sources. There is a lot of information out there.
  • Don't make people guess at what you are trying to say; we are not mind readers. Be clear and concise.
  • Spelling and grammar are not rated, but they do make a post easier to read.
See more
See less

Compaq Portable RAM Decoder PROM - reverse engineer help?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • nztdm
    replied
    I've made the adapter PCB, that doesn't block the first ISA slot. Can be purchased from my store in signature, or made yourself. Source files here: https://github.com/monotech/Compaq-Portable-U35-640K

    Allows 640K RAM (64+64+256+256) on the system board. With jumper for 256K mode (64+64+64+64).

    20190417_200319.jpg

    20190417_200556.jpg

    Leave a comment:


  • nztdm
    replied
    An update:

    I was wrong in my previous message about UMB segment 2 working perfectly. It only works in that it is detected by detection software (TEST!UMBS.EXE and CheckIt), and doesn't stop the system from booting.
    But if I try to activate it with USE!UMBS.SYS (the modified 2.2 version that accepts command lines, and clears the memory), the system will freeze after it says "installed".
    Using CLEARMEM.SYS instead, just by itself, will also freeze the system after it says it was successful.
    I have swapped banks around in the GAL, to no effect, so my memory ICs must be fine.
    I likely have an issue in the GAL, am missing something in the schematic, or the Compaq BIOS does something that makes UMBs not work. Likely the former.

    So, as we have it, with the GAL configuration as per links in previous post:
    > UMB segment 1 - 768K-832K: PARITY CHECK 1 error at end of POST. If enabled after POST, TEST!UMBS.EXE detects just fine. CheckIt detects and can test successfully.
    > UMB segment 2 - 832K-896K: No POST errors. TEST!UMBS.EXE detects just fine. CheckIt detects and can test successfully.
    > UMB segment 3 - 896K-960K: No POST errors. TEST!UMBS.EXE will cause system to halt at PARITY CHECK 1. CheckIt detects and can test successfully now?

    With any UMB segment, using CLEARMEM.SYS or USE!UMBS.SYS 2.2, will cause system to freeze after success.

    So no UMBs working as of yet. Just 640K.

    Leave a comment:


  • nztdm
    replied
    Okay so I changed my mind and went ahead with the UMB idea.

    I worked on the GAL and was able to keep within a 16V8, and provide three UMB segments to select, while keeping compatibility with stock 64-64-256-256 bank config (since the first two banks are soldered).
    I replaced bank 1 with sockets, so it's now 64-256-256-256 (bank 0, 1, 2, 3 respectively).
    I can't say if the GAL is correct as of now. Once this is solved, this will make the previous GAL redundant; you don't have to install switches and replace bank1 with sockets if you don't want to; it will still work for 640K like the officially supported Compaq PROM, if you leave the three UMB pins below unconnected.

    Connect GAL pin 2 to GND to enable UMB segment 1 - 768K-832K (conflicts with VGA BIOS)
    Connect GAL pin 8 to GND to enable UMB segment 2 - 832K-896K
    Connect GAL pin 9 to GND to enable UMB segment 3 - 896K-960K

    A good note is that the empty ROM Socket U98, can be used to house a 2764 with XT-IDE Universal BIOS, and it places it at F400h, meaning it doesn't get in the way of UMBs, like if the BIOS was on an XT-IDE card.

    The memory area 768K-960K is -supposedly- free according to all utilities and common sense looking at what's in the PC, so all three segments should be allowed.
    Unfortunately, only UMB segment 2 works perfectly.
    UMB segment 1 will cause Parity Error 1 at the end of the POST. If I enable UMB segment 1 after the system is booted, I can see it, and successfully test it with CheckIt. Weird.
    UMB segment 3 will not cause a POST error, but it will fail CheckIt memory test with the pattern seen here:
    https://imgur.com/a/tP4offi
    (The proposed truth table is also here)

    I've attached the PLD files if anyone is interested in looking.
    Compaq Portable UMB U35 Replacement.zip

    This is still a win even if I can only use UMB segment 2. But it would be awesome to get all 3 UMB segments, especially since it won't conflict with XT-IDE BIOS in the ROM socket.

    Leave a comment:


  • nztdm
    replied
    Success!

    First thing I tried this morning: 640K working with the truth table I proposed last night.

    Here are the GAL files: CompaqPortable 640K U35 GAL Replacement.zip (Mirror)
    Pinout for making adapter is in the .PLD file.

    This is the final working truth table:
    bo6hvQj.jpg


    Something I won't try now, but may work:
    Desolder bank 1 and 2 and replace with sockets; fill with 256Kx1 DRAMs, and change the GAL so that 3 or 4 of the 64K segments in the upper memory region are enabled to use as UMB.
    Attached Files

    Leave a comment:


  • nztdm
    replied
    Originally posted by marcoguy View Post
    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:
    [ATTACH=CONFIG]51991[/ATTACH]

    [ATTACH=CONFIG]51992[/ATTACH]
    Wow you have the unobtanium!

    Which truth table is a match?
    The hex you linked first (the Compaq 256K PROM) doesn't match the truth table you linked second (a test I'm trying with a GAL).
    What are your motherboard switches SW1 '3' and '4' set to?
    Also, what motherboard revision do you have?
    I am guessing the same as mine (see page 1 for photos), since later ones didn't have a PROM I don't think.

    Leave a comment:


  • modem7
    replied
    Originally posted by nztdm View Post
    Have tested the following truth table, and the system works, but only counts up to 256K.
    ...
    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.
    If it is like the IBM XT (IBM 5160), then switches 3 and 4 on SW1 enable/disable motherboard RAM banks, per [here] (in addition to informing the POST of motherboard RAM bank population).

    Leave a comment:


  • marcoguy
    replied
    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

    Leave a comment:


  • nztdm
    replied
    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/...ce%20Guide.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.

    Leave a comment:


  • nztdm
    replied
    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. CompaqPortable 256K U35 GAL Replacement.zip

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

    JD

    Leave a comment:


  • nztdm
    replied
    Originally posted by Chuck(G) View Post
    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. 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

    Leave a comment:


  • jdgabbard
    replied
    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

    COMPAQPORTABLEDECODER.zip

    Leave a comment:


  • Chuck(G)
    replied
    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.

    Leave a comment:


  • nztdm
    replied
    Originally posted by Chuck(G) View Post
    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?
    CompaqPortable256KU35.zip

    Leave a comment:


  • Chuck(G)
    replied
    Yes, you'll note that I worked out the GAL equations for that one. I asked because that's what I was familiar with.

    Leave a comment:


  • nztdm
    replied
    Originally posted by Chuck(G) View Post
    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.

    Leave a comment:

Working...
X