Regresar   Foro de marcianitos.org > Consolas, Recreativas y Ordenadores > Consolas > Retroconsolas

 
 
Old 04-mar-2009, 04:49   #1
JULIAN OSPINA
Usuario registrado
Interrogación Tutorial cartucho atari 2600

CARTRIDGE ATARI 2600


La consola ATARI 2600 en su diseño fue concebida para direccionar memorias hasta de 4K de capacidad, es decir que usa 12 líneas de dirección comprendidas de A0 a A11. Donde se puede concluir que solo es capaz de funcionar con programas hasta la capacidad máxima de direccionamiento o sea juegos de 4K o menores. Pero se genero una técnica para lograr ejecutar programas de mayor tamaño “Bank Switching” la cual se explica mas adelante.




El puerto de conexión del cartridge es sencillo de comprender, cuenta con dos buses, el de datos (D0-D7) por el cual se comunica el Atari y la memoria del juego, el bus de direcciones (A0-A11) la cual direcciona las instrucciones del programa. Cuenta con la alimentación Vcc y Gnd, pin 2 y 1 respectivamente.

El pin 7 (A12) se usa como habilitador de la memoria del cartridge o CS (Chip select), para utilizar una memoria EPROM se debe invertir la señal ya que el CS es activo en bajo.

El pin 13 (Gnd) se usa para indicar conexión de un cartridge, cuando se inserta un juego este puentea el pin 1 con el pin 13, por eso en el cartridge el pin 13 se puede tomar como Gnd o tierra.


Ejemplo de cartridge para 16 juegos de 4K



La selección de los juegos se realiza con la combinación de interruptores de sw1.


BANK SWITCHING

Como lo indique Anteriormente el Bank Switching es una técnica usada para lograr conectar programas de mayor tamaño al puerto del ATARI. Si recordamos el puerto del Atari solo tiene 12 líneas de dirección o sea solo es capaz de direccionar memorias hasta de 4K de tamaño. Se utiliza la técnica Bank Switching, la cual es realizada por software y algo de hardware para direccionar memorias más grandes.

La técnica es la siguiente: Se pagina el programa en bloques de 4K o sea un programa de 8K se divide en dos páginas o bancos (Bank) ya que el ATARI es capaz de direccionar 4K de memoria y se coloca en el código del programa una subrutina que permite el salto entre las dos páginas y se crea un circuito que permite el salto físico entre las 2 páginas de memoria.




La mayoría de juegos realizados para ATARI mayores de 4K de tamaño usan la técnica F8 de Bank Switching la cual logra direccionar 8 bloques de memoria de 4K o sea juegos hasta de 32k de tamaño.

La idea planteada es la siguiente, se usan direcciones de memoria específicas que se detecten por hardware, las cuales se utilizan para seleccionar los bancos físicamente, como se muestran en el siguiente cuadro.



Siguiendo con el ejemplo de un juego de 8K se divide en 2 bancos de memoria y a cada banco se le asigna una dirección para su selección.



En el software cuando se desea cambiar de banco, se debe colocar en el bus de direcciones la dirección del banco que se desea utilizar. Esto varia dependiendo del programador, pero se debe usar direccionamiento indirecto, por ejemplo con la instrucción “CMP $FFF8” la cual compara el acumulador con el contenido del dato de la dirección FFF8, se debe recordar que la memoria de programa solo utiliza los tres primeros números para su direccionamiento, el ultimo número “F” esta indicando que es la memoria de programa o sea el juego.

El microprocesador coloca la dirección FF8 en el bus correspondiente para buscar el dato en la memoria, pero se esta utilizando para seleccionar el banco de memoria correspondiente, cual se debe detectar por medio de un circuito electrónico que se encuentra en los cartridge de la siguiente forma.



El circuito detecta en el puerto de direcciones el número FF8 y FF9. Para entender el funcionamiento se debe mirar en formato binario.

FF8 = 1111 1111 1000
FF9 = 1111 1111 1001

El número que se encuentra más a la derecha es el menos significativo y corresponde a A0 y el último a A11 que es el más significativo.

La idea es detectar cuando aparece esta combinación en el bus de direcciones y eso se realiza con las compuertas AND pero solo con la presencia de 1 “unos” en las ultimas nueve líneas de dirección A11-A3 y las líneas A2-A1 se debe detectar la presencia de “0” ceros, por eso están negadas en el circuito. Las cuales indican un cambio de banco, donde la selección del banco 0 y 1 se realiza por el A0. Se debe guardar este dato de selección para que la memoria quede seleccionada hasta que ocurra otro cambio de banco, esto es realizado por el slip-flop tipo D, el cual es activado por la señal de cambio de banco que seria el CLK del mismo y el dato o sea pin D es la indicación de banco pin A0. Como se ve en la simulación del circuito.



En el programa se debe colocar la nueva dirección del otro banco donde se quiere llegar, 3 instrucciones después de llamar el cambio de banco como se muestra en el siguiente ejemplo:

El juego es Big Bird’s egg Match. Si se mira el segmento de programa en la dirección FFF0 se encuentra la instrucción CMP $FFF9 la cual se utiliza para el cambio de banco y tres instrucciones luego se encuentra el salto a la nueva dirección del otro banco donde se desea llegar.



El siguiente esquema muestra un circuito de un cartridge para 16 juegos de 8K que utilizan Bank Switching F8. Si se desea crear un cartridge con juego de mayor tamaño se debe analizar el Bank Switchig con sus direcciones para poder realizar un circuito que permita la paginación.





La construccion de este cartucho se muestra en otro foro mio

Muchas gracias
   
Old 04-mar-2009, 13:56   #2
Rom Check OK!
Marciano
 
Avatar de Rom Check OK!
Excelente aportación, mis felicitaciones. Lo que me he quedado con ganas es saber la dirección del otro foro donde explicas la construcción de ese cartucho.

Saludos!
   
Old 04-mar-2009, 14:15   #3
Fistro
Marciano
Queremos maaasss!!

Muchas gracias por el gran aporte, casi entran ganas de programar para la atari2600.

Un saludo.
   
Old 04-mar-2009, 15:52   #4
JULIAN OSPINA
Usuario registrado
foro de construccion del cartucho f8

Foro donde muestro la construccion de un cartucho f8

http://www.marcianitos.org../../../showthread.php?t=26820