http://wiki.intellivision.us/index.php?title=Indirect_Mode&feed=atom&action=historyIndirect Mode - Revision history2024-03-28T20:20:13ZRevision history for this page on the wikiMediaWiki 1.30.0http://wiki.intellivision.us/index.php?title=Indirect_Mode&diff=14817&oldid=prevMr z: Protected "Indirect Mode" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))2010-12-04T08:38:10Z<p>Protected "<a href="/index.php/Indirect_Mode" title="Indirect Mode">Indirect Mode</a>" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite))</p>
<table class="diff diff-contentalign-left" data-mw="interface">
<tr style="vertical-align: top;" lang="en">
<td colspan="1" style="background-color: white; color:black; text-align: center;">← Older revision</td>
<td colspan="1" style="background-color: white; color:black; text-align: center;">Revision as of 08:38, 4 December 2010</td>
</tr><tr><td colspan="2" style="text-align: center;" lang="en"><div class="mw-diff-empty">(No difference)</div>
</td></tr></table>Mr zhttp://wiki.intellivision.us/index.php?title=Indirect_Mode&diff=1423&oldid=prevMr z at 18:23, 16 January 20052005-01-16T18:23:41Z<p></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 18:23, 16 January 2005</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l5" >Line 5:</td>
<td colspan="2" class="diff-lineno">Line 5:</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>When used for indirection, registers R1 through R3 are "non-incrementing" registers, whereas R4, R5 and R7 are "auto-incrementing."  That is, indirect accesses through R1, R2 or R3 leave the indirect register's value unchanged.  Indirect accesses through R4, R5 or R7 increment the indirect register's contents once for each access.  This makes stepping through an array convenient.</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>When used for indirection, registers R1 through R3 are "non-incrementing" registers, whereas R4, R5 and R7 are "auto-incrementing."  That is, indirect accesses through R1, R2 or R3 leave the indirect register's value unchanged.  Indirect accesses through R4, R5 or R7 increment the indirect register's contents once for each access.  This makes stepping through an array convenient.</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>Register R6 is special.  Indirect reads through R6 <strong>pre-decrement</strong> the value of R6.  That is, the machine decrements the value in R6, and then accesses the location pointed to by the new value.  Indirect writes through R6 auto-increment in the same manner as R4, R5 and R7.  This behavior makes R6 very convenient as a stack pointer.</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>Register R6 is special<ins class="diffchange diffchange-inline">.  GI documentation refers to Indirect reads via R6 as [[Stack Mode]] accesses</ins>.  Indirect reads through R6 <strong>pre-decrement</strong> the value of R6.  That is, the machine decrements the value in R6, and then accesses the location pointed to by the new value<ins class="diffchange diffchange-inline">.  This process adds three (3) cycles to a [[Stack Mode]] read</ins>.  Indirect writes through R6 auto-increment in the same manner as R4, R5 and R7.  This behavior makes R6 very convenient as a stack pointer.</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>The following instructions are Indirect Mode instructions:</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 following instructions are Indirect Mode instructions:</div></td></tr>
</table>Mr zhttp://wiki.intellivision.us/index.php?title=Indirect_Mode&diff=384&oldid=prevMr z at 22:23, 14 January 20052005-01-14T22:23:12Z<p></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 22:23, 14 January 2005</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</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">[[</del>Indirect Mode<del class="diffchange diffchange-inline">]] </del>instructions read (or write) one of their arguments from memory, at an address pointed to by one of the pointer registers:  R1, R2, R3, R4, R5, and R6.  [[Immediate Mode]] is closely related to <del class="diffchange diffchange-inline">[[</del>Indirect Mode<del class="diffchange diffchange-inline">]]</del>.  Indeed, it appears that [[Immediate Mode]] is actually <del class="diffchange diffchange-inline">[[</del>Indirect Mode<del class="diffchange diffchange-inline">]] </del>through R7 (the program counter).  Thus, R0 is the only register which may not hold a pointer value for <del class="diffchange diffchange-inline">[[</del>Indirect Mode<del class="diffchange diffchange-inline">]] </del>accesses.</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>Indirect Mode instructions read (or write) one of their arguments from memory, at an address pointed to by one of the pointer registers:  R1, R2, R3, R4, R5, and R6.  [[Immediate Mode]] is closely related to Indirect Mode.  Indeed, it appears that [[Immediate Mode]] is actually Indirect Mode through R7 (the program counter).  Thus, R0 is the only register which may not hold a pointer value for Indirect Mode accesses.</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">[[</del>Indirect Mode<del class="diffchange diffchange-inline">]] </del>instructions ordinarily access one word at the specified location.  The [[Double Byte Data Flag]] modifies instructions that read memory, causing them to make two reads via the selected pointer register.</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>Indirect Mode instructions ordinarily access one word at the specified location.  The [[Double Byte Data Flag]] modifies instructions that read memory, causing them to make two reads via the selected pointer register.</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>When used for indirection, registers R1 through R3 are "non-incrementing" registers, whereas R4 <del class="diffchange diffchange-inline">and </del>R5 <del class="diffchange diffchange-inline">(</del>and <del class="diffchange diffchange-inline">some would say </del>R7<del class="diffchange diffchange-inline">) </del>are "auto-incrementing."  That is, indirect accesses through R1, R2 or R3 leave the indirect register's value unchanged.  Indirect accesses through R4 <del class="diffchange diffchange-inline">or </del>R5 <del class="diffchange diffchange-inline">(</del>or R7<del class="diffchange diffchange-inline">) </del>increment the indirect register's contents once for each access.  This makes stepping through an array convenient.</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>When used for indirection, registers R1 through R3 are "non-incrementing" registers, whereas R4<ins class="diffchange diffchange-inline">, </ins>R5 and R7 are "auto-incrementing."  That is, indirect accesses through R1, R2 or R3 leave the indirect register's value unchanged.  Indirect accesses through R4<ins class="diffchange diffchange-inline">, </ins>R5 or R7 increment the indirect register's contents once for each access.  This makes stepping through an array convenient.</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>Register R6 is special.  Indirect reads through R6 <strong>pre-decrement</strong> the value of R6.  That is, the machine decrements the value in R6, and then accesses the location pointed to by the new value.  Indirect writes through R6 auto-increment in the same manner as R4, R5 and R7.  This behavior makes R6 very convenient as a stack pointer.</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>Register R6 is special.  Indirect reads through R6 <strong>pre-decrement</strong> the value of R6.  That is, the machine decrements the value in R6, and then accesses the location pointed to by the new value.  Indirect writes through R6 auto-increment in the same manner as R4, R5 and R7.  This behavior makes R6 very convenient as a stack pointer.</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><ins style="font-weight: bold; text-decoration: none;"></ins></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><ins style="font-weight: bold; text-decoration: none;">The following instructions are Indirect Mode instructions:</ins></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><ins style="font-weight: bold; text-decoration: none;"></ins></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><ins style="font-weight: bold; text-decoration: none;">[[MVI@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[MVO@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[ADD@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[SUB@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[CMP@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[AND@]]<br/></ins></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><ins style="font-weight: bold; text-decoration: none;">[[XOR@]]<br/></ins></div></td></tr>
</table>Mr zhttp://wiki.intellivision.us/index.php?title=Indirect_Mode&diff=372&oldid=prevMr z at 19:53, 12 January 20052005-01-12T19:53:43Z<p></p>
<p><b>New page</b></p><div>[[Indirect Mode]] instructions read (or write) one of their arguments from memory, at an address pointed to by one of the pointer registers: R1, R2, R3, R4, R5, and R6. [[Immediate Mode]] is closely related to [[Indirect Mode]]. Indeed, it appears that [[Immediate Mode]] is actually [[Indirect Mode]] through R7 (the program counter). Thus, R0 is the only register which may not hold a pointer value for [[Indirect Mode]] accesses.<br />
<br />
[[Indirect Mode]] instructions ordinarily access one word at the specified location. The [[Double Byte Data Flag]] modifies instructions that read memory, causing them to make two reads via the selected pointer register.<br />
<br />
When used for indirection, registers R1 through R3 are "non-incrementing" registers, whereas R4 and R5 (and some would say R7) are "auto-incrementing." That is, indirect accesses through R1, R2 or R3 leave the indirect register's value unchanged. Indirect accesses through R4 or R5 (or R7) increment the indirect register's contents once for each access. This makes stepping through an array convenient.<br />
<br />
Register R6 is special. Indirect reads through R6 <strong>pre-decrement</strong> the value of R6. That is, the machine decrements the value in R6, and then accesses the location pointed to by the new value. Indirect writes through R6 auto-increment in the same manner as R4, R5 and R7. This behavior makes R6 very convenient as a stack pointer.</div>Mr z