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

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #15 en: Junio 18, 2014, 23:28:56 »
  Ah!!,..se me olvido nombrar a otro grupo de gente...

  - Gente que tiene influencias del espacio exterior y que no saben ni donde están, que programan en Zulú y escriben de abajo a arriba...Bieno es el mejor ejemplo dentro de la gente con la que he trabajado.
« última modificación: Junio 18, 2014, 23:31:12 por R. INTERNATIONAL »

Bieno

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 3955
  • PRINT"ADORA A TU COMMODORE"
    • Ver Perfil
    • bieno64
Re:Dudas en Ensamblador
« Respuesta #16 en: Junio 19, 2014, 00:19:21 »
Perdido en el espacio !!!!!!!!!!!!

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 233
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #17 en: Junio 19, 2014, 09:30:57 »
Sí, jeje, soy grupo Basic, de momento parto de un ejemplo basic y lo "traduzco" a ensamblador, supongo que a base de práctica acabare pensando en assembler. No se si te ha pasado, que por más que mires 100 listados, solo cuando creas, directo de tú cabeza es cuando en realidad aprendes.

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #18 en: Junio 19, 2014, 09:45:49 »
Aprovechando la conversación, con que ensamblador e interface (IDE) desarrolláis? Yo, cuando lo hacía..., con KickAss y Notepad++ pero si lo retomo me cambiaré al Relaunch64 probablemente.

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 233
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #19 en: Junio 19, 2014, 09:48:13 »
Yo ahora estoy entregado al CBM prg Studio.

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 556
  • SYS 0
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #20 en: Junio 19, 2014, 12:39:10 »
Lo de escribir todo en mayusculas seria lo mas natural, al menos en Commodore, ya que asi se escribe por defecto, no creo que tenga que ver en particular con el BASIC. Tampoco lo de escribir V+algo, eso es practico porque en los manuales las direcciones de los chips de video, sonido o E/S pueden estar indicados como un numero de registro y no siempre como una direccion absoluta.
En los 80s cuando hice un poco de programacion en ensamblador, lo hacia con el ensamblador basico del Final Cartridge 2, que ensamblaba directo a memoria y no permitia tener un estilo porque se ensamblaba linea por linea. Para Commodore no volvi a hacer nada en asm hasta recientemente, ahi empece a usar ACME en Windows y ya aplique el estilo que uso en ensamblador para microcontroladores PIC desde 1993, la diferencia mas importante con como programo PICs es que para PIC escribo las instrucciones en minusculas y para 6502 las escribo en mayusculas. Lo demas es igual en ambos casos, constantes y "variables" en mayusculas, etiquetas de saltos y direcciones de memoria en general, en el estilo EstaEsUnaEtiqueta, y las columnas respetadas, usando en lo posible 8 caracteres para etiquetas, y tambien cuando sea necesario un comentario por linea.
Las etiquetas, constantes y variables las defino en ingles, por si necesito intercambiar codigo con otra persona, pero los comentarios estan siempre en español.
Va una rutina de ejemplo:

Código: [Seleccionar]
;///////////////////////////////////////////////////////////////////////////////////
; Rutina de reproduccion de sonido digitalizado (fonemas L M N RR)

Aux_Digi
AuxDLoop
LDX #$00
AuxDSync
LDA $D012 ; Espera a una linea par
AND #%00000001
BNE AuxDSync
ADSample
LDA WaveTable, X ; Lee la muestra actual (codigo automodificable)
ROR ; del nibble correspondiente (codigo automodificable)
ROL
ROR
ROL
CLC ; Ajusta el valor de la muestra (codigo automodificable)
ADC #$00
AND #$0F
ADVolume
LSR ; Ajusta el volumen del sonido (codigo automodificable)
LSR
CLC ; Ajusta offset del sonido (codigo automodificable)
ADC #$00
STA $D020 ; Cambia el color de borde segun la muestra
ORA #$10
STA SIDREG+24
LDA #$04
STA DIGITDLY
AuxDDelay
NOP ; Espera hasta caer en una linea de barrido impar
DEC DIGITDLY
BNE AuxDDelay
INX ; Pasa a la siguiente muestra
CPX SAMPLECNT ; Si no llegamos a SAMPLECNT muestras
BNE AuxDSync ; vuelve a AuxDSync
AuxDNext
DEC REPCOUNT ; Decrementa REPCOUNT (repeticiones del sonido)
BNE AuxDLoop ; si aun no llego a 0, vuelve a AuxDLoop
RTS ; Retorna

En este caso uso SIDREG+24 para controlar el volumen, porque en las hojas de datos del SID se explica todo por numero de registro, y por otro lado el dia que quiera controlar dos SID solo tendria que cambiar el valor de esa constante para acceder al segundo SID.

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #21 en: Junio 19, 2014, 16:21:57 »
Guau Pasbytes!!,..una de las cosas que necesito o tengo que aprender son mini listados en ensamblador de efectos de sonido,..y eso es lo que me mandas, si tienes unos minimos conocimientos ya me enseñaras a como cambiando ciertos factores en el listado puedo hacer distintos sonidos

En cuanto tenga tiempo me veo el listado hablamos y seguro que me solventas algunas dudas que tengo,..que tambien tengo el listado de Laddh de colision de Sprites por ver...

La verdad es que voy a estar entretenido,..teniendo en cuenta que mañana se estrena Xain, os podeis imaginar como estoy, a ver si ya pasa y me pongo al estudiar vuestros listados, me da que éste hilo se va a poner calentito...

   Gracias!

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 556
  • SYS 0
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #22 en: Junio 19, 2014, 19:01:17 »
Esa rutina sirve para reproducir audio digitalizado, no sirve mucho para juegos porque no hace otra cosa mientras se ejecuta, por lo que solo seria util cuando no hubiera movimiento en un juego, como al perder una vida, o en la pantalla de presentacion.
Tambien esta un poco limitada, porque esta pensada para sonidos repetitivos, de no mas de 255 muestras, porque es la rutina que usa mi sintetizador de voz para reproducir los fonemas, que suelen usar menos de 80 muestras, por eso se le puede indicar la cantidad de muestras, la cantidad de veces que se repite la onda, el volumen (100%, 50%, 25%, 12,5% o 6,25%) y el centrado de la onda (en que posicion queda con respecto a la mitad de volumen). La reproduccion se hace sincronizada con las lineas del video, por lo cual se emite de forma muy estable a 7812 Hz, con una resolucion de 4 bits.
Se puede tener dos sonidos distintos en una serie de bytes, un sonido en los nibbles altos y otro en los bajos, esto tambien hay que indicarselo a la rutina. Para que los tiempos se ejecucion sean lo mas parejos posibles independientemente del volumen, del centrado, o del nibble que se elija, y para ahorrar tiempo y simplificar la rutina, lo que se hace al llamar es "pokear" todos esos parametros, donde esta indicado como "codigo automodificable".
Luego buscare algun ejemplo de como llamarla para que se entienda mejor.
« última modificación: Junio 19, 2014, 19:03:04 por pastbytes »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #23 en: Junio 23, 2014, 16:43:08 »
  Bueno, tras el estreno de Xain, ya estoy aquí,...he hecho un pequeño listado que muestra una nave sobre el espacio, la nave curiosamente es la de Xain´D Sleena,  con lo que parece la Pantalla de la Batalla en el Espacio que había entre planeta y planeta y a su vez es una continuación en cierto modo del juego, para la gente que no haya tenido bastante con el juego.

  Este listado lo voy a ir ampliando con las cosas que quiero aprender,..lo primero es ver el listado de Laddh en relación a superar con un sprite la barrera de los 255, aprendiendo del listado que mando al principio del hilo y luego voy a ver si soy capaz de crear un scroll de estrellas que se mueva segun se mueva la nave.

  He pensado otra cosa,..no suelo tener proyectos sin hacer y de todo ejercicio saco un juego, osea que ya vereis como de este saldra otro juego y mas con las ganas que tengo de hacer un juego de Naves (que no lo he hecho nunca),..con lo cual, en éste ejercicio podriamos aportar todos ideas independientemente de la ayuda que pueda tener en programacion...

  Me refiero a que no vendrian mal algun Tester, Ayudante de Programacion, Grafista (para hacer los Sprites ya que los de ahora de Xain son provisionales), Diseñadores o lo que sea...cualquier aportacion es bienvenida, yo me encargare de la programación (hasta donde sepa..) y todos los participantes serian reconocidos en los Creditos en el juego,..seria como una especie de juego de Commodore Mania, algo parecido a lo que ha intentado Bieno con el Castillo del Dragon.

   Os adjunto la preliminar del ejercicio en el correo, se muestra una nave y se controla,..en breve os mando una nueva actualizacion.

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

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #24 en: Junio 23, 2014, 21:31:18 »
 
  Os adjunto el programa con una nueva mejora,..ahora la Nave oscila verticalmente,..vamos a ver si hago que dispare...

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #25 en: Junio 23, 2014, 21:37:06 »
Como primer sugerencia fácil, que funcionen las diagonales!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #26 en: Junio 23, 2014, 23:23:56 »
  Tienes toda la razón del mundo Jose,..pero es que no se hacerlo!!,..en breve adjunto el listado y veis la rutina que controla el Joy, a ver si alguien me puede decir que tengo que escribir nuevo para poder detectar las diagonales..

  De momento os adjunto una nueva actualizacion,..atencion porque la Nave,..ya dispara!!!

    Chao!!

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Dudas en Ensamblador
« Respuesta #27 en: Junio 24, 2014, 04:42:38 »
A ver si ese disparo supera los 255!

Publica el código del joystick, en realidad es muy fácil, creo que estás fallando en que al detectar una dirección dejas de leer las siguientes.

Actualmente tu haces esto:
- Es arriba > mover nave arriba > ir al final
- Es derecha > mover nave derecha > ir al final
- Es abajo ... > ir al final
- Es izq... > ir al final
- Final

Tendrías que hacer algo asi:
- Es arriba > mover nave arriba
- Es derecha > mover nave derecha
- Es abajo ...
- Es izq...

Entonces, si es arriba mueve nave hacia arriba, luego comprueba si es hacia la derecha y si es la mueve, luego izq y luego abajo. De esa manera permites que se pulsen de forma simultanea varias direcciones.

La otra opción que tienes es preguntar por arriba+derecha y mover en diagonal, arriba+izquierda y mover en diagonal pero me parece que no es la mejor opción...
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Zonacas

  • Commodoremaníaco
  • ****
  • Mensajes: 111
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #28 en: Junio 24, 2014, 09:54:22 »
Las diagonales hacia atrás (hacia la izquierda) si funcionan

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 667
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Dudas en Ensamblador
« Respuesta #29 en: Junio 24, 2014, 16:04:41 »
  Así es Zonacas, yo tambien me he dado cuenta...

 asi que los tiros van por donde decia Zanni,..en realidad yo siempre que hago una cosa, sigo chequeando la siguiente direccion, pero me he dado cuenta que cuando va hacia arriba tengo un salto al final,..por eso hacia la derecha no lo hace, hacia la izquierda si porque la siguiente direccion a chequear es fuego (final de rutina)

  en cuento tenga tiempo esta noche que salga de currar lo modifico a ver si le cojo el punto.

   Gracias.