CURSO DE ASSEMBLER
- ZZT
- Site Admin
- Mensajes: 10900
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 10
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Amigo batman, no le haga caso a estos cabros que no saben na (es broma).
Amigo namelesu, lo que hace cada posición de memoria en los Atari esta determinado por el Sistema Operativo. Cuando tu prendes el compuador, la memoria ROM se copia en la RAM. Por eso en vez de 65535 de memoria tenemos 40K y algo nomas disponible para el usuario.
Por eso las posiciones en la RAM podemos leerlas o cambiarlas. La pos. 82 controla el margen, la 710 el color de fondo, la 764 es el teclado, etc etc etc.
Asi que resumiendo, el control no es por hardware. Cada dirección controla el hardware, pero eso esta determinado por el software que viene en la ROM.
Efectivamente lo que tienes que conseguirte Batman, es el Mapping de Atari, ahi esta la papa.
Amigo namelesu, lo que hace cada posición de memoria en los Atari esta determinado por el Sistema Operativo. Cuando tu prendes el compuador, la memoria ROM se copia en la RAM. Por eso en vez de 65535 de memoria tenemos 40K y algo nomas disponible para el usuario.
Por eso las posiciones en la RAM podemos leerlas o cambiarlas. La pos. 82 controla el margen, la 710 el color de fondo, la 764 es el teclado, etc etc etc.
Asi que resumiendo, el control no es por hardware. Cada dirección controla el hardware, pero eso esta determinado por el software que viene en la ROM.
Efectivamente lo que tienes que conseguirte Batman, es el Mapping de Atari, ahi esta la papa.
Ehhh.. don ZZT, no estoy muy de acuerdo con Ud. La verdad es que el monitor del Atari (el Sistema Operativo) tiene harto que ver con lo que dice, pero en sí, las direcciones de memoria se mapean con el hardware a través de las interfaces eléctricas (decodificadores de direcciones de memoria, compuertas lógicas, etc.). Las direcciones que Ud. refiere son copias (direcciones SHADOW) de las originales mapeadas por hardware en los últimos 16 kB del Atari. En sí, hay que recordar que las direcciones de memoria de los últimos 16 kB se corresponden con las direcciones de los chips de Atari (ANTIC, PIA, POKEY, FREDDY).
Hay otras direcciones de memoria que no están mapeadas con el hardware, sino que controlan aspectos del sistema operativo de Atari (es decir, aspectos del software de Atari, como por ejemplo, la cantidad de letras que podemos agregar en una línea, el intérprete de ATARI BASIC, mensajes en la pantalla, manejo de archivos, etc.) y en esas sí que tiene razón. Pero a la vez también existen las de hardware que mencioné arriba.
Hay otras direcciones de memoria que no están mapeadas con el hardware, sino que controlan aspectos del sistema operativo de Atari (es decir, aspectos del software de Atari, como por ejemplo, la cantidad de letras que podemos agregar en una línea, el intérprete de ATARI BASIC, mensajes en la pantalla, manejo de archivos, etc.) y en esas sí que tiene razón. Pero a la vez también existen las de hardware que mencioné arriba.
Lo otro: la memoria ROM no se copia en la RAM exactamente. El chip de ROM del sistema operativo de Atari ocupa los 16 kB superiores de la memoria por hardware, que no es lo mismo que copiarse en la RAM. De hecho, si el sistema operativo se copiara en la RAM, al hacer un POKE en esas posiciones (de la 40960 hasta la 65535), podríamos modificar zonas de código del sistema operativo.
Que los 16 kB del S.O. ROM de Atari puedan copiarse en una RAM es otra cosa. En sí, no recuerdo muy bien, pero me parece que copiarse en la RAM es la técnica que ocupan softwares como el TRANSLATOR y el BOSS XL (¿o era BOSS XE?) para poder ocupar software antiguo de Atari en los nuevos (dije "nuevos", qué loco... jojojoj) computadores, XL y XE.
Que los 16 kB del S.O. ROM de Atari puedan copiarse en una RAM es otra cosa. En sí, no recuerdo muy bien, pero me parece que copiarse en la RAM es la técnica que ocupan softwares como el TRANSLATOR y el BOSS XL (¿o era BOSS XE?) para poder ocupar software antiguo de Atari en los nuevos (dije "nuevos", qué loco... jojojoj) computadores, XL y XE.
Y claro.... la posición 580 está definida no como un control hardware de reseteo, sino que software. La posición 580 le indica al SISTEMA OPERATIVO DEL ATARI que ejecute las funciones de reinicialización realizadas luego de encender el computador (es decir, limpiar la memoria y detectar errores software y hardware). En eso me equivoqué: la posición 580 es una localización de memoria de control para el sistema operativo directamente (es decir, es un CONTROL DE SOFTWARE específico, no afecta a algún chip directamente). Pero, por ejemplo, la localización 54279 permite decirle al chip ANTIC dónde buscar los datos relacionados con el diseño gráfico de los Players/Missiles, por lo que la posición 54279 está mapeada directamente al chip ANTIC (es un CONTROL DE HARDWARE directo sobre el chip).
Así es mis queridos jovenes
Pasamos piola
Exactamente los chip del Atari, Pokey, Rom, etc están mapeadas en posiciones de memoria, cada una tiene una dirección shadow (real) que es sobre la cual está mapeado el chip y una dirección que es la que nosotros modificamos, y es leida por una interrupción para modificar la dirección real, por ejemplo, para cambiar el color de fondo.
Si lo hago en Basic:
Cambia el color de fondo a negro.
Si lo hago por poke:
Estoy diciendole a la interrupción que quiero que el color de fondo sea negro, y lo mantenga. En el siguiente barrido de pantalla, tomará ese valor y me deja la pantalla en negro.
Si lo hago por el shadow:
Se darán cuenta que aparentemente no hace nada, pero si hacen:
Se darán cuenta que cambia el color, pero sin embargo vuelve al color original, ya que la interrupción la devuelve a el valor azul que es 148.
Vean:
Este principio también permite hacer el efecto rainbow, pero debe hacerse usando los sincronismos horizontales si no salen puras rayas locas.
Salu2
Pasamos piola
Exactamente los chip del Atari, Pokey, Rom, etc están mapeadas en posiciones de memoria, cada una tiene una dirección shadow (real) que es sobre la cual está mapeado el chip y una dirección que es la que nosotros modificamos, y es leida por una interrupción para modificar la dirección real, por ejemplo, para cambiar el color de fondo.
Si lo hago en Basic:
Código: Seleccionar todo
setcolor 2, 0, 0
Si lo hago por poke:
Código: Seleccionar todo
poke 710, 0
Si lo hago por el shadow:
Código: Seleccionar todo
poke 53272, 0
Código: Seleccionar todo
10 poke 53272, 0
20 goto 10
Vean:
Código: Seleccionar todo
?peek(710)
Salu2
- ZZT
- Site Admin
- Mensajes: 10900
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 10
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Para aclarar este punto. Cuando uno invoca una dirección de memoria, algunos chips reaccionan ante su valor y se producen acciones en el hardware, tal como dice namelesu, son los decodificadores de direcciones (aunque realmente hay uno solo 74LS138), los encargados de eso. Todas estas acciones entan previstas por el creador del sistema operativo, así que podemos decir que es un baile perfectamnte sincronizado entre el sorftware y el hardware.Asi que resumiendo, el control no es por hardware. Cada dirección controla el hardware, pero eso esta determinado por el software que viene en la ROM.
Y otro punto que me parece bueno explicar es que todo lo que modificamos está en la RAM la cual se borra al apagar el Atari. Asi que no tengan temor a meterle mano. Todo el Sistema Operativo esta en una memoria ROM, la cual NO es la que modificamos cuando hacemos un poke. La ROM NO se puede modificar, asi esta hecha.
- ZZT
- Site Admin
- Mensajes: 10900
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 10
- Ubicación: La Florida-Santiago-Chile
- Contactar:
Hoy aprendí:
El acumulador A no se puede incrementar ni decrementar, eso es fatal!! Pero por suerte el 6502 tiene 2 acumuladores más, el X y el Y. Esos si tienen las instrucciones INX INY DEX DEY. Salvado!!
Un cosa sencilla en basic, como imprimir una letra o número (PRINT) es bastante más complicado en asm. Dolor de cabeza.
Y algo bien importante que aprendí, es a usar el punto y coma ( ; ) esto reemplaza al REM del basic, muy útil para dejar comentarios. Se usa al comienzo de una línea en blanco o bien después de una línea de instrucciones, para recordar que cosa hace (en ese caso recuerden las tabulaciones). vean la foto (líneas 23 y 24):
Mi primer programa útil, juego de luces por el puerto del joy.
Gracias profe Bill.
El acumulador A no se puede incrementar ni decrementar, eso es fatal!! Pero por suerte el 6502 tiene 2 acumuladores más, el X y el Y. Esos si tienen las instrucciones INX INY DEX DEY. Salvado!!
Un cosa sencilla en basic, como imprimir una letra o número (PRINT) es bastante más complicado en asm. Dolor de cabeza.
Y algo bien importante que aprendí, es a usar el punto y coma ( ; ) esto reemplaza al REM del basic, muy útil para dejar comentarios. Se usa al comienzo de una línea en blanco o bien después de una línea de instrucciones, para recordar que cosa hace (en ese caso recuerden las tabulaciones). vean la foto (líneas 23 y 24):
Mi primer programa útil, juego de luces por el puerto del joy.
Gracias profe Bill.
- ZZT
- Site Admin
- Mensajes: 10900
- Registrado: Mar Nov 07, 2006 2:45 pm
- Reputación: 10
- Ubicación: La Florida-Santiago-Chile
- Contactar:
El asm que escribimos en el editplus es transformado a código puro al ensamblar.batman escribió:porfa corrijanme si entendí bien o no...
cuando enviamos codigo asm, este se pasa a binario y es enviado a la memoria ram, la cual es consultada por el procesador, quien es el encargado de comunicarse electricamente con las demas interfaces electronicas fisicas que hay sobre la placa. es así?
B!
Al cargar ese binario resultante del ensamble (.xex) en el Atari, sea emulador o real, es el binario lo que el atari entiende.
Efectivamente el asm es cargado en la RAM, de donde el sistema operativo y el la CPU interpretan las instrucciones para operar con los dispositivos, calculos, o lo que sea.
Re: CURSO DE ASSEMBLER
Holas
Estoy haciendo el curso de assembler y me asalta una duda.
Tengo entendido que una interrupción es un trozo de código que es ejecutado cuando la cpu recibe una señal de interrupción (valga la redundancia) entonces la cpu deja lo que está haciendo y pasa a ejecutar el código de la interrupcíón (de nuevo), para retornar a lo que estaba antes de recibir la ídem, como por ejemplo una pulsación de teclado, una comunicación serial, una combinación como ctrl-alt-supr, etc.
Ahora la pregunta. En el ejemplo del capitulo 6, donde se cambia los colores del fondo de la pantalla, entiendo que 'rutina' es el código que se ejecutará al recibir cierta 'interrupción'... que interrupción es la que causa que se ejecute este código? ya que me di cuenta que si se pone más código en el lugar de loop, éste continúa ejecutándose como si nada, por ejemplo:
El ejemplo no es más que una mezcla entre los dos ejemplos del cap.6, pero pueden ver que si en lugar del loop se pone más código este se ejecuta a pesar que los colores siguen cambiando. Alguien me explica esto porfa? cual es la 'interrupción' que causa que se ejecute el código de cambio de colores?
Gracias y saludos
Leo
Estoy haciendo el curso de assembler y me asalta una duda.
Tengo entendido que una interrupción es un trozo de código que es ejecutado cuando la cpu recibe una señal de interrupción (valga la redundancia) entonces la cpu deja lo que está haciendo y pasa a ejecutar el código de la interrupcíón (de nuevo), para retornar a lo que estaba antes de recibir la ídem, como por ejemplo una pulsación de teclado, una comunicación serial, una combinación como ctrl-alt-supr, etc.
Ahora la pregunta. En el ejemplo del capitulo 6, donde se cambia los colores del fondo de la pantalla, entiendo que 'rutina' es el código que se ejecutará al recibir cierta 'interrupción'... que interrupción es la que causa que se ejecute este código? ya que me di cuenta que si se pone más código en el lugar de loop, éste continúa ejecutándose como si nada, por ejemplo:
Código: Seleccionar todo
*=$6000
sysvbv=$e45c
xitvbv=$e462
pr=$f2b0
inicio
lda #7
ldy #<rutina
ldx #>rutina
jsr sysvbv ;setea interrupcion
loop
lda #'H
jsr pr
lda #'o
jsr pr
lda #'l
jsr pr
lda #'a
jsr pr
lda #155
jsr pr
jmp loop
rutina ;esto se ejecutaría como interrupcion
lda $14 ;contador 1/60seg 0 a 255
sta $2c6
jmp xitvbv
*=$2e0
.word inicio
Gracias y saludos
Leo
Re: CURSO DE ASSEMBLER
Hola,
La interrupción que se ejecuta se conoce como "Vertical Blank Interrupt", que es cuando se produce cada vez que el Atari genera una pantalla completa. Como cada pantalla se produce cada 1/60 de segundo (para NTSC en este caso, en PAL, 1/50), es una interrupción muy útil para rutinas de conteo de tiempos y otros por el estilo.
En mayor profundidad, cada vez que el chip ANTIC termina de dibujar una pantalla, envía una señal al procesador 6502 para ejecutar lo que se llama una interrupción no enmascarable (NMI), en el cual va a una rutina especial en la ROM del atari que detecta el tipo de interrupción y procede a ejecutarla.
Espero haber despejado tu duda. Saludos.
La interrupción que se ejecuta se conoce como "Vertical Blank Interrupt", que es cuando se produce cada vez que el Atari genera una pantalla completa. Como cada pantalla se produce cada 1/60 de segundo (para NTSC en este caso, en PAL, 1/50), es una interrupción muy útil para rutinas de conteo de tiempos y otros por el estilo.
En mayor profundidad, cada vez que el chip ANTIC termina de dibujar una pantalla, envía una señal al procesador 6502 para ejecutar lo que se llama una interrupción no enmascarable (NMI), en el cual va a una rutina especial en la ROM del atari que detecta el tipo de interrupción y procede a ejecutarla.
Espero haber despejado tu duda. Saludos.
- mode2
- novice
- Mensajes: 39
- Registrado: Mié Abr 15, 2009 1:17 pm
- Reputación: 0
- Ubicación: Sevilla, España.
Re: CURSO DE ASSEMBLER
Muy interesante.
A ver si soy capaz de poner en funcionamiento mi 800XL. Le tengo que hacer una fuente de alimentación y me pongo a bichear este curso.
Gracias por el aporte!
A ver si soy capaz de poner en funcionamiento mi 800XL. Le tengo que hacer una fuente de alimentación y me pongo a bichear este curso.
Gracias por el aporte!
- fcatrin
- hard player
- Mensajes: 470
- Registrado: Jue Abr 10, 2008 2:45 pm
- Reputación: 5
- Ubicación: Quilpué, Chile
- Contactar:
Re: CURSO DE ASSEMBLER
Complementando un poco lo ya dicho aquí:
Hay programas que copian la ROM a RAM para modificar algunas rutinas. Es lo que hacen algunos cargadores y copiadores para parchar el sistema operativo y así mejorar algunas cosas como la detección de la velocidad de la cinta, lo que permite lograr una carga más confiable a velocidades más altas.
Para copiar la ROM a RAM basta deshabilitar las interrupciones (CLI - para que no se intente ejecutar nada desde el SO en forma asíncrona) y luego comenzar a copiar habilitando y deshabilitando la ROM. Al final, se rehabilitan las interrupciones (STI)
Los registros llamados SHADOW son para mantener una copia del estado de registros de hardware en RAM normal, y también para evitar que el cambio de algunos registros se vea mal. Por ejemplo si cambiaramos el color de fondo en cualquier momento, se vería un cuadro con un pedazo de un color y el pedazo de otro color. Por eso, en cada interrupción vertical, el sistema operativo copia lo que encuentra en los registros shadow a los registros reales, ya que en ese momento no se está dibujando nada en pantalla. Lo mismo para otros valores como el inicio del Display List, los registros de sonido o la direccion base del set de caracteres.
Como los registros reales se pueden cambiar en cualquier momento, esto se aprovecha para obtener distintos colores en un solo cuadro, pero al final el sistema operativo siempre restaura los colores desde shadow cuando se produce la interrupción vertical.
Hay programas que copian la ROM a RAM para modificar algunas rutinas. Es lo que hacen algunos cargadores y copiadores para parchar el sistema operativo y así mejorar algunas cosas como la detección de la velocidad de la cinta, lo que permite lograr una carga más confiable a velocidades más altas.
Para copiar la ROM a RAM basta deshabilitar las interrupciones (CLI - para que no se intente ejecutar nada desde el SO en forma asíncrona) y luego comenzar a copiar habilitando y deshabilitando la ROM. Al final, se rehabilitan las interrupciones (STI)
Los registros llamados SHADOW son para mantener una copia del estado de registros de hardware en RAM normal, y también para evitar que el cambio de algunos registros se vea mal. Por ejemplo si cambiaramos el color de fondo en cualquier momento, se vería un cuadro con un pedazo de un color y el pedazo de otro color. Por eso, en cada interrupción vertical, el sistema operativo copia lo que encuentra en los registros shadow a los registros reales, ya que en ese momento no se está dibujando nada en pantalla. Lo mismo para otros valores como el inicio del Display List, los registros de sonido o la direccion base del set de caracteres.
Como los registros reales se pueden cambiar en cualquier momento, esto se aprovecha para obtener distintos colores en un solo cuadro, pero al final el sistema operativo siempre restaura los colores desde shadow cuando se produce la interrupción vertical.
- dogdark
- hard player
- Mensajes: 384
- Registrado: Dom Nov 12, 2006 10:01 am
- Reputación: 1
- Ubicación: en todos lados
- Contactar:
Re: CURSO DE ASSEMBLER
quede mas colgado
COMO SE HACE AAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHH10 GR.0:POKE 710,0
20 ? "INGRESE NUMERO"
30 INPUT A
40 ? A