Difference between revisions of "Memory Map"

From Intellivision Wiki
Jump to: navigation, search
m
m (Protected "Memory Map" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite)))
 
(20 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%>
 +
<tr><th>Memory Range<th>Accessibility<th>Device</th></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>$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>$1000-$1FFF</td><td>R</td><td>[[Executive 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, [[VBlank Period 2]]</td><td>[[Graphics RAM]]</td></tr>
 +
</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/>
  
 +
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 [[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>$0000-$003F</td><td>RW</td><td>STIC Registers</td></tr>
+
<tr><td>$0040-$007F</td><td>R,  [[VBlank Period 2]]</td><td>STIC-responsive, but read only</td></tr>
<tr><td>$0100-$01EF</td><td>RW</td><td>RAM 8-bit</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>$01F0-$01FF</td><td>RW</td><td>PSG Registers</td></tr>
+
<tr><td>$0400-$04FF</td><td>R</td><td>Additional EXEC ROM, Intellivision II only</td></tr>
<tr><td>$0200-$035F</td><td>RW</td><td>RAM</td></tr>
+
<tr><td>$3A00-$3BFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$1000-$1FFF</td><td>R</td><td>Executive ROM</td></tr>
+
<tr><td>$3C00-$3DFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$3000-$37FF</td><td>R</td><td>Graphics ROM</td></tr>
+
<tr><td>$3E00-$3FFF</td><td>RW, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
<tr><td>$3800-$39FF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$4000-$403F</td><td>W, [[VBlank Period 1]]</td><td>STIC Registers</td></tr>
 +
<tr><td>$4021</td><td>RW, [[VBlank Period 1]]</td><td>STIC Mode Select register.</td></tr>
 +
<tr><td>$7800-$79FF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
 +
<tr><td>$7A00-$7BFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
 +
<tr><td>$7C00-$7DFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
 +
<tr><td>$7E00-$7FFF</td><td>W, [[VBlank Period 2]]</td><td>Graphics RAM</td></tr>
 +
<tr><td>$8000-$803F</td><td>W, [[VBlank Period 1]]</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>$B800-$B9FF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$BA00-$BBFF</td><td>W, [[VBlank Period 2]]</td><td> Graphics RAM</td></tr>
 +
<tr><td>$BC00-$BDFF</td><td>W, [[VBlank Period 2]]</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>
 
</table>
 +
<br/>
  
==Additional Memory Aliases==
+
==Addresses Available to Cartridges==
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/>
+
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%>
 
<table border width=80%>
<tr><th>Memory Range<th>Accessibility<th>Device</th></tr>
+
<tr><th width=20%>Memory Range<th width=40%>RAM<th width=40%>ROM</th></tr>
<tr><td>$3A00-$3BFF</td><td>RW</td><td>Graphics RAM</td></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>$3C00-$3DFF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$0500-$06FF</td><td>OK</td><td>OK</td></tr>
<tr><td>$3E00-$3FFF</td><td>RW</td><td>Graphics RAM</td></tr>
+
<tr><td>$0700-$0CFF</td><td>OK if no Intellivoice.</td><td>OK if no Intellivoice.</td></tr>
<tr><td>$4000-$403F</td><td>W</td><td>STIC Registers</td></tr>
+
<tr><td>$0D00-$0FFF</td><td>OK</td><td>OK</td></tr>
<tr><td>$7800-$79FF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$2000-$2FFF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
<tr><td>$7A00-$7BFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$4000-$47FF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
<tr><td>$7C00-$7DFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$4800</td><td>OK only if boot ROM at $7000.</td><td>OK</td></tr>
<tr><td>$7E00-$7FFF</td><td>W</td><td>Graphics RAM</td></tr>
+
<tr><td>$4801-$4FFF</td><td>OK</td><td>OK</td></tr>
<tr><td>$8000-$803F</td><td>W</td><td>STIC Registers</td></tr>
+
<tr><td>$5000-$5014</td><td>OK only if boot ROM at $4800 or $7000.</td><td>OK</td></tr>
<tr><td>$B800-$B9FF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$5015-$6FFF</td><td>OK</td><td>OK</td></tr>
<tr><td>$BA00-$BBFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$7000</td><td>RAM at $7000 confuses EXEC boot sequence.</td><td>OK if no ECS.</td></tr>
<tr><td>$BC00-$BDFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$7001-$77FF</td><td>OK if no ECS.</td><td>OK if no ECS.</td></tr>
<tr><td>$BE00-$BFFF</td><td>W</td><td> Graphics RAM</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>$C000-$C03F</td><td>W</td><td>STIC Registers</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>$F800-$F9FF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$9000-$B7FF</td><td>OK</td><td>OK</td></tr>
<tr><td>$FA00-$FBFF</td><td>W</td><td> Graphics RAM</td></tr>
+
<tr><td>$B800-$BFFF</td><td>Do not map RAM here due to GRAM alias.</td><td>OK</td></tr>
<tr><td>$FC00-$FDFF</td><td>W</td><td> Graphics RAM</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>$FE00-$FFFF</td><td>W</td><td> Graphics RAM</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