Retrogames.cl
Página principal Sección Atari Articulos para leer

Proyectos y modificaciones de hardware

Clases elementales RG, su gente y actividades

El foro más antiguo de Chile

Un lugar para recordar

ATARI
PIA DOBLE

Por ZZT

PIA es el acrónimo de Peripheral Interfase Adaptor o Interfase Adaptadora de Periféricos.

Es un chip de entrada y salida de datos. Comunica a la CPU de un computador con el mundo exterior, pudiendo ser utilizado para entrada o salida de datos.

Por el lado interno, que se conecta directamente a la CPU, tiene 8 pines que corresponden al bus de datos más algunas líneas de control y hacia afuera tiene dos puertos, cada uno de 8 pines, obteniendo o dando un byte de cada uno, dependiendo si está leyendo o escribiendo. Un byte comprende valores entre 0 y 255, dependiendo de la combinación de unos y ceros. La versatilidad de la PIA es que se le puede programar para decidir como se desea operar sus puertos, osea, se puede decidir cuales serán entradas y cuales salidas.

La PIA del Atari es la 6520, formato DPI 40.

Consta de dos puertos de 8 bits cada uno. Se llaman Port A (PA) y Port B (PB). Puerto A y B en español.

En los Atari XL el puerto A está dedicado a los dos joysticks, cuatro patas para cada uno:

PUERTO A

STICK

JOYSTICK 1

JOYSTICK 1

PUERTO

PA0

PA1

PA2

PA3

PA4

PA5

PA6

PA7

PIA PIN

2

3

4

5

6

7

8

9

USO

UP

DOWN

LEFT

RIGHT

UP

DOWN

LEFT

RIGHT

bus datos

D0

D1

D2

D3

D4

D5

D6

D7

Como se aprecia en la tabla, el joystick 1 corresponde a la primera mitad del byte obtenido y le corresponden valores entre 0 y 15. Por otra parte al joystick 2 le corresponde la parte inferior del byte, valores entre 16 y 255. Durante la inicialización del sistema todo el puerto se configura como entradas.

El puerto B es una historia completamente distinta:

PUERTO B

PUERTO

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

PIA PIN

10

11

12

13

14

15

16

17

USO

MMU 9

MMU 18

MMU 6

bus datos

D0

D1

D2

D3

D4

D5

D6

D7

Solo se usan tres pines, PB0 (pin10), PB1 (pin11), PB7 (pin17).Todos van al chip MMU Memory Management Unit o unidad manejadora de memoria. El que se encarga de activar el chip que contiene el Basic, el chip del Sistema Operativo (ROM) y otro que ahorita no recuerdo. Quedan disponibles cinco pines PB2 (pin12) PB3 (pin13) PB4 (pin14) PB5 (pin15) PB6 (pin16). Durante la inicialización del sistema todo el puerto se configura como salidas, independientemente si son pines en uso o no.

¿Como conversa la PIA con la CPU?

El conexionado entre la PIA y la CPU es mucho más simple de lo que aparenta. Deglosemos parte por parte:

- Pin 1 va hacia gnd o tierra
- Pines 2 3 4 5 6 7 8 9 van hacia los joysticks
- Pines 10 y 11 van hacia al MMU

- Pines 12 13 14 15 16 no se usan
- Pin 17 va al MMU
- Pin 18 ó CB1 va al SIO(pin13) INTERRUPT
- Pin 19 ó CB2 va al SIO(PIN7) COMMAND
- Pin 20 Vcc es la alimentación +5Volts
- Pin 21 es Read Write o R/W. Va hacia la CPU pin 14
- Pin 22 es CSO o Chip Select 0, habilita en nivel alto, Va hacia Vcc en conjunto con CS1

- Pin 23 es CS2 o Chip Select 2, habilita en nivel bajo. Va hacia chip decodificador U2 74LS138 pin12

- Pin 24 es CS1 o Chip Select 1, habilita en nivel alto. Va hacia Vcc en conjunto con CS0

- Pin 25 es 02 o señal de reloj. Va hacia U18 pin 11 y desde el pin 12 de éste a la CPU pin39

- Pin 26 27 28 29 30 31 32 33 es el bus de datos. Corresponden exactamente con los de la CPU (pines 26 27 28 29 30 31 32 33)

- Pin 34 señal de Reset, activa en nivel bajo. Va hacia la CPU pin 40

- Pin 35 RS1, va hacia la CPU bus de direcciones A0 (pin 9)

- Pin 36 RS0, va hacia la CPU bus de direcciones A1 (pin 10)

- Pin 37 IRQ B, más IRQ A van hacia la CPU IRQ (pin 4)

- Pin 38 IRQ A, más IRQ B van hacia la CPU IRQ (pin 4)

- CA1 (pin40) va al SIO (pin 9) PROCEED
- CA2 (pin39) va al SIO (pin 8) y controla el motor de la casetera

¿A que hay que prestarle atención? Pues... a todo! Pero lo más importante es como la CPU "habla" con la PIA. Esto se realiza basicamente entre RS1-A0 RS0-A1 y el bus de datos. Dependiendo del valor de A0 y A1 afecta a RS0 y RS1 y eso es lo que permite programar y acceder a ciertas funciones de la PIA.
La señal de reset es para poner todo a cero (partida). La señal CK02 es la señal de reloj. Y la más importante, aunque no se conecta a la CPU, es CS2 el cual se conecta a un chip decodificador, al cual activa la PIA siempre que se haga un POKE entre un rango de direcciones que abarca desde 54016 (D300) hasta 54271 (D3FF).

La configuración de la PIA puede parecer un poco enredada, pero no lo es. Al encender el computador el sistema operativo configura automáticamente, y según las necesidades del Atari, el puerto A todo como entrada y el puerto B todo como salida. Esto quiere decir que del puerto A fluyen datos desde los joysticks hacia la CPU y el puerto B a la inversa, desde la CPU hacia el puerto y desde éste al MMU. Esto se mantiene así, a menos que sea modificado por el usuario (nosotros).

Utilizando el PUERTO A

El puerto A es el que más utilidad presta, ya que los enchufes de los joystick nos permiten conectar ahí mismo enchufes DB9 y usarlo a nuestro antojo. En cambio, hacer cualquier modificacion al puerto B sin saber lo que se esta haciendo, causará que el Atari se bloquee.

Para poder configurar el puerto A de la PIA como uno lo desee, solo hay que poner tres pokes:

PUERTO A COMO ENTRADA

PUERTO A COMO SALIDA

POKE 54018,56

POKE 54018,56

POKE 54016,0

POKE 54016,255

POKE 54018,60

POKE 54018,60


Resumiendo, unas simples instrucciones en Basic modifican el comportamiento de la PIA. Un valor de 0 en la posición de memoria 54016 envía ocho ceros al registro PACTL y setea todo el puerto A como entrada de datos y un valor de 255 en 54016 envía ocho unos causando que todo sea salida de datos. PACTL significa Port A ControL o control del puerto A.

Acá se muestra el orden en cuanto a la PIA y el bus de datos que le corresponde a cada pin de ambos joysticks en un 800XL.

Ahora indagaremos un poco más a fondo.

Hoy en día existen muchos dispositivos que puede hacer lo mismo que un Atari y con más velocidad y muchas más prestaciones, pero quizas no es tan fácil como usar un Atari, para aprender. Por eso la intención mia al dar a conocer ésto es simplemente a modo didáctico, demostrando que aun un microcomputador tan básico como un Atari es capaz de controlar dispositivos externos con relativa facilidad entre programación y poco hardware.

¿Para que podríamos usar esto?

La respuesta no es una sola, ya que tal como viene de fábrica, el puerto A del Atari seteado todo como entradas, puedes:

- Conectar 8 switchs, por ejemplo desde algún tipo de máquina. Incluso usando optoacopladores o LDRs a modo de detección de posición.

- Hacer un joystick especial como el de Track and Field

- Usar un joystick como palanca (PA0 PA1 PA2 PA3) y PA4 PA5 PA6 PA7 como 4 botones extras.

Mitad entrada, mitad salida

Acá hay un buen ejemplo de usar 4 bits como salida y 4 bits como entrada, eso se puede hacer con la siguiente formula:

PUERTO A / MITAD IN - MITAD OUT

POKE 54018,52

POKE 54016,16

D7> 00001111<D0

POKE 54018,60

En este ejemplo, D0(PA0) D1(PA1) D2(PA2) D3(PA3) están a nivel 1, por lo tanto serán salidas. Y D4(PA4) D5(PA5) D6(PA7) D7(PA7) están a nivel 0, por lo tanto serán entradas. Gracias éste arreglo el joystick 1 será entrada y el joy dos salidas. Esta configuración se usa para, mediante un chip, multiplexar y conectar hasta 8 joysticks:


http://raster.atariportal.cz/hw/mj8_2007.gif

Salida

Juego de luces:

Entrada y salida

Grabador y lector de eproms:

-

Segunda PIA

Ahora, un puerto de salida es más que nada para proyectos grandes. A pesar que un puerto de 8 bits se puede "agrandar" multiplexando, hace más complejo su manejo en cuanto a software y hardware. Una segunda PIA, con ambos puertos desocupados, soluciona este problema.

Agregar una segunda PIA es super fácil.  En el siguiente esquemático se puede apreciar como se conecta:

Todas las lineas que la unen al Atari se comparten, excepto CS2 (pin 23), que debe unirse al pin 10 del chip U2 (74LS138). CB1 (pin 18), CA1 (pin 40) quedan sin uso y se unen a Vcc con una resistencia de 4.7K. Y aca otra cosa buena, CB2 (pin 19) es otra salida, así como también CA2 (pin 39). Entonces son dos puertos de 8 bits, más dos salidas extras.
La linea punteada permite elegir entre D500 y D100,

La PIA del Atari se ubica en la posición de memoria D300. La segunda puede estar direccionada en D500 o D100. Con un pequeño detalle que analizaremos.

Veamos la siguiente tabla de comparación entre la direcciones de la PIA del Atari y la segunda:

PIA 1 D3XX
Esta es la PIA normal, la que viene de fábrica en los Atari.

PIA 1 PUERTO A

PIA 1 PUERTO B

D300 54016 D301 54017
D302 54018 D303 54019

PIA 2 D5XX
La segunda PIA se puede seleccionar en D5XX, pero ésta dirección también la usa el cartridge. Por lo que no se pueden usar al mismo tiempo. Claro, si no va a usar cartridge, no hay problema. O puede ponerse un interruptor que desabilite la PIA cuando se quiera usar el cartridge.

PIA 2 PUERTO A

PIA 2 PUERTO B

D500 54528 D501 54529
D502 54530 D503 54531


PIA 1 D1XX
Y tambien puede conectarse en D1XX, pero en los primero Atari ésta dirección controla el chip ANTIC, por lo que creo, y no lo he comprobado, podría haber conflictos con ciertos programas o juegos. Hasta ahora las pruebas que he hecho no me han causado problema.

PIA 2 PUERTO A

PIA 2 PUERTO B

D100

53504

D101

53505

D102

53506

D103

53507

Y ahora la programación.

PIA 2 Puerto A en D500

PUERTO A COMO ENTRADA

PUERTO A COMO SALIDA

POKE 54530,56

POKE 54530,56

POKE 54528,0

POKE 54528,255

POKE 54530,60

POKE 54530,60

PIA 2 Puerto B en D500

PUERTO B COMO ENTRADA

PUERTO B COMO SALIDA

POKE 54531,56

POKE 54531,56

POKE 54529,0

POKE 54529,255

POKE 54531,60

POKE 54531,60

PIA 2 Puerto A en D100

PUERTO A COMO ENTRADA

PUERTO A COMO SALIDA

POKE 53506,56

POKE 53506,56

POKE 53504,0

POKE 53504,255

POKE 53506,60

POKE 53506,60

PIA 2 Puerto B en D100

PUERTO A COMO ENTRADA

PUERTO A COMO SALIDA

POKE 53507,56

POKE 53507,56

POKE 53505,0

POKE 53505,255

POKE 53507,60

POKE 53507,60

54016 (W / R) lee o escribe datos desde terminales de controlador uno y dos si el bit2 de PACTL (ubicación 54018) es uno. La escritura en el control de dirección si el bit 2 del PACTL es cero.

Bien, todo lo aquí descrito a sido realizado paso a paso teniendo los conocimientos sobre lo que se está haciendo. Tenga en cuenta que un mal conexionado puede dañar su Atari, por lo que tenga cuidado y hagalo a su propio riesgo.

Warning: Attempts to modify your Atari without the proper knowledge, and skills, can result in a serious damage to your atari. Do it at your own risk.