assembler
|
|
« : 12 de Octubre de 2011, 06:14:17 pm » |
|
Después de formatear el ordenador, me he decidido a instalar linux en mi ordenador. He conseguido compilar mtanks con asMSX de windows usando el WINE, y el resultado es una ROM idéntica a la que tenía al compilar con windows, pero usando la versión de linux no consigo compilar. Alguna sugerencia? Este es el error que me da: ------------------------------------------------------------------------------- asMSX v.0.16 WIP. MSX cross-assembler. Eduardo A. Robsy Petrus [01/06/2010] ------------------------------------------------------------------------------- Parsing file mtanks.asm ""//""/***Including file sprites.asm Including file vpokesmarcador.asm Including file puntostnk.asm Including file vpokesmenu.asm Including file menu.asm ""****Including file ayFX-ROM.ASM Including file PT3-ROM.ASM Including file vpokes1.asm Including file vpokes2.asm Including file vpokes3.asm Including file vpokes5.asm Including file vpokes6.asm Including file vpokes7.asm Including file vpokes1_min.asm Including file vpokes2_min.asm Including file vpokes3_min.asm Including file vpokes5_min.asm Including file vpokes6_min.asm Including file vpokes7_min.asm Including file vpokesrandom_min.asm Including file vpokescyclic_min.asm Including file msx-o-mizer.asm Including file variables.asm ""Including file ayFX-RAM.ASM Including file PT3-RAM.ASM *** glibc detected *** ./asmsx: free(): invalid pointer: 0x0a00daa7 *** ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x17b961] /lib/i386-linux-gnu/libc.so.6(+0x6d28b)[0x17d28b] /lib/i386-linux-gnu/libc.so.6(cfree+0x6d)[0x18041d] ./asmsx[0x8054212] ./asmsx[0x8052c50] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x126e37] ./asmsx[0x8048ca1] ======= Memory map: ======== 00110000-0026a000 r-xp 00000000 08:01 2622273 /lib/i386-linux-gnu/libc-2.13.so 0026a000-0026b000 ---p 0015a000 08:01 2622273 /lib/i386-linux-gnu/libc-2.13.so 0026b000-0026d000 r-xp 0015a000 08:01 2622273 /lib/i386-linux-gnu/libc-2.13.so 0026d000-0026e000 rwxp 0015c000 08:01 2622273 /lib/i386-linux-gnu/libc-2.13.so 0026e000-00271000 rwxp 00000000 00:00 0 002e0000-002fa000 r-xp 00000000 08:01 2622301 /lib/i386-linux-gnu/libgcc_s.so.1 002fa000-002fb000 r-xp 00019000 08:01 2622301 /lib/i386-linux-gnu/libgcc_s.so.1 002fb000-002fc000 rwxp 0001a000 08:01 2622301 /lib/i386-linux-gnu/libgcc_s.so.1 00307000-00308000 rwxp 00000000 00:00 0 0051f000-00520000 rwxp 00000000 00:00 0 00a2f000-00a53000 r-xp 00000000 08:01 2622310 /lib/i386-linux-gnu/libm-2.13.so 00a53000-00a54000 r-xp 00023000 08:01 2622310 /lib/i386-linux-gnu/libm-2.13.so 00a54000-00a55000 rwxp 00024000 08:01 2622310 /lib/i386-linux-gnu/libm-2.13.so 00c01000-00c02000 r-xp 00000000 08:01 9309503 /home/antonio/Dropbox/soft_msx/msxtank/asmsx 00c66000-00c67000 rwxp 00000000 00:00 0 00edd000-00ede000 r-xp 00000000 00:00 0 [vdso] 00f72000-01f75000 rwxp 00000000 00:00 0 08048000-08065000 r-xp 00000000 00:00 0 08065000-080e3000 rwxp 00000000 00:00 0 09ffb000-0a01c000 rwxp 00000000 00:00 0 [heap] b7600000-b7621000 rwxp 00000000 00:00 0 b7621000-b7700000 ---p 00000000 00:00 0 b7799000-b77b5000 r-xp 00000000 08:01 2622260 /lib/i386-linux-gnu/ld-2.13.so b77b5000-b77b6000 r-xp 0001b000 08:01 2622260 /lib/i386-linux-gnu/ld-2.13.so b77b6000-b77b7000 rwxp 0001c000 08:01 2622260 /lib/i386-linux-gnu/ld-2.13.so bfbd0000-bfbf1000 rwxp 00000000 00:00 0 [stack] Abortado
|
|
|
En línea
|
|
|
|
Metalbrain
Karoshi Fan
Mensajes: 92
Z80jutsushi
|
|
« Respuesta #1 : 13 de Octubre de 2011, 01:04:54 pm » |
|
Después de formatear el ordenador, me he decidido a instalar linux en mi ordenador.
He conseguido compilar mtanks con asMSX de windows usando el WINE, y el resultado es una ROM idéntica a la que tenía al compilar con windows, pero usando la versión de linux no consigo compilar.
Alguna sugerencia? Justamente el último mensaje de este subforo de desarrollo es de utopian diciendo que ha reportado este bug en el tracker. En la descripción viene una posible solución: http://code.google.com/p/asmsx-license-gpl/issues/detail?id=1
|
|
|
En línea
|
|
|
|
cjv99
Karoshi Newbie
Mensajes: 8
|
|
« Respuesta #2 : 17 de Octubre de 2011, 09:36:05 pm » |
|
Si ya he visto el reporte, siento no estar tan atento como debería, pero estoy pluriempleado y de momento apenas puedo sacar tiempo.
El reporte lo he visto y como ya he puesto en el otro hilo, lo revisaré para subsanar el error.
Siento no poder pasarme por el foro más frecuentemente que es lo que me gustaría, ahora intentaré pasarme aunque sea 15 minuto de madrugada entre 2 y 4 de la madrugada.
Veamos si dentro de un tiempo puedo hacer mi aportación en forma de juego, programado con asmsx. El juego es una versión adaptada del alien carnage de msdos, espero que alguno se acuerde.
De nuevo pido disculpas, por no visitar más el foro.
Un cordial saludo.
cjv99.
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #3 : 18 de Octubre de 2011, 11:35:58 am » |
|
La solución es fácil: --- a/asMSX/src/parser1.l Sat Jul 30 23:16:11 2011 +0200 +++ b/asMSX/src/parser1.l Fri Oct 14 16:25:39 2011 +0200 @@ -133,6 +133,7 @@ text=(char*)malloc(256); name=(char*)malloc(256); tmpstr=(char*)malloc(256); + char *tmpstr_ = tmpstr; // Strings initialization text[0]=0; @@ -164,7 +165,7 @@ // Free string pointers free(text); free(name); - free(tmpstr); + free(tmpstr_); // Done return 0;
Al quitar las comillas dobles del fichero de inclusión cambiaba el puntero tmpstr. Con lo que al intentar liberarlo después petaba al apuntar a una dirección inválida. Lo que flipo es que funcionara en windows, parece que su política de punteros inválidos deja mucho que desear.
|
|
|
En línea
|
|
|
|
assembler
|
|
« Respuesta #4 : 18 de Octubre de 2011, 12:33:20 pm » |
|
Al probar la solución de utopian, no salía ese error tan escandaloso, pero tampoco funcionaba (al menos con mi código asm).
Probaré con el código que aportas, samsaga2.
Como es una modificación pequeña, casi es más fácil hacerla a mano. Más que nada es por curiosidad: ¿como se aplicaría ese parche?
Muchas gracias.
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #5 : 18 de Octubre de 2011, 02:08:56 pm » |
|
Si no sabes usar el patch mejor arregla el código a mano, total son dos lineas. En el archivo parser1.l reemplaza el código a partir de la linea 130 por este: preprocessor1(char *input_name) { // Memory allocation for strings text=(char*)malloc(256); name=(char*)malloc(256); tmpstr=(char*)malloc(256); char *tmpstr_ = tmpstr;
// Strings initialization text[0]=0;
// Get source code name strcpy(name,input_name);
// Open original source file if ((input_file=fopen(name,"r"))==NULL) { printf("Fatal: cannot open %s",input_name); exit(1); }
// Print parsing message printf("Parsing file %s\n",input_name);
// Create output_file file output_file=fopen("~tmppre.0","w"); fprintf(output_file,"#file \042%s\042\n",name); // Start lexical scanner yyin=input_file; yylex(); // Close output_file file fclose(output_file);
// Free string pointers free(text); free(name); free(tmpstr_);
// Done return 0; }
|
|
|
En línea
|
|
|
|
Metalbrain
Karoshi Fan
Mensajes: 92
Z80jutsushi
|
|
« Respuesta #6 : 19 de Octubre de 2011, 09:28:27 am » |
|
Lo que flipo es que funcionara en windows, parece que su política de punteros inválidos deja mucho que desear. Sospecho que petaría también en Win9x. Una de las cosas que hicieron para estabilizar XP (o posiblemente 2000) fue hacer que las liberaciones de recursos ya liberados no petasen el programa. Windows 9x era un coñazo porque cascaba en cuanto le tosías, pero al menos obligaba a los programadores a ser más cuidadosos. No se puede tener todo...
|
|
|
En línea
|
|
|
|
assembler
|
|
« Respuesta #7 : 20 de Octubre de 2011, 07:37:39 am » |
|
Con el patch de samsaga2 ya he podido compilar el proyecto, pero haciendo una pequeña modificación:
La directiva .RANDOM en la versión linux me devuelve un error de sintaxis. la directiva random en la versión windows me devuelve un error de sintaxis.
En definitiva, para compilar en linux, tengo que usar random y para compilar en windows .RANDOM
¿es fallo mio o un bug de asMSX?
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #8 : 22 de Octubre de 2011, 02:56:57 pm » |
|
¿Para que sirve el random? ¿Sólo funciona en minúsculas en linux y en mayúsculas en windows? A ver si tengo un rato y miro el asmsx a ver si veo el fallo. Con el patch de samsaga2 ya he podido compilar el proyecto, pero haciendo una pequeña modificación:
La directiva .RANDOM en la versión linux me devuelve un error de sintaxis. la directiva random en la versión windows me devuelve un error de sintaxis.
En definitiva, para compilar en linux, tengo que usar random y para compilar en windows .RANDOM
¿es fallo mio o un bug de asMSX?
|
|
|
En línea
|
|
|
|
assembler
|
|
« Respuesta #9 : 22 de Octubre de 2011, 07:44:16 pm » |
|
Es una directiva que genera un número aleatorio en tiempo de compilación.
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #10 : 24 de Octubre de 2011, 10:08:33 am » |
|
Es una directiva que genera un número aleatorio en tiempo de compilación.
Pues no veo el fallo. Esto me funciona bien: ld a,random(10) Pon el código que te da problemas.
|
|
|
En línea
|
|
|
|
assembler
|
|
« Respuesta #11 : 24 de Octubre de 2011, 11:41:06 am » |
|
aleatorio_arenas:
db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1)
Ese código funciona bien en Windows, para que compile bien la versión de linux, tengo que usar random en lugar de .RANDOM
|
|
|
En línea
|
|
|
|
pitpan
|
|
« Respuesta #12 : 24 de Octubre de 2011, 07:37:10 pm » |
|
En principio, asMSX no diferencia entre mayúsculas y minúsculas en cuanto a opcodes, registros y pseudoinstrucciones. Sólo las diferencia a nivel de etiquetas. Por otra parte, el mismo código debería funcionar bien en ambas versiones, tanto Linux como Windows. Por otra parte, y en cuanto a eficiencia de código, te recomiendo hacer lo siguiente: rept 64 db random(MAX_ARENAS-1) endr Conseguirás lo mismo con un código un poco más legible. Y ten en cuenta que también se pueden anidar los REPT/ENDR para hacer tablas más complicadas, por ejemplo. Y puedes usar variables internas para conseguir cosas más interesantes... ¿Algún voluntario por ahí para hacer un buen manual de usuario del asMSX?
|
|
|
En línea
|
|
|
|
cjv99
Karoshi Newbie
Mensajes: 8
|
|
« Respuesta #13 : 25 de Octubre de 2011, 04:03:29 pm » |
|
Pues a mi me gustaria hacerlo, un manual de usuario, pero me temo que tengo que profundizar mas en el asmsx y programar algo serio, para ver como funciona y posibles bugs que pueda encontrar.
Por el momento mi reto consiste en portar el alien carnage de msdos a msx con asmsx, haber que pasa, pero apenas estoy acabando con la fase de ingenieria inversa en msdos para poder tener un codigo legible en ensamblador o lenguaje c del juego. Cuando empiece la parte de programacion vere o espero ver todo lo que da de si el asmsx.
Quiza tras superar este reto de juego en msx, pueda estar en condiciones en ayudar o aportar algo para el manual, que por cierto creo necesario como tu.
Saludos, pitpan, veamos cuando por fin puedo pasarme mas frecuentemente por este foro que me gusta la ideas que plantean.
cjv99.
|
|
|
En línea
|
|
|
|
samsaga2
|
|
« Respuesta #14 : 02 de Noviembre de 2011, 11:00:15 am » |
|
Perdona por el atraso. Estoy mirando el código fuente del asmsx y el random va sin punto. De hecho no hay ninguna expresión con punto. Los puntos son opcionales para los comandos (como el db, dw, org). db random(100)
Debería funcionar tanto en windows como en linux. aleatorio_arenas:
db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1) db .RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1),.RANDOM(MAX_ARENAS-1)
Ese código funciona bien en Windows, para que compile bien la versión de linux, tengo que usar random en lugar de .RANDOM
|
|
|
En línea
|
|
|
|
|