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 ) Gracias (Por cierto no sé si estoy haciendo la pregunta en el lugar correcto )
|
|
|
En línea
|
|
|
|
Darth_Fistro
|
|
« 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í 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...
|
|
|
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.
|
|
|
En línea
|
|
|
|
Darth_Fistro
|
|
« Respuesta #3 : 20 de Febrero de 2006, 08:51:03 pm » |
|
El ZEN lo recuerdo del catálogo de Sony 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? Por pedir que no quede Venga, suerte con ese ZEN
|
|
|
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í. 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. 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
|
|
« 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 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!
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
jltursan
|
|
« 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 ) 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 . Tu vete experimentando que aquí esteremos encantados de contarte como van las cosas...
|
|
|
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 , 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) 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.
|
|
|
En línea
|
|
|
|
Darth_Fistro
|
|
« 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 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
|
|
|
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 . 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 .. 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 . Ah, y muchas gracias por todo Darth, estaís consiguiendo que me anime a participar en la proxima dev. .
|
|
|
En línea
|
|
|
|
jltursan
|
|
« 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
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
Darth_Fistro
|
|
« Respuesta #11 : 24 de Febrero de 2006, 08:07:43 pm » |
|
vaya, qué bien voy a quedar, como un maestro 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: 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 ) 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.
|
|
|
En línea
|
|
|
|
jltursan
|
|
« Respuesta #13 : 25 de Febrero de 2006, 08:49:25 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. Es que es lento y para operaciones sencillitas no vale la pena 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: 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#msg537Seguro 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
|
|
« Respuesta #14 : 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: 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.: 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: 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!
|
|
|
En línea
|
MSX FOREVER (hasta que saquen un ZX81 con TMS, PSG y 64K de RAM)
|
|
|
|