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(); }
static void options_enter_sub(MenuData *parent, MenuData *(*construct)(MenuData*)) { parent->frames = 0; enter_menu(construct(parent), NO_CALLCHAIN); }
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 }