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 2 |
||||||
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 el Self Test. 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 CS2o 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.
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ásquenadapara 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 |
Resumiendo
Para primero hay que preparar la PIA2:
Usando D5XX
Para que el Atari reciba datos, tal como la PIA normal
Puerto A
BASIC |
ASSEMBLY |
10 POKE 54530,56
Con eso queda programada |
LDA 56 LDA 54530 |
Puerto B
BASIC |
ASSEMBLY |
10 POKE 54531,56
Con eso queda programada |
LDA 56 LDA 54529 |
Usando D5XX
Para que el Atari envíedatos:
Puerto A
BASIC |
ASSEMBLY |
10 POKE 54530,56
Con eso queda programada |
LDA 56
LDA DATO A ENVIAR |
Puerto B
BASIC |
ASSEMBLY |
10 POKE 54531,56
Con eso queda programada |
LDA 56
LDA DATO A ENVIAR |
Ejemplos prácticos
Podemos usar la PIA para escanear un puerto como entrada, por ejemplo, para un tercerjoystick:
PIA2 D5XX - Puerto A
10 POKE 54530,56
40 A=PEEK(54530) |
10 ABRE REGISTRO DE DIRECCIÓN |
¿Por
quelosvaloresdeljoystickseleencomo 254, 253, 251, 247?
Por
que,enestecaso, cada una de las ocho entradasdelpuerto deben tener conectada una
resistencia de 4.7K hacía Vcc. Esto causa que todos los bits sean leidos como 1. Y estando todos a 1, en
posición de reposo del joystick, el valor del puerto es 255. Al presionar hacia abajo se resta 1 a 255,
hacia abajo se resta 2, hacia la izquierda 4 y hacia la derecha 8.
PIA2 D5XX - Puerto A
COMBINACIONES POSIBLES |
||||
PA3-D3 | PA2-D2 | PA1-D1 | PA0-D0 |
|
8 |
4 |
2 |
1 |
RESTA |
1 |
1 |
1 |
1 |
REPOSO=255 |
1 |
1 |
1 |
0 |
UP 255-1=254 |
1 |
1 |
0 |
1 |
DOWN 255-2=253 |
1 |
0 |
0 |
0 |
|
1 |
0 |
1 |
1 |
LEFT=255-4=251 |
1 |
0 |
1 |
0 |
|
1 |
0 |
0 |
1 |
|
1 |
0 |
0 |
0 |
|
0 |
1 |
1 |
1 |
RIGHT=255-8=247 |
0 |
1 |
1 |
0 |
|
0 |
1 |
0 |
1 |
|
0 |
1 |
0 |
0 |
|
0 |
0 |
1 |
1 |
|
0 |
0 |
1 |
0 |
|
0 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0 |
|
¿Que pasa con las otras combinaciones? Pues corresponden a las diagonales del joystick, que pueden ser UP-Left Up-Right Down-Left Down-Right. No esperaran que les enseñe todo... ¿o si? Piensen un poco y determinen cuales serían los valores para detectarlas. :-)
Más a fondo:
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.
Esta sección,conotrosejemplos, CONTINUARÁ......