Karoshi MSX Community
05 de Julio de 2021, 03:31:14 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2
  Imprimir  
Autor Tema: ensamblador zen  (Leído 7929 veces)
0 Usuarios y 1 Visitante están viendo este tema.
jjfranco
Visitante
« : 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 Wink)

Gracias

(Por cierto no sé si estoy haciendo la pregunta en el lugar correcto Grin)
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #1 : 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í  Wink 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...  Grin
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jjfranco
Visitante
« Respuesta #2 : 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.
 Cheesy

En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #3 : 20 de Febrero de 2006, 08:51:03 pm »

El ZEN lo recuerdo del catálogo de Sony  Cheesy 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  Wink

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

Venga, suerte con ese ZEN  Smiley
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jjfranco
Visitante
« Respuesta #4 : 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í. Grin

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. Cheesy

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.






En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #5 : 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 Wink 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! Cheesy
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #6 : 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 Wink) 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  Grin.
Tu vete experimentando que aquí esteremos encantados de contarte como van las cosas... Smiley
En línea

Doom dee doom dee doom
jjfranco
Visitante
« Respuesta #7 : 21 de Febrero de 2006, 09:59:33 pm »

Gracias Darth Fistro por el RSC Cheesy, 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) Grin
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 Wink. 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. Wink
En línea
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #8 : 23 de Febrero de 2006, 05:54:27 pm »

Me alegro que te entusiasme. Ojalá te sumes con nuevos proyectos a la causa  Wink

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  Wink 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  Cheesy
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jjfranco
Visitante
« Respuesta #9 : 24 de Febrero de 2006, 07:13:50 pm »

Agradezco tu oferta de pasarme información Cheesy. 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


 Grin.. 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 Cheesy.

Ah, y muchas gracias por todo Darth, estaís consiguiendo que me anime a participar en la proxima dev. Grin.
En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #10 : 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" de Edu Robsy y echale un vistacillo a todo lo que puedas, especialmente a esta sección, "Aritmética BCD", que es el sistema más comodo y sencillo de hacer casi todas estas cosas Smiley
En línea

Doom dee doom dee doom
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #11 : 24 de Febrero de 2006, 08:07:43 pm »

vaya, qué bien voy a quedar, como un maestro  Grin 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...  Wink

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.
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
jjfranco
Visitante
« Respuesta #12 : 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 Grin) 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 ? Huh Huh

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.

En línea
jltursan
Karoshi Forum's Guru
*******
Mensajes: 1516


¿Que es lo que has aprendido hoy?


WWW Email
« Respuesta #13 : 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 Tongue
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 Wink

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! Smiley
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!
En línea

Doom dee doom dee doom
Darth_Fistro
Karoshi Hero
*****
Mensajes: 507


Email
« Respuesta #14 : 25 de Febrero de 2006, 10:49:37 pm »

Sastamente como ha dicho el señor de arriba  Wink

-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! Smiley
En línea

MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
Páginas: [1] 2
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!