CURSO DE ASSEMBLER

ATARI Lo que nos ha unido en el tiempo. XL XE ST 2600 7800 Jaguar Lynx.
Avatar de Usuario
batman
expert
expert
Mensajes: 945
Registrado: Mar Abr 17, 2007 4:35 pm
Reputación: 0

Mensaje por batman »

y si yo quisiera ir aprendiendo contigo, por donde parto? cacho q primero con cachar el procesador 6502?

B!
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10900
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

batman escribió:y si yo quisiera ir aprendiendo contigo, por donde parto? cacho q primero con cachar el procesador 6502?

B!
Lo primero que debes hacer es instalar el editplus y leer los 8 capitulos que escribió willy. Despues seguimos con lo que yo voy descubriendo y aprendiendo. :-D

http://www.retrogames.cl/clases.html
Avatar de Usuario
batman
expert
expert
Mensajes: 945
Registrado: Mar Abr 17, 2007 4:35 pm
Reputación: 0

Mensaje por batman »

ZZT escribió:
batman escribió:y si yo quisiera ir aprendiendo contigo, por donde parto? cacho q primero con cachar el procesador 6502?

B!
Lo primero que debes hacer es instalar el editplus y leer los 8 capitulos que escribió willy. Despues seguimos con lo que yo voy descubriendo y aprendiendo. :-D

http://www.retrogames.cl/clases.html
borro lo dicho, ya caché :P

B!
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10900
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

batman escribió:
ZZT escribió:
batman escribió:y si yo quisiera ir aprendiendo contigo, por donde parto? cacho q primero con cachar el procesador 6502?

B!
Lo primero que debes hacer es instalar el editplus y leer los 8 capitulos que escribió willy. Despues seguimos con lo que yo voy descubriendo y aprendiendo. :-D

http://www.retrogames.cl/clases.html
el editplus de evaluacion? ese?
Yes, si encuentras el crack me avisas por aqui, pq no lo tengo. :-D
Avatar de Usuario
batman
expert
expert
Mensajes: 945
Registrado: Mar Abr 17, 2007 4:35 pm
Reputación: 0

Mensaje por batman »

preguntas 1:

cuando dicen "direccionamiento del Atari 8-bits" a que se refieren? eso es algo que nunca entendí :(

en ASM se habla caleta del direccionamiento de 8, 16, 32 bits, pero alguien podría explicarlo para newbies?

B!
Avatar de Usuario
parche
expert
expert
Mensajes: 1639
Registrado: Mar Nov 07, 2006 2:50 pm
Reputación: 0
Contactar:

Mensaje por parche »

Batman.

Los direccionamientos son así

1 bit = 1 ó 0
1 nibble = 1111 4 bits
1 byte = 11111111 = 8 bits
1 word o palabra = 11111111 11111111 o 16 bits

Y así sucesivamente....

Ahora yendo a tu pregunta. Los computadores hablan de 1's y 0's no conocen otro lenguaje por lo que todo al final se traduce a esto.

Cuando uno habla de direccionamiento, se refiere a como llegar a una posición de memoria específica y los computadores, según su resolución en bits usan diferentes técnicas para llegar hasta esa posición.

Por ejemplo.

Se dice que Atari es un computador de 8 bits. Esto significa que Atari puede direccionar de 0 a 255 directamente y no más, para alcanzar una posición de memoria mayor se debe apoyar en elementos que se lo permitan.

Ahora 0 a 255 = 00000000 a 11111111, en hexadecimal de 00 a FF

Pero el Atari puede direccionar por su bus de direcciones hasta 64 K.

Debemos definir entonces que es 1 K.

1 K es 1 Kilobyte de memoria equivalente a 1024 bytes.

Por tanto 64 K = 1024 * 64 = 65536

Pero como siempre se cuenta de 0, en realidad es de 0 a 65535

En Hexadecimal es de 00 00 a FF FF

En binario es de 00000000 00000000 a 11111111 11111111

Fijate que por cada digito hexadecimal tienes un nibble.

Entonces queda como

0000 bin = 0 hex 0000 0000 0000 a 1111 = F hex 1111 1111 1111

Ahora ubiquemos una dirección de memoria como lo haría el Atari

Por ejemplo, quiero hacer poke 580,1 para habilitar el reset.

580 = 0244 hex

Por lo tanto, lo descompongo en
02 = 0000 0010
44 = 0100 0100

Ok

Ahora hagamos el poke

Código: Seleccionar todo

lda #1
sta $244
Eso se llama direccionamiento directo, ya que estoy accesando una dirección física real.

Ahora hagamos un direccionamiento indirecto

Código: Seleccionar todo

Assembler
-----------------------------------------------------------------------------------------
|   |    |    |  *=$0600    |                                     |  Decimal            |
|a9 | 44 |    | lda #$44    | Digito menos significativo          | 169 |   68   |      |
|85 | cb |    | sta $cb     | Guardo el 44 en una direccion       | 133 |        |      |
|a9 | 02 |    | lda #$02    | Digito mas significativo            | 169 |   2    |      |
|85 | cc |    | sta $cc     | Guardo la parte alta de la memoria  | 133 |        |      |
|a9 | 01 |    | lda #1      | Guardo el valor del poke            | 169 |   1    |      |
|a0 | 00 |    | ldy #0      | Inicializo un indice                | 160 |   0    |      |
|91 | cb |    | sta ($cb),y | Hago poke 580, 1                    | 145 |        |      |
|4c | 77 | e4 | jmp $e477   |                                     | 76  |  119   | 228  |
-----------------------------------------------------------------------------------------

Basic
10 REM EJEMPLO POKE 580,1 + RESET
20 FOR I=1 TO 14
30 READ A
40 POKE 1536+I,A
50 NEXT I
60 X=USR(1536)
100 DATA 169, 68, 133, 169, 2, 133, 169, 1, 160, 0, 145, 76, 119, 228
Si se fijan, hay un digito menos significativo y un digito más significativo.

En decimal significa
valor a direccionar = 2 * 256 + 68 = 580

Donde 44 hex = 68 dec y
02 hex = 2 dec

Entonces el Atari es de 8 bits, pero tiene un bus de direcciones que le permite direccionar hasta 16 bits, y lo hace con un apoyo como este.

Cacharon?

Fuentes:
coldstar.bas Formato Basic de Atari
coldstar.lst Formato texto, cualquier editor
coldstar.asx Formato texto, assembler
coldstar.xex Formato ejecutable de Atari
Avatar de Usuario
ZZT
Site Admin
Site Admin
Mensajes: 10900
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 10
Ubicación: La Florida-Santiago-Chile
Contactar:

Mensaje por ZZT »

Muy buen aporte parche, un poco enredado para newbies, pero a medida que vayamos aprendiendo será super útil.

Un ciclo FOR NEXT. Ayer estube ocupado asi que no pude practicar. Pero hoy hice el ciclo For NEXT asi:

En basic:
FOR Z=0 TO 255
NEXT Z

En asm:
*=$6000
LDX #255 (carga el valor 255 en el acumulador X)
etiqueta (etiqueta de referencia)
DEX (decrementa el valor del acumulador X en una unidad)
BNE etiqueta (si el acumulador no a llegado a cero, vaya a"etiqueta")


Recuerden: la dirección de inicio siempre *=$6000, conservar la tabulación en las instrucciones y las etiquetas pegadas al margen. Vean la foto:

Imagen
Última edición por ZZT el Mié May 07, 2008 3:40 pm, editado 1 vez en total.
Avatar de Usuario
AsCrNet
hard player
hard player
Mensajes: 472
Registrado: Mar Nov 07, 2006 2:45 pm
Reputación: 0
Ubicación: PHO
Contactar:

Mensaje por AsCrNet »

tio ::par estai comiendo pasas ? ::jua ::jua

buen ejemplo, seria mejor si el ejemplo en basic no diera error en el emulador 8-S y faltan el archivo asm y el ejecutable.

soluccion del basic :-° modifique la linea 20 por esta :

Código: Seleccionar todo

20 FOR I=0 TO 13
saludos
namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputación: 0

Mensaje por namelessu »

Hola. Voy a meter la cuchara para explicar los de los 8 bits de un procesador de otra forma.

Cuando se dice que un procesador es de 8 bits se indica que los datos sólo se pueden transmitir desde/hacia la memoria en grupos de 8 bits.

Si queremos, por ejemplo, sacar 2 bytes de la memoria (es decir, 16 bits de datos), el procesador tiene que comunicarse con la memoria 2 veces: una, para sacar los primeros 8 bits, y otra, para sacar los 8 bits restantes. Si la CPU ahora quiere obtener 10 bytes de la memoria, tiene que comunicarse 10 veces con la memoria para obtener los bytes, uno a uno.

En cambio, si nuestro procesador es de 16 bits, con una única vez que acceda a la memoria, puede sacar 16 bits (es decir, 2 bytes) inmediatamente. Es decir, si ahora se quieren sacar los 10 bytes con este procesador, tiene que comunicarse sólo 5 veces (porque por cada vez que "conversa" con la memoria, esta le entrega a la CPU 2 bytes de una). Lo mismo se aplica en caso de que "la cantidad de bits" del procesador aumente (CPU's de 32 bits, de 64 bits, de 128 bits, etc.)

Esta medida repercute en la velocidad de transferencia de datos entre el procesador y la memoria RAM/ROM y en cómo podemos utilizar y organizar los datos en nuestros programas.

Cualquier cosa me avisan para aportar en el foro. ¡Nos vemos!
namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputación: 0

Mensaje por namelessu »

8-S ¡Ah! Lo otro que me estoy dando cuenta es que están preguntando por los direccionamientos del procesador.

Podríamos referirnos, por ejemplo a los MODOS DE DIRECCIONAMIENTO DE UNA CPU, que corresponden a las diferentes maneras que tiene el procesador para acceder a los datos en la memoria.

(1) Por ejemplo, si se habla del DIRECCIONAMIENTO INMEDIATO, se indica que el dato a operar está en la misma instrucción y que no hay que ir a buscarlo a otra parte de la memoria. Por ejemplo:

Código: Seleccionar todo

  LDA #3
que indica que en el registro Acumulador del 6502 vamos a guardar el valor 3. Es lo mismo que decir en ATARI BASIC:

Código: Seleccionar todo

  A = 3

(2) En el caso del DIRECCIONAMIENTO ABSOLUTO se indica que el dato no está dado en la instrucción, sino que hay que ir a buscarlo a otra parte de la memoria, en la dirección de memoria que SE ESCRIBE EN LA INSTRUCCIÓN. Por ejemplo:

Código: Seleccionar todo

   LDA $34534
que indica que en el registro Acumulador del 6502 vamos a guardar un dato, que está ubicado en la posición 34534 de memoria (suponiendo que esa dirección está en formato decimal). Por lo tanto, la CPU va a dicha dirección, saca el dato que allí se encuentra y lo guarda en A.


Espero que haya clarificado a más de alguien esta pequeña explicación :P...

Ya saben, cualquier pregunta, al foro o por Mensaje Privado.

¡Chaooo!
Avatar de Usuario
parche
expert
expert
Mensajes: 1639
Registrado: Mar Nov 07, 2006 2:50 pm
Reputación: 0
Contactar:

Mensaje por parche »

Ya poh Batman, te quedaste callado, di alguna cosa ::jua

No, en serio, toda esta bataola es por tu inocente pregunta, me gustaría saber si entendiste algo ?@ ;-(

O como profesores nos morimos de hambre ::jua

Ya poh, di alguna cosa, porfis :-D
Avatar de Usuario
batman
expert
expert
Mensajes: 945
Registrado: Mar Abr 17, 2007 4:35 pm
Reputación: 0

Mensaje por batman »

parche escribió:Ya poh Batman, te quedaste callado, di alguna cosa ::jua

No, en serio, toda esta bataola es por tu inocente pregunta, me gustaría saber si entendiste algo ?@ ;-(

O como profesores nos morimos de hambre ::jua

Ya poh, di alguna cosa, porfis :-D
vengo llegando hace como media hora a mi casita y me estaba leyendo sus respuestas, vamos mas o menos, pero tengo una pregunta.

segun entiendo para hacer cualquier cosa tengo que ir poniendo datos en la memoria... entonces mi pregunta es .... el procesador tiene un mapa de memoria donde éste va trabajando? como sab el procesador que en la direccion 580 tiene el bit de que dice si el reset está activo o inactivo (0 o 1)?

B!
namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputación: 0

Mensaje por namelessu »

8-S A ver... en realidad el procesador no sabe nada acerca de qué función tiene cada bit de la memoria. Es el programador quien tiene que saber qué función proporciona un determinado bit o byte del computador.

La clave es que los computadores funcionan con INTERFACES, es decir, circuitos electrónicos que convierten valores de bits en funciones eléctricas diversas, como resetear el computador, cambiar colores en la pantalla, colocar o mover un carácter, dibujar un pixel, emitir un sonido, etc.

En este caso, se puede relacionar un bit o byte, de forma eléctrica, con algún dispositivo de hardware para que realice una función. Entonces, el que la posición 580 controle o no el reseteo del ATARI es parte del diseño de hardware del ATARI que realizó un ingeniero y que documentó en un libro o manual. En sí, la CPU sólo ve números que van y vienen, por lo que no sabe qué realizan o qué significan, ni le interesa. Es tu programa el que tiene que utilizar los datos y darles significado a través del código que escribes y compilas.

Ehhh... de nuevo, cualquier duda, pregunte no más. Para eso estamos :P
Avatar de Usuario
parche
expert
expert
Mensajes: 1639
Registrado: Mar Nov 07, 2006 2:50 pm
Reputación: 0
Contactar:

Mensaje por parche »

Weeeeeeeeeeeeeeeeeeeeeeeena pregunta desgraciado.

Sip, la respuesta es que una parte es el procesador y su lenguaje ensamblador.

En este caso 6502, pero eso es solo el lenguaje. Para que sea útil debes tener una rom básica que tenga algunas instrucciones escenciales.

En los PC's eso es la BIOS.

En el Atari es la ROM.

Ahora, te voy a dar algunos links útiles para que vayas profundizando.

Primero: http://www.atariarchives.org
Donde encontrarás todo lo que se te ocurra en información.

Segundo: http://www.atariarchives.org/mlb/

Un buen manual para principiantes sobre Assembler 6502

Y finalmente la biblia de cualquiera que quiera sacarle el jugo al Atari 8 bits

http://www.atariarchives.org/mapping/
El mejor manual sobre la ROM de Atari que existe.

Finalmente, un buen atajo para encontrar direcciones o rutinas específicas, anda directo a:
Memory Map

Con eso lo tienes todo XD
namelessu
novice
novice
Mensajes: 17
Registrado: Jue May 01, 2008 5:53 pm
Reputación: 0

Mensaje por namelessu »

Wena, parche, mandamos la respuesta al mismo tiempo :P

Mis respetos._
Responder