Menu en MSX-C

Por aceki

Master (147)

Imagen del aceki

15-11-2017, 03:12

Chicos como va, estoy haciendo un par de ejercicios, y me tope con un problema en el codigo que paso, creo que el SCANF no permite captura datos en modo grafico, alguno me da una mano? si bien creo que hay otros errores, me llama la atención que cambia de screen y no aparece nada.


#include 
#include 

#define logop (TINY) 0
#define sp_trig (TINY) 1 

/* prototipos */
VOID g_print();
VOID r_print();

int i; /* inicilizar i para el for */

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 roja*/
};

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


/* funcion para presentar sprite rojo*/
VOID r_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);
	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);
		}
	}
}

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;
{
	glocate(x,y);
	/*for (i= 0; i < a; i++) {
		grpprt(c[i],logop);
		}*/
	cls();
	inispr((TINY)2);
	sprite((TINY)0, cora);
	colspr((TINY)0, col2);
	putspr((TINY)0, 20, 20,(TINY)0, (TINY)0);
	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);
		}
	}
}

main(){
	int opc;
	screen((TINY)2); /* 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 */
	
	do {
		printf ("1. rojo, 2. verde 3. Salir");
		scanf("%d", &opc);	
		
		switch(opc){
			case 1: r_print(); break;
			case 2: g_print(); break;
		}
	} while(opc !=3);
	
	
	return(OK);
}
Login sesión o register para postear comentarios

Por AxelStone

Prophet (3030)

Imagen del AxelStone

18-11-2017, 22:47

Buenas, esa forma de capturar el teclado no es la más ideal, si lees el MSX Technical handbook verás que se puede hacer escaneando el estado de la matriz de teclado. En su momento hice algunas pruebas en MSX-C, te pongo el código de ejemplo:

#include<stdio.h<
#include<msxbios.h<

#define NEWKEY (TINY *)0xFBE5
#define FILA4 (TINY)4
#define COL2 (TINY)2

/* Leemos la fila4 col2 = M. */ 
readKb() {
	TINY key;
	int cont=0;
	while(cont<128) {
		cont++;
		key=*(NEWKEY+FILA4) & (1<<COL2);
		printf("%d\n",(int)key);
	}
	kilbuf();		
}

De todos modos eso de que el modo gráfico impide el uso de scanf, es la primera noticia que tengo al respecto.

En lineas generales y ya que estás empezando con MSX-C, te recomendaría visitar el hilo inglés e ir página a página practicando, aprenderás muchas cosillas Cool

Por aceki

Master (147)

Imagen del aceki

20-11-2017, 16:28

AxelStone wrote:

Buenas, esa forma de capturar el teclado no es la más ideal, si lees el MSX Technical handbook verás que se puede hacer escaneando el estado de la matriz de teclado. En su momento hice algunas pruebas en MSX-C, te pongo el código de ejemplo:

#include<stdio.h<
#include<msxbios.h<

#define NEWKEY (TINY *)0xFBE5
#define FILA4 (TINY)4
#define COL2 (TINY)2

/* Leemos la fila4 col2 = M. */ 
readKb() {
	TINY key;
	int cont=0;
	while(cont<128) {
		cont++;
		key=*(NEWKEY+FILA4) & (1<<COL2);
		printf("%d\n",(int)key);
	}
	kilbuf();		
}

De todos modos eso de que el modo gráfico impide el uso de scanf, es la primera noticia que tengo al respecto.

En lineas generales y ya que estás empezando con MSX-C, te recomendaría visitar el hilo inglés e ir página a página practicando, aprenderás muchas cosillas Cool

Gracias alex!!! lo del scanf, es una suposición solamente!!!

Por AxelStone

Prophet (3030)

Imagen del AxelStone

21-11-2017, 20:44

De nada hombre. Hace un año podría responderte con mucha más seguridad, pero llevo un tiempo con el MSX-C aparcado por temas laborales y lo tengo un poco oxidado. Justamente te recomiendo el hilo inglés porque lo creé justo cuando empecé con MSX-C y lo cierto es que fui aprendiendo mucho tal cuál preguntaba.

¡Suerte!