Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: jjfranco en 18 de Febrero de 2006, 10:00:58 pm



Título: ensamblador zen
Publicado por: jjfranco en 18 de Febrero de 2006, 10:00:58 pm
Alguien sería tan amable de decirme como se reallizan las operaciones basicas con el ensamblador ZEN, osea, cargar, grabar ensamblar y desensamblar. (Ya sé que el asmsx de Robsy es mejor, pero soy un antiguo que quiere probar en ZEN ;))

Gracias

(Por cierto no sé si estoy haciendo la pregunta en el lugar correcto ;D)


Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 19 de Febrero de 2006, 10:15:13 pm
Hola, jjfranco.

Te aconsejo encarecidamente el asmsx, pero como seguro que esperas que te diga algo así  ;) te diré que si quieres tirar por lo tradicional, prueba el RSC. Ahí sí que te puedo ayudar con los comandos, lo estuve probando antes de pasarme al asmsx. Ten en cuenta que haciéndolo en PC no tendrás problemas de tamaño de los archivos fuente, comodidad de ensamblar/montar roms... en fin, pero si te va la aventura...  ;D


Título: Re: ensamblador zen
Publicado por: jjfranco en 20 de Febrero de 2006, 05:47:14 pm
Gracias por tu recomendacion de usar tanto el RSC/RSC II ¿Supongo? como el asmsx. El asmsx ya lo he probado, de hecho este verano hice un pequeño programa con él, y es verdad que es mucho mas comodo porque puedes editar el codigo con cualquier procesador de texto, y luego compilarlo con el asmsx. Respecto al RSC/RSC II, sencillamente no lo tengo.
Y lo de usar el ZEN, es que me lo descarge hace poco de una pagina Argentina, no recuerdo cual, y en mis tiempos de estudiante era el que usaban la mayoria de la gente que programaban en ensamblador(yo no, porque no tenía ni idea), puesto que el RSC es posterior. Y ahora que se cuatro cosillas de CM, me pica la curiosidad de usar el ZEN, solamente como nostagia cultural, y por probarlo en ML-G3.
 :D



Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 20 de Febrero de 2006, 08:51:03 pm
El ZEN lo recuerdo del catálogo de Sony  :D pero nunca lo he tenido. No sé cómo ayudarte con él, pero si quieres el RSC y una tabla de comandos te los paso, no problemo  ;)

Ya que dices que le das al asm, ¿qué tal una entradita para la dev de este año?  ;D Por pedir que no quede  :D

Venga, suerte con ese ZEN  :)


Título: Re: ensamblador zen
Publicado por: jjfranco en 20 de Febrero de 2006, 10:12:09 pm
Muy amable por tu parte, Darth Fistro.

La verdad que te agredeceria que me pasaras en RSC, mi correo es publico en mi perfil. Lo puedes enviar ahí. ;D

Respecto a la Dev, tengo que confesar que estoy un poco verde. Lo poco que sé, se lo debo al curso de ensamblador que realizó Nestor Soriano en su pagina web, y a las revistas de msx-club(nº 54 en adelante),por lo que podria aportar muy poco, y poco competiivo. Ademas, la musica en estos programas suele ser fundamental, y mi capacidad creativa musical es nula, si a eso le añadimos que solo conozco una forma de introducir sonidos en CM (&H93 de la Bios=Sound=negao total para hacer musica), perfiero reservarme por ahora. :D

Aunque mi intencion en un futuro es hacer un programa(al menos uno) que sea totalmente aceptable. Y quien sabe, a lo mejor lo envio a la dev.

Un saludo.








Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 20 de Febrero de 2006, 11:12:59 pm
Venga, venga, yo al principio me hacía todo un lío y ahora (y mira que decirlo yo, que era un acérrimo del basic) casi prefiero hacer ya todo 100% en ensamblador, lo hago casi tan rápido como en basic y compensa el esfuerzo 100 veces. Lo del nivel no es excusa, por mi parte y te aseguro que por la de todos, cualquier aportación es bien recibida. Con todo un año por delante tienes tiempo para diseñar un juego, programarlo e ir descubriendo los entresijos al mismo tiempo del asm. Y para dudas ya sabes que no te falta dónde preguntar ;) Y sobre la música, con el Caruso(tm) cortesía de Mr.Robsy, con un copy/paste a rular, no te preocupas de nada, y por músicas te echo una mano con lo que haga falta.

¡Así que anímate! :D


Título: Re: ensamblador zen
Publicado por: jltursan en 20 de Febrero de 2006, 11:41:59 pm
Lo curioso del ensamblador es que es muy fácil de aprender (yo erre que erre), como tiene muy pocas instrucciones lo memorizas rápido y está todo en la cabeza en un santiamén; el problema es que todo está echo un lio ya que al principio no se tiene claro como hacer las cosas. Lo mejor para que de repente todo ese lío se organice es empezar por programillas chorras (o snippets ;)) y quizá algún juego muy pequeño, como por ejemplo el pong que se organizó el año pasado (fue mi primer programa en CM), de repento empezarás a tenerlo todo más claro y a pensar en términos de CM.
Por supuesto es fundamental un buen conocimiento de la máquina, especialmente de como se organiza la memoria de video. Respecto al sonido/música yo también estoy muy verde y sin embargo me las he apañado utilizando rutinas y música de terceros con resultados bastante decentes; así que no es excusa  ;D.
Tu vete experimentando que aquí esteremos encantados de contarte como van las cosas... :)


Título: Re: ensamblador zen
Publicado por: jjfranco en 21 de Febrero de 2006, 09:59:33 pm
Gracias Darth Fistro por el RSC :D, ya le he echado un vistazo por encima, al principio  me ha costado un poco conseguir como grabar los programas en CM por qué pensaba que habia que indicar las direcciones de memoria y en realidad lo que hay que indicar son los números de linea (Curioso) ;D
Desde luego este tiene pinta de ser bastante mejor que el ZEN, y este finde lo voy a probar en mi MITSUBISHI.

Tambien me he descargado el Caruso, (que está muy bien, por cierto), pero creo que el problema musical es mas bien de oido ;). Aunque prometo hacer un esfuerzo en hacer algo creativo.

Ah, y muchas gracias tanto a tí, como a jltursan por esos ánimos que me estais dando para hacer programas en CM. La verdad es que hasta el verano no dispongo de mucho tiempo libre (el curro se come mi vida social, el tiempo libre, etc), pero os aseguro que como consigua hacer un programa aceptable lo envio a la dev. ;)


Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 23 de Febrero de 2006, 05:54:27 pm
Me alegro que te entusiasme. Ojalá te sumes con nuevos proyectos a la causa  ;)

El RSC creo que es lo mejor en ensambladores nativos para MSX. De todas formas te recomiendo el asmsx para hacer tus juegos, de ahí no salgas  ;) Apréndete las tablas de la VRAM (si quieres te paso info), y con unas cuantas instrucciones, en cuanto sepas varias llamadas básicas de la BIOS, estarás ya moviendo sprites, haciendo bucles, etc... vamos, lo básico para hacer un juego. Alguna rutina para detectar qué caracter pisa un determinado sprite o rutinas para detectar choques entre sprites y ya tienes un 80% de lo que hace falta. Una buena idea de partida y a programar  :D


Título: Re: ensamblador zen
Publicado por: jjfranco en 24 de Febrero de 2006, 07:13:50 pm
Agradezco tu oferta de pasarme información :D. Respecto a llamadas a la Bios, y la distribucion de la VRam en todos los modos de pantalla (Tabla de colores, patrones, etc.) estoy bastante bien servido , con las revistas de MSX-Club y los manuales tecnicos de msx, y msx2 que hace algún tiempo me bajé de internet. Donde más problemas tengo es a la hora de hacer operaciones matematicas (ya sabes, sumar, restar, etc.), no se si la gente que programa en CM usa el MATH PACK del MSX y si es así, si existen rutinas ya preparadas.
En el ultimo programa que hice para sumar puntos armé la de san quintin,ver listado  siguiente:
;----------------------------------------------------------------------
;
; RUTINA: SumaPuntos:
;
; ENTRADA:
;       - D=Puntos a Sumar
;
;       - Suma puntos y los imprime en pantalla     
;
;----------------------------------------------------------------------

SumaPuntos:
        push af
        push bc

        ld b,d
supu:   ld a,[puntos+8]
        cp 57
        jr z, cien
        inc a
        ld [puntos+8],a
        jp pasa
cien:
        ld a,48
        ld [puntos+8],a
        ld a,[puntos+7]
        cp 57
        jr z, mil
        inc a
        ld [puntos+7],a
        jp pasa
mil:
        ld a, 48
        ld [puntos+7],a
        ld a,[puntos+6]
        cp 57
        jr z, Dmil
        inc a
        ld [puntos+6],a
        jp pasa
Dmil:
        ld a,48
        ld [puntos+6],a
        ld a,[puntos+5]
        cp 57
        jr z, Cmil
        inc a
        ld [puntos+5],a
        jp pasa
Cmil:
        ld a,48
        ld [puntos+5],a       
        ld a,[puntos+4]
        cp 57
        jr z, Millon
        inc a
        ld [puntos+4],a
        jp pasa
Millon:
        ld a,48
        ld [puntos+4],a       
        ld a,[puntos+3]
        cp 57
        jr z, Dmillon
        inc a
        ld [puntos+3],a
        jp pasa
Dmillon:
        ld a,48
        ld [puntos+3],a       
        ld a,[puntos+2]
        cp 57
        jr z, Cmillon
        inc a
        ld [puntos+2],a
        jp pasa
Cmillon:
        ld a,48
        ld [puntos+2],a       
        ld a,[puntos+1]
        cp 57
        jr z, Mmillon
        inc a
        ld [puntos+1],a
        jp pasa
Mmillon:
        ld a,48
        ld [puntos+1],a
        ld a,[puntos+0]
        cp 57
        jr z, Todo0
        inc a
        ld [puntos+0],a
        jp pasa
Todo0:
        ld a,48
        ld [puntos+8],a
        ld [puntos+7],a
        ld [puntos+6],a
        ld [puntos+5],a
        ld [puntos+4],a
        ld [puntos+3],a
        ld [puntos+2],a
        ld [puntos+1],a
        ld [puntos+0],a

pasa:   dec b
        ld a,b
        cp 0
        jp nz, supu

        ld hl, puntos
        ld b,2
        ld c,2
        call imprime

        pop bc
        pop af
        ret


 ;D.. Y seguro que esta no es la forma de realizar estas operaciones.
Si tienes rutinas ya preparadas, la verdad es que te agredecería que me las pasaras (si no tienes inconveniente), por que yo las que me hago son bastante chapuzas y la verdad es que me facilitaria la labor para hacer algún jueguecillo que ya tengo en mente :D.

Ah, y muchas gracias por todo Darth, estaís consiguiendo que me anime a participar en la proxima dev. ;D.


Título: Re: ensamblador zen
Publicado por: jltursan en 24 de Febrero de 2006, 07:50:18 pm
Nada hombre, que todo ese código te habrá venido muy bien para practicar. Pasate por la página de "El rincón del ensamblador" (http://www.robsy.net/asm.htm) de Edu Robsy y echale un vistacillo a todo lo que puedas, especialmente a esta sección, "Aritmética BCD" (http://www.robsy.net/snippets.htm), que es el sistema más comodo y sencillo de hacer casi todas estas cosas :)


Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 24 de Febrero de 2006, 08:07:43 pm
vaya, qué bien voy a quedar, como un maestro  ;D La aritmética en ensamblador es la razón por la que aún sigo usando el basic para ciertas cosas. Vamos, que n.p.i. Veo que estás puestísimo, y decías que no sabías si presentar un juego...  ;)

Sobre los puntos, yo cargaría en hl una puntuación y en de, por ejemplo, la otra y la sumaría con add hl,de. Luego la imprimes con:

Código:
IMPRIME:
; primero un LOCATE 11,1
  push hl
  ld h,11
  ld l,1
  call POSIT
  pop hl
ld de,10
call @@pr1
ld de,1
@@pr1:
ld a,47
add hl,de
@@pr2:
inc a
or a
sbc hl,de
ld c,a
call 20h
ld a,c
jr nc,@@pr2
call CHPUT
ret

Con esto imprimes dos dígitos, pero si te hacen falta más te paso otra rutina modificada.


Título: Re: ensamblador zen
Publicado por: jjfranco en 25 de Febrero de 2006, 08:14:12 pm
El artiículo de Robsy "aritmetica en BCD" ya lo lei, y lo que deduzco es que nadie usa el MATH PACK  para hacer operaciones matematicas, o lo que es peor no hay una forma sencilla de imprimir un marcador.  scrms:)

Y ya que veo, que estais bastante puestos en el tema, voy a intentrar abusar de vuestros conocimientos (si me lo permitis ;D) y quisiera haceros dos preguntillas:

1) La colision de sprites como la haceis ¿comprobando las cordenadas?
2) ¿ Existe alguna forma de generar un número aleatorio en CM ? ??? ???

Estas solo son dos de las miles de dudas que me asaltan en CM. Pero sobre todo la segunda me parece fundamental para hacer cualquier tipo de juego, porque sino sería los programas demasiado previsibles.



Título: Re: ensamblador zen
Publicado por: jltursan en 25 de Febrero de 2006, 08:49:25 pm
Citar
El artiículo de Robsy "aritmetica en BCD" ya lo lei, y lo que deduzco es que nadie usa el MATH PACK  para hacer operaciones matematicas, o lo que es peor no hay una forma sencilla de imprimir un marcador.

Es que es lento y para operaciones sencillitas no vale la pena :P
Hombre, sencilla, sencilla; pero tampoco es tan difícil, no creas. Si tienes el número almacenado en BCD, para imprimirlo sólo necesitas ir cogiendo cada "nibble" (mitad de un byte) y sumándole 48 (el ASCII del "0") para tener el carácter que tienes que imprimir en pantalla. Las rutinas de BCD una vez hechas te valen para siempre, normalmente con pocos cambios, y por regla general en un juego lo que sueles hacer es sumar y poco más; así que, ya ves que no es tan fiero el león como lo pintan ;)

Y las preguntas :

1) En el 90% de los casos la respuesta es SI

Aplica este algoritmo:

Código:
IF sprite1.x + sprite1.width > sprite2.x AND
   sprite1.x < sprite2.x + sprite2.width AND
   sprite1.y + sprite1.height > sprite2.y AND
   sprite1.y < sprite2.y + sprite2.height THEN sehandaolaleche

Y simplemente definiendo rectangulos que se ajusten a la forma del objeto, te apañas muy bien y va a toda velocidad. Complicarlo se puede complicar lo que uno quiera; pero cada uno decide , en función del juego, cual es su máximo.

2) ¡Esta es una pregunta que habría que incluir en un FAQ para programadores! :)
Métodos pseudoaleatorias tienes todos los que quieras. Mira este tópico:

http://www.msxgamesbox.com/karoshi/index.php?topic=55.msg537#msg537

Seguro que verás cosas interesantes.

Tu pregunta, verás como hay pocas cosas que sean realmente complicadas. Bueno, sí, cosas como lo que puedes ver la demo que acaba de salir "MSX Unleashed", ¡alucinante de verdad!


Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 25 de Febrero de 2006, 10:49:37 pm
Sastamente como ha dicho el señor de arriba  ;)

-Para los aleatorios ya Robsy publicó en su día un snippet a tal efecto:

Código:
RANDOM:
push hl ;Devuelve un número aleatorio
push bc
ld a,r
ld c,a
ld b,0
ld hl,RND_TABLE
add hl,bc
ld a,[hl]
pop bc
pop hl
ret

Haz un call RANDOM cada vez que quieras que te devuelva en el acumulador un número pseudo-aleatorio (entre 0 y 255, un byte, vamos). El truco está en leer el estado del barrido vertiacl y a partir de él leer un valor aleatorio en una tabla creada de antemano.

Dicha tabla sería, p.e.:

Código:
RND_TABLE:
 db 092h,022h,0BAh,08Eh,0B2h,034h,05Fh,0E4h
 db 09Ch,076h,0C9h,07Ch,034h,027h,07Ah,0BBh
 db 010h,07Ah,0A0h,071h,0C7h,0C5h,08Fh,012h
 db 044h,05Eh,032h,03Ch,0BBh,028h,047h,06Eh
 db 06Eh,07Ah,0E6h,0A8h,026h,02Ch,00Fh,01Ch
 db 028h,05Ah,0C5h,08Ch,0E2h,05Ch,03Bh,0EEh
 db 079h,01Ch,07Eh,09Eh,0E3h,035h,0D0h,0A8h
 db 0B3h,03Dh,0ACh,0C8h,034h,042h,094h,043h
 db 073h,0A2h,092h,04Eh,0EFh,0BCh,021h,0BDh
 db 045h,0EBh,019h,027h,0CBh,015h,076h,03Ah
 db 086h,0ABh,01Eh,074h,0E9h,02Fh,0E2h,05Ch
 db 0D8h,07Dh,02Eh,093h,0B2h,068h,083h,0A6h
 db 0D4h,0DFh,05Dh,08Fh,0BEh,0A8h,0D1h,01Bh
 db 023h,037h,018h,05Ah,0B0h,090h,015h,080h
 db 090h,06Ah,0C9h,0C8h,00Bh,04Fh,0D0h,0B7h
 db 0C4h,0D4h,090h,072h,022h,072h,0CBh,0EAh

...donde puedes cambiar los valores de la tabla a los que quieras, o generar una tabla en basic p.e. y copiarla.

Para inicializar los números aleatorios, usa:

Código:
xor a
ld r,a

-Para las colisiones, tal y como ha dicho José Luis, comprueba las coordenadas de ambos sprites y mira que la diferencia de sus respectivas coordenadas verticales y horizontales no sea mayor de 16, p.e., para sprites de 16x16. Esto detecta un cubo de 16x16, pero luego lo puedes ajustar más fino desplazando las coordenadas a detectar (p.e., si quieres cubos de 12x12, pues la coord. x+2 y la coord. y+2, etc.)

¡Animo! :)


Título: Re: ensamblador zen
Publicado por: jjfranco en 27 de Febrero de 2006, 06:26:08 pm
Gracias por la idea :god:, la verdad es que no se me habia ocurrido utilizar el registro r para obtener numeros aleatorios, de hecho nunca lo he tenido que utilizar para nada. 

Bueno ya tengo casi toda la informacion que me hacía falta, (gracias a vosotros :god:), asi que ya podeis contar conmigo para la proxima dev. ;D ;D

Mil gracias, jjfranco :D


Título: Re: ensamblador zen
Publicado por: Darth_Fistro en 27 de Febrero de 2006, 11:08:53 pm
Las gracias al amo Robsy, que pa eso es su snippet  ;)

Empieza primero por leer sticks, mover sprites, detectar colisiones, volcar caracteres/pantallas... en cuanto hagas un par de ejemplos le tienes cogido el pulso.

Y eso sí, en cuanto tengas más o menos estudiada la viabilidad de un proyecto (qué bien suena) ya lo estás contando en este corrillo de marujas y dándolo de alta para la DEV ;D