Consulta en MSX-c

By aceki

Master (147)

aceki's picture

08-11-2017, 13:40

Estimado buenos dias!!

Me hice todo el tutorial de Lavanderira, excelente!!! ahora llego el momento de avanzar, minimamente me gustaria saber como poner un sprite en pantalla o alguna cosa parecida Big smile. Habra alguna documentación mas a alla lo que hay ahi?

Saludos a todos!

Login or register to post comments

By AxelStone

Prophet (2674)

AxelStone's picture

09-11-2017, 19:24

Jeje, acabas de topar con lo que es el uso específico del MSX, más allá del propio C. A partir de aquí vas a tener que documentarte un poco cómo funciona el MSX, conocer un poco las tripas (busca el mismo MSX technical handbook) o inluso entender los comandos del MSX Basic y buscar el equivalente en C.

Las librerías del MSX-C son muy completas, tienes una referencia aquí: http://www.fvue.nl/wiki/MSX-C_manual#Standard_Library

Respondiendo a tu pregunta, buscando sobre sprites ves que en la librería graphic.c tienes funciones para ello, en este caso 'putspr'.

Ánimo con esos avances.

By aceki

Master (147)

aceki's picture

09-11-2017, 20:39

Genial Axel!!

Te muestro algo que hice (medio robado de otros codigos para ir entendiendo)

Lo que hace es preparar la pantalla y poner una bolita roja (sprite) que si pulso el boton A del jostick, cambia a verde, pero, me pasa que a veces sale directamente si mostrar la bolita verde (teoricamente deberia salir si ve cualquier cambio en el teclado)

#include 
#include 

#define logop (TINY) 0
#define sp_trig (TINY) 1 /* trigger */

int i; /* inicilizar i para el for */
char *start = "LOS POLLINOS PROGRAMADORES"; /* crea un puntero */
static TINY cora[] = { 
0x60,0xF0,0xF0,0x60,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; /* sprite de bolita */

static TINY col[] = {
0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  /* color para la bolita */
};

static TINY col2[] = {
0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* color para cambio de color de la bolita */
};


/* funcion para presentar sprite*/
VOID g_print(x,y,c,a)
int x;
int y;
char *c; /* nombre del puntero que va a un arreglo de char (no hay string en c) */
int a;
/* below i is incrementally plus 1 untill the characteramount(a) of c is reached */
{
	glocate(x,y);
	/*for (i= 0; i < a; i++) {
		grpprt(c[i],logop);
		}*/
	inispr((TINY)2);
	sprite((TINY)0, cora);
	colspr((TINY)0, col);
	putspr((TINY)0, 20, 20,(TINY)0, (TINY)0);
	kilbuf();
}


main()
{
screen((TINY)5); /* seems logic */
ginit(); /* initialise graphics mode */
color((TINY)15, (TINY)1, (TINY)1); /* need i say more */

cls(); /* very similair to basic, just calls the ASM counterpart */

/* graphic text call */
g_print(40,50,start,26);

/* spacebar hit ends program */
while(gttrig(sp_trig) ==0)
	{
		if (gttrig(sp_trig) ==1)
		{
			cls();
			inispr((TINY)2);
			sprite((TINY)0, cora);
			colspr((TINY)0, col2);
			putspr((TINY)0, 20, 20,(TINY)0, (TINY)0);
		}
	}
screen((TINY)0);

printf("thanks for testing...");
return(OK);
}

By AxelStone

Prophet (2674)

AxelStone's picture

09-11-2017, 21:04

"me pasa que a veces sale directamente si mostrar la bolita verde "

¿Te refieres que termina la ejecución sin mostrarse nunca verde?

By aceki

Master (147)

aceki's picture

09-11-2017, 21:19

asi es señor!!

By AxelStone

Prophet (2674)

AxelStone's picture

10-11-2017, 13:22

El bucle está un poco cogido con pinzas, de hecho lo sorprendente es que a veces se muestre verde Smile te explico. Tienes un while esperando el trigger, una vez pulsado saldría del while y puede ocurrir antes de que se actualice la tabla de colores del sprite (antes de que ocurra el vblank de la pantalla).

Cambios simples:
1.- ¿El cls del if es necesario? Prueba a quitarlo, no estoy seguro que lo necesited.
2.- Después del while y antes del screen 0 mete un delay, que de tiempo a actualizarse el sprite.

Prueba y nos cuentas.

By aceki

Master (147)

aceki's picture

10-11-2017, 13:27

Muchas gracias!! llego y lo pruebo en casa!!

Saludos!