Started work on the controller side of the CompuMate emulation.

git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2411 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2012-03-12 23:33:50 +00:00
parent 02ad41e60a
commit 80c43f175d
2 changed files with 69 additions and 33 deletions

View File

@ -98,6 +98,11 @@ class System;
by two 20K resistors, then it goes through a hex inverting schmitt trigger to by two 20K resistors, then it goes through a hex inverting schmitt trigger to
square it up. This then runs into bit 7 of portA. square it up. This then runs into bit 7 of portA.
This code was heavily borrowed from z26, and uses conventions defined
there. Specifically, IOPortA is treated as a complete uInt8, whereas
the Stella core actually stores this information in boolean arrays
addressable by DigitalPin number.
@author Stephen Anthony & z26 team @author Stephen Anthony & z26 team
@version $Id$ @version $Id$
*/ */

View File

@ -25,46 +25,77 @@
#include "Event.hxx" #include "Event.hxx"
/** /**
The Spectravideo CompuMate SV010 was a home computer expansion for the Cartridge class used for SpectraVideo CompuMate bankswitched games.
Atari VCS / 2600 video game system.
It consists of a membrane keyboard unit with interface connectors. These This is more than just a cartridge mapper - it's also a "computer" add-on.
connectors were placed in the module slot and both controller ports of the There's two 8K EPROMs soldered on top of each other. There's two short
Atari console. As the user could place the keyboard on the old style VCS wires with DB-9's on them which you plug into the two controller ports.
consoles, the two devices resulted in one compact unit. When using with the A 42 or so key membrane keyboard with audio in and audio out, and 2K of RAM.
2600jr console, resulted in a desktop computer look with separated keyboard.
The CompuMate was equipped with an audio jack for use with a standard tape There are 4 4K banks selectable at $1000 - $1FFF, and 2K RAM at
connector as a possibility of permanent data storage. $1800 - $1FFF (R/W 'line' is available at SWCHA D5, so there's no separate
read and write ports).
Bankswitching is done though the controller ports Bankswitching is done though the controller ports
INPT0: D7 = CTRL key input (0 on startup / 1 = key pressed) SWCHA: D7 = Audio input from tape player
INPT1: D7 = always HIGH input (tested at startup) D6 = Audio out to tape player and 4017 CLK
INPT2: D7 = always HIGH input (tested at startup) 1 -> increase key column (0 to 9)
INPT3: D7 = SHIFT key input (0 on startup / 1 = key pressed) D5 = 4017 RST, and RAM direction. (high = write, low = read)
INPT4: D7 = keyboard row 1 input (0 = key pressed) 1 -> reset key column to 0 (if D4 = 0)
INPT5: D7 = keyboard row 3 input (0 = key pressed) 0 -> enable RAM writing (if D4 = 1)
SWCHA: D7 = tape recorder I/O ? D4 = RAM enable: 1 = disable RAM, 0 = enable RAM
D6 = 1 -> increase key collumn (0 to 9) D3 = keyboard row 1 input (0 = key pressed)
D5 = 1 -> reset key collumn to 0 (if D4 = 0) D2 = keyboard row 1 input (0 = key pressed)
D5 = 0 -> enable RAM writing (if D4 = 1)
D4 = 1 -> map 2K of RAM at $1800 - $1fff
D3 = keyboard row 4 input (0 = key pressed)
D2 = keyboard row 2 input (0 = key pressed)
D1 = bank select high bit D1 = bank select high bit
D0 = bank select low bit D0 = bank select low bit
Keyboard column numbering: INPT0: D7 = CTRL key input (0 on startup / 1 = key pressed)
column 0 = 7 U J M INPT1: D7 = always HIGH input (pulled high thru 20K resistor)
column 1 = 6 Y H N INPT2: D7 = always HIGH input (pulled high thru 20K resistor)
column 2 = 8 I K , INPT3: D7 = SHIFT key input (0 on startup / 1 = key pressed)
column 3 = 2 W S X INPT4: D7 = keyboard row 0 input (0 = key pressed)
column 4 = 3 E D C INPT5: D7 = keyboard row 2 input (0 = key pressed)
column 5 = 0 P ENTER SPACE
column 6 = 9 O L . The keyboard's composed of a 4017 1 of 10 counter, driving the 10 columns of
column 7 = 5 T G B the keyboard. It has 4 rows. The 4 row outputs are buffered by inverters.
column 8 = 1 Q A Z
column 9 = 4 R F V Bit 5 of portA controls the reset line on the 4017. Pulling it high will reset
scanning to column 0. Pulling it low will allow the counter to be clocked.
Bit 6 of portA clocks the 4017. Each rising edge advances the column one
count.
There's 10 columns labelled 0-9, and 4 rows, labelled 0-3.
Column
0 1 2 3 4 5 6 7 8 9
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| 7 | | 6 | | 8 | | 2 | | 3 | | 0 | | 9 | | 5 | | 1 | | 4 | 0
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| U | | Y | | I | | W | | E | | P | | O | | T | | Q | | R | 1
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ Row
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| J | | H | | K | | S | | D | |ent| | L | | G | | A | | F | 2
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| M | | N | | < | | X | | C | |spc| | > | | B | | Z | | V | 3
+---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
Function and Shift are separate keys that are read by 2 of the paddle inputs.
These two buttons pull the specific paddle input low when pressed.
Because the inputs are inverted, a low indicates a pressed button, and a high
is an unpressed one.
The audio input/output are designed to drive a tape player. The audio output is
buffered through an inverter and 2 resistors and a capacitor to reduce the level
to feed it into the tape player.
The audio input is passed through a .1uf capacitor and is pulled to 1/2 supply
by two 20K resistors, then it goes through a hex inverting schmitt trigger to
square it up. This then runs into bit 7 of portA.
This code was heavily borrowed from z26, and uses conventions defined This code was heavily borrowed from z26, and uses conventions defined
there. Specifically, IOPortA is treated as a complete uInt8, whereas there. Specifically, IOPortA is treated as a complete uInt8, whereas