Autor Tema: Dudas en Ensamblador  (Leído 66820 veces)

R. INTERNATIONAL

Dudas en Ensamblador
« en: Enero 12, 2014, 22:57:22 »
Proximamente volcaré un batallón de dudas que tengo, agradezco mucho a la gente que tenga conocimientos en el tema, que esté atenta para así ayudarme en lo posible.

  Saludos!
« última modificación: Octubre 27, 2014, 13:14:09 por josepzin »
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #1 en: Mayo 30, 2014, 00:48:49 »
  Esto es como una especie de botella que lanzo al mar a ver si alguien me puede dar un poco de luz,..aunque parezca que controlo no tengo ni papa idea y hay cosas basicas que todavia no controlo, por ejemplo:

 - Necesito que alguien me enseñe a ver como puedo superar con un sprite la barrera de los 254 puntos
 - De momento he montado decorados con chars en monocolor a maxima definicion, pero quiero montarlos en multicolor, no se que posicion de memoria tengo que utilizar para hacerlo asi, ni como configurar los colores, cualquier luz lo agradezco mucho, simplemente quiero cargar los chars en multicolor.
 - De momento la colisison de sprites la hago por hardware puro coordenada X/Y de sprite a sprite en un solo punto pero creo que esto se puede hacer mejor, necesito ayuda, por otro lado hay una posicion la $D01E (Sprite to sprite collision register) que no se que hace porque ni he probado ni experimentado, no se si me sirve de algo o no,..cualquier aclaracion es bienvenida.
 - (todavia no lo he probado) pero creo que seria capaz de mover un scroll de estrellas, asi todo cualquier introduccion en el mundo de mover decorados tambien es bienvenida.

     Creo que es suficiente,..gracias por la colaboracion.
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #2 en: Mayo 30, 2014, 00:52:21 »
  Se me olvido decir que utilizo el 64Tass para programar, cualquier explicacion lo mas entendible y aplicable a dicha politica lo agradezco mucho.
 

josepzin

Re:Dudas en Ensamblador
« Respuesta #3 en: Mayo 30, 2014, 14:19:38 »
Lo de pasar con un sprite los 256 es muy facil, no estoy en el ordenador ahora pero luego te lo digo.

pastbytes

Re:Dudas en Ensamblador
« Respuesta #4 en: Mayo 31, 2014, 01:40:47 »
Si con los 254 puntos te refieres a las coordenadas horizontales, hay un registro que contiene el bit mas significativo de cada uno de los 8 sprites, al colocar el bit correspondiente a ese sprite a 1, las coordenadas cuentan desde 256 en adelante, en realidad es un numero de 9 bits y en ese registro esta el bit 8 de cada sprite. Cuando llegas a 255, para avanzar al siguiente pixel colocas a 1 el bit mas significativo en ese registro (el que aparece en el manual en la direccion 53264 ($D010): SPRITE X MSB REGISTER), y a 0 el byte de coordenada horizontal, y empiezas a contar desde ahi. Recuerda que ese bit mas significativo vale 256, eso se suma al byte de coordenada horizontal.
El registro de colision de sprites nunca lo use, pero tenia entendido que detecta que sprites se tocan, teniendo en cuenta que el color transparente no cuenta como parte del sprite, segun el manual se pone a 1 cada bit en la direccion 53278 ($D01E) segun los sprites que hayan colisionado, y se mantiene asi hasta que se lea ese registro. Tambien hay otro registro para la colision con el fondo, dice tambien el manual que si se usan sprites multicolor el color de fondo que se tiene en cuenta para las colisiones es diferente.
« última modificación: Mayo 31, 2014, 01:42:24 por pastbytes »
 

Carlos

Re:Dudas en Ensamblador
« Respuesta #5 en: Junio 01, 2014, 17:06:25 »
  Esto es como una especie de botella que lanzo al mar a ver si alguien me puede dar un poco de luz,..aunque parezca que controlo no tengo ni papa idea y hay cosas basicas que todavia no controlo, por ejemplo:

 - Necesito que alguien me enseñe a ver como puedo superar con un sprite la barrera de los 254 puntos

http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_137.html

En esa página y las siguientes, te explica todo sobre como posicionar sprites en la coordenada X y la Y.

- De momento he montado decorados con chars en monocolor a maxima definicion, pero quiero montarlos en multicolor, no se que posicion de memoria tengo que utilizar para hacerlo asi, ni como configurar los colores, cualquier luz lo agradezco mucho, simplemente quiero cargar los chars en multicolor.

No acabo de entender la pregunta, de todas formas ahí te explica todo sobre los modos de video del C64:

http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_100.html#Graphics


- De momento la colisison de sprites la hago por hardware puro coordenada X/Y de sprite a sprite en un solo punto pero creo que esto se puede hacer mejor, necesito ayuda, por otro lado hay una posicion la $D01E (Sprite to sprite collision register) que no se que hace porque ni he probado ni experimentado, no se si me sirve de algo o no,..cualquier aclaracion es bienvenida.
 - (todavia no lo he probado) pero creo que seria capaz de mover un scroll de estrellas, asi todo cualquier introduccion en el mundo de mover decorados tambien es bienvenida.

     Creo que es suficiente,..gracias por la colaboracion.
 

Laddh

Re:Dudas en Ensamblador
« Respuesta #6 en: Junio 02, 2014, 17:22:22 »
Bueno, ya que los auténticos gurus no se mojan  ;) voy a exponer mi ejemplo en ensamblador para la primera de las dudas, que creo que es lo que pedía el amigo Rulas, a ver si entre novatos nos ayudamos.
Aun no es perfecto pero funciona, ejecutalo con sys49152, mueve el joystick1 y el programa se para.
Ahora introduce NEW enter 1sys49175:goto1 enter y veras que el sprite flanquea sin problemas la barrera de los 255.
Esta en formato del CBM prg studio, no conozco el 64Tass, no creo que sea muy diferente.

Código: [Seleccionar]
*=$C000

v=53248

        lda #$01
        sta v+21 ;sprite 1 on
        lda #192
        sta 2040 ;puntero a sprite
        lda #$01
        sta v+39 ;color
        lda #100
        sta v   ;posicion x
        sta v+1 ;posicion y

loop      LDA $DC01  ;leemos joy1
          AND #$0F

          CMP #$0E  ;la cuatro direcciones arriba abajo izq der
          BEQ arr
          CMP #$0D
          BEQ abj
          CMP #$0B
          BEQ izq
          CMP #$07
          BEQ der
          JMP loop

arr       DEC $D001
          RTS
abj       INC $D001
          RTS
izq       DEC $D000
          jsr testx
          RTS
der       INC $D000
          jsr testx
          RTS

testx   lda $d000  ;testeamos la posicion X 255=derecha del tope 0=izquierda
        cmp #$ff
        beq x1
        cmp #$00
        beq x2
        rts

x2      lda #$01 ;msb on
        sta v+16
        rts
x1      lda #$0  ;msb off
        sta v+16
        rts

*=12288
; forma de sprite 1
 BYTE 255,127,0,193,97,0
 BYTE 193,97,0,255,127,0
 BYTE 192,97,0,192,97,0
 BYTE 192,97,0,192,97,0
 BYTE 0,0,0,0,255,127
 BYTE 0,192,97,0,192,97
 BYTE 0,199,127,0,193,97
 BYTE 0,255,97,0,0,0
 BYTE 225,0,0,241,0,0
 BYTE 217,0,0,205,0,0
 BYTE 199,0,0
 

josepzin

Re:Dudas en Ensamblador
« Respuesta #7 en: Junio 02, 2014, 19:47:13 »
Creo que es exactamente lo que Rulas necesitaba! yo estaba masticando una explicación en C, pero esto es mucho mejor!

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #8 en: Junio 02, 2014, 23:00:34 »
  Buf!!!,..cuanta carnaza!!!,...muchisimas gracias a todos por vuestra atención,...ahora estoy un poco saturado de curro y el poco tiempo que me queda lo dedico en cuerpo y alma a terminar Xain, es por eso que alomejor estoy un poco ausente

  Pero os aseguro que vuestras enseñanzas no se pierden y seran aplicadas ya en el siguiente proyecto,..en cuanto pueda me pongo con ejercicios sencillos para ponerlas en practica.

  Mil Gracias y Al Hierro!!
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #9 en: Junio 02, 2014, 23:28:37 »
 Gracias Laddh por éste listado que has adjuntado, lo he estado observando y la verdad es que parece bueno, se trata de un breve listado completo para mostrar y mover un sprite en pantalla (yo todo eso ya lo tengo creado) pero es muy interesante los momentos clave en los que el programa hace lo que yo quiero aprender,..vamos que en cuanto tenga tiempo lo pruebo y te lo agradezco.

  Carlos con lo de los Chars me refiero a que en Xain he montado los decorados con chars en monocolor sin scroll, quiero aprender simplemente a mostrar los Chars de Multicolor (sin Scroll tambien), no se que posicion de memoria maneja eso ni si tengo que configurar algun color (como ocurre con los sprites) y como y donde...

  Chao!!
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #10 en: Junio 17, 2014, 23:11:51 »
  Ahora que estoy "libre" me voy a centrar mucho en éste hilo,..ya estoy preparando un ejercicio que  constantemente subire/adjuntare para ir poniendo en practica todos los conocimientos...

  (también ire adjuntando el listado), asi que Bieno y Manuel andaros pendientes porque es buen momento para aprender..todo ira muy explicadito,..cread una carpeta e id echando en ella bien organizadito todo lo que se muestre.

  Por cierto, Bieno, mandame por privado el correo de Sandro.

     Chao.
« última modificación: Junio 17, 2014, 23:15:15 por R. INTERNATIONAL »
 

Laddh

Re:Dudas en Ensamblador
« Respuesta #11 en: Junio 18, 2014, 16:49:58 »
Hola Rulas, en cuanto a la tercera de las dudas, la de las colisiones sprite-sprite por hardware, he añadido al listado anterior una rutina col que verifica la colisión sprite0 con sprite1, incrementando el color del borde pantalla cuando esta se produce.

Código: [Seleccionar]
*=$C000

v=53248

        lda #$03
        sta v+21 ;sprite 0 y 1 on
        lda #192
        sta 2040 ;puntero a sprite 0
        lda #193
        sta 2041 ;puntero a sprite 1
        lda #$01
        sta v+39 ;color spr 0
        lda #$03
        sta v+40 ;color spr 1
        lda #100
        sta v   ;posicion x spr 0
        sta v+1 ;posicion y spr 0
        lda #200
        sta v+2 ;posicion x spr 1
        lda #150
        sta v+3 ;posicion y spr 1


loop      LDA $DC01  ;leemos joy1
          AND #$0F

          CMP #$0E  ;la cuatro direcciones arriba abajo izq der
          BEQ arr
          CMP #$0D
          BEQ abj
          CMP #$0B
          BEQ izq
          CMP #$07
          BEQ der
          JMP loop

arr       DEC $D001
          jsr col
          RTS
abj       INC $D001
          jsr col
          RTS
izq       DEC $D000
          jsr testx
          jsr col
          RTS
der       INC $D000
          jsr testx
          jsr col
          RTS

testx   lda $d000  ;testeamos la posicion X 255=derecha 0=izquierda
        cmp #$ff
        beq x1
        cmp #$00
        beq x2
        rts

x2      lda #$01 ;msb on
        sta v+16
        rts
x1      lda #$0  ;msb off
        sta v+16
        rts

col     lda v+30 ;testeamos si ha habido colisión entre spr0 y spr1 en v+30 ($d01e)
        and #3 
        cmp #3   
        beq borde
        rts

borde   inc $d020 ;cambia color borde pantalla
        rts

*=12288
; forma de sprite 1
 BYTE 255,127,0,193,97,0
 BYTE 193,97,0,255,127,0
 BYTE 192,97,0,192,97,0
 BYTE 192,97,0,192,97,0
 BYTE 0,0,0,0,255,127
 BYTE 0,192,97,0,192,97
 BYTE 0,199,127,0,193,97
 BYTE 0,255,97,0,0,0
 BYTE 225,0,0,241,0,0
 BYTE 217,0,0,205,0,0
 BYTE 199,0,0

*=12352
; sprite 2
 BYTE 0,0,0,0,0,0
 BYTE 0,0,0,0,0,0
 BYTE 0,0,0,3,0,192
 BYTE 6,255,96,4,0,32
 BYTE 2,255,64,2,129,64
 BYTE 2,189,64,2,165,64
 BYTE 2,165,64,2,189,64
 BYTE 2,129,64,2,255,64
 BYTE 4,0,32,6,255,96
 BYTE 3,0,192,0,0,0
 BYTE 0,0,0

Funciona como en el ejemplo anterior, cambiando el segundo sys
SYS49152
Mover joystick
NEW
1SYS49195:GOTO1
RUN

Aprovecho para agradecer tu petición, ya que gracias a ella estoy haciendo cosas con el C64 que nunca llegue a hacer, ni me imaginaba que las haría ahora.
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #12 en: Junio 18, 2014, 22:58:23 »
  A mi tambien me ha pasado Laddh,..es una de las cosas por lo que me maravilla el ensamblador,..es como hablar del infitinito y de mil formas distintas de hacer una cosa (muy personal) pero siempre por un camino directo y rapido.

  Hablamos!!
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #13 en: Junio 18, 2014, 23:15:35 »
  Por cierto, antes de entrar en materia me molaria hablar de un asunto que siempre desde que escribo programas en compilador me ha llamado mucho la atencion...

  Me refiera a las normas, formas, manias, etc, etc de escritura personales cada uno, vereis por ejemplo varios casos:

  - Gente que ha programado en basic y que al pasar al ensamble se ven muchos detalles de escritura del basic,..esto ocurre por ejemplo en tu listado Laddh, con expresiones del tipo; v=53248 ó  sta v+40,...lo de asignar V y luego sumarle el numero me acuerdo que es muy de Basic.

  - Gente que tiene influencias de lenguaje C (suelen ser muy peculiares e imagino que tipicas del lenguaje),.suelen escribir en minusculas y cuando se usa softwear para pragramar al final el listado es una mezcla de C y de Ensamblador en su escritura,..Lobo es un ejemplo dentro de la gente con la que he trabajado.

  - Gente (que no se que influencias tendran),..que suelen crear su lista de constantes, con escrituras en sus listados super simples y sencillas y que siempre escriben en mayusculas y son maniaticos de los listados muy alineados,...Silicebit y Madonna Mark serian dos ejemplos dentro de la gente con la que he trabajado.

   Hablando ya de mi,..la persona que mas me ha enseñado y de la que mas he aprendido en el tema de como "hacer" las cosas (rutinas, subrutinas, etc) mi maestro a sido Lobo sin ninguna duda, pero sin embargo en la forma de escribir me encuadro en el tercer grupo de gente (mayusculas, constantes, sencillez, alineanismo,..),..

  corregidme si me he equivocado (que yo soy un amateur) en los encuadres de gente, pero es mas o menos lo que yo he visto o percibido y cualquier opinion de buen agrado es perfecta,..tambien lo digo para que cuando adjunte listado en éste hilo, vereis el tipo de escritura que tengo, que por cierto, os invito tambien a contar las manias, cosas, etc que cada uno pueda tener al hacer sus listados que siempre se aprende algo...

   Hasta Pronto Troncos!!!
« última modificación: Junio 18, 2014, 23:18:18 por R. INTERNATIONAL »
 

R. INTERNATIONAL

Re:Dudas en Ensamblador
« Respuesta #14 en: Junio 18, 2014, 23:21:04 »

  Como se nota que Xain´D Sleena ya está terminado y ahora tengo mucho mas tiempo libre,...eh!?