First post, by scruit
Working on Uncle Sherman, my Mistubishi MP-3200. Chasing down a memory error.
The memory is arranged thusly: https://imgur.com/a/UNqNRKU
- There are 4 columns of base memory, soldered. Far right. Columns labelled 4-1.
- There are 4 columns of extended memory, socketed. Middle (with blue labels on to track positions of individual chips). Columns labelled 8-5.
- There are 5 cache ram chips, soldered, with apparent sockets for expanding cache ram (far left)
The base and extended ram chips are m5m4256. They are 256k x 1bit. They have a /CAS and /RAS and 9 address lines. 512*512=256k bit. Awesome.
I can tell that the columns are arranged into rows (running from A at the top to H at the bottom) are data0-data7, and the bottom ram chip is Parity.
Finally, I know that the pattern of failed memory addresses, and I'm trying to map those addresses to chips.
My question: How does a memory address, in 386SX, which has 32bit memory space but with 16 bit memory bus, and chips with 9 data pins... How do those memory addresses map?
Here's my thought... Tell em if I'm completely insane:
I'm imagining storing a byte of data at memory location 0x3c800. This is the first bye at 242Kb mark.
The binary address is "11 1100 1000 0000 0000".
Cut that binary number into a high-order 9bits and a low-order 9 bits : 111100100 000000000
The high order 9bits become the column address within the chip, the low-order 9 bits become the row address within the chip (or vice-versa) and the byte of data gets split amongst the 8 chips (and a parity bit calculated by the 74F280) like this:
- Set address pins on all 9 ram chips to the low-order 9 bits
- Ground /RAS to latch the row address
- Set address pins on all 9 ram chips to the high-order 9 bits
- Ground /CAS to latch the column address
- Set the data pin for for the 8 data ram chips to one of the bits (d0-d7) of the byte of data to store
- Set the data pin for the parity chip to the parity output of the 74F280
- Ground /WRITE to save the values
(For values above 256K the next bit would go to 1, and that bit would tell it to store in the second column of chips, and so on.
Address bits 0-8 are row within the chip, 9-17 are column within the chip... Address lines 18,19,20,21,22 would be parsed to identify which 256k column.
0k-256k = 00000 999999999 999999999
267k-512k = 00001 999999999 999999999
513k-768k = 00010 999999999 999999999
769k=1024k = 00011 999999999 999999999
If that is accurate, then I could identify which physical column on the card stores which byte (and that byte is spread across all 9 chips in the column). That also means that to identify an individual chip fault I would have to look at the bits stored, the bits returned, and then look for a pattern of which bit is is bad.