Duda acerca del procesador 6502
- Chalo_mhz
- expert
- Mensajes: 1107
- Registrado: Dom Feb 18, 2007 6:42 pm
- Reputación: 0
- Ubicación: Maipu, Santiago
- Contactar:
Duda acerca del procesador 6502
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.
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.
- Walky
- 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
¿En una de esa lo hace "a la mala" (mappers)?
- 133MHz
- 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
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.
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.
- ZZT
- 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
Se hace a la mala como dice el walky.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.
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.

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.

salu2
- Chalo_mhz
- 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
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)
¿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.
- Walky
- 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
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.
- ZZT
- 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
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
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
- fcatrin
- 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
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
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
- Chalo_mhz
- 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
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.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

- fcatrin
- 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
Por tí demás compadre
Re: Duda acerca del procesador 6502
En honor a la verdad, los polacos han utilizado la memoria extendida para almacenar datos o código, según lo que necesitasen.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
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.
- fcatrin
- 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
Aqui va la explicación prometida.
Esta es la forma en que está organizada la memoria en XE/XL
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
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 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
- ZZT
- 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
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.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

- fcatrin
- 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
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
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
- ZZT
- 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
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.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
