| 
			| 
					
						| 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 ANDsprite1.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! |  
						| 
								|  |  
								|  |  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	ald	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) |  |  | 
	|  |