Difference between revisions of "Memory Map"

From Intellivision Wiki
Jump to: navigation, search
m (Protected "Memory Map" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite)))
 
(19 intermediate revisions by 6 users not shown)
Line 1: Line 1:
==Official Memory Map==
+
[[Category:Memory Units]]
The &quot;official&quot; memory map published by Mattel is included below.<br/>
+
The &quot;official&quot; memory map published by Mattel is below.  
 
 
 
<table border width=80%>
 
<table border width=80%>
 
<tr><th>Memory Range<th>Accessibility<th>Device</th></tr>
 
<tr><th>Memory Range<th>Accessibility<th>Device</th></tr>
<tr><td>$0000-$003F</td><td>RW</td><td>STIC Registers</td></tr>
+
<tr><td>$0000-$003F</td><td>RW, [[VBlank Period 1]]</td><td>[[STIC#Registers|STIC Registers]]</td></tr>
 
<tr><td>$0100-$01EF</td><td>RW</td><td>[[Scratchpad RAM]]</td></tr>
 
<tr><td>$0100-$01EF</td><td>RW</td><td>[[Scratchpad RAM]]</td></tr>
<tr><td>$01F0-$01FF</td><td>RW</td><td>PSG Registers</td></tr>
+
<tr><td>$01F0-$01FF</td><td>RW</td><td>[[PSG#Registers|PSG Registers]]</td></tr>
 
<tr><td>$0200-$035F</td><td>RW</td><td>[[System RAM]]</td></tr>
 
<tr><td>$0200-$035F</td><td>RW</td><td>[[System RAM]]</td></tr>
 
<tr><td>$1000-$1FFF</td><td>R</td><td>[[Executive ROM]]</td></tr>
 
<tr><td>$1000-$1FFF</td><td>R</td><td>[[Executive ROM]]</td></tr>
<tr><td>$3000-$37FF</td><td>R</td><td>[[Graphics ROM]]</td></tr>
+
<tr><td>$3000-$37FF</td><td>R, [[VBlank Period 2]]</td><td>[[Graphics ROM]]</td></tr>
<tr><td>$3800-$39FF</td><td>RW</td><td>[[Graphics RAM]]</td></tr>
+
<tr><td>$3800-$39FF</td><td>RW, [[VBlank Period 2]]</td><td>[[Graphics RAM]]</td></tr>
 
</table>
 
</table>
 +
<br/>
 +
The Intellivision uses a bidirectional data bus with external pull-up resistors.  Each peripheral on the bus (including the CPU) goes to a "high-impedance" state whenever it is not actively driving a value onto the bus.  Thus, if the CPU attempts to read from a memory location and no peripheral responds by asserting a value on the bus, the CPU will see all ones (1)&mdash;the 16-bit value $FFFF.<br/><br/>
  
==Additional Memory Aliases==
+
Mattel had also reserved additional address ranges for various periperals, such as the [[Keyboard Component]], the [[PlayCable]], and the [[Intellivoice]].  Many of these reserved address ranges went effectively unused, and so aren't shown.  Each peripheral's address map is documented with the peripheral itself.
Note that the official memory map shown above is actually incomplete, due to the fact that the STIC and the Graphics RAM chip [[Incomplete Address Decoding|incompletely decoded addresses]] that were placed on the address bus.<br/>
+
 
 +
==Additional Occupied Memory Ranges==
 +
Note that the official memory map shown above is actually incomplete, due to the fact that the STIC and the Graphics RAM chip [[Incomplete Address Decoding|incompletely decoded addresses]] that were placed on the address bus. This is an artifact of how the [[System RAM]] implements its [[Bus Copy]] functionality.  For instance, if the CPU reads from the STIC or GRAM aliases it will not see any data from the STIC or GRAM.  However, if it reads from $4021, $8021 or $C021 during [[VBlank Period 1]] the STIC <I>will</I> switch into Color Stack mode.  Also, the Intellivision 2 throws a few quirks into the equation.<br/><br/>
 
<table border width=80%>
 
<table border width=80%>
 
<tr><th>Memory Range<th>Accessibility<th>Device</th></tr>
 
<tr><th>Memory Range<th>Accessibility<th>Device</th></tr>
<tr><td>$3A00-$3BFF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$0040-$007F</td><td>R,  [[VBlank Period 2]]</td><td>STIC-responsive, but read only</td></tr>
<tr><td>$3C00-$3DFF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$0360-$03FF</tD><td>R</td><td>Garbage values due to incomplete address decode in RA-3-9600A (Intellivision II only?)</td></tr>
<tr><td>$3E00-$3FFF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$0400-$04FF</td><td>R</td><td>Additional EXEC ROM, Intellivision II only</td></tr>
<tr><td>$4000-$403F</td><td>W</td><td>STIC Registers</td></tr>
+
<tr><td>$3A00-$3BFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$7800-$79FF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$3C00-$3DFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$7A00-$7BFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$3E00-$3FFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$7C00-$7DFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$4000-$403F</td><td>W, [[VBlank Period 1]]</td><td>STIC Registers</td></tr>
<tr><td>$7E00-$7FFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$4021</td><td>RW, [[VBlank Period 1]]</td><td>STIC Mode Select register.</td></tr>
<tr><td>$8000-$803F</td><td>W</td><td>STIC Registers</td></tr>
+
<tr><td>$7800-$79FF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$B800-$B9FF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$7A00-$7BFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$BA00-$BBFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$7C00-$7DFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$BC00-$BDFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$7E00-$7FFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$BE00-$BFFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$8000-$803F</td><td>W, [[VBlank Period 1]]</td><td>STIC Registers</td></tr>
<tr><td>$C000-$C03F</td><td>W</td><td>STIC Registers</td></tr>
+
<tr><td>$8021</td><td>RW, [[VBlank Period 1]]</td><td>STIC Mode Select register</td></tr>
<tr><td>$F800-$F9FF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$B800-$B9FF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
<tr><td>$FA00-$FBFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$BA00-$BBFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
<tr><td>$FC00-$FDFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$BC00-$BDFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
<tr><td>$FE00-$FFFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$BE00-$BFFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$C000-$C03F</td><td>W, [[VBlank Period 1]]</td><td>STIC Registers</td></tr>
 +
<tr><td>$C021</td><td>RW, [[VBlank Period 1]]</td><td>STIC Mode Select register</td></tr>
 +
<tr><td>$F800-$F9FF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$FA00-$FBFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$FC00-$FDFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$FE00-$FFFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
</table>
 +
<br/>
 +
 
 +
==Addresses Available to Cartridges==
 +
The Intellivision leaves many addresses available to cartridges.  However, several address ranges come with caveats, such as interactions with other devices in the system, or incompatibilities with various peripherals.  Below is a summary.<br/>
 +
<table border width=80%>
 +
<tr><th width=20%>Memory Range<th width=40%>RAM<th width=40%>ROM</th></tr>
 +
<tr><td>$0400-$04FF</td><td>OK on all but Intellivision 2.</td><td>OK on all but Intellivision 2.</td></tr>
 +
<tr><td>$0500-$06FF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$0700-$0CFF</td><td>OK if no Intellivoice.</td><td>OK if no Intellivoice.</td></tr>
 +
<tr><td>$0D00-$0FFF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$2000-$2FFF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$4000-$47FF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$4800</td><td>OK only if boot ROM at $7000.</td><td>OK</td></tr>
 +
<tr><td>$4801-$4FFF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$5000-$5014</td><td>OK only if boot ROM at $4800 or $7000.</td><td>OK</td></tr>
 +
<tr><td>$5015-$6FFF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$7000</td><td>RAM at $7000 confuses EXEC boot sequence.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$7001-$77FF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$7800-$7FFF</td><td>Do not map RAM here due to GRAM alias.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$8000-$8FFF</td><td>OK. Avoid STIC alias at $8000-$803F.</td><td>OK. Avoid STIC alias at $8000-$803F.</td></tr>
 +
<tr><td>$9000-$B7FF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$B800-$BFFF</td><td>Do not map RAM here due to GRAM alias.</td><td>OK</td></tr>
 +
<tr><td>$C000-$CFFF</td><td>OK. Avoid STIC alias at $C000-$C03F.</td><td>OK. Avoid STIC alias at $C000-$C03F.</td></tr>
 +
<tr><td>$D000-$DFFF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$E000-$EFFF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
 +
<tr><td>$F000-$F7FF</td><td>OK</td><td>OK</td></tr>
 +
<tr><td>$F800-$FFFF</td><td>Do not map RAM here due to GRAM alias.</td><td>OK</td></tr>
 
</table>
 
</table>

Latest revision as of 08:54, 4 December 2010

The "official" memory map published by Mattel is below.

Memory RangeAccessibilityDevice
$0000-$003FRW, VBlank Period 1STIC Registers
$0100-$01EFRWScratchpad RAM
$01F0-$01FFRWPSG Registers
$0200-$035FRWSystem RAM
$1000-$1FFFRExecutive ROM
$3000-$37FFR, VBlank Period 2Graphics ROM
$3800-$39FFRW, VBlank Period 2Graphics RAM


The Intellivision uses a bidirectional data bus with external pull-up resistors. Each peripheral on the bus (including the CPU) goes to a "high-impedance" state whenever it is not actively driving a value onto the bus. Thus, if the CPU attempts to read from a memory location and no peripheral responds by asserting a value on the bus, the CPU will see all ones (1)—the 16-bit value $FFFF.

Mattel had also reserved additional address ranges for various periperals, such as the Keyboard Component, the PlayCable, and the Intellivoice. Many of these reserved address ranges went effectively unused, and so aren't shown. Each peripheral's address map is documented with the peripheral itself.

Additional Occupied Memory Ranges

Note that the official memory map shown above is actually incomplete, due to the fact that the STIC and the Graphics RAM chip incompletely decoded addresses that were placed on the address bus. This is an artifact of how the System RAM implements its Bus Copy functionality. For instance, if the CPU reads from the STIC or GRAM aliases it will not see any data from the STIC or GRAM. However, if it reads from $4021, $8021 or $C021 during VBlank Period 1 the STIC will switch into Color Stack mode. Also, the Intellivision 2 throws a few quirks into the equation.

Memory RangeAccessibilityDevice
$0040-$007FR, VBlank Period 2STIC-responsive, but read only
$0360-$03FFRGarbage values due to incomplete address decode in RA-3-9600A (Intellivision II only?)
$0400-$04FFRAdditional EXEC ROM, Intellivision II only
$3A00-$3BFFRW, VBlank Period 2Graphics RAM
$3C00-$3DFFRW, VBlank Period 2Graphics RAM
$3E00-$3FFFRW, VBlank Period 2Graphics RAM
$4000-$403FW, VBlank Period 1STIC Registers
$4021RW, VBlank Period 1STIC Mode Select register.
$7800-$79FFW, VBlank Period 2Graphics RAM
$7A00-$7BFFW, VBlank Period 2Graphics RAM
$7C00-$7DFFW, VBlank Period 2Graphics RAM
$7E00-$7FFFW, VBlank Period 2Graphics RAM
$8000-$803FW, VBlank Period 1STIC Registers
$8021RW, VBlank Period 1STIC Mode Select register
$B800-$B9FFW, VBlank Period 2 Graphics RAM
$BA00-$BBFFW, VBlank Period 2 Graphics RAM
$BC00-$BDFFW, VBlank Period 2 Graphics RAM
$BE00-$BFFFW, VBlank Period 2 Graphics RAM
$C000-$C03FW, VBlank Period 1STIC Registers
$C021RW, VBlank Period 1STIC Mode Select register
$F800-$F9FFW, VBlank Period 2 Graphics RAM
$FA00-$FBFFW, VBlank Period 2 Graphics RAM
$FC00-$FDFFW, VBlank Period 2 Graphics RAM
$FE00-$FFFFW, VBlank Period 2 Graphics RAM


Addresses Available to Cartridges

The Intellivision leaves many addresses available to cartridges. However, several address ranges come with caveats, such as interactions with other devices in the system, or incompatibilities with various peripherals. Below is a summary.

Memory RangeRAMROM
$0400-$04FFOK on all but Intellivision 2.OK on all but Intellivision 2.
$0500-$06FFOKOK
$0700-$0CFFOK if no Intellivoice.OK if no Intellivoice.
$0D00-$0FFFOKOK
$2000-$2FFFOK if no ECS.OK if no ECS.
$4000-$47FFOK if no ECS.OK if no ECS.
$4800OK only if boot ROM at $7000.OK
$4801-$4FFFOKOK
$5000-$5014OK only if boot ROM at $4800 or $7000.OK
$5015-$6FFFOKOK
$7000RAM at $7000 confuses EXEC boot sequence.OK if no ECS.
$7001-$77FFOK if no ECS.OK if no ECS.
$7800-$7FFFDo not map RAM here due to GRAM alias.OK if no ECS.
$8000-$8FFFOK. Avoid STIC alias at $8000-$803F.OK. Avoid STIC alias at $8000-$803F.
$9000-$B7FFOKOK
$B800-$BFFFDo not map RAM here due to GRAM alias.OK
$C000-$CFFFOK. Avoid STIC alias at $C000-$C03F.OK. Avoid STIC alias at $C000-$C03F.
$D000-$DFFFOKOK
$E000-$EFFFOK if no ECS.OK if no ECS.
$F000-$F7FFOKOK
$F800-$FFFFDo not map RAM here due to GRAM alias.OK