I have an ATD Model M117 memory expansion board that came with my IBM 5150 when I got it in 2011.
For the past several- 8, 9?- years, the card has not worked. I couldn't figure out whether it was because my DRAM was bad, I wasn't populating the DRAM banks correctly, I didn't have the correct switch settings (I couldn't find them on TH99 last I checked), or the card was actually flat-out broken. That's at least 4!/24 ways things can go wrong.
Because I don't know a sunk cost when I see one, I kept the board all these years in hope I could eventually fix it. In February 2021, I traced out a basic schematic for the card. But the switch settings depend on a PAL16L8 that implements a bunch of glue logic, and it took me a while before I was up to REing that. And just this past weekend, I dumped the PAL, figured out the switch settings, and determined that "yes, the card was, in fact, broken all this time (one of the 74LS158s had an output stuck low)."
I have documented my RE results on Github, and hope it is useful to others. For people who just need the switch settings/don't care about the details (all three of them?), I'm reproducing the switch settings table here:
"X" is "don't care"/"either switch position is fine". If you don't have enough RAM chips to populate all the used banks for a given switch setting, always populate Bank 1, then 2, then 3, or if Bank 1 is unused, populate Bank 2, then 3.
For the past several- 8, 9?- years, the card has not worked. I couldn't figure out whether it was because my DRAM was bad, I wasn't populating the DRAM banks correctly, I didn't have the correct switch settings (I couldn't find them on TH99 last I checked), or the card was actually flat-out broken. That's at least 4!/24 ways things can go wrong.
Because I don't know a sunk cost when I see one, I kept the board all these years in hope I could eventually fix it. In February 2021, I traced out a basic schematic for the card. But the switch settings depend on a PAL16L8 that implements a bunch of glue logic, and it took me a while before I was up to REing that. And just this past weekend, I dumped the PAL, figured out the switch settings, and determined that "yes, the card was, in fact, broken all this time (one of the 74LS158s had an output stuck low)."
I have documented my RE results on Github, and hope it is useful to others. For people who just need the switch settings/don't care about the details (all three of them?), I'm reproducing the switch settings table here:
SW 4 | SW 3 | SW 2 | SW 1 | Start Address/Function | End Address | 4164 DRAM Banks | 41256 DRAM Banks |
X | OFF | OFF | OFF | Unimplemented | N/A | N/A | N/A |
X | OFF | OFF | ON | 0x40000 (256kB) | 0x8FFFF (576kB) | 2 | 1 |
X | OFF | ON | OFF | Unimplemented | N/A | N/A | N/A |
X | OFF | ON | ON | 0x40000 (256kB) | 0x9FFFF (640kB) | 1, 2 | 3 |
X | ON | OFF | OFF | Unimplemented | N/A | N/A | N/A |
X | ON | OFF | ON | 0x20000 (128kB) | 0x9FFFF (640kB) | None | 2, 3 |
X | ON | ON | OFF | 0x10000 (64kB) | 0x9FFFF (640kB) | 1 | 2, 3 |
X | ON | ON | ON | 0x60000 (384kB) | 0x9FFFF (640kB) | None | 1 |
OFF | X | X | X | Enable parity checking | N/A | N/A | N/A |
ON | X | X | X | Disable parity checking | N/A | N/A | N/A |
"X" is "don't care"/"either switch position is fine". If you don't have enough RAM chips to populate all the used banks for a given switch setting, always populate Bank 1, then 2, then 3, or if Bank 1 is unused, populate Bank 2, then 3.