static void compare_core_sync_data(int length, void *value) { if (l_CoreCompareMode == CORE_COMPARE_RECV) { if (fread(value, 1, length, fPipe) != length) stop_it(); } else if (l_CoreCompareMode == CORE_COMPARE_SEND) { if (fwrite(value, 1, length, fPipe) != length) stop_it(); } }
void destroy_it(MODULUS *j) { if (song->Music == j) stop_it(); //remove patterns: for (int i=0; i<j->NumPatterns; i++) { free(j->Pattern[i].Note); } if (j->Pattern) free(j->Pattern); //remove instruments; if (j->Instrument) free(j->Instrument); //remove samples; for (int i=0; i<j->NumSamples; i++) { destroy_sample(j->Sample[i].Sample); } if (j->Sample) free(j->Sample); //remove orders: if (j->Order) free(j->Order); //remove channels: for (int i=0; i<64; i++) { if (j->Channel[i].VChannel) { MODULUS_VCHANNEL *vchn = song->Music->Channel[i].VChannel; MODULUS_VCHANNEL *prev = NULL; if (!vchn) continue; for (;;) { deallocate_voice(vchn->voice); prev = vchn; vchn = vchn->next; free(prev); if (!vchn) break; } } } free(j); }
static void display_error(char *txt) { int i; printf("err: %6s addr:%x\t ", txt, *ptr_PC); if (!strcmp(txt, "PC")) { printf("My PC: %x Ref PC: %x\t ", *ptr_PC, *comp_reg_32); } else if (!strcmp(txt, "gpr")) { for (i=0; i<32; i++) { if (ptr_reg[i] != comp_reg_64[i]) printf("My: reg[%d]=%llx\t Ref: reg[%d]=%llx\t ", i, ptr_reg[i], i, comp_reg_64[i]); } } else if (!strcmp(txt, "cop0")) { for (i=0; i<32; i++) { if (ptr_cop0[i] != comp_reg_32[i]) printf("My: reg_cop0[%d]=%x\t Ref: reg_cop0[%d]=%x\t ", i, (unsigned int)ptr_cop0[i], i, (unsigned int)comp_reg_32[i]); } } else if (!strcmp(txt, "cop1")) { for (i=0; i<32; i++) { if (ptr_fgr[i] != comp_reg_64[i]) printf("My: reg[%d]=%llx\t Ref: reg[%d]=%llx\t ", i, ptr_fgr[i], i, comp_reg_64[i]); } } printf("\n"); /*for (i=0; i<32; i++) { if (reg_cop0[i] != comp_reg[i]) printf("reg_cop0[%d]=%llx != reg[%d]=%llx\n", i, reg_cop0[i], i, comp_reg[i]); }*/ stop_it(); }
static int filter(const SDL_Event *event) { switch (event->type) { case SDL_KEYDOWN: switch (event->key.keysym.sym) { case SDLK_F5: savestates_job |= SAVESTATE; break; case SDLK_F7: savestates_job |= LOADSTATE; break; case SDLK_ESCAPE: stop_it(); break; case SDLK_F1: changeWindow(); break; default: keyDown(0, event->key.keysym.sym); } return 0; break; case SDL_KEYUP: switch (event->key.keysym.sym) { case SDLK_ESCAPE: break; case SDLK_F1: break; default: keyUp(0, event->key.keysym.sym); } return 0; break; default: return 1; } }
static void sigterm_handler() { stop_it(); }
static int filter(const SDL_Event *event) { switch (event->type) { case SDL_KEYDOWN: switch (event->key.keysym.sym) { case SDLK_F5: savestates_job |= SAVESTATE; break; case SDLK_F7: savestates_job |= LOADSTATE; break; case SDLK_ESCAPE: stop_it(); break; case SDLK_F1: changeWindow(); break; default: switch (event->key.keysym.unicode) { case '0': savestates_select_slot(0); break; case '1': savestates_select_slot(1); break; case '2': savestates_select_slot(2); break; case '3': savestates_select_slot(3); break; case '4': savestates_select_slot(4); break; case '5': savestates_select_slot(5); break; case '6': savestates_select_slot(6); break; case '7': savestates_select_slot(7); break; case '8': savestates_select_slot(8); break; case '9': savestates_select_slot(9); break; default: keyDown(0, event->key.keysym.sym); } } return 0; break; case SDL_KEYUP: switch (event->key.keysym.sym) { case SDLK_ESCAPE: break; case SDLK_F1: break; default: keyUp(0, event->key.keysym.sym); } return 0; break; default: return 1; } }