Exemple #1
0
void menu(void)
{
	Key_t key;
	uint8_t x_size, y_size, exit;
	menu_item=0;
	submenu_item=0;
	exit=0;
	y_size = sizeof(menu_strings)/sizeof(menu_strings[0]);			// ilosc podmenu
	x_size = sizeof(menu_strings[0])/sizeof(menu_strings[0][0]);	// ilosc menu

	LcdClearLine(2);
	LcdClearLine(3);

	show_menu(menu_item, submenu_item);

	do
	{
		key=getkey();
		if(key==KEY_R)													// menu(submenu) +
		{
			if(submenu_item==0)											// jezelipoziom glowny menu
			{
				if((++menu_item)==x_size) menu_item=0;					// menu +
			}
			else														// jezeli poziom podmenu
				if((++submenu_item)==y_size) submenu_item=y_size - 1;	// submenu max
				if((menu_strings[submenu_item][menu_item])=="") submenu_item--;	// puste submenu
			show_menu(menu_item, submenu_item);
		}
		else if(key==KEY_L)												// menu(submenu) -
		{
			if(submenu_item==0)											// jezeli poziom glowny menu
			{
				if((--menu_item)<0) menu_item=x_size-1;					// menu -
			}
			else														// jezeli poziom podmenu
				if((--submenu_item)==0) submenu_item=1;					// submenu = 1
			show_menu(menu_item, submenu_item);
		}
		else if(key==KEY_OK)											// ENTER
		{
			if(submenu_item==0)											// jezeli poziom glowny menu
				if(menu_strings[1][menu_item]!="")						// jezeli menu poziada jakies podmenu
				{
					submenu_item++;										// submenu + ( w zasadzie submenu = 1)
					show_menu(menu_item, submenu_item);
				}
				else													// jezeli menu nie posiada zadnych podmenu
					enter_menu(menu_item, submenu_item);				// wejscie w obsluge menu
			else														// jezeli poziom podmenu
				enter_menu(menu_item, submenu_item);					// wejscie w obsluge podmenu
		}
		if(key==KEY_UP)													// ESC
		{
			if(submenu_item>0)											// jezeli poziom podmenu
				submenu_item=0;											// wyjscie do poziomu glownego menu
			else														// jezeli poziom glowny menu
				exit=1;													// wyjscie z obslugi menu
			show_menu(menu_item, submenu_item);
		}
	}while(exit==0);													// koniec procedury
	exit_from_menu();
}
Exemple #2
0
static void options_enter_sub(MenuData *parent, MenuData *(*construct)(MenuData*)) {
	parent->frames = 0;
	enter_menu(construct(parent), NO_CALLCHAIN);
}
Exemple #3
0
void emu_run()
{
	int delta; // too much

#ifdef MEASUREMENT
	int cur_frame=0; //mitzahlen
	int time_hs;
	void *timer;
#endif

	delta = 0;			
	lcd_begin();
	//cop_begin();

	while(emu_running)
	{

		#ifdef MEASUREMENT
		if(cur_frame==MESS_START) {
			cop_end();
			err_msg("Measuring", 100);
			err_msg("Measuring.", 100);
			err_msg("Measuring..", 100);
			err_msg("Measuring...", 100);
			cop_begin();
			timer = sys_timer();
		}
		if(cur_frame==MESS_END) {
			time_hs = sys_elapsed(timer)/10000;
			emu_running = 0;
		}
		cur_frame++;
		#endif


		#ifdef USE_DEBUG
		if(delta >= 2280)
			printf("too much %6d\n", delta);
		else if(delta < 0)
			printf("delta is negative");
		#endif
		
	
		delta = -cpu_emulate(2280 - delta);

		while (R_LY > 0 && R_LY < 144) {
			if(cpu.lcdc > delta){
				delta = -cpu_emulate(cpu.lcdc-delta);
			}
			else{
				delta -= cpu.lcdc;
			}
		}

		rtc_tick();
		sound_mix();
		pcm_submit();
		kb_poll();
	
		if (!(R_LCDC & 0x80))
			delta = -cpu_emulate(32832 - delta);

		// wait for next frame
		while (R_LY > 0)  {
			if(cpu.lcdc > delta){
				delta = -cpu_emulate(cpu.lcdc-delta);
			}
			else{
				delta -= cpu.lcdc;
			}
		}
		
		/*cpu_emulate(2280-delta);

		while (R_LY > 0 && R_LY < 144)
				delta = -cpu_emulate(cpu.lcdc);

		rtc_tick();
		sound_mix();
		pcm_submit();
		kb_poll();
	

		if (!(R_LCDC & 0x80))
			delta = -cpu_emulate(32832);

		// wait for next frame
		while (R_LY > 0)
			delta = -cpu_emulate(cpu.lcdc);*/

	}


#ifdef MEASUREMENT
		cop_end();
		err_msg("%d hs", 3000, time_hs);
		enter_menu();
#endif
}