Karoshi MSX Community
05 de Julio de 2021, 03:38:06 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]
  Imprimir  
Autor Tema: Error con asMSX versión linux  (Leído 7004 veces)
0 Usuarios y 1 Visitante están viendo este tema.
assembler
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« : 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:
Código:
-------------------------------------------------------------------------------
 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


Email
« 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
Karoshi Fan
**
Mensajes: 76


Email
« Respuesta #3 : 18 de Octubre de 2011, 11:35:58 am »

La solución es fácil:

Código:
--- 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
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« 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
Karoshi Fan
**
Mensajes: 76


Email
« 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:

Código:
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
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« 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
Karoshi Fan
**
Mensajes: 76


Email
« 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
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« 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
Karoshi Fan
**
Mensajes: 76


Email
« 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:

Código:
ld a,random(10)

Pon el código que te da problemas.
En línea
assembler
Karoshi Fan
**
Mensajes: 62

assembler@ya.com
Email
« Respuesta #11 : 24 de Octubre de 2011, 11:41:06 am »

Código:
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
Karoshi Forum's Guru
*******
Mensajes: 1812


« 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:

Código:
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


Email
« 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
Karoshi Fan
**
Mensajes: 76


Email
« 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).

Código:
db random(100)

Debería funcionar tanto en windows como en linux.

Código:
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
Páginas: [1]
  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!