CURSO DE ASSEMBLER

ATARI Lo que nos ha unido en el tiempo. XL XE ST 2600 7800 Jaguar Lynx.
namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputation: 0

Mensaje por namelessu »

Otra cosa.... yo tengo el "Mapping The Atari" en papel (es una fotocopia, por si acaso). Si alguien quisiera sacarle copia, podríamos juntarnos en el metro e ir a Estación Central a dejar el libro. Allá cobran $10 por página.

Nos vemos :P

Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 11229
Registrado: Mar Nov 07, 2006 2:45 pm
Reputation: 0
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

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. :wink:

namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputation: 0

Mensaje por namelessu »

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.

namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputation: 0

Mensaje por namelessu »

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.

namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputation: 0

Mensaje por namelessu »

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).

Avatar de Usuario
parche
expert
expert
Mensajes: 1681
Registrado: Mar Nov 07, 2006 2:50 pm
Reputation: 0
Contactar:

Mensaje por parche »

Así es mis queridos jovenes :8-

Pasamos piola :-D

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
Cambia el color de fondo a negro.

Si lo hago por poke:

Código: Seleccionar todo

poke 710, 0
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:

Código: Seleccionar todo

poke 53272, 0
Se darán cuenta que aparentemente no hace nada, pero si hacen:

Código: Seleccionar todo

10 poke 53272, 0
20 goto 10
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:

Código: Seleccionar todo

?peek(710)
Este principio también permite hacer el efecto rainbow, pero debe hacerse usando los sincronismos horizontales si no salen puras rayas locas.

Salu2

Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 11229
Registrado: Mar Nov 07, 2006 2:45 pm
Reputation: 0
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

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.
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.
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. :-D

Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 11229
Registrado: Mar Nov 07, 2006 2:45 pm
Reputation: 0
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

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):

Imagen
Mi primer programa útil, juego de luces por el puerto del joy. :P

Gracias profe Bill.

Avatar de Usuario
batman
expert
expert
Mensajes: 967
Registrado: Mar Abr 17, 2007 4:35 pm
Reputation: 0

Mensaje por batman »

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!

Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 11229
Registrado: Mar Nov 07, 2006 2:45 pm
Reputation: 0
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

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!
El asm que escribimos en el editplus es transformado a código puro al ensamblar.
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.

Avatar de Usuario
leorivas
novice
novice
Mensajes: 32
Registrado: Dom Ago 02, 2009 12:31 am
Reputation: 0
Contactar:

Re: CURSO DE ASSEMBLER

Mensaje por leorivas »

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:

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
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

Avatar de Usuario
WillySoft
expert
expert
Mensajes: 666
Registrado: Mar Nov 07, 2006 10:02 pm
Reputation: 0

Re: CURSO DE ASSEMBLER

Mensaje por WillySoft »

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.

Avatar de Usuario
mode2
novice
novice
Mensajes: 39
Registrado: Mié Abr 15, 2009 1:17 pm
Reputation: 0
Ubicación: Sevilla, España.

Re: CURSO DE ASSEMBLER

Mensaje por mode2 »

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! :wink:

Avatar de Usuario
fcatrin
hard player
hard player
Mensajes: 481
Registrado: Jue Abr 10, 2008 2:45 pm
Reputation: 0
Ubicación: Quilpué, Chile
Contactar:

Re: CURSO DE ASSEMBLER

Mensaje por fcatrin »

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.

Avatar de Usuario
dogdark
hard player
hard player
Mensajes: 385
Registrado: Dom Nov 12, 2006 10:01 am
Reputation: 0
Ubicación: en todos lados
Contactar:

Re: CURSO DE ASSEMBLER

Mensaje por dogdark »

quede mas colgado
10 GR.0:POKE 710,0
20 ? "INGRESE NUMERO"
30 INPUT A
40 ? A
COMO SE HACE AAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHH

Responder