Dual PIA Project

This page is under construction

Dual PIA modification for Atari 800
Peter Bell <peter@bell.demon.co.uk>
Sat, 4th Feb '95
This document and associated files are public domain, they may be distributed, copied, modified, thrown up in the air and caught, recycled as firelighters, or applied to any other purpose that the holder sees fit. As this information is distributed free of charge, there is no warranty, none. Not even the implied warranties of merchantability or fitness for a particular purpose.

1. Scope of modification
This document describes the logic required to provide addressing for a second PIA on the Atari 800, it does not cover what you do with the outputs. The normal use of this second PIA is to provide memory mapping signals. If you don't already have both an expanded memory modification and switchable OS's on your machine, then this information will be of no interest to you until you do.
2. Theory of operation The PIA device fitted to the 800 was used for several purposes, the primary one was to
provide signals to allow connection of joysticks. The control lines were used for other purposes, associated with the SIO port and cassette control. When the XL (and later XE) were produced, the pins on the PIA that were formally used for Joystick ports 3 and 4 were reallocated to memory control. This causes some problems on a dual OS
machine, such that either the mapping register is incorrectly located, or joystick ports 3 and 4 are absent. This PIA occupies 4 memory locations, it is normally mapped (somewhat wastefully) into the 256 byte page between $D300 and $D3FF. In the 800 OS mode, this mod places the second PIA into addresses $D304 and $D307 (repeating in the same way the original one does). Under these circumstances, $D301 is joystick ports 3 and 4. When the XL/XE mode is selected, only some of the ports want to change. Port A and it's associated control register want to remain in the same place, ($D300 and $D302). The B port and CR want to swap with the ones on the second PIA.
This becomes: (800 mode)

PIA 1 CS/ = D3xx/ & A2/
PIA 1 CS/ = D3xx/ & A2
(XL/XE mode)

PIA 1 CS/ = D3xx/ & (A2 xor A0)/
PIA 2 CS/ = D3xx/ & (A2 xor A0)

In addition, since the ports and CRs are swapped as a pair, the CB2 signal from the correct PIA needs to be routed to the SIO command/ line.
3. Parts required In view of the fact that this is being described as a piggy back on an existing mod., there are
not a lot of parts required. The only significant part is the PAL, (PAL 16L8, programmed as described in the associated files). You will probably also need another PIA. Some fine wire and a soldering iron would be useful, too.
4. Modification instructions I'm going to assume you already know how to take apart an Atari 800, so I'll skip the
'Remove five (5) phillips head self tapping screws from bottom of cabinet, retain for reassembly. Remove lower case, retain, Disconnect 2-pin 0.15" pitch molex connector... etc. etc. etc.' Anyway, get the mother board out of the machine, and look at it. Check out how the memory mapping connections have been made to the existing PIA. If they have been soldered to bent-out PIA pins, then you're in luck. If there is a ribbon header stuck in the PIA socket going to a PCB, then you're probably stuck, unless you want to start hacking around on the PCB. Assuming that you have the soldered on wires, then the original PIA is going to become PIA 2. Bend out the following pins on this device: 2-7 (PA0-PA7), 10-17 (PB0-PB7 - These should already be out), 23 (CS2/), 39,40 (CA2,1) and 19 (CB2). Get the new PIA and bend out pin 23 (CS2/). Solder the existing PIA on top of the new one and ensure that none of the bent out pins are touching. Plug this assembly into the PIA socket. If you have one of the higher sockets in the board, you may need to desolder it and install a low-profile one. If the screening can fouls on the device, then you need to do this. Get the PAL and stick it somewhere convienent. Since there are no 20 pin devices on the
800 mother board, you can't piggyback it to get power, so just put it close to the PIA and stick it down
(take pac or superglue). Make the following connections to the PIA.

PAL pin Connection point
1 Pin 23 on PIA socket (original PIA CS)
2 Pin 34 on POKEY (A2)
3 Pin 36 on POKEY (A0)
4 Pin 39 on PIA in socket (CB2)
5 Pin 30 on second PIA (CB2)
6 Wire to ROM select circuit. This signal should be low when the
original 800 ROMs are selected.
7..9 No connection
10 Pin 1 on PIA socket (GND)
11..12 No connection
13 Pin 23 on PIA 1 (the one in the socket) (CS2/)
14 Pin 23 on PIA 2 (the one soldered on top) (CS2/)
15 Pin 39 on PIA socket (CB2, SIO command/)
16..19 No connection
20 Pin 20 on PIA socket (VCC)
5. Testing
Turn the unit on in 800 mode, and make sure that all the joystick ports work. Also check
that SIO operation is correct.
Flick the ROM select switch over to XE/XL mode, and see if the extended RAM works.
Check the SIO again.
If they both work, then it's ok :)
6. Other things
As a result of this mod, you now have a spare PIA port hanging around. This is PORTA on
the additional PIA, and appears at the following locations:

Data/DDR $D304
Control $D306
This port doesn't move when you change operating mode, I've got mine set up as a P: device,
but you can probably find other uses for it. The 'other' port B is mapped to $D305 (data) and $D307
(control). It's probably best to ignore this, since you would need to hack the software to recognise it.
If you need any help or advice, feel free to e-mail me.


About ILS  -  Contact us  -  Report Web Issues