VOGONS


First post, by mbertheau2

User metadata
Rank Newbie
Rank
Newbie

Hi,

I got this IBM 5160 PC XT from Germany. After cutting off a failed tantalum capacitor on the 12V rail, it works fine. The BIOS counts up to 512 KB RAM.

There's a RAM expansion card in it. It says 256KB on a sticker on the slot cover, but there are 512KB worth of DRAM chips on it. Strange! And intriguing. The card has barely any writing on it, so I couldn't find documentation for it. I appreciate help and tips to understand the card and getting the XT up to the full 768 kB RAM. Let's solve the riddle!

There are pictures of the card below and I did some experiments. I'll try to clearly separate observations and conclusions.

The card has:
- writing "info-pc" and "LS"
- a sticker "256KB" on the slot cover, which I presume is original from the 80s
- one row of 9 Samsung KM41256-15 256K x 1 bit DRAM ICs
- one row of 9 Mitsubishi M5M4256P-15 256K x 1 bit DRAM ICs
- 8 switches in a DIP
- one Jumper JP1
- a leaked battery (I'll remove it)
- one 74LS00N, a 4xNAND
- one 74LS32N, a 4xOR
- two 74LS75AN, a 2xflipflop
- one 74LS85N, a 4bit comparator
- one 74LS125AN, a 4xbus buffer
- two DM74157N, a mux (selects 1 of 2 inputs for the output)
- one 74LS245N, an 8 bit bus transceiver
- one SN74LS280N, a parity generator/checker
- one 74LS283N, a 4bit full adder
- one IC with the writing M3000-16PC-D371 8-MEM84-16 (?) that I couldn't find anything about
- two N82S153N-F, a programmable logic array (PLA)

For the experiments I recorded how far the BIOS counts the RAM, and what this BASIC program outputs (ran when booted directly into the ROM BASIC):

10 S=4096
20 DEF SEG=S
30 POKE 0,85
40 V=PEEK(0)
50 PRINT HEX$(S);V
60 S=S+4096
70 GOTO 20

(P.S. the program terminates. Try to think why 😀)

This program writes 55H (=85) to the byte at addresses 1000:0 2000:0 ... F000:0 and reads it back. There are three cases:
- 0 means I got E9h back
- 1 means I got 55h back
- 2 means I got FFh back

The motherboard is the 64KB-256KB one. It has all four banks populated with 64k chips for a total of 256 KB onboard RAM. Switches 3 and 4 on the motherboard were set accordingly. The fixed disc adapter (FDA), which has a ROM BIOS at C800 was removed for the test. There's a hercules card with memory at B000. JP1 on the card was in the position as shown on the photo.

DIP-Switches | BIOS RAM count | BASIC program results
1 234 5678 | |
-----------------------------------------------------
MDA BIOS ROM
| |
| | bank: | |
| | 0123 456789ABCDEF
-----------------------------------------------------
0 000 0000 | 320KB | 111 122220010000
0 000 0001 | 384KB | 111 112222010000
0 000 0010 | 448KB | 111 111222210000
0 000 0011 | 512KB | 111 111122210000
0 000 0100 | 256KB | 111 011112212000
0 000 0101 | 256KB | 111 001111212200
0 000 0110 | 256KB | 111 000111112220
0 000 0111 | 256KB | "F8000 ROM\nERROR."
0 000 1000 | Screen blank
0 000 1100 | Screen blank
0 001 0000 | 320KB | 111 122200010000
0 001 0001 | 384KB | 111 112220010000
0 001 0010 | 448KB | 111 111222010000
0 001 0011 | 512KB | 111 111122210000
0 001 0100 | 256KB | 111 011112210000
0 001 0101 | 256KB | 111 001111212000
0 001 0110 | 256KB | 111 000111112200
0 001 0111 | 256KB | 111 000011112220
0 010 0000 | 320KB | 111 122000010000
0 010 0001 | 384KB | 111 112200010000
0 010 0010 | 448KB | 111 111220010000
0 010 0011 | 512KB | 111 111122010000
0 010 0100 | 256KB | 111 011112210000
0 010 0101 | 256KB | 111 001111210000
0 010 0111 | 256KB | "C8000 ROM\nERROR." (with FDA)
0 010 0111 | 256KB | 111 000011112200 (without FDA)
0 010 1011 | Screen blank
0 011 0000 | 320KB | 111 120000010000
0 011 0100 | 256KB | 111 011112010000
0 100 0000 | 320KB | 111 100000010000
0 100 0001 | 384KB | 111 110000010000
0 100 0011 | 512KB | 111 111100010000
0 100 0100 | 256KB | 111 011110010000
0 101 0000 | 256KB | 111 000000010000
0 101 0100 | 256KB | 111 011100010000
0 110 0100 | 256KB | 111 011000010000
0 111 0100 | 256KB | 111 010000010000
1 000 0001 | 192KB | "30000 01 201"
1 000 0011 | 320KB | 111 122222210000
1 000 0100 | 256KB | 111 012222212000
1 100 0100 | 256KB | 111 012220010000
1 110 0100 | 256KB | 111 012000010000
1 110 1100 | 256KB | 111 000000010120

My assumptions from this:

1. Switches 5-8 determine the start address in 64KB increments, 0000 = start at 64k to 1110 = start at 960k (and 1111 = start at 0k?)
2. Switches 2-4 determine the size of the memory that the card responds to in 64k increments: 000 = 512k down to 111 = 64k
3. Interestingly, there seems to be no conflict when card RAM is mapped into address space that the onboard RAM occupies; see all experiments with switches 5-8 at less than 100b
4. Switch 1 function is unclear. The observations seem to suggest that it switches between 256 KB (0) and 64 KB (1) working memory: Compare the results for switch setting 1 000 0100 and 0 000 0100. Both have start address = 320k and size = 512k. With switch 1 set to 0, I get 55h back for the first 4 banks starting at 320k (4000h), and E9h for the 4 banks after that (except for B000h, which is the video RAM). With switch 0 set to 1, I get 55h only for the 1st bank ay 320k or 4000h, and E9h for the remaining 7 banks (again, except for B000h).

So, here are some questions:
- does anyone know this card or where to find documentation for it?
- why is there a battery on the card? A RTC would be an obvious answer, but I don't know enough to say whether the ICs on the board make that a plausible hypothesis, or how it could be tested. CheckIt 3.0 finds no RTC.
- What is the purpose of Switch 1?
- and the biggest question: Why are there 512 KB of ICs on the card, but only 256KB seem to be usable?
- and finally: any tips on how to proceed with unraveling the mystery?

Thanks!

Markus

Reply 1 of 7, by rmay635703

User metadata
Rank Oldbie
Rank
Oldbie

Lots of cards like that for 64kb pc 5150

https://forum.vcfed.org/index.php?threads/d-l … o-needed.71678/

The card likely sold with 256k but could support 512k, my guess is it was fully populated and installed in a mismatched system.
Rarely half bad ram was used in duplicate but that is very unlikely.

A RTC is very likely but I haven’t gone through the ICs to see which are what.

Reply 2 of 7, by mkarcher

User metadata
Rank l33t
Rank
l33t

The battery is indeed likely to be for the RTC function of this card. I suppose the M3000 chip is the RTC, and it is accessed using I/O ports. The card has the IO write and IO read signal connected on the ISA bus. The backside photo shows that a 2-pin component seems to hide below the M3000 chip, which might be the 32.768kHz crystal required for a typical RTC IC.

OK, it seems you get E9 back if nothing responds to the read request, 55 if you hit RAM or a ROM that happens to start with 55, and FF if something responded actively with FF. You see both the 55 area and the FF area moving with the DIP switches, so it is sensible to assume that you get working RAM from one 256K bank, and just FF from the second 256K bank. Furthermore, it is reasonable to assume that the 74LS245 is a driver chip that forwards data from the ISA bus to the card unless a read to the memory on the card or the RTC happens. In that case, the direction of the buffer is reversed and data from the card is forwarded from the card to the ISA bus.

Switch #1 is likely to choose between 41256 chips (256K per bank) and 4164 chips (64K per bank), and you seem to have discovered the meaning of switches 2 to 8 correctly. There seems to be a defect on the card that makes the second bank not work, so it always returns FF on reads. As TTL inputs (for example on the 74LS245) read "high" if nothing is driving the input, you would get FF if the 74LS245 is enabled to forward data from the card to the bus, but no RAM chips are enabled. I assume the card drives RAS to the memory chips on every memory cycle (possibly even on cycles that do not decode to the card), and drives CAS only on the selected bank. Under this assumption, refresh implementation is easy because you want to refresh both banks at the same time, and you just need RAS for that. So if every cycle drives RAS on both banks, you automatically get refresh affecting both banks without further logic. Looking at the traces on the back side, I see a trace that connects to CAS of some chips on the bank farther away from the slot bracket, but does not connect to CAS of the chips closer to the slot bracket. This seems to confirm my theory that bank selection is handled using CAS. Your symptom thus looks like the second bank does not get a proper CAS signal, which might be due to a broken trace or a defective decoder (likely one of the PLAs). If you happen to have a continuity tester, you can check whether the CAS pins of each banks are connected to some pin of the PLAs, but possibly the 74LS125 is used to buffer a PLA output to drive that many RAM chips. a single 74LS125 is good to buffer a common RAS signal, two CAS signals and the common WE signal (I've seen traces that confirm that WE is common between both banks).

Assuming you have a multimeter: I recommend you to buzz out the logic that should generate CAS for either bank. If everything looks fine, try whether you can detect a slight drop in voltage of the CAS signal of the selected bank when you repeatedly read a byte using basic in that bank. Obviously, a scope would be preferrable, but I wouldn't assume you have one or get one for a one-off test. If you can detect a change in average DC voltage level between a selected and an unselected bank, you can use the multimeter to test where the CAS signal for the second bank disappears.

Reply 3 of 7, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

There's a lot of tantaulm caps as well. Might be worth checking if any have internal shorts.

Edit

I see a lot of corrosion under the leaky battery. Removal, alklyline reversal, then trace checking is indicated.

Reply 4 of 7, by mkarcher

User metadata
Rank l33t
Rank
l33t
wierd_w wrote on Yesterday, 20:37:

There's a lot of tantaulm caps as well. Might be worth checking if any have internal shorts.

I don't think they are tantalums. They are 100nF multilayer ceramic caps. In those days, it was usual to have one 100nF decoupling capacitor next to every IC. Usually they are yellowish brown (as on this card) or blue.

Reply 5 of 7, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

It only takes a few seconds to check against shorts.

And, that corroded battery still needs to come off. (Blech)

Reply 6 of 7, by mkarcher

User metadata
Rank l33t
Rank
l33t
wierd_w wrote on Yesterday, 20:37:

I see a lot of corrosion under the leaky battery. Removal, alklyline reversal, then trace checking is indicated.

Indeed. Especially if my guess is correct that the 74LS125 is used as RAS/CAS/WE driver. That chip is directly next to the leaky battery, so if the battery leakage damaged some traces or vias, it's quite likely that RAM control signals are affected. And, as I already stated, the broken second 256K look like a broken CAS trace.

Reply 7 of 7, by mbertheau2

User metadata
Rank Newbie
Rank
Newbie
mkarcher wrote on Yesterday, 20:18:

The backside photo shows that a 2-pin component seems to hide below the M3000 chip, which might be the 32.768kHz crystal required for a typical RTC IC.

Indeed! I removed the IC from its socket and there's what looks like a crystal oscillator below it, see attached photo. (There's still some corrosion on the diode next to where the battery was. I'll clean that up too.) Good to know! I'll try various clock programs for it and see if I find one that sees an RTC.

mkarcher wrote on Yesterday, 20:18:

55 if you hit [...] a ROM that happens to start with 55

Doh, of course, option ROMs start with 55AA, so I should have tested with a different value.

mkarcher wrote on Yesterday, 20:18:

[very helpful explanation and tips]

Assuming you have a multimeter: I recommend you to buzz out the logic that should generate CAS for either bank. If everything looks fine, try whether you can detect a slight drop in voltage of the CAS signal of the selected bank when you repeatedly read a byte using basic in that bank. Obviously, a scope would be preferrable, but I wouldn't assume you have one or get one for a one-off test. If you can detect a change in average DC voltage level between a selected and an unselected bank, you can use the multimeter to test where the CAS signal for the second bank disappears.

I'll do that and report back!