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

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 247
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #315 en: Octubre 15, 2015, 15:04:54 »
Sí, todo son llamadas JSR. X e Y los guardo siempre en variables.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #316 en: Octubre 15, 2015, 21:08:03 »
Por fin en casa.
No le veo nada raro. Deberia funcionar si realmente le cargas a X e Y los valores antes de saltar y los guardas al volver.


Creo que en el código anterior a estas funciones hace algo indebido.
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 #317 en: Octubre 15, 2015, 22:48:02 »
 Así lo hago yo....

   
Código: [Seleccionar]
CICLO
LDA POINSP1 ; CARGA EL PUNTERO ASIGNADO A SPRITE #1, PIERNAS
CMP #$83 ; LO COMPARA CON ULTIMO FRAME PIERNAS HACIA LA DERECHA $83
BEQ BUCLE15 ; SI ES IGUAL MANDA A BUCLE15 Y CARGA EL PRIMER FRAME $80
INC POINSP1 ; INCREMENTE EN UNO EL PUNTERO DEL SPRITE #1 DE PIERNAS
...... ; CONTINUA PROGRAMA

BUCLE15 ; BUCLE NECESARIO PARA FRAME DE CICLO DE PIERNAS
LDA #$80 ; CARGA PUNTERO PRIMER FRAME DE SECUENCIA DE PIERNAS
STA POINSP1 ; APLICA AL PUNTERO DEL SPRITE #1
JMP CICLO ; VUELVE AL BUCLE QUE HACE LA ANIMACION DE PIERNAS

   Saludos.

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #318 en: Octubre 16, 2015, 00:05:17 »
 Cuando pongo listados en el Foro, intento hacer/incluir unas buenas explicaciones, mas que nada encaminadas a la gente que no conoce el Lenguaje o que puede interesarse por él en un furuto a medio plazo...

 Por cierto, yo al igual que Laddh estoy un poco Pichón en el tema del Raster, de momento no los utiizo y creo que tengo que manejarme en el tema, a ver si alguien que tenga conocimientos nos enseña de forma muy sencilla y para todos, que es, que hace y como utilzarlo en una rutina sencilla, yo la verdad es que agradeceria un poco de "luz" sobre el tema.

  Chao
 
« última modificación: Octubre 16, 2015, 00:14:21 por R. INTERNATIONAL »

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 247
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #319 en: Octubre 16, 2015, 13:02:41 »
Bueno, ya he encontrado el fallo, en realidad cualquiera de las rutinas era válida, el error era que incrementaba directamente el registro de la posición del sprite 2040 tanto para las 4 formas de la derecha como para las de la izquierda y claro era un caos, porque la rutina controlaba por un lado de 40 a 43 y por el otro de 48 a 51 y podía encontrarse los valores del otro rango cuando quería controlar el otro, y claro, se salía de madre.
El caso es que lo que he echo es crear dos variables Derecha, Izquierda y ahí es donde controlo el valor para poner en el puntero 2040.

Gracias y hasta la próxima.

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #320 en: Octubre 16, 2015, 15:45:46 »
El caso es que lo que he echo es crear dos variables Derecha, Izquierda y ahí es donde controlo el valor para poner en el puntero 2040.

  Asi es, tienes que hacer una rutina para el lado derecho y otra para el lado izquierdo y en cada una simplemente definir los limites de la secuencia de frames, yo en mi ejemplo veras en las explicaciones que te mostre que aplicaba a la rutina hacia la derecha..

  Animo con ese nuevo juego,..expectante me quedo!

 
« última modificación: Octubre 16, 2015, 16:14:49 por R. INTERNATIONAL »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #321 en: Octubre 28, 2015, 13:20:19 »
   He estado toda la mañana dandole al Hierro, me he dado cuenta que la rutina de colision de sprites me va perfecta pero me hace una cosa muy curiosa que produce un bug, ella misma se mete en un ciclo raro....explico:

  Decir que solo aplica al sprite 0, cuando el sprite 0 (sprite protagonista supongamos) es matado y digamos termina el juego, cuando el juego se resetea y vuelve a comenzar al principio, al volver a comenzar una nueva partida veremos que nada mas comenzarla el sprite 0 explota autotamaticamente como si hubiera colisionado con algo (todo comprobado y no hay nada),....el juego vuelve a resetearse y volvemos al principio y a comenzar una nueva partida y veremos que ahora no ocurre...

  Esto es asi en un ciclo de una vez ocurre y otra no cada vez que nuestro protagonista es matado y volvemos a comenzar una nueva partida,..al comenzar cada vez, una vez no pasara nada y otra colisiona contra nada,..asi una si y otra no y una si y otra no....

  Me he vuelto loco revisando todo, a ver si eran errores u olvidos en el listado que mal funcionaban pero nada,..es como si la rutina acaerrara algun valor que aparece una vez si y otra no cada vez que vuelvo a comenzar una partida...

   Seguire con ello...


Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 247
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #322 en: Octubre 28, 2015, 16:12:29 »
Raro, prueba a leer el registro de colisión una vez antes de recomenzar. Creo que así se borrara.

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #323 en: Octubre 28, 2015, 21:09:24 »
 Creo que lo he soluciano (por lo menos ya funciona perfecto),...la rutina iba perfecta, era un pequeño asunto que me dejaba sin solucionar en las gestiones del programa,...me ha costado pero he dado con ello,...esto a veces es una lucha!!

   Chao.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #324 en: Octubre 28, 2015, 22:19:42 »
Solo a veces?  ;)

LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 247
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #325 en: Octubre 29, 2015, 10:00:07 »
Y que lo digas! Estoy con un problema parecido en mi proyecto, cuando pierdo en el segundo nivel y vuelvo a comenzar "pierdo" un sprite al volver a jugar el primer nivel, y la rutina es exactamente la misma. En cambio volviendo desde los niveles 3 y 4 va bien. Y eso que tengo cuidado de borrarlo todo y volver a cargar como desde inicio, que a la primera pasada también lo hace bien. Maravilloso lenguaje ensamblador!!!

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #326 en: Octubre 29, 2015, 19:49:47 »
Y que lo digas! Estoy con un problema parecido en mi proyecto, cuando pierdo en el segundo nivel y vuelvo a comenzar "pierdo" un sprite al volver a jugar el primer nivel, y la rutina es exactamente la misma

 Yo mas que parecido diría que el problema es exacto al que me pasaba a mi...

En cambio volviendo desde los niveles 3 y 4 va bien. Y eso que tengo cuidado de borrarlo todo y volver a cargar como desde inicio

  Aqui está el meollo del asunto,..en los siguientes niveles no te ocurre porque tras el reseteo de partida o inicio tras ser matado, los sprites fueron restaurados y los valores refrescados y no ocurre nada,...asi todo siempre todo depende de qué colisiono contra qué y si eso fue reconocido y manejado,...el caso es que el asunto se las trae..yo tambien utilizo una rutina que refresca, resetea y restaura todos los sprites pero no se porque aveces no funciona o hace su funcion exactamente...

  Con los demas sprites no me ocurria, cuando comparaba por ejemplo el sprite 1 (disparo) con todos los demas enemigos,..explotaban, sus posiciones eran RESTAURADAS y continuaba el juego,.en cambio cuando lo hacia con el sprite 0 (digamos el prota) las posiciones del sprite contra el que colisionaba no eran restauradas ya que a la hora de explotar simplemente le decia que lo hiciera sin saber contra que sprite habia colisionado,...es por ello que maneje dicha restauracion de sprite enemigo cuando nuestro sprite colisiona con el ampliando en cuatro lineas la rutina para saber contra que sprite habia colisionado y en ese momento restauraba la posicion del sprite enemigo antes incluso que la rutina que está encargada de hacerlo...

  Con esto consigo que las posiciones queden determinadas en todo momento y no me ocurre lo que me pasaba a mi y te ocurre a ti,...yo recomiendo restaurar (separar los sprites) las posiciones del sprite que colisiona con el que tu quieres saber en el mismo momento que se ha producido, por encima de rutinas porque sino, no se porque el valor quedara acumulado y aplicara aunque sea reseteada la partida..

  Buff,...vaya tomate,...yo de momento he conseguido que eso no me ocurra tras ayer un dia de batalla, en cualquier caso,..suerte!!


R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #327 en: Noviembre 26, 2015, 23:12:37 »
  Pues tras siguientes revisiones y actualizaciones en Kabura, resulta que todavia me pasa alguna vez el tema de que cuando continuo tras ser matado me vuelva a hacer colision al volver a continuar,...creo que ya tengo localizado cuando pasa y es con el Sprite #7 que en algunos casos es el disparo enemigo y que no es restaurado convenientemente a otra posicion...

  La rutina de Laddh va como la seda pero es importante tras ocurrir la colision manejar la restauracion de sprites en todos los que participen en la colision porque si no quedan bien reseteados puede producir ese suceso que nos ocurria a Laddh y a mi..

  A ver si tengo tiempo y lo remato, pero como veras Laddh a mi todavia me ocurre, me queda alguna "coletilla" por ahi que corregir en el listado...

  Saludos
 

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #328 en: Enero 24, 2016, 08:28:38 »
 Me voy a poner ya con la gestion de sprites por encima de la barrera de los 255 que practicamente es lo que le queda al juego mas una fase final de remates, detalles, etc,...antes de hacer lo de la gestion de sprites y ponerme con ello, me vienen dos dudas:

 - La primera: Imagino que la posicion $D01E (SPSPCL - SPRITE TO SPRITE COLLISION REGISTER) y que con la maravillosa rutina de Laddh (ya comentada en respuestas anteriores en éste hilo) funcionará igual tanto el sprite esté por encima o por debajo de la barrera de los 255,..yo creo que así sera...

 - La segunga: Tengo purulando los 8 sprites en pantalla, unos superaran la barrera y otros estando en ella ya superada volveran a la zona izquierda por debajo de los 255,...aqui el meollo pienso que será ligeramente mayor ya que solo querre actuar sobre un sprite concreto dependiendo de su posicion y cuando sea el caso,..llegue al limite de la barrera de los 255...

   Con lo cual,..supongamos el sprite #7 por ejemplo, que pasa de un lado a otro de la barrera, tendre que crear una rutina que le aplique a ese sprite, que detecte: 1º- si ha llegado al limite de la barrera, 2º- que reconozca en que lado de la barrera esta (si por debajo o por encima) y 3º que lo situe en un lado u otro segun donde este...
 
   Así en teoria y antes de meterme en pruebas, creo que esto se puede solventar asi:

 - Cargo en el acumulador la posicion $D010 (que incluye todos los registros de la posicion por encima o debajo de la barrera de todos los sprites en sus bits),...
 - En el ejemplo quiero saber donde esta el sprite #7, luego hago una comparacion con AND sobre el bit que controla el sprite #7 y cuyo valor es 128 (por ejemplo para el sprite #3 seria 8 ),...veo si es cero (esta por debajo de la barrera) o si es 1 (esta por encima de la barrera) y lo resuelvo por ejemplo con un BNE (que actuara si no es cero),...si esta por debajo lo paso a por encima de la barrera y si esta por encima lo paso a por debajo de la barrera y santas pascuas...

  A ver si luego tengo un huequito y muestro primera rutina sencilla de gestion a ver que pasa...

 
« última modificación: Enero 24, 2016, 08:30:17 por R. INTERNATIONAL »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 669
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #329 en: Enero 24, 2016, 13:06:41 »
 Bueno tras una intensa mañana de Autentico combate con ganchos, corses e incluso algun golpe bajo contra las logicas y numeros Hexa,..(y no sin sufrimiento) ya he conseguido que el disparo de Kabura recorra a sus anchas la pantalla de extremo a extremo (me faltaba el lado derecho, superar los 255) hace la colision perfecta con cualquier sprite esté donde esté (incluso si se encuentra por encima de los 255) y han quedado delimitados los limites de pantalla del disparo (en especial por la derecha) llegados a los cuales el disparo se restaura para volver a ser disparado por Kabura desde su posicion Inicial....

  Todo Perfecto....

 Ahora lo siguiente hacer lo mismo con el comportamiento de los enemigos segun la teorica que expuse antes,..aunque tengo que probar que una cosa es la teorica y otra la tecnologia (conocimientos aplicados) y alomejor en la exposicion anterior es probable que tenga algun error de calculo,..

  Os cuento.
« última modificación: Enero 24, 2016, 13:08:12 por R. INTERNATIONAL »