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

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13719
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #285 en: Julio 27, 2015, 03:49:51 »
Creo que intentaré hacer un minijuego (que conociendome no se quedará en mini y a ver si lo termino :P)

Pero antes tengo que definir un poco más lo del CSDb_ES
« última modificación: Julio 27, 2015, 04:16:29 por josepzin »
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #286 en: Julio 27, 2015, 05:04:08 »
Bueno.
Aquí está el primer borrador de lo extraido de las enseñanzas de Pastbytes.

Solo manejo un sprite pero basta para comprobar el funcionamiento de la rutina.
Esta muy comentado todo, pero si necesitais alguna aclaración no hay problema.
No estaré al nivel de algunos cuando se explican (de 10) pero lo intentaré  ;)

Estoy con unos dias bastante complicados con el trabajo asi que no pude participar mucho ultimamente, entro y leo todos los dias pero en lo que respecta a codigo no me queda mucho tiempo para analizarlo o escribirlo. Cuando me libere un poco de trabajo atrasado podre colaborar un poco mas, porque en el ensamblador de 6502 estoy un poco oxidado, si tengo que escribir una rutina aunque sea corta siempre tengo que recurrir a los manuales y eso es lo que me toma tiempo. Yo por lo general para resolver un problema pienso en asm generico y luego segun con que procesador tenga que implementarlo, miro los manuales de esa plataforma para ver como "renderizar las ideas" a ese procesador/plataforma especificos.
Mientras tanto, como para experimentar un poco mas, podrias hacer que si mantienes presionado el disparo del joystick avances o retrocedas a distinta velocidad, por ejemplo al doble, la mitad, o lo que se te ocurra, como para probar la flexibilidad del codigo.  ;)

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #287 en: Julio 27, 2015, 08:04:53 »
Creo que intentaré hacer un minijuego (que conociendome no se quedará en mini y a ver si lo termino :P)

Pero antes tengo que definir un poco más lo del CSDb_ES

Eso, eso!!! Tu a trabajar en CSDB.es  ;)
Yo voy haciendo de todo. Traslado muebles, estudio electrónica, programo con el C64 e intento conseguir material para CSDB... y entre semana trabajo...  ::)

No sé de donde saco el tiempo.  ;D
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #288 en: Julio 27, 2015, 08:10:06 »
Estoy con unos dias bastante complicados con el trabajo asi que no pude participar mucho ultimamente, entro y leo todos los dias pero en lo que respecta a codigo no me queda mucho tiempo para analizarlo o escribirlo. Cuando me libere un poco de trabajo atrasado podre colaborar un poco mas, porque en el ensamblador de 6502 estoy un poco oxidado, si tengo que escribir una rutina aunque sea corta siempre tengo que recurrir a los manuales y eso es lo que me toma tiempo. Yo por lo general para resolver un problema pienso en asm generico y luego segun con que procesador tenga que implementarlo, miro los manuales de esa plataforma para ver como "renderizar las ideas" a ese procesador/plataforma especificos.
Mientras tanto, como para experimentar un poco mas, podrias hacer que si mantienes presionado el disparo del joystick avances o retrocedas a distinta velocidad, por ejemplo al doble, la mitad, o lo que se te ocurra, como para probar la flexibilidad del codigo.  ;)

Ensamblador "generico"... a duras penas voy asimilando el de Commodore  ;D

Esto se hace por pasión y diversión. Para nada te lo tomes como una obligación el examinarnos.

No sabes lo agradecido que estoy de encontrar un sitio donde aprender cosas nuevas y con personas que se lean un código y te orienten con ayudas solo por el placer de hacerlo.

Por eso cuelgo lo que voy haciendo/evolucionando , para que todos los noveles puedan sacar de ahí los pasos que les llevarán aun mas allá.

Si hubiera tenido estas ayudas en su momento quizás mi vida seria a dia de hoy muy distinta  ;)

Lo de controlar la velocidad por el disparo se puede hacer e incluso incluir las demás variables dentro de las que indican el valor a sumar para aprovechar aun mas la memoria.
Lo bueno de este sistema es que puedes sumarle lo que quieras a las coordenadas (dentro de un orden y sentido) que siempre funcionará el paso para conectar o desconectar el MSB del sprite deseado.
« última modificación: Julio 27, 2015, 08:41:19 por Maniako »
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 557
  • SYS 0
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #289 en: Julio 27, 2015, 10:42:40 »
Lo de ensamblador generico es porque no programo 6502, sino microcontroladores PIC, entonces me acostumbre a pensar en generico ya que todos los procesadores de 8 bits tienen mas o menos las mismas instrucciones basicas. Por ejemplo las comparaciones las pienso como si fueran IF, teniendo en cuenta que en asm todo se reduce a comparar igualdad, mayor o menor, o cero, entonces pienso la comparacion que tengo que hacer y luego veo como implementarlo en ese procesador. Se podria decir que lo compilo mentalmente, aunque no me sale de memoria el reemplazo de cada comparacion, siempre tengo que consultar el manual o copiar alguna otra similar que haya hecho antes, por eso aunque con este metodo puedo programar en lo que sea, me lleva mas tiempo hacer un programa. Sin embargo, lo bueno es que la documentacion queda muy bien porque lo que documento es lo que quise hacer en mas alto nivel, no el resultado en asm, es decir que suelo documentar cada bloque de 2 o 3 instrucciones. Pero cada cual tendra su metodo para programar, yo empece con 6502 en los 80s, y a principios de los 90s empece a programar PICs en asm, cosa que sigo haciendo, hace poco porte mi sintetizador de voz por soft para C64 a ordenadores con Z80 gracias a pensar en bloques logicos en lugar de en instrucciones, asi cada bloque seguia teniendo el mismo comentario en 6502 que en Z80, pero con distintas instrucciones y registros usados.
Un ejemplo de esto lo puse en el codigo que aparece en este mensaje:  http://retroinvaders.com/commodoremania/foro/index.php/topic,1080.msg12921.html#msg12921
En los comentarios se puede ver que comento todo, no dejo bloques muy largos sin comentar, pero que tampoco me pongo a detallar tanto, porque a veces el detalle aunque explica la razon de cada linea, oscurece lo que se pretende hacer. Hay veces en que se necesario el detalle linea por linea, por ejemplo en una rutina donde se hacen cosas con tiempos muy criticos y es necesario entender los tiempos de ejecucion, y otras donde basta con explicar de forma general lo que hace ese bloque, por ejemplo "copia tal bloque de memoria a tal direccion", "borra la pantalla", "inicializa y borra la pantalla de alta resolucion", etc.
En ese codigo de ejemplo use codigo automodificable para simplificar las cosas y ahorrar tiempo y memoria, como tenia muchos bucles donde se repetia mas o menos lo mismo y queria que tuviera un tiempo de ejecucion lo mas parejo posible, cargaba los valores directamente en el codigo, por ejemplo el numero de repeticiones de un bucle. A veces tambien "pokeaba" desde el codigo una instruccion de desplazamiento a la derecha o a la izquierda segun lo que necesitaba en ese momento, antes de ejecutar ese codigo modificado, y asi evitaba comparaciones y saltos que me hacian perder ciclos valiosos. Por supuesto que si no se hace bien puede ser desastroso, pero es una herramienta a tener en cuenta.
« última modificación: Julio 27, 2015, 10:46:06 por pastbytes »

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 240
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #290 en: Septiembre 13, 2015, 21:04:23 »
Hola, la rutina del Joystick que publique al inicio de este hilo ha ido evolucionando, he ido probando nuevas cosas y al final la rutina ya contempla música por interrupciones, sprites, colisiones sprite<>sprite, sprite<> carácter, pantalla alta resolución, scroll, un contador, con lo que se ha convertido en un minijuego completamente en ensamblador, el primero que programo.
Os lo adjunto para que le deis un vistazo, a ver que os parece.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13719
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #291 en: Septiembre 13, 2015, 21:27:24 »
Hala, hala... lo que da una rutina de leer el joystick!! :D

Luego lo pruebo.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #292 en: Septiembre 13, 2015, 22:18:20 »
Esta bién y es curioso , pero desconcierta el ver la pantalla de presentación donde muestra los coches en un sentido y al empezar el juego, van al contrario. Me he quedado todo descolocado  :D

Publicidad engañosa  ;D
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

riq

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 567
    • Ver Perfil
    • From the C64 until today, a developer's perspective
Re:Dudas en Ensamblador
« Respuesta #293 en: Septiembre 13, 2015, 22:26:34 »
@Laddh: es un buen comienzo!

Concuerdo con Maniako que la dirección de los autos confunden. Más natural sería que apunten hacia arriba.

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 240
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #294 en: Septiembre 14, 2015, 10:56:12 »
@Maniako

La idea inicial era que fuese hacía arriba, de ahí la pantalla de inicio, pero haciendo pruebas me gustó más el scroll hacia abajo, es como más transgresor

@Riq

Gracias, la verdad es esto de crear algo te deja una gran sensación de satisfacción.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #295 en: Septiembre 14, 2015, 16:03:14 »
Se a qué te refieres con lo de satisfacción. A mi me encanta aprender y encima poder dar forma a tus ideas en un programa para mi es fantástico.

Aunque últimamente me falta tiempo para todo  :'(
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #296 en: Septiembre 14, 2015, 23:15:03 »
Heey!,..ultimamente estoy petado de curro, pero en cuanto pueda vuelvo.
 

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 240
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #297 en: Septiembre 18, 2015, 12:02:04 »
Hola Rulas, el tema de las colisiones lo gestiono con esta rutina:

Código: [Seleccionar]
V         = 53248 ;($D01E)

          JSR COL

COL    LDA V+30 ;TESTEAMOS SI HA HABIDO COLISIÓN ENTRE SPRITES
          AND #255
          CMP #3
          BEQ BOR
          CMP #5
          BEQ BOR
          CMP #9
          BEQ BOR
          CMP #129
          BEQ BOR
          CMP #33
          BEQ BOR
          LDA V+31 ;COLISIÓN SPRITE-CARACTER FONDO
          AND #1
          CMP #1
          BEQ BOR
          RTS

Cuando lo necesito llamo a COL, donde hago un AND de todos los sprites que quiero detectar si colisionan, en este caso todos. Luego simplemente con un CMP compruebo los sprites que colisionan sumando sus valores:

SPRITE0 SPRITE1 SPRITE2 SPRITE3 SPRITE4 SPRITE5 SPRITE6 SPRITE7
   1               2          4            8          16        32          64         128

Si quiero comprobar colisión entre spr0 y spr1 pues CMP #3, entre spr0 y spr3 CMP #9 y así con todos. Si esto sucede es cuando llamo a la rutina BOR donde incremento el color del borde pantalla, gestiono las vidas, etc. Por lo que he podido probar además es "PixelPerfect"


Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #298 en: Septiembre 18, 2015, 14:03:15 »
Con esa rutina puedes saber que sprites están en colisión, pero no cuales están con cuales, ¿me equivoco?

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 240
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #299 en: Septiembre 18, 2015, 14:42:35 »
Correcto, solo con el que haces el CMP, en mi caso solo busco colisión del sprite que manejo con el joystick. No se si sumando más valores en la comparación controlaría lo que dices, es cuestión de probar.