Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Xajorkith

#1
Buenos días.
Leevo ya unos días buscando alguna página web, o foro, o tutorial o lo que sea, donde se indique como crear una ventana gráfica en Linux (yo uso Ubuntu), en lenguaje ensamblador 64 bits.
Lo básico, parámetros de la llamada al sistema para crearla, valores que devuelve la llamada, supongo que será un puntero con la dirección a una estructura con los valores clásicos: ancho, alto, dirección de inicio de la memoria gráfica, bpp, etc. y parámetros de la llamada al sistema para cerrarla.
Es que no he encontrado nada de nada. Ya no se ni que poner en la búsqueda.
Si agluién me puede indicar donde localizar información de como hacerlo gracias de antemano.
#2
Hola.
He instalado MPLAB-X IDE y MPLAB-X IPE en ubuntu, pero no hay manera de instalar los compiladores en c y asm, falla el navegador y no me da la posibilidad de instalarlos, como ya los tengo en la versión de windows, volver a las ventanitas...
Lo que no se es como desinstalar MPLAB en ubuntu, como podeís adivinar, apenás he usado linux, y o he encontrado nada por internet.
Cualquier ayuda me vendrá bien.
Gracias.
#3
Hola, he retomado la programación en C, y se me ocurrio usar punteros por lo del ahorro de memoria.

Lo primero que he hecho es intentar pasar la función de impresión que tenía, hasta ahora usaba una matriz de 256x16 para caracteres de hasta 16x16 pixels, y lo intenté mejorar creando la siguiente matriz global para poder tener hasta 20 tipos de letra disponibles:

typedef struct {unsigned short letra[256][16];} Acaracteres;
typedef struct {int ancho; int alto; unsigned char nombre[20]; int codigo;
                           Acaracteres *caracteres;} Tiposdeletra;
Tiposdeletra Sletras[20];

No creo que llegue a usar mas de dos o tres, pero como la matriz ocupa poco y ofrece mucho, compensa. Luego llamo a la función que carga el primer tipo de letra para que haya al menos una disponible para el sistema, lo que hace es esto:

void IniLetra8x8()
{ int sigcar, cuenta;
 
  Sletras[0].ancho=8;
  Sletras[0].alto=8;
//  Sletras[0].nombre=(unsigned char[20])"ZXSpectrum 8x8";
  Sletras[0].codigo=1;
 
  Sletras[0].caracteres=(Acaracteres *)malloc(sizeof(Acaracteres));
 
  for (cuenta=0; cuenta<256; cuenta++)
  { for (sigcar=0; sigcar<16; sigcar++)
    { Sletras[0].caracteres[cuenta][sigcar]=0; }
  }

Y luego cambiaré en el resto de la función Acaracteres[sigcar][0] por Sletras[0].caracteres[sigcar][0]

  sigcar=2;
  Acaracteres[sigcar][0]=0xE600; Acaracteres[sigcar][1]=0x8900; Acaracteres[sigcar][2]=0x8900; Acaracteres[sigcar][3]=0xE900;
  Acaracteres[sigcar][4]=0x8900; Acaracteres[sigcar][5]=0x8900; Acaracteres[sigcar][6]=0x8900; Acaracteres[sigcar][7]=0x8600;
  sigcar++;
  Acaracteres[sigcar][0]=0xE200; Acaracteres[sigcar][1]=0x8600; Acaracteres[sigcar][2]=0x8A00; Acaracteres[sigcar][3]=0xE200;
  Acaracteres[sigcar][4]=0x8200; Acaracteres[sigcar][5]=0x8200; Acaracteres[sigcar][6]=0x8200; Acaracteres[sigcar][7]=0x8700;

y así seguiría generando los demás caracteres, pero al compilar me muestra el siguiente error:

no match for 'operator[]' in '*(Sletras[0].Tiposdeletra::caracteres + (+(((unsigned int)cuenta) * 8192u)))[sigcar]'

Mensaje que no entiendo en absoluto.

¿como accedo al contenido del array creado? Si es que lo estoy creando correctamente, que lo de los punetros siempre es un poco lio. La línea de

Sletras[0].nombre=(unsigned char[20])"ZXSpectrum 8x8";

también da error, pero ese no me preocupa demasiado.

Gracias.

#4
Hola, enhorabuena por el foro. Llevo un tiempo sin programar y para volver a retomar la programación estoy pasando de los pics a los mini pc, tengo idea de comprar el e9 mni PC, que puede correr ubuntu con 2 gigas, pero como si fuera un stm32 que es el que use inicialmente, abriendo una ventanita con el programa compilado en c y olvidando que hay un sistema operativo por encima ya que en STM32 no hay sistema operativo, solo el programa que grabas en la memoria.

Para empezar he bajado el DEV-C++, la versión 5, y he creado un nuevo proyecto para ventana en windows con un tamaño de 1024x600, que es el tamaño de la pantalla que tendré mas adelante, hasta ahí, todo fácil. (este paso no era mucho reto, lo reconozco)

El programa que tengo para el STM32 es un bucle continuo ejecutando 'aplcaciones' y no hace gran cosa de momento, basicamente pruebas de las funciones creadas, quedó algo incompleto. :(

De windows lo único que necesito es saber la posición del ratón, si se ha pulsado (no necesito el botón derecho ni teclado por que la pantalla táctil no los tiene) y la función para imprimir un pixel, la escritura y los gráficos los hago usando mis rutinas de escritua y dibujo y el teclado lo simulo en un teclado virtual en pantalla.

Para seguir avanzando en windows tengo el bucle típico:
   while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
       TranslateMessage(&msg); /* Translate key codes to chars if present */
      DispatchMessage(&msg); /* Send it to WndProc */
   }

Supongo que todo el tema de variables, estructuras y funciones no varia de un entorno a otro.
¿Pero como leo la posición del ratón, compruebo el clic, y pinto un pixel?
¿Tengo que hacerlo descifrando lo recibido de get, traduciendo con translate a ver que mensaje es y enviando un pixel usando dispatch con alguna estructura específica como mensaje? ¿No hay funciones específicas en alguna librería? ¿O llamadas concretas a get, translate y dispatch?

El programa que tengo solo usa esas tres funciones del sistema, así las modificaciones son mínimas para migrar a cualquier micro.

Agradezco cualquier ayuda.
Gracias.