First post, by mbertheau2
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