Keyboard Shared RAM

From Intellivision Wiki
Revision as of 17:32, 30 June 2006 by Mr z (talk | contribs)
Jump to: navigation, search

The Keyboard Component offers 16K x 10-bit of memory that is accessible by both the CP1610 and 6502 CPUs.

Master Component View

On the Master Component's side, the CP-1610 sees the additional memory at locations $8000 - $BFFF. Bits 0 - 9 reflect the values stored in RAM. Bits 10 - 15 are read-only and return zeros. Due to incomplete address decoding, memory accesses to certain ranges of shared memory can affect the STIC or the GRAM:

  • CP-1610 writes during VBlank Period 1 to locations $8000 - $803F get copied to the STIC's registers at $0000 - $003F.
  • CP-1610 reads during VBlank Period 1 to location $8021 gets copied to the STIC's register at $0021. Such reads can inadvertently set Color Stack mode.
  • CP-1610 writes during VBlank Period 2 to locations $B800 - $BFFF get copied to the GRAM. This could lead to unintentional corruption of the graphics display.

Keyboard Component View

The Keyboard Component's CPU is an 8-bit CPU. Therefore it must divide up the 10-bit values into pairs of values. To this end, the Keyboard addresses the lower 8 bits of each 10-bit word at locations $0000 - $3FFF. It maps the upper two bits of each 10-bit word into locations $4100 - $7FFF. (Instead of accessing the shared RAM as one might expect, locations $4000 - $40FF actually address various on-board hardware, such as the tape drive and the CRT Controller.)

Therefore, the byte at location $0100 in the 6502's address map corresponds to bits 7..0 of the 10-bit word at location $8100 in the CP-1610's address map. The lower two bits of the byte at location $4100 in the 6502's address map corresponds to bits 9..8 of the 10-bit word at location $8100 in the CP-1610's address map.