Proyecto: Atari con dos PIA

Para comentar los proyectos de hardware presentados en la web.

Proyecto: Atari con dos PIA

Notapor ZZT el Mié Jul 06, 2016 7:13 pm

Proyecto: Atari con dos PIA

¿Que es un PIA? La PIA es uno de los procesadores que hay adentro de cada computador Atari. Tiene dos puertos de 8 bits, pudiendo ser independientemente entradas o salidas de datos, como lo queramos programar.
La función de la PIA es permitir el intercambio de información entre la CPU y el mundo exterior. En el caso específico de un Atari, el puerto A es programado para entrada de datos, que es para leer información desde los joysticks. Y el puerto B es programado como salida, para que la PIA interactue con un chip que maneja las memorias.
Imagen
La PIA del Atari es la 6520.

Leer datos es lo más básico que se puede hacer. Pero los que me conocen y han seguido por años los inventos que he hecho recordaran que uso el puerto de los joysticks para otras cosas, más que nada para enviar información hacia afuera y controlar otros hardwares.

Esto es fácil, un par de pokes y listo. Lo malo de esto, es que el puerto del joystick solo deja disponibles 8 salidas o entradas. Por lo que si se quiere hacer algún proyecto que requiera más salidas, o entradas, sin tanto lío... estamos fritos. Pensar que todo se solucionaría con otra PIA...

Así que me puse de cabeza a ver como agregar otra PIA. Con la del flojo hice la googleada de rigor y me arrojó un resultado! Alguien ya lo había hecho! Abrí la página... y que decepción, poco clara la información, sin fotos y sin esquemático!
Así que no me quedó otra que ver como hacerlo desde cero.
Lo primero que hice es abrir un 800XL hasta llegar al hueso...
Imagen
... placa mejor dicho. :-D

... además echarle una bueeeena mirada al esquemático, el cual me regaló Mario de Prismasoft en 1984 (sí, aun lo tengo).
Imagen
Mirando ese esquemático vi como la CPU "conversa" con la PIA a nivel electrónico. Se usan dos lineas del bus de direcciones A0 y A1, todo el bus de datos D0 a D7. Más otras lineas de control, como la línea de Reset, IRQ, la señal de reloj phi2 (02) y Read write (R/W). Hasta aquí todo clarísimo.
Lo que faltaba era determinar como la PIA es "exclusivamente llamada". Esto lo hace la línea CS2 o Chip Select.

La linea CS2 de la PIA es afectada por un pequeño chip decodificador de direcciones. Este activa la PIA cuando se hace un poke entre 54016 y 54271 (D300~D3FF). Esto implica que la línea CS2, que está siempre en nivel alto, se va a bajo y la PIA se habilita momentaneamente ya sea para programarla, o para leer datos o enviar datos.

ENTONCES... me "colgué" de la PIA existente y le soldé ahi mismo cables hacia otra.
Mi investigación hizo que esto fuera así de fácil:
Imagen
La única excepción son todas las patitas de los puertos A y B de la PIA2. Y por supuesto CS2 con un cablecito extra hacia el pin 10 del chip U2 (74LS138).
Dada mi experiencia con las cosas que he hecho anteriormente, se que está salida activará la PIA2 cuando se haga un poke entre 54528 y 54783 (D500~D5FF). Entonces, con apenas UN CABLE he conectado una segunda PIA al Atari. :-D

Imagen
He aquí la prueba preliminar. Totalmente operativa.

Como ya dije, usé la dirección D5XX, la cual se usa normalmente para seleccionar el cartridge. La gracia es que como ya he usado esta dirección sé que es segura y nunca, pero nunca, se va a activar sin que lo preveamos.

Ahora.... ¿para que sirve esta cosa? pues durante los años he visto como se quebraban la cabeza para poder conectar más de dos joysticks al Atari o tener más botones, como para hacer juegos más interactivos. Pues, un polaco diseñó algo así, pero usando hardware externo. Al tener otra PIA con 16 pines que pueden ser entradas o salidas puede conectarse otros cuatro joysticks o usar los dos normales y la segunda pia para controlar SEIS botones para cada uno, SIN AGREGARLE NADA al Atari. Osea, si hay alguien tan loco como para portear Mortal Kombat o Street Fighter a un Atari... ya no tiene la excusa! pues acá le solucioné el problema. :-D

O.....

O, si se desea hacer una máquina, como un flippers 0-] , ahora tiene 16 lineas de control, más las 8 de la PIA1.

O, controlar varios motores paso a paso, hasta 4 unidades. Aun teniendo desocupado el puerto de los joysticks.

Las posibilidades son extensas, gracias a esta nueva PIA.

PD: ahora estoy testeando la dirección D100 que, en teoría, esta desocupada en el decodificador. Si resulta confiable, se podrá conectar otra más, teniendo tres PIA. En caso de necesidad, se podría. 0-]


In da acchion! :-D
Avatar de Usuario
ZZT
Site Admin
Site Admin
 
Mensajes: 11056
Registrado: Mar Nov 07, 2006 5:45 pm
Ubicación: La Florida-Santiago-Chile

Re: Proyecto: Atari con dos PIA

Notapor Poltergeist el Mié Jul 06, 2016 7:32 pm

Me pongo de pie... increible...

Te felicito, muy buen trabajo y desde cero...

Ya te manejas en el hardware del Atari como pedro por su casa :-D

Un abrazo Zeta
Avatar de Usuario
Poltergeist
expert
expert
 
Mensajes: 1545
Registrado: Lun Jul 14, 2008 11:36 pm

Re: Proyecto: Atari con dos PIA

Notapor ZZT el Jue Jul 07, 2016 7:21 pm

Poltergeist escribió:Ya te manejas en el hardware del Atari como pedro por su casa :-D

Un abrazo Zeta

Como en todas las cosas, a medida que uno gana experiencia las cosas parecen salir tan fácil...

... a ver, voy a mirar el esquemático... mmm ... ya, la pia se conecta así... a ya, aquí hay otra dirección desocupada, mmm ... ya! dos pokes de configuración... listo! jajajajajaja

Así de fácil fue. ::rofl
Avatar de Usuario
ZZT
Site Admin
Site Admin
 
Mensajes: 11056
Registrado: Mar Nov 07, 2006 5:45 pm
Ubicación: La Florida-Santiago-Chile

Re: Proyecto: Atari con dos PIA

Notapor BonesCollector el Vie Jul 08, 2016 1:58 am

La arquitectura de Atari era muy solida 8-|
Avatar de Usuario
BonesCollector
expert
expert
 
Mensajes: 3045
Registrado: Vie Nov 10, 2006 10:02 pm
Ubicación: Santiago de Chile

Re: Proyecto: Atari con dos PIA

Notapor WillySoft el Vie Jul 08, 2016 2:19 am

Interesante.

Una trivia: la dirección "D1xx" se supone está reservada para el puerto de expansión. De hecho, en los modelos XE contiene esa línea, no así con los XL. Por lo anterior, es recomendable no utilizar esa línea para guardar "compatibilidad" con el hardware de expansión.

Otra cosa, ¿por qué no mejor utilizas la línea A4 y unas compuertas NAND para seleccionar la PIA a utilizar? Así utilizarías la dirección $D30x para la PIA 1 y la $D31x para la PIA 2. Sería una solución más elegante y además dejas libre la línea $D5xx (CCTL) para el puerto de cartridge, especialmente útil para el switcheo de bancos.

Saludos!
Avatar de Usuario
WillySoft
expert
expert
 
Mensajes: 654
Registrado: Mié Nov 08, 2006 1:02 am

Re: Proyecto: Atari con dos PIA

Notapor ZZT el Vie Jul 08, 2016 9:15 am

WillySoft escribió:Interesante.

Una trivia: la dirección "D1xx" se supone está reservada para el puerto de expansión. De hecho, en los modelos XE contiene esa línea, no así con los XL. Por lo anterior, es recomendable no utilizar esa línea para guardar "compatibilidad" con el hardware de expansión.

Otra cosa, ¿por qué no mejor utilizas la línea A4 y unas compuertas NAND para seleccionar la PIA a utilizar? Así utilizarías la dirección $D30x para la PIA 1 y la $D31x para la PIA 2. Sería una solución más elegante y además dejas libre la línea $D5xx (CCTL) para el puerto de cartridge, especialmente útil para el switcheo de bancos.

Saludos!

Como publiqué esto en Atariage antes pense en esos y varios otros detalles.

Por ejemplo:

- Como D1XX está presente en los puertos de XE sugerí usarla. Por si alguien quiere hacer esto en un 65XE o 130Xe con el puerto expandido.
- Tb pensé en hacer más decodificación, como las nand que propones, pero quise dejar el asunto lo más simple posible, como para que cualquiera lo pueda hacer sin tantas complicaciones. Hay que ver que no todos tienen conocimientos y habilidades como nosotros.
- Tb pensé en el conflicto que se crearía entre la PIA2 y el cartridge al usarlos al mismo tiempo, y nuevamente saltó la simpleza. Se puede usar un interruptor para desabilitar la PIA2 en caso que quieran usar el cartridge ya que los que podemos programar y usar cartridges (y otra PIA al mismo tiempo) somos muy pocos. La idea es que al usar D5XX, cualquiera puede ocupar el puerto del cart ya sea en XL o XE sin puerto expandido.

-Y la programación. Ya que para programar la PIA normal se usan dos POKE D300 y D302 - D301 y D303 al usar D5XX se hace la analogía D500 y D502 - D501 y D503. Osea, más fácil imposible.

La idea mía fue: simpleza máxima, una PIA, cero componentes adicionales, fácil cableado, fácil programación. Felicidad garantizada. :-D

A prueba de wewes! ::rofl

PD: Que bueno volver a verte Willy. ;)

PD2: voy a hacer un mini tutorial instalando la PIA2 arriba de la otra (piggyback). Eso va a ser más simple que poner una plaquita aparte.
Avatar de Usuario
ZZT
Site Admin
Site Admin
 
Mensajes: 11056
Registrado: Mar Nov 07, 2006 5:45 pm
Ubicación: La Florida-Santiago-Chile

Re: Proyecto: Atari con dos PIA

Notapor WillySoft el Vie Jul 08, 2016 4:37 pm

Lo del switch considero que es una solución poco elegante. Prefiero un diseño simple y que sea compatible con los estándares desarrollados en el tiempo.

Yo pensaba en el siguiente diagrama:

Imagen

Y lo que habría que hacer es levantar la pata /CS2 de la PIA original y conectar el /PIA1 de este diseño, y el /PIA2 en el /CS2 de la segunda PIA. Creo que esta implementación no involucra mayor complejidad, ya que sólo significa incorporar un 74LS00.

La programación sería igual de sencilla: $D30X para la primera PIA, y $D31X para la segunda PIA. Incluso es análogo a cómo se programa el POKEY Stereo.

Y un último detalle: La segunda PIA no utiliza el PORTB para switcheo de bancos, por lo tanto lo tendrías disponible. En total, tendrías 24 líneas disponibles!!

Saludos.
Última edición por WillySoft el Sab Jul 09, 2016 1:18 am, editado 1 vez en total
Avatar de Usuario
WillySoft
expert
expert
 
Mensajes: 654
Registrado: Mié Nov 08, 2006 1:02 am

Re: Proyecto: Atari con dos PIA

Notapor WillySoft el Vie Jul 08, 2016 6:03 pm

Ah, en el PORTB de la PIA original, se utilizan los siguientes pines con la MMU:


800/1200 XL /65 XE:
PB0: Activar/desactivar ROM.
PB1: activar/desactivar BASIC
PB7: activar/desactivar SELF TEST en el área $5000.

Pueden de hecho hacer el siguiente experimento: escribir en BASIC: POKE 54017,125:X=USR(20480) y vean qué pasa.

130 XE:
PB2-PB5: manejo de switcheo de bancos para la memoria extendida. De la siguiente manera:
PB2-PB3: selección de banco a switchear (en áreas de 16KB, indexadas al área $4000)
PB4: habilitar CPU al acceso de memoria extendida.
PB5: habilitar ANTIC al acceso de memoria extendida.


Saludos.
Avatar de Usuario
WillySoft
expert
expert
 
Mensajes: 654
Registrado: Mié Nov 08, 2006 1:02 am

Re: Proyecto: Atari con dos PIA

Notapor Salonvip el Sab Jul 09, 2016 4:34 am

Puta que eres seco Z, te pasaste.
Avatar de Usuario
Salonvip
hard player
hard player
 
Mensajes: 282
Registrado: Vie Nov 21, 2008 7:07 pm

Re: Proyecto: Atari con dos PIA

Notapor ZZT el Sab Jul 09, 2016 5:04 am

WillySoft escribió:Lo del switch considero que es una solución poco elegante. Prefiero un diseño simple y que sea compatible con los estándares desarrollados en el tiempo.

Yo pensaba en el siguiente diagrama:

Spoiler: Mostrar
Imagen


Y lo que habría que hacer es levantar la pata /CS2 de la PIA original y conectar el /PIA1 de este diseño, y el /PIA2 en el /CS2 de la segunda PIA. Creo que esta implementación no involucra mayor complejidad, ya que sólo significa incorporar un 74LS00.

La programación sería igual de sencilla: $D30X para la primera PIA, y $D31X para la segunda PIA. Incluso es análogo a cómo se programa el POKEY Stereo.

Y un último detalle: La segunda PIA no utiliza el PORTB para switcheo de bancos, por lo tanto lo tendrías disponible. En total, tendrías 24 líneas disponibles!!

Saludos.

A ya po, tu el elegante. jajajajaja
Para el caso de usar D5XX, el sw no tiene pa que ser elegante ni bonito, solo tiene que desabilitar la PIA.
Y ojo. Mira que había pensado en usar la línea CA2, la que controla el motor de la casetera, a modo de switch por software. O la línea RD5, que se va a nivel alto cuando el cartridge está presente (perfecto para desabilitar la PIA). ;)
Claro, al usar D1XX no hay para que preocuparse.

Se que aun me faltan cosas por completar, por ejemplo lo de las compuertas. Te insisto, no lo puse del principio, pq sé lo cuesta desoldar una sola pata -sin sacar todo el chip-. Algunos chips no se dejan manosear asi como asi y puede llegar a ser bastante complicado. Además hay posibilidades de arrancar la patita desde el cuerpo del chip, y adiós PIA. O cortar la pista del circuito impreso.

Pensaba en incorporar esto como sugerencia en la siguiente etapa, donde se muestra distintas formas de poner la segunda PIA: en un cartridge, una arriba de la otra (piggyback), en el puerto extendido... etc.

Tb estoy pensando en el conector a sugerir, quizás un DB25??

Y falta sugerir los chips intermedios, para proteger la PIA de posibles condoros de parte del usuario, ya que cortos de cualquier patita a tierra o Vcc, cuando esté programada como salida, sería fatal. Por ejemplo se puede poner una resistencia de 220 ohms en serie, como la que tiene la PIA entre el puerto A y los joysticks (una de 1K ohm sería mejor).. Tb se puede poner un buffer 74LS245, sirve tanto para entrada como salida TTL. Transistores para prender leds potentes, reles para activar motores... etc.

Y sipos, son 16 + 8 lineas. Chévere. Y si el compu no tiene ampliación de memoria, y sabiendo los valores correctos para no meterse con el basic, rom y self test.... tb se pueden ocupar los 5 bits del puerto B. :-D
AH! y las líneas CA2 y CB2 tb se pueden usar como salida! Con su propio poke. :-D

Salonvip escribió:Puta que eres seco Z, te pasaste.

Dime algo que no sepa. Humilde el cabro. jajajajaja

Si creen que tener dos PIA es como mucho, en flippers: Los Williams tienen 4 y los Bally/Stern tienen 3.

PD: me gustaría hacer la sección también en ingles Yo se bastante, pero no como para hacer algo perfecto ¿alguien se anima a corregir? Willy? JJ? :-D
Avatar de Usuario
ZZT
Site Admin
Site Admin
 
Mensajes: 11056
Registrado: Mar Nov 07, 2006 5:45 pm
Ubicación: La Florida-Santiago-Chile

Re: Proyecto: Atari con dos PIA

Notapor ZZT el Dom Ago 06, 2017 12:36 am

Bim bam bum! Un decoder 74LS139 y tenemos 4 PIAS!

Imagen
¿Para que 4 pias? Yo lo tengo clarito! Ahora... a quien le sirva... aquí está la info. :-D
Avatar de Usuario
ZZT
Site Admin
Site Admin
 
Mensajes: 11056
Registrado: Mar Nov 07, 2006 5:45 pm
Ubicación: La Florida-Santiago-Chile


Volver a PROYECTOS

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron