BigEd wrote:
Checkerboard is good to find bad memory implementations - bad bits, or bits which influence nearby bits. It works best if you know the internal layout of the memory. For example $AA might be $F0 internally.
I would guess that much more likely failures are stuck-at or short or open faults on address lines, chip selects, or data lines. Missing chips and broken decode logic are also possible. So it would be nice to be confident in finding - and perhaps distinguishing - those kinds of things, especially if it can be done quickly.
Examples of things to look out for:
- mirrored memory, so $1000 and $3000 are actually the same locations
- addressing or chip select trouble, so $2000 and $3000 both write to $3000
I think it's probably necessary to write sentinel values in other locations, then the test value, and then check both the sentinel values for not being changed and the test value for being correctly written. Also necessary to pre-write and pre-read something different from the test value beforehand. It might be enough to have just one sentinel location for each test location, carefully chosen, but I'm not sure of that. (It would surely be overkill - and very slow indeed - to have every other location as a sentinel location!) Perhaps enough to flip one of the address bits:
- test location $0001, sentinel location $0002
- test location $0002, sentinel location $0004
- test location $0004, sentinel location $0008
- test location $0008, sentinel location $0010
- test location $0010, sentinel location $0020
and so on. But, if two non-adjacent address bits are shorted, will that be found? If we have a memory size which is not a power of two, such as 24k, will it be tested correctly? I suspect not.
Cheers
Ed
Another approach is to write the page number into all locations of a page and then read them back. If you write into page $14 (with the value $14) but get back $04, then you know that A12 is acting up.
The most extensive test I ever saw did a page write as I described above, followed by a "quadruple" checkboard ($AA, $55, $A5, $5A), followed by a bit rotation on each cell. Slow but thorough.