This is a short page about me figuring out how game-selection works in a specific Atari 2600 multi-game cartridge.
At times, I experience something resembling stress. This sometimes seems to help:
Last weekend, we visited a retro-gaming fair in Apeldoorn (NL), which was itself a very nice experience, with many people exhibiting and selling vintage console- and home-computer goodness.
My main reason for going there was to pick up an Atari 2600 / VCS system, because its architecture seems to be compatible with my brain - perhaps in a distant future, I want to experiment programming it.
I left with 2 such systems, and 4 game-cartridges:
The latter had me puzzled for a while, wondering how to select from these wonderful games. It turned out that selection is done by turning the console off, then on again. How original. How weird.
So... how does this work?
The cartridge itself looks like this:
(note the punctured decal, necessary to unscrew front from back)
Impression after opening the enclosure:
Component-side of PCB, close(r)-up:
Backside of PCB:
For future reference and because this just took too long to Google, here's the pinout and orientation of the 2600's cartridge-slot:
(For reference, see an Atari 2600 Jr schematic or circuitry of a typical 4 kb cartridge, in this case Midnight Magic.)
As can be seen, there are 3 ICs on the PCB and a few smaller parts. The ICs are:
4024 (binary counter) pinout:
("/CP" is the counter-input, and "MR" is the reset-input)
7414 (hex inverters) pinout:
All cartridge-logic is powered from the 2600's Vcc (5 VDC):
(I couldn't read the markings on the electrolytic, and was too lazy to desolder it.)
The diode prevents the buffer-cap from keeping the counter's clock-input high during a power-cycle - see below.
Basically, the 4024 (counter) has a high-active reset-input (tied permanently to ground), and a clock-input. Each falling edge on this input causes the counter to increment.
The clock-input follows Vcc, using a RC-circuit and 2 inverters for filtering. Thus, each time Vcc falls off (i.e. if the 2600 is powered off), the counter increments. The buffer-cap that feeds the cartridge-logic can bridge the time the 2600 is unpowered during each such deliberate powercycle:
There are 32 games of 2 kb each located head to tail in the ROM-data.
The lower 5 bits of the counter-output are used as 5 highest address-bits of the ROM (A11 through A15). The lower 11 bits of the ROM (A0 through A10, 2 kb) thus give the 2600 access to the selected game.
Some of the 7414's inverters are unused, and have their input tied to ground. One inverter however, sits in between the 2600's chip-select ("CS") output, and the ROM's chip-enable ("CE") input:
(instead of "cart", "ROM" would have been more clear, but I'm too lazy to redraw/rescan this pic :-)
From what I could see, most ROMs and EPROMs in DIP28-packages have a low-active chip-enable input. Furthermore, the 2600's CS-pin, pin 18 in the cartridge-slot, is really the A12-pin of the 2600's 6507 CPU.
Cartridge ROM lives at 0x1000, as can be seen in this 2600 memory map summary:
$0000 - $007F: TIA registers $0080 - $00FF: RAM $0200 - $02FF: RIOT registers $1000 - $1FFF: ROM
Thus, addressing a cartridge ROM would drive the CPU's A12 line, and thus CS, high.
Through the aforementioned inverter, this would drive the ROM's CE low - thus active - and everything would Just Work: the ROM would be selected.
But... why is the 2600's chip-select labeled "/CS" (i.e. active low), as seen in the 2600 Jr schematic?
Opening up another cartridge (Space Invaders), only revealed a ROM and literally nothing else. Therefore, either this ROM had an active-high chip-enable, or I don't understand how this can ever work.
"A-ha!" moment may follow shortly, as usual...
Inside the 32-in-1 cartridge, ROM data-lines are pulled down to ground using 2k resistors. But... only D0 to D5.
Why not all 8 data-pins..?
I read somewhere that due to bugs in software - essentially reading back old values on data-lines - might cause some games to work from ROM, but not when burned to EPROM, due to electrical differences.
Is the ROM used in this cartridge susceptible to such bugs, and did any of the included games contain such bugs, and were the 6 (!) pull-downs placed to fix these?
Again, "A-ha!" moment will probably follow later on :-)
Delivered to you by Vim, GNU Make, MultiMarkdown, bozohttpd, NetBSD, and 1 human.