From Intellivision Wiki
(→EXEC and System RAM)
m (Protected "System RAM" ([edit=autoconfirmed] (indefinite) [move=autoconfirmed] (indefinite)))
Latest revision as of 09:35, 4 December 2010
The System RAM resides in a single GI RA-3-9600 (Intellivision I) or RA-3-9600A (Intellivision II onwards). The System RAM unit is the only 16-bit RAM available in the Intellivision, and it is mapped into the Intellivision memory map from $0200-$035F. The System RAM has these additional responsibilities:
- It bridges between the STIC's private graphics bus and the CPU's main memory bus. This additional functionality is described under Bus Copy.
- It provides a 20-word Video FIFO to reduce the STIC's memory bandwidth impact on the System RAM.
- It holds the BACKTAB (Background Table) that defines the screen's image.
EXEC and System RAM
Programs which rely heavily on the Executive ROM cannot use most of the storage in System RAM. The display background occupies most of System RAM, and the EXEC's variables and data structures occupy the rest. Some EXEC-based games do store variables here through various tricks, such as limiting the number of active MOBs to fewer than 8, or by blanking the first row of the display to make $200 - $213 available. (Advanced Dungeons and Dragons Tarmin Treasure does the latter trick.) Programs that utilize the EXEC minimally, if at all can allocate all of $2F0 - $35F as they see fit.
Because the CP1610 CPU automatically pushes the program counter to the stack in response to an interrupt, and since the program counter is a 16-bit value, the CP1610 stack must reside in System RAM.
|$0200-$02EF||BACKground TABle (BACKTAB), fixed by the hardware|
|$02F0||EXEC: Indicates the currently active cartridge header.|
|$02F1-$0318||EXEC: CP1610 Stack. (Upper bound actually determined by the game software.)|
|$0319-$031C||EXEC: Unknown use|
|$031D-$035C||EXEC: MOB RAM data base|
|$035D||EXEC: Current Hand Controller dispatch table pointer|
|$035E||EXEC: Current random number seed|
|$035F||EXEC: Something sound related|
The System RAM does not correctly implement the ADAR Bus Phase. Thus, while program code can execute out of System RAM, Direct Mode instructions do not work correctly when executed from System RAM.
The System RAM uses the INTAK Bus Phase to switch into Bus Copy mode. It uses the BUSAK signal from the CPU to switch out of Bus Copy mode. Incorrect programs can cause the CPU not to issue BUSAK in response to a BUSRQ from the STIC. (This is accomplished by having a suitably long sequence of non-interruptible instructions while BUSRQ is high.) As a result, the System RAM could stay in Bus Copy mode during at least part of active display, leading to potentially harmful "bus fights" between the STIC and the System RAM. The display gets corrupted rather impressively as a result. Specially designed test programs have verified this phenomenon.
A related, but less dangerous phenomenon occurs when non-interruptible instructions prevent the CPU from issuing BUSAK during active display, after the STIC switches out of Bus Copy mode. If a program blocks BUSAK, the System RAM will not advance its video FIFO pointer, and will replay the last row of cards from BACKTAB. This gives a redundant row of cards, and shifts the rest of the background down. This phenomenon causes the display to appear to "jump." Early versions of 4-Tris exhibited this behavior.
The RA-3-9600 and RA-3-9600A varieties of the System RAM are both functionally equivalent. However, the RA-3-9600A has an additional quirk. Rather than strictly decoding itself into the address range $200 - $35F, it decodes itself into the larger range $200 - $3FF. As a result, it responds to accesses in the range $360 - $3FF. The exact values the chip returns appear meaningless, and they vary from chip to chip. Programs should not rely on accesses to addresses $360 - $3FF returning $FFFF.