Ver el código de Chip Pia

((https://www.atariware.cl/archivos/mapping/chip_pia.png align=center))
El circuito integrado del adaptador de interfaz periférica (PIA) es un microprocesador especial que se utiliza para controlar los puertos Atari, los conectores del controlador uno a cuatro. Los puertos se pueden utilizar tanto para la entrada como para la salida de forma simultánea o alternativa.

===**PORTA** 54016 $D300===
Leer o escribir datos desde los puertos del joystick, dependiendo de cómo se configure la dirección de los datos (por defecto es  0 "lectura/entrada"). Para fijar la dirección, ponga el Bit 2 de PACTL a 0 y defina la dirección fijando los bits de PORTA (0=lectura, 1=escritura) para cada línea de entrada/salida. A continuación, vuelva a poner el Bit 2 de PACTL a 1.

#|
*|Bit|Función|N° Joystick|Pines de Joystick|Dirección|Paddle|*
||7|PA7|Joystick 2|Pin 4|Derecha|Paddle 4 botón ((#PTRIG3 PTRIG3))||
||6|PA6|Joystick 2|Pin 3|Izquierda|Paddle 3 botón ((#PTRIG2 PTRIG2))||
||5|PA5|Joystick 2|Pin 2|Abajo|No usado||
||4|PA4|Joystick 2|Pin 1|Arriba|No usado||
||3|PA3|Joystick 1|Pin 4|Derecha|Paddle 2 botón ((#PTRIG1 PTRIG1))||
||2|PA2|Joystick 1|Pin 3|Izquierda|Paddle 1 botón ((#PTRIG0 PTRIG0))||
||1|PA1|Joystick 1|Pin 2|Abajo|No usado||
||0|PA0|Joystick 1|Pin 1|Arriba|No usado||
|#

{{anchor href="PORTB"}}
===**PORTB** 54017 $D301===
Esta posicion cambia de funcion dependiendo del modelo, partimos con **400/800**.

Leer o escribir datos desde los puertos del joystick, dependiendo de cómo se configure la dirección de los datos (por defecto es  0 "lectura/entrada"). Para fijar la dirección, ponga el Bit 2 de PBCTL a 0 y defina la dirección fijando los bits de PORTB (0=lectura, 1=escritura) para cada línea de entrada/salida. A continuación, vuelva a poner el Bit 2 de PBCTL a 1.

#|
*|Bit|Función|N° Joystick|Pines de Joystick|Dirección|Paddle|*
||7|PA7|Joystick 3|Pin 4|Derecha|Paddle 8 botón ((#PTRIG7 PTRIG7))||
||6|PA6|Joystick 3|Pin 3|Izquierda|Paddle 7 botón ((#PTRIG6 PTRIG6))||
||5|PA5|Joystick 3|Pin 2|Abajo|No usado||
||4|PA4|Joystick 3|Pin 1|Arriba|No usado||
||3|PA3|Joystick 4|Pin 4|Derecha|Paddle 6 botón ((#PTRIG5 PTRIG5))||
||2|PA2|Joystick 4|Pin 3|Izquierda|Paddle 5 botón ((#PTRIG4 PTRIG4))||
||1|PA1|Joystick 4|Pin 2|Abajo|No usado||
||0|PA0|Joystick 4|Pin 1|Arriba|No usado||
|#

En modelos **XL/XE** es para manejo de memoria :

#|
*|Bit|Función|Dirección|*
||7|$5000-$57FF|0=Self Test, 1=RAM||
||6| |No usado||
||5|ANTIC|0=ANTIC tiene acceso a extra RAM, 1=ANTIC tiene acceso normal RAM||
||4|CPU|0=CPU tiene acceso a extra RAM, 1=CPU tiene acceso normal RAM||
||3|Banco|Ver tabla de combinación||
||2|Banco|Ver tabla de combinación||
||1|$A000-$BFFF|0=ATARI BASIC ROM, 1=RAM||
||0|$C000-$FFFF|0=RAM, 1=OS-ROM||
|#

Combinación de los bancos

#|
*|Bit 2|Bit 3|N° Banco|*
||0|0|Numero 0||
||0|1|Numero 1||
||1|0|Numero 2||
||1|1|Numero 3||
|#

===**PACTL** 54018 $D302===
Control del PORTA, dependiendo del valor es su función según la siguiente tabla :

#|
*|Bit|Función|Descripción|*
||7|PA7|Sólo lectura: Estado de interrupción de PROCEED, 1=Interrupción||
||6|PA6|Siempre 0||
||5|PA5|Siempre 1||
||4|PA4|Siempre 1||
||3|PA3|Control del motor del reproductor de cassettes: 0=Encendido, 1=Apagado||
||2|PA2|1=Utilizar el PORTA para la entrada/salida de datos, 0=Definir la dirección de los datos||
||1|PA1|Siempre 0||
||0|PA0|Interrupción de la línea PROCEED on/off, puesta a 0 por el OS||
|#

Para definir la dirección de datos del PORTA, establezca el bit 2 de PACTL en 0. Luego escriba un byte en PORTA, donde los bits establecidos en 1 indican ESCRITURA y los bits establecidos en 0 indican LECTURA. Normalmente, PORTA se establece en %00000000 "todas las entradas". 
	
===**PBCTL** 54019 $D303===
Control del PORTB "Sólo modelos 400/800", dependiendo del valor es su función según la siguiente tabla :

#|
*|Bit|Función|Descripción|*
||7|PA7|Interrupción del estado de SIO ||
||6|PA6|Siempre 0||
||5|PA5|Siempre 1||
||4|PA4|Siempre 1||
||3|PA3|Estado de la línea de comando de SIO ||
||2|PA2|1=Utilizar el PORTB para la entrada/salida de datos, 0=Definir la dirección de los datos||
||1|PA1|Siempre 0||
||0|PA0|Interrupción de la línea PROCEED on/off, puesta a 0 por el OS||
|#

Para definir la dirección de datos del PORTB, establezca el bit 2 de PBCTL en 0. Luego escriba un byte en PORTB, donde los bits establecidos en 1 indican ESCRITURA y los bits establecidos en 0 indican LECTURA. Normalmente, PORTB se establece en %00000000 "todas las entradas".