https://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&feed=atom&action=historyRepairing un-documented MOS memory boards - Revision history2024-03-29T05:39:07ZRevision history for this page on the wikiMediaWiki 1.30.0https://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=22575&oldid=prevJnc: /* Using a program */ typo2020-10-18T12:05:26Z<p><span dir="auto"><span class="autocomment">Using a program: </span> typo</span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 12:05, 18 October 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l36" >Line 36:</td>
<td colspan="2" class="diff-lineno">Line 36:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit charts for the [[MSV11-J <del class="diffchange diffchange-inline">QBUS </del>memory|MSV11-J]] and [[MSV11-Q QBUS <del class="diffchange diffchange-inline">memoryMSV11</del>-Q]].)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit charts for the [[MSV11-J memory <ins class="diffchange diffchange-inline">module</ins>|MSV11-J]] and [[MSV11-Q QBUS <ins class="diffchange diffchange-inline">memory|MSV11</ins>-Q]].)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td></tr>
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=22571&oldid=prevJnc: /* Using a program */ typo, links2020-10-18T11:56:06Z<p><span dir="auto"><span class="autocomment">Using a program: </span> typo, links</span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 11:56, 18 October 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l28" >Line 28:</td>
<td colspan="2" class="diff-lineno">Line 28:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Using a program==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Using a program==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The previous technique is viable if the memory chips are in sockets, which makes the chip <del class="diffchange diffchange-inline">remove </del>needed less painful. If the chips are soldered in, that technique is not really feasible.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The previous technique is viable if the memory chips are in sockets, which makes the chip <ins class="diffchange diffchange-inline">removal </ins>needed less painful. If the chips are soldered in, that technique is not really feasible.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be used) to that pin.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be used) to that pin.</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l36" >Line 36:</td>
<td colspan="2" class="diff-lineno">Line 36:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit charts for the MSV11-J and MSV11-Q.)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit charts for the <ins class="diffchange diffchange-inline">[[</ins>MSV11-J <ins class="diffchange diffchange-inline">QBUS memory|MSV11-J]] </ins>and <ins class="diffchange diffchange-inline">[[</ins>MSV11-Q <ins class="diffchange diffchange-inline">QBUS memoryMSV11-Q]]</ins>.)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td></tr>
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=22140&oldid=prevJnc: typo2020-03-12T15:30:21Z<p>typo</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 15:30, 12 March 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l3" >Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>The first step is to see if the failures are usually static (i.e. always at the same [[address]]). If not, the issue may be the [[power supply]], or [[circuit]]ry on the board which creates needed [[voltage]]s; this page does not cover those cases. However, static errors probably indicate a failing/failed [[integrated circuit|chip]], a common failure mode of old MOS memory chips.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>The first step is to see if the failures are usually static (i.e. always at the same [[address]]). If not, the issue may be the [[power supply]], or [[circuit]]ry on the board which creates needed [[voltage]]s; this page does not cover those cases. However, static errors probably indicate a failing/failed [[integrated circuit|chip]], a common failure mode of old MOS memory chips.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The first step in working with one them, without a circuit diagram, is to create a table which translates memory chip to bits.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The first step in working with one <ins class="diffchange diffchange-inline">of </ins>them, without a circuit diagram, is to create a table which translates memory chip to bits.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>First, one has to understand the high-level layout of the memory: examine the memory chips to see if they are YYKx1 - i.e. one bit wide. (The techniques below will work on multi-bit chips, using obvious changes, but since single-bit chips are the most common on older memory cards, the writeup here focuses on them.) Knowing the width of the [[bus]], and the number of chips, will give the number of banks of memory (needed for the table). For example, on a [[UNIBUS]] or [[QBUS]] memory card, the bus is 16 bits wide, so if there are 32 chips in the array, there will probably be 2 banks, each 16 bits wide.  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>First, one has to understand the high-level layout of the memory: examine the memory chips to see if they are YYKx1 - i.e. one bit wide. (The techniques below will work on multi-bit chips, using obvious changes, but since single-bit chips are the most common on older memory cards, the writeup here focuses on them.) Knowing the width of the [[bus]], and the number of chips, will give the number of banks of memory (needed for the table). For example, on a [[UNIBUS]] or [[QBUS]] memory card, the bus is 16 bits wide, so if there are 32 chips in the array, there will probably be 2 banks, each 16 bits wide.  </div></td></tr>
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=22132&oldid=prevJnc: /* Using a program */ one more2020-03-08T23:02:48Z<p><span dir="auto"><span class="autocomment">Using a program: </span> one more</span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 23:02, 8 March 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l36" >Line 36:</td>
<td colspan="2" class="diff-lineno">Line 36:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data constant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit <del class="diffchange diffchange-inline">chart </del>for the MSV11-J.)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit <ins class="diffchange diffchange-inline">charts </ins>for the MSV11-J <ins class="diffchange diffchange-inline">and MSV11-Q</ins>.)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Repair==</div></td></tr>
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=22131&oldid=prevJnc: /* Using a program */ Some boards use a kludge2020-03-08T23:02:04Z<p><span dir="auto"><span class="autocomment">Using a program: </span> Some boards use a kludge</span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 23:02, 8 March 2020</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l32" >Line 32:</td>
<td colspan="2" class="diff-lineno">Line 32:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be used) to that pin.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be used) to that pin.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Write a very short program which [[loop]]s, storing a word in memory. Start with a word containing only a single '1' bit, and try using a destination location in each bank, looking for a '1' being written to that chip (you can trigger off the 'write' input to the chip) to see if i) your probe is on the chip which corresponds to that bit, and ii) the chip is in the bank currently under test.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Write a very short program which [[loop]]s, storing a word in memory. Start with a word containing only a single '1' bit, and try using a destination location in each bank, looking for a '1' being written to that chip (you can trigger off the 'write' input to the chip<ins class="diffchange diffchange-inline">; although some boards, e.g. the [[MSV11-Q QBUS memory|MSV11-Q]], send a 'write' to all the chips, and select the one to actually use by use of the RAS or CAS signal</ins>) to see if i) your probe is on the chip which corresponds to that bit, and ii) the chip is in the bank currently under test.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data <del class="diffchange diffchange-inline">contant</del>, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data <ins class="diffchange diffchange-inline">constant</ins>, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit chart for the MSV11-J.)</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit chart for the MSV11-J.)</div></td></tr>
<!-- diff cache key mediawiki-wiki_:diff:version:1.11a:oldid:21547:newid:22131 -->
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=21547&oldid=prevJnc: Mention multi-bit chips2019-09-12T13:41:58Z<p>Mention multi-bit chips</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr style="vertical-align: top;" lang="en">
<td colspan="2" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: white; color:black; text-align: center;">Revision as of 13:41, 12 September 2019</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l3" >Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>The first step is to see if the failures are usually static (i.e. always at the same [[address]]). If not, the issue may be the [[power supply]], or [[circuit]]ry on the board which creates needed [[voltage]]s; this page does not cover those cases. However, static errors probably indicate a failing/failed [[integrated circuit|chip]], a common failure mode of old MOS memory chips.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>The first step is to see if the failures are usually static (i.e. always at the same [[address]]). If not, the issue may be the [[power supply]], or [[circuit]]ry on the board which creates needed [[voltage]]s; this page does not cover those cases. However, static errors probably indicate a failing/failed [[integrated circuit|chip]], a common failure mode of old MOS memory chips.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The first step in working with one them, without a circuit diagram, is to create a table which translates memory chip to bits. First, one has to understand the high-level layout of the memory: examine the memory chips to see if they are YYKx1 <del class="diffchange diffchange-inline">(</del>i.e. one bit wide)<del class="diffchange diffchange-inline">; if so, knowing </del>the width of the [[bus]], and the number of chips, will give the number of banks of memory (needed for the table). For example, on a [[UNIBUS]] or [[QBUS]] memory card, the bus is 16 bits wide, so <del class="diffchange diffchange-inline">is </del>there are 32 chips in the array, there will probably be 2 banks, each 16 bits wide.  </div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The first step in working with one them, without a circuit diagram, is to create a table which translates memory chip to bits.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>First, one has to understand the high-level layout of the memory: examine the memory chips to see if they are YYKx1 <ins class="diffchange diffchange-inline">- </ins>i.e. one bit wide<ins class="diffchange diffchange-inline">. (The techniques below will work on multi-bit chips, using obvious changes, but since single-bit chips are the most common on older memory cards, the writeup here focuses on them.</ins>) <ins class="diffchange diffchange-inline">Knowing </ins>the width of the [[bus]], and the number of chips, will give the number of banks of memory (needed for the table). For example, on a [[UNIBUS]] or [[QBUS]] memory card, the bus is 16 bits wide, so <ins class="diffchange diffchange-inline">if </ins>there are 32 chips in the array, there will probably be 2 banks, each 16 bits wide.  </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>From there, there are two basic techniques to populate the table:</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>From there, there are two basic techniques to populate the table:</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l14" >Line 14:</td>
<td colspan="2" class="diff-lineno">Line 16:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Pulling chips==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Pulling chips==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">Pull </del>a chip, and then store data in memory, and read it back, to try and work out which bit <del class="diffchange diffchange-inline">it </del>is. Having done that, then repeat with other chips to try and work out which bits are stored in which chips. (Unless the designers were doing something very strange, each chip will hold the same bit in all the [[word]]s in that bank.)</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">The general approach is to pull </ins>a chip, and then store data in memory, and read it back, to try and work out which bit <ins class="diffchange diffchange-inline">that chip </ins>is. Having done that, then repeat with other chips to try and work out which bits are stored in which chips. (Unless the designers were doing something very strange, each chip will hold the same bit in all the [[word]]s in that bank.)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Usually a missing chip results in bits stored in that chip reading as '0', but it's possible they will read back as '1'. (The [[MSV11-J QBUS memory]] operates <del class="diffchange diffchange-inline">that </del>way, for instance.) To test for the first possibility, start by finding a location in each bank that can be written to all 0's and all 1's (read back after writing, to verify).</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Usually a missing chip results in bits stored in that chip reading as '0', but it's possible they will read back as '1'. (The [[MSV11-J QBUS memory]] operates <ins class="diffchange diffchange-inline">in the latter </ins>way, for instance.) To test for the first possibility, start by finding a location in each bank that can be written to all 0's and all 1's (read back after writing, to verify).</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then pull a chip, and then write all 1's to that word in each bank, and read it back. If one now has a 0 bit, congratulations: i) that verified that missing chips read as '0', ii) indicates which bank that chip is part of, and iii) the 0 bit indicates which bit that chip is - fill in that entry in the chip<->bit chart.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Then pull a chip, and then write all 1's to that word in each bank, and read it back. If one now has a 0 bit, congratulations: i) that verified that missing chips read as '0', ii) indicates which bank that chip is part of, and iii) the 0 bit indicates which bit that chip is - fill in that entry in the chip<->bit chart.</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l26" >Line 26:</td>
<td colspan="2" class="diff-lineno">Line 28:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Using a program==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Using a program==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The previous technique is viable if the memory chips are in sockets, which makes the chip remove needed less painful. If the chips are soldered in, that technique is <del class="diffchange diffchange-inline">infeasible</del>.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The previous technique is viable if the memory chips are in sockets, which makes the chip remove needed less painful. If the chips are soldered in, that technique is <ins class="diffchange diffchange-inline">not really feasible</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be <del class="diffchange diffchange-inline">use</del>) to that pin.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be <ins class="diffchange diffchange-inline">used</ins>) to that pin.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Write a very short program which [[loop]]s, storing a word in memory. Start with a word containing only a single '1' bit, and try using a destination in each bank, looking for a '1' being written to that chip (you can trigger off the 'write' input) to see if i) your probe is on the chip which corresponds to that bit, and ii) the chip is in the bank currently under test.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Write a very short program which [[loop]]s, storing a word in memory. Start with a word containing only a single '1' bit, and try using a destination <ins class="diffchange diffchange-inline">location </ins>in each bank, looking for a '1' being written to that chip (you can trigger off the 'write' input <ins class="diffchange diffchange-inline">to the chip</ins>) to see if i) your probe is on the chip which corresponds to that bit, and ii) the chip is in the bank currently under test.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data contant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data contant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.</div></td></tr>
</table>Jnchttps://gunkies.org/w/index.php?title=Repairing_un-documented_MOS_memory_boards&diff=21540&oldid=prevJnc: The basics2019-09-11T15:05:55Z<p>The basics</p>
<p><b>New page</b></p><div>It is usually possible, even without schematics, to repair [[Metal Oxide Semiconductor|MOS]] [[main memory|memory]] [[printed circuit board|boards]] where the board is basically working, but just has some failing [[bit]]s.<br />
<br />
The first step is to see if the failures are usually static (i.e. always at the same [[address]]). If not, the issue may be the [[power supply]], or [[circuit]]ry on the board which creates needed [[voltage]]s; this page does not cover those cases. However, static errors probably indicate a failing/failed [[integrated circuit|chip]], a common failure mode of old MOS memory chips.<br />
<br />
The first step in working with one them, without a circuit diagram, is to create a table which translates memory chip to bits. First, one has to understand the high-level layout of the memory: examine the memory chips to see if they are YYKx1 (i.e. one bit wide); if so, knowing the width of the [[bus]], and the number of chips, will give the number of banks of memory (needed for the table). For example, on a [[UNIBUS]] or [[QBUS]] memory card, the bus is 16 bits wide, so is there are 32 chips in the array, there will probably be 2 banks, each 16 bits wide. <br />
<br />
From there, there are two basic techniques to populate the table:<br />
<br />
* physically pulling chips<br />
* use of a [[program]] and [[logic analyser]] or [[oscilloscope]]<br />
<br />
The choice of which one to use will depend on personal preferences, along with factors such as if the chips are [[chip socket|socketed]] (common on MOS memory boards, to simplify repairs).<br />
<br />
==Pulling chips==<br />
<br />
Pull a chip, and then store data in memory, and read it back, to try and work out which bit it is. Having done that, then repeat with other chips to try and work out which bits are stored in which chips. (Unless the designers were doing something very strange, each chip will hold the same bit in all the [[word]]s in that bank.)<br />
<br />
Usually a missing chip results in bits stored in that chip reading as '0', but it's possible they will read back as '1'. (The [[MSV11-J QBUS memory]] operates that way, for instance.) To test for the first possibility, start by finding a location in each bank that can be written to all 0's and all 1's (read back after writing, to verify).<br />
<br />
Then pull a chip, and then write all 1's to that word in each bank, and read it back. If one now has a 0 bit, congratulations: i) that verified that missing chips read as '0', ii) indicates which bank that chip is part of, and iii) the 0 bit indicates which bit that chip is - fill in that entry in the chip<->bit chart.<br />
<br />
If not, try writing 0's to the words in each bank, and check for a '1' bit: if so, i) missing chips read as 1, etc. If neither this or the above is true, there's an issue.<br />
<br />
Otherwise, try pulling another chip, and work out which bit that one is, and add it to the chart. Repeat for all the memory chips - although if you're lucky, after a couple you might find a pattern, and be able to predict which chips hold which bits. (But not always; many are random; see e.g. [[Q-RAM 11]] and [[NS23M]] for boards in which the bit assignment to chips is fairly random.) If there does seems to be a pattern, do a few spot tests of the predictions to make sure the hypothesized pattern is correct.<br />
<br />
==Using a program==<br />
<br />
The previous technique is viable if the memory chips are in sockets, which makes the chip remove needed less painful. If the chips are soldered in, that technique is infeasible.<br />
<br />
For such boards, storing a word with a single '1' bit, can be used to the same effect. To start, the data sheet for the memory chips used will indicate which pin is the 'data in' pin. Connect the test device (either a logic analyser, or oscilloscope, can be use) to that pin.<br />
<br />
Write a very short program which [[loop]]s, storing a word in memory. Start with a word containing only a single '1' bit, and try using a destination in each bank, looking for a '1' being written to that chip (you can trigger off the 'write' input) to see if i) your probe is on the chip which corresponds to that bit, and ii) the chip is in the bank currently under test.<br />
<br />
If not, use a word with a different bit set, and repeat. (Changing the word contents, while remaining on the same chip, will almost certainly be easier than keeping the data contant, and trying different chips.) By 'floating' the 1 bit along the word, it ''should'' be possible to work out which bit is stored in that chip.<br />
<br />
Once that chip has been identified, move onto the next chip. Again, after a few chips have been done, it may be possible to see a pattern. (This technique was used to produce the bit chart for the MSV11-J.)<br />
<br />
==Repair==<br />
<br />
With the completed chart in hand, given a failing word (address and bad data), it is possible to work out which chip is at fault, and it can be replaced.<br />
<br />
[[Category: Memory Basics]]</div>Jnc