Duda acerca del procesador 6502

Manteniendo vivo tu Atari, computador, consola o perifericos.
Avatar de Usuario
Chalo_mhz
expert
expert
Mensajes: 1107
Registrado: Dom Feb 18, 2007 6:42 pm
Reputación: 0
Ubicación: Maipu, Santiago
Contactar:

Duda acerca del procesador 6502

Mensaje por Chalo_mhz »

Hace tiempo me puse a estudiar un poco del codigo de maquina para analizar el funcionamiento del 6502.
Tengo entendido que el MOS 6502, al igual que el Zilog Z80 pueden direccionar hasta 64Kb de RAM como maximo, entonces
¿quien me puede dar una explicacion de como el atari 130XE, el C=128 o el MSX2 son de 8-bit y direccionan 128Kb de RAM?

Gracias de antemano.
Avatar de Usuario
Walky
expert
expert
Mensajes: 3857
Registrado: Jue Nov 09, 2006 1:59 pm
Reputación: 0
Ubicación: No sé! XD
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por Walky »

¿En una de esa lo hace "a la mala" (mappers)?
Avatar de Usuario
133MHz
expert
expert
Mensajes: 1950
Registrado: Sab Abr 05, 2008 2:06 pm
Reputación: 0
Ubicación: Santiago, Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por 133MHz »

Bankswitching (que básicamente es lo mismo que un mapper).
Para manejar 128KB, puede dividirla en dos bancos de 64 KB o cuatro bancos de 32KB y así sucesivamente, la cosa es que el procesador ve la RAM por partes, no toda a la vez. Hay un chip que se encarga de seleccionar qué banco de memoria puede ver el procesador en un determinado momento.
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10907
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por ZZT »

Chalo_mhz escribió:Hace tiempo me puse a estudiar un poco del codigo de maquina para analizar el funcionamiento del 6502.
Tengo entendido que el MOS 6502, al igual que el Zilog Z80 pueden direccionar hasta 64Kb de RAM como maximo, entonces
¿quien me puede dar una explicacion de como el atari 130XE, el C=128 o el MSX2 son de 8-bit y direccionan 128Kb de RAM?

Gracias de antemano.
Se hace a la mala como dice el walky.

Toman una sección de la memoria previamente designada y lo que deberia ir en ella se escribe en la seccion extendida de la memoria. Todo esto es posible con chips añadidos (bank switching) al diseño original del Atari. No recuerdo bien si el bloque es de 8K o 16K, pero para el caso la explicación es totalmente válida.

Imagen
Segun este diagramita que he hecho, cada bloque de 8K en vez de guardarse en la memoria NORMAL del Atari se direcciona al banco EXTENDIDO. Logrando asi que el compu tenga 128K o más incluso como el mio que tiene 256K. ::rid

salu2
Avatar de Usuario
Chalo_mhz
expert
expert
Mensajes: 1107
Registrado: Dom Feb 18, 2007 6:42 pm
Reputación: 0
Ubicación: Maipu, Santiago
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por Chalo_mhz »

Que buena, se me aclara harto la pelicula, pero entre cada cambio entre banco y banco,
¿no afecta a la velocidad de los procesos de la maquina?
(porque ahora el procesador tiene la tarea extra de conmutar los bancos de memoria)

¿a no ser q los cambios de bancos ocurran con poca frecuencia, y por lo tanto, afecte insignificantemente a la velocidad de los procesos?
(se me ocurre)
Última edición por Chalo_mhz el Mié May 13, 2009 11:09 am, editado 2 veces en total.
Avatar de Usuario
Walky
expert
expert
Mensajes: 3857
Registrado: Jue Nov 09, 2006 1:59 pm
Reputación: 0
Ubicación: No sé! XD
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por Walky »

Supongo que lo que hace el procesador es enviar "claves" predefinidas al integrado diciéndole cuándo cambiar de banco, así que no creo que afecte tanto. Corríjanme si me equivoco.
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10907
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por ZZT »

Aquí esta el atasco, esa memoria extendida en el Atari no es de acceso directo. El banco EXTENDIDO se usa mayormente como disco virtual. Osea si tenemos juegos grandes, las etapas se guardan ahi para ir leyendolas a medidas que avanzamos, como lo hace una play desde el CD por ejemplo.

Creo, sin estar seguro, que los polacos descubrieron o aprendieron a programar usando acceso directo a este banco. Habria que investigar o esperar que Willysoft aclare bien este tema.

salu2
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por fcatrin »

No es necesario acceder de forma especial a esos bancos, una vez que están mapeados ya están al alcance del 6502 y se tratan como memoria normal.

Como bien dice ZZT, no tiene sentido estar mapeando a cada rato, sino que mapeas 16K, ocupas lo que necesitas y mapeas otro banco si necesitas acceder a otro banco de memoria.

Las "claves" que se envian al mapper son mas que nada el número del banco que se quiere mapear. El 130XE tenia 64KB disponibles sin necesidad de mapear, y otros 64KB dividio en 4 bancos de 16KB que se mapeban en una ubicación fija de memoria.

Como dato aparte, el 800xl y 65xe tambien necesitaban mapear RAM si se quería usar toda. En la configuracion típica, la RAM llegaba hasta los 40KB, a partir de ahi venía la ROM del Basic (8KB) y esa se podia "desmapear" para "mapear" un bloque de RAM si es que no se necesitaba ocupar el basic. Cuando se iniciaba el computador con la tecla Option se iniciaba el computador en ese modo.

Más arriba estaban mapeados los puertos de IO y esos no se podían reemplazar por nada, asi que eran direcciones que no se podían ocupar para almacenar datos.

La zona más alta de la memoria tenía la ROM del OS del Atari, y también se podía eliminar y mapar como RAM. Lo que uno hacía básicamente era desactivar las interrupciones para luego copiar todo el OS a Ram, luego volver a activar las interrupciones y voila! El SO era modificable en RAM. Asi se podía modificar, se usó harto para parchar las rutinas de carga de cassete y hacer algunas "mejoras".

Si un juego necesitaba más de 48KB, podía hacer esto y ocupar las zonas de memoria de rutinas del OS que no se necesitaban : impresión de caracteres, seteos de modos de video, etc.

Si no se entendió, y hay interesados puedo dibujar un monito
Avatar de Usuario
Chalo_mhz
expert
expert
Mensajes: 1107
Registrado: Dom Feb 18, 2007 6:42 pm
Reputación: 0
Ubicación: Maipu, Santiago
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por Chalo_mhz »

fcatrin escribió:No es necesario acceder de forma especial a esos bancos, una vez que están mapeados ya están al alcance del 6502 y se tratan como memoria normal.

Como bien dice ZZT, no tiene sentido estar mapeando a cada rato, sino que mapeas 16K, ocupas lo que necesitas y mapeas otro banco si necesitas acceder a otro banco de memoria.

Las "claves" que se envian al mapper son mas que nada el número del banco que se quiere mapear. El 130XE tenia 64KB disponibles sin necesidad de mapear, y otros 64KB dividio en 4 bancos de 16KB que se mapeban en una ubicación fija de memoria.

Como dato aparte, el 800xl y 65xe tambien necesitaban mapear RAM si se quería usar toda. En la configuracion típica, la RAM llegaba hasta los 40KB, a partir de ahi venía la ROM del Basic (8KB) y esa se podia "desmapear" para "mapear" un bloque de RAM si es que no se necesitaba ocupar el basic. Cuando se iniciaba el computador con la tecla Option se iniciaba el computador en ese modo.

Más arriba estaban mapeados los puertos de IO y esos no se podían reemplazar por nada, asi que eran direcciones que no se podían ocupar para almacenar datos.

La zona más alta de la memoria tenía la ROM del OS del Atari, y también se podía eliminar y mapar como RAM. Lo que uno hacía básicamente era desactivar las interrupciones para luego copiar todo el OS a Ram, luego volver a activar las interrupciones y voila! El SO era modificable en RAM. Asi se podía modificar, se usó harto para parchar las rutinas de carga de cassete y hacer algunas "mejoras".

Si un juego necesitaba más de 48KB, podía hacer esto y ocupar las zonas de memoria de rutinas del OS que no se necesitaban : impresión de caracteres, seteos de modos de video, etc.

Si no se entendió, y hay interesados puedo dibujar un monito
Solo si tienes tiempo y animo, te lo agradeceria, ya q estoy recien entrando en el mundo del assembler y tengo q aprenderlo a cabalidad, de hecho esto me va a servir para mi carrera. :-D
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por fcatrin »

Por tí demás compadre
Avatar de Usuario
WillySoft
expert
expert
Mensajes: 657
Registrado: Mar Nov 07, 2006 10:02 pm
Reputación: 2

Re: Duda acerca del procesador 6502

Mensaje por WillySoft »

ZZT escribió:Aquí esta el atasco, esa memoria extendida en el Atari no es de acceso directo. El banco EXTENDIDO se usa mayormente como disco virtual. Osea si tenemos juegos grandes, las etapas se guardan ahi para ir leyendolas a medidas que avanzamos, como lo hace una play desde el CD por ejemplo.

Creo, sin estar seguro, que los polacos descubrieron o aprendieron a programar usando acceso directo a este banco. Habria que investigar o esperar que Willysoft aclare bien este tema.

salu2
En honor a la verdad, los polacos han utilizado la memoria extendida para almacenar datos o código, según lo que necesitasen.

Hay un tema interesante que no se ha tocado acá, y es quién puede acceder a la memoria extendida. Por lo general, el acceso a los bancos switcheados lo accede el 6502. Pero, en el caso particular del 130XE (acá no vale el 800 XL extendido, 256Kb, 512, 1088, etc.), tiene además la posibilidad de elegir si además el chip ANTIC pueda acceder al mismo banco. ¿Qué significa esto?, que se pueden almacenar imágenes directamente al banco switcheado, y que el ANTIC los despliegue, haciendo animaciones a pantalla completa, por ejemplo.

Un ejemplo de esa capacidad se puede ver con el programa ENVISION, de la revista ANTIC, ahí utiliza los bancos adicionales del 130XE para guardar FONTS y desplegarlos en pantalla. No es compatible con un 800XL extendido, ni con otras ampliaciones de memoria.

Saludos.
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por fcatrin »

Aqui va la explicación prometida.

Esta es la forma en que está organizada la memoria en XE/XL

Código: Seleccionar todo

|----------------------------------------------------|
|  Dirección  | Largo | Tipo  | Contenido            |
|----------------------------------------------------|
| D800 - FFFF |  10KB | ROM   | Sistema Operativo    |
| D000 - D7FF |   2KB | PORTS | GTIA/POKEY/PIA/ANTIC |
| C000 - CFFF |   4KB | ROM   |                      |
| A000 - BFFF |   8KB | ROM   | BASIC / CATRIDGE     |
| 8000 - 9FFF |   8KB | RAM   |                      |
| 4000 - 7FFF |  16KB | RAM   | Banco 130XE          |
| 0000 - 3FFF |  16KB | RAM   |                      |
|----------------------------------------------------|
La memoria ROM que está desde A000 hasta BFFF se puede convertir en RAM poniendo el bit 1 del port 54017 en 0
La memoria ROM que parte desde C000 hasta FFFF se puede convertir en RAM poniendo el bit 0 del port 54017 en 0
Se puede decir que en el port 54017:
* bit 0 : 1 indica BASIC, 0 indica RAM
* bit 1 : 1 indica Sistema operativo, 0 indica RAM

Ojo que en ningun caso las direcciones entre D000 y D7FF cambian de función, ya que esas siempre se usan como ports

En el 130XE hay un banco secundario de 64KB. Este se divide en 4 páginas de 16KB.
La memoria que está entre 4000 y 7FFF puede estar mapeada a el banco principal, que sería igual que el 800XL/65XE, o a uno de las 4 páginas del banco secundario. Además se puede modificar el acceso para indicar si la CPU o el video acceden al banco principal o a uno de las 4 páginas.

Nuevamente en 54017, tenemos ahora los siguientes bits:
* bit 5 : 1 indica que el video accede al banco principal. 0 indica que accede al banco secundario
* bit 4 : 1 indica que la CPU accede al banco principal. 0 indica que accede al banco secundario
* bits 3 y 2 : indican el número de página del banco secundario que se accederá.

Quedo atento a las dudas
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10907
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por ZZT »

La memoria ROM que está desde A000 hasta BFFF se puede convertir en RAM poniendo el bit 1 del port 54017 en 0
La memoria ROM que parte desde C000 hasta FFFF se puede convertir en RAM poniendo el bit 0 del port 54017 en 0
Hola Franco, yo andube intruseando por ahí un par de años atras y el compu 800XL se me colgaba. La idea era ocupar las 4 patas desocupadas del port B de la PIA para controlar algunas cosillas de hardware externo. Pero al pokearla se me pegaba el compu. Puse unos leds para comprobar que mi poke no afectaba el valor de las patas que controlaban la habilitación del basic y del so. Y igual se me pegaba la lesera.
?@
Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 470
Registrado: Jue Abr 10, 2008 2:45 pm
Reputación: 5
Ubicación: Quilpué, Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por fcatrin »

ZZT y tampoco tocabas el pin 7? porque también es importante.

La descripción completa está aqui :
http://www.atariarchives.org/mapping/ap ... .php#54017

Otra opción para controlar LEDs era usar los puertos de joystick como puertos de salida. Una vez lo usé para enviar datos desde un Atari a un MSX como si fuera un puerto serial y funcionó sin problemas. Era "la papa" porque podías usar los conectores DB9 que estaban por todos lados.

No recuerdo bien como era, pero re-leyendo el mapping de atari sería mas o menos asi:

poke 54018,48 ; esto es para indicar que vas a configurar el PORTA para indicar si actúa como entrada o salida
poke 54016,255 ; todos los bits serán de salida
poke 54018,52 ; ahora podemos comenzar a transmitir datos usando el PORTA como salida

Para dejarlo como esta configurado de fábrica, es decir, todos los pines son de entrada:

poke 54018,48
poke 54016,0
poke 54018,52

http://www.atariarchives.org/mapping/me ... .php#54016
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10907
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Re: Duda acerca del procesador 6502

Mensaje por ZZT »

fcatrin escribió:ZZT y tampoco tocabas el pin 7? porque también es importante.

La descripción completa está aqui :
http://www.atariarchives.org/mapping/ap ... .php#54017

Otra opción para controlar LEDs era usar los puertos de joystick como puertos de salida. Una vez lo usé para enviar datos desde un Atari a un MSX como si fuera un puerto serial y funcionó sin problemas. Era "la papa" porque podías usar los conectores DB9 que estaban por todos lados.

No recuerdo bien como era, pero re-leyendo el mapping de atari sería mas o menos asi:

poke 54018,48 ; esto es para indicar que vas a configurar el PORTA para indicar si actúa como entrada o salida
poke 54016,255 ; todos los bits serán de salida
poke 54018,52 ; ahora podemos comenzar a transmitir datos usando el PORTA como salida

Para dejarlo como esta configurado de fábrica, es decir, todos los pines son de entrada:

poke 54018,48
poke 54016,0
poke 54018,52

http://www.atariarchives.org/mapping/me ... .php#54016
Todo eso ya lo se Franco, no me refiero al port del joystick que ya lo tenia todo ocupado y por eso queria ocupar 4 bits que estaban desocupados del otro puerto. :(
Responder