/*============================================================================*/ void init_system() { int i, j, k; #ifdef __O2EM_DEBUG__ printf("%s()\n", __func__); #endif last_line = 0; dbstick1 = 0x00; dbstick2 = 0x00; mstate = 0; master_clk = 0; h_clk = 0; line_count = 0; itimer = 0; clk_counter = 0; init_roms(); init_rams(); for (i = 0; i < MAXLINES; i++) AudioVector[i] = ColorVector[i] = 0; for (i = 0; i < MAXLINES + 2 * MAXSNAP; i++) for (j = 0; j < 256; j++) for (k = 0; k < 2; k++) snapedlines[i][j][k]=0; if (app_data.stick[0] == 2 || app_data.stick[1] == 2) { #ifdef __O2EM_DEBUG__ printf("%s() install_joystick()\n", __func__); #endif i = install_joystick(JOY_TYPE_AUTODETECT); if (i || (num_joysticks < 1)) { fprintf(stderr, "Error: no joystick detected\n"); o2em_clean_quit(EXIT_FAILURE); } } for (i = 0; i < KEY_MAX; i++) key2[i] = 0; key2vcnt = 0; if (app_data.euro) setvideomode(1); else setvideomode(0); do_kluges(); init_vpp(); clear_collision(); #ifdef __O2EM_DEBUG__ printf("end of %s()\n", __func__); #endif }
static void setadplugvideo() /* Setup AdPlay's idea of the video state */ { setvideomode(3); if(hivideo) load88font(); clearscreen(backcol); hidecursor(); }
void init_system(void){ int i,j,k; last_line=0; dbstick1=0x00; dbstick2=0x00; mstate=0; master_clk=0; h_clk=0; line_count=0; itimer=0; clk_counter=0; init_roms(); for(i=0; i<256; i++) { VDCwrite[i]=0; extRAM[i]=0; } for(i=0; i<64; i++) { intRAM[i]=0; } for (i=0; i<MAXLINES; i++) AudioVector[i] = ColorVector[i] = 0; for (i=0; i<MAXLINES+2*MAXSNAP; i++) for (j=0; j<256; j++) for (k=0; k<2; k++) snapedlines[i][j][k]=0; if (app_data.stick[0] == 2 || app_data.stick[1] == 2) { i = install_joystick(JOY_TYPE_AUTODETECT); if (i || (num_joysticks<1)) { fprintf(stderr,"Error: no joystick detected\n"); exit(EXIT_FAILURE); } } for (i=0; i<128; i++) key2[i] = 0; key2vcnt=0; if (app_data.euro) setvideomode(1); else setvideomode(0); do_kluges(); init_vpp(); clear_collision(); }
void measure_vmem_speed(void) { int n; float f; float mem_test[5]; float mem_size=64*1024; float timer_time=1193181; // timer freq in Hz setvideomode(0x13); if(test_vid_movsw()==0xFFFFFFFF) vmem_movsw=-1; else { for(n=0; n<5; n++) mem_test[n]=test_vid_movsw(); f=(mem_test[0]+mem_test[1]+mem_test[2]+mem_test[3]+mem_test[4])/5.0; vmem_movsw=((mem_size/(f/timer_time))/1024)*2; } if(test_vid_movsd()==0xFFFFFFFF) vmem_movsd=-1; else { for(n=0; n<5; n++) mem_test[n]=test_vid_movsd(); f=(mem_test[0]+mem_test[1]+mem_test[2]+mem_test[3]+mem_test[4])/5.0; vmem_movsd=((mem_size/(f/timer_time))/1024)*2; } if(test_vid_stosw()==0xFFFFFFFF) vmem_stosw=-1; else { for(n=0; n<5; n++) mem_test[n]=test_vid_stosw(); f=(mem_test[0]+mem_test[1]+mem_test[2]+mem_test[3]+mem_test[4])/5.0; vmem_stosw=((mem_size/(f/timer_time))/1024)*2; } if(test_vid_stosd()==0xFFFFFFFF) vmem_stosd=-1; else { for(n=0; n<5; n++) mem_test[n]=test_vid_stosd(); f=(mem_test[0]+mem_test[1]+mem_test[2]+mem_test[3]+mem_test[4])/5.0; vmem_stosd=((mem_size/(f/timer_time))/1024)*2; } setvideomode(3); }
static void do_kluges(void){ if (app_data.crc == 0xA7344D1F) pendirq=1; /* Atlantis */ if (app_data.crc == 0xFB83171E) pendirq=1; /* Blockout */ if (app_data.crc == 0xD38153F6) pendirq=1; /* Blockout (french) */ if (app_data.crc == 0x881CEAE4) pendirq=1; /* Wall Street */ if (app_data.crc == 0x9E42E766) useforen=1; /* Turtles */ if (app_data.crc == 0x1C750349) useforen=1; /* Turtles (European version) */ if (app_data.crc == 0x202F2749) useforen=1; /* Q*bert */ if (app_data.crc == 0x06861A9C) useforen=1; /* Flashpoint 5 (Videopac adaption) */ if (app_data.crc == 0xFB83171E) enahirq=0; /* Blockout*/ if (app_data.crc == 0xD38153F6) enahirq=0; /* Blockout (french) */ if (app_data.crc == 0xFB83171E) regionoff=1; /* Blockout*/ if (app_data.crc == 0xD38153F6) regionoff=1; /* Blockout (french) */ if (app_data.crc == 0x202F2749) regionoff=0; /* Q*bert */ if (app_data.crc == 0x5216771A) regionoff=1; /* Popeye */ if (app_data.crc == 0x0C2E4811) regionoff=11; /* Out of this World! / Helicopter Rescue! */ if (app_data.crc == 0x67069924) regionoff=11; /* Smithereens! */ if (app_data.crc == 0x44D1A8A5) regionoff=11; /* Smithereens! (European version) */ if (app_data.crc == 0x2391C2FB) regionoff=11; /* Smithereens! + */ if (app_data.crc == 0xBB4AD548) regionoff=11; /* Smithereens! modified 1 */ if (app_data.crc == 0x25057C11) regionoff=11; /* Smithereens! modified 2 */ if (app_data.crc == 0xB936BD78) regionoff=12; /* Type & Tell */ if (app_data.crc == 0xAD8B9AE0) regionoff=2; /* Type & Tell modified 1 */ if (app_data.crc == 0x5C02BEE6) regionoff=2; /* Type & Tell modified 2 */ if (app_data.crc == 0xDC30AD3D) regionoff=10; /* Dynasty! */ if (app_data.crc == 0x7810BAD5) regionoff=8; /* Dynasty! (European) */ if (app_data.crc == 0xA7344D1F) regionoff=0; /* Atlantis */ if (app_data.crc == 0xD0BC4EE6) regionoff=12; /* Frogger */ if (app_data.crc == 0xA57D84F3) regionoff=8; /* Frogger BR */ if (app_data.crc == 0x825976A9) regionoff=0; /* Mousing Cat 8kb */ if (app_data.crc == 0xF390BFEC) regionoff=0; /* Mousing Cat 4kb */ if (app_data.crc == 0x61A350E6) regionoff=0; /* Mousing Cat (french) */ if (app_data.crc == 0x3BFEF56B) regionoff=1; /* Four in 1 Row! */ if (app_data.crc == 0x7C747245) regionoff=1; /* Four in 1 Row! modified */ if (app_data.crc == 0x9B5E9356) regionoff=1; /* Four in 1 Row! (french) */ if (app_data.crc == 0x6CEBAB74) regionoff=12; /* P.T. Barnum's Acrobats! (European version) */ if (app_data.crc == 0xE7B26A56) regionoff=12; /* P.T. Barnum's Acrobats! (European version - Extra keys) */ if (app_data.crc == 0xFB83171E) mxsnap=3; /* Blockout*/ if (app_data.crc == 0xD38153F6) mxsnap=3; /* Blockout (french) */ if (app_data.crc == 0xA57E1724) mxsnap=12; /* Catch the Ball / Noughts and Crosses */ if (app_data.crc == 0xBE4FF48E) mxsnap=12; /* Catch the Ball / Noughts and Crosses modified */ if (app_data.crc == 0xFD179F6D) mxsnap=3; /* Clay Pigeon! */ if (app_data.crc == 0x9C9DDDF9) mxsnap=3; /* Verkehr */ if (app_data.crc == 0x95936B07) mxsnap=3; /* Super Cobra */ if (app_data.crc == 0x881CEAE4) mxsnap=3; /* Wall Street */ if (app_data.crc == 0x9E42E766) mxsnap=0; /* Turtles */ if (app_data.crc == 0x1C750349) mxsnap=0; /* Turtles (European version) */ if (app_data.crc == 0xD0BC4EE6) mxsnap=3; /* Frogger */ if (app_data.crc == 0xA57D84F3) mxsnap=3; /* Frogger BR */ if (app_data.crc == 0x3BFEF56B) mxsnap=6; /* Four in 1 Row! */ if (app_data.crc == 0x9B5E9356) mxsnap=6; /* Four in 1 Row! (french) */ if (app_data.crc == 0x7C747245) mxsnap=6; /* Four in 1 Row! modified */ if (app_data.crc == 0xA7344D1F) setvideomode(1); /* Atlantis */ if (app_data.crc == 0x39E31BF0) setvideomode(1); /* Jake */ if (app_data.crc == 0x92D0177B) setvideomode(1); /* Jake (hack) */ if (app_data.crc == 0x3351FEDA) setvideomode(1); /* Power Lords */ if (app_data.crc == 0x40AE062D) setvideomode(1); /* Power Lords (alternate) */ if (app_data.crc == 0xD158EEBA) setvideomode(1); /* Labirinth */ if (app_data.crc == 0x26B0FF5B) setvideomode(1); /* Nightmare */ if (app_data.crc == 0xDF36683F) setvideomode(1); /* Shark Hunter */ if (app_data.crc == 0xAF307559) setvideomode(1); /* Super Bee 8Kb */ if (app_data.crc == 0x9585D511) setvideomode(1); /* Super Bee 4Kb */ if (app_data.crc == 0x58FA6766) setvideomode(1); /* War of the Nerves */ if (app_data.crc == 0x58FA6766) setvideomode(1); /* War of the Nerves */ if (app_data.crc == 0x39989464) setvideomode(1); /* Hockey! / Soccer! */ if (app_data.crc == 0x3BFEF56B) setvideomode(1); /* Four in 1 Row! */ if (app_data.crc == 0x9B5E9356) setvideomode(1); /* Four in 1 Row! (french) */ if (app_data.crc == 0x7C747245) setvideomode(1); /* Four in 1 Row! modified */ if (app_data.crc == 0x68560DC7) setvideomode(1); /* Jopac Moto Crash */ if (app_data.crc == 0x020FCA15) setvideomode(1); /* Jopac Moto Crash modified (non VP+) */ if (app_data.crc == 0xC4134DF8) setvideomode(1); /* Helicopter Rescue + */ if (app_data.crc == 0x0D2D721D) setvideomode(1); /* Trans American Rally + */ if (app_data.crc == 0x9D72D4E9) setvideomode(1); /* Blobbers */ if (app_data.crc == 0xB2F0F0B4) setvideomode(1); /* Le Tresor Englouti + */ if (app_data.crc == 0x0B2DEB61) setvideomode(1); /* Tutankham */ if (app_data.crc == 0x313547EB) setvideomode(1); /* VP53 */ if (app_data.crc == 0x06861A9C) setvideomode(1); /* Flashpoint 5 (Videopac adaption) */ if (app_data.crc == 0xA57E1724) setvideomode(0); /* Catch the Ball / Noughts and Crosses */ if (app_data.crc == 0xBE4FF48E) setvideomode(0); /* Catch the Ball / Noughts and Crosses modified */ if (app_data.crc == 0xFB83171E) setvideomode(0); /* Blockout*/ if (app_data.crc == 0xD38153F6) setvideomode(0); /* Blockout (french) */ if (app_data.crc == 0x9BFC3E01) setvideomode(0); /* Demon Attack */ if (app_data.crc == 0x50AF9D45) setvideomode(0); /* Demon Attack + */ if (app_data.crc == 0x9884EF36) setvideomode(0); /* Demon Attack + modified */ if (app_data.crc == 0x4A578DFE) setvideomode(0); /* Restaurant ntsc */ if (app_data.crc == 0x863D5E2D) setvideomode(0); /* Shark Hunter ntsc */ if (app_data.crc == 0xD62814A3) evblclk=12000; /* Pick Axe Pete */ if (app_data.crc == 0xB2FFB353) evblclk=12000; /* Pick Axe Pete + */ if (app_data.crc == 0x81C20196) evblclk=12000; /* Pick Axe Pete + (modified) */ if ((app_data.crc == 0xF390BFEC) || (app_data.crc == 0x825976A9) || (app_data.crc == 0x61A350E6)){ /* Mousing Cat */ setvideomode(1); evblclk=7642; } if (app_data.crc == 0xD0BC4EE6) { /* Frogger */ setvideomode(1); evblclk=7642; } if (app_data.crc == 0x26517E77) { /* Commando Noturno */ setvideomode(1); evblclk=6100; regionoff=12; } if (app_data.crc == 0xA57E1724) { /* Catch the ball*/ regionoff=5; sproff=1; } if ((app_data.crc == 0x2DCB77F0) || (app_data.crc == 0xF6882734)) { /* Depth Charge / Marksman */ setvideomode(1); evblclk=8000; } if (app_data.crc == 0x881CEAE4) { /* Wall Street */ setvideomode(1); evblclk=6100; } if (app_data.crc == 0xD0BC4EE6) tweakedaudio=1; /* Frogger */ if (app_data.crc == 0xA57D84F3) tweakedaudio=1; /* Frogger BR */ if (app_data.crc == 0x5216771A) tweakedaudio=1; /* Popeye */ if (app_data.crc == 0xAFB23F89) tweakedaudio=1; /* Musician */ if (app_data.crc == 0xC4134DF8) tweakedaudio=1; /* Helicopter Rescue + */ if (app_data.crc == 0x0D2D721D) tweakedaudio=1; /* Trans American Rally + */ if (app_data.crc == 0xD3B09FEC) sproff=1; /* Volleyball! */ if (app_data.crc == 0x551E38A2) sproff=1; /* Volleyball! (french) */ }
void show_copyright(void) { setvideomode(3); printf(" Protected Mode 32-bit and Extended Memory Diagnostic Program -- v%s \n",version); printf(" Copyright (C) Supernar Systems, Ltd. 1996-2002\n"); }
static bool loadcolors(const char *fn, const char *section) /* Loads and sets only the color-definition out of the file, named by 'fn', * using the section 'section' therein. Returns true, if succeeded. */ { CfgParse cp(fn); if(cp.geterror() == CfgParse::NotFound) // file not found? return false; // Define config variables cp.enum_vars(CONFIG_VARS); // Read sizes/positions of windows read_stdwnd(cp,"titlebar",section,titlebar); read_stdwnd(cp,"infownd",section,infownd); read_stdwnd(cp,"songwnd",section,songwnd); read_stdwnd(cp,"instwnd",section,instwnd); read_stdwnd(cp,"filesel",section,filesel); read_stdwnd(cp,"volbars",section,volbars); read_stdwnd(cp,"mastervol",section,mastervol); // Read GUI color configuration if(!cp.section(section)) return false; do { switch(cp.peekvar()) { case 0: backcol = cp.readlong(); break; case 6: CWindow::setcolor(CWindow::Border,cp.readlong()); break; case 7: CWindow::setcolor(CWindow::Caption,cp.readlong()); break; case 8: CWindow::setcolor(CWindow::In,cp.readlong()); break; case 9: CWindow::setcolor(CWindow::Select,cp.readlong()); break; case 10: CWindow::setcolor(CWindow::Unselect,cp.readlong()); break; case 11: CWindow::setcolor(CWindow::Bar,cp.readlong()); break; case 12: CWindow::setcolor(CWindow::Clip,cp.readlong()); break; case 13: if(cp.readbool()) { hivideo = true; load88font(); hidecursor(); } else { hivideo = false; setvideomode(3); hidecursor(); } break; case 15: FileWnd::setfilecolor(FileWnd::FileSel,cp.readlong()); break; case 16: FileWnd::setfilecolor(FileWnd::FileUnsel,cp.readlong()); break; case 17: FileWnd::setfilecolor(FileWnd::DirSel,cp.readlong()); break; case 18: FileWnd::setfilecolor(FileWnd::DirUnsel,cp.readlong()); break; case 19: FileWnd::setfilecolor(FileWnd::DriveSel,cp.readlong()); break; case 20: FileWnd::setfilecolor(FileWnd::DriveUnsel,cp.readlong()); break; case 21: loadcolors(fn,cp.readstr()); break; case 22: CWindow::setcolor(CWindow::Focus,cp.readlong()); break; case 24: FileWnd::setfilecolor(FileWnd::SupportedSel,cp.readlong()); break; case 25: FileWnd::setfilecolor(FileWnd::SupportedUnsel,cp.readlong()); break; } } while(!cp.geterror()); if(in_help) display_help(infownd); // Reformat help display, if active if(cp.geterror() == CfgParse::Invalid) return false; else return true; }
int main ( int argc, char** argv ) { int done, pause, bookmark; int joypads[NJOYSTICKS]; mastersystem *sms = NULL; appenv *environment = NULL; romspecs *rspecs = NULL; display screen; SDL_version sdlvers; char *romfilename=NULL; int nosound = 0; int codemasters = 0; tmachine machine = UNDEFINED; video_mode vmode = UNDEFINED; screen.fullscreen = 0; screen.scale = DEFAULT_SCALE; screen.minscale = (float)224.0 / 192; #ifndef DEBUG assert(0); #endif environment = getappenv(); initmodules(environment->basedir); log4me_print("-==| %s version %s |==-\n", PACKAGE, VERSION); #ifdef DEBUG log4me_print(" => DEBUG version\n"); #endif readoptions(argc, argv, &romfilename, &screen.fullscreen, &machine, &vmode, &nosound, &screen.scale, &codemasters); SDL_GetVersion(&sdlvers); log4me_print("SDL : %d.%d.%d\n", sdlvers.major, sdlvers.minor, sdlvers.patch); log4me_print("SDL : Video driver (%s)\n", getcurrentvideodriver()); log4me_print("SDL : Rendered driver (%s)\n", getcurrentrendererdriver()); log4me_print("SDL : Audio driver (%s)\n", SDL_GetCurrentAudioDriver()); // Init joypads int i; for(i=0;i<NJOYSTICKS;i++) joypads[i] = input_new_pad(); // Display joypads informations if(input_pad_detected()) { padinfos infos; for(i=0;i<NJOYSTICKS;i++) { if(joypads[i]==NO_JOYPAD) continue; input_pad_getinfos(joypads[i], &infos); log4me_print("SDL : Player %d joystick detected => %s\n", i+1, infos.name); log4me_print("\tButtons : %d, Axis : %d, Hats : %d\n", infos.buttons, infos.axis, infos.hats); } } else log4me_print("SDL : No joystick detected\n"); rspecs = getromspecs(romfilename, machine, vmode, codemasters); machine = getrommachine(rspecs); vmode = getromvideomode(rspecs); assert((machine==JAPAN) || (machine==EXPORT)); assert((vmode==VM_NTSC) || (vmode==VM_PAL)); log4me_print("SMS : Use %s machine with %s video mode\n", machine==EXPORT ? "Export" : "Japan", vmode==VM_PAL ? "PAL" : "NTSC"); switch(getromgameconsole(rspecs)) { case GC_SMS: screen.width = 256; screen.height = 192; screen.margin = DEFAULT_MARGIN; break; case GC_GG: screen.width = 160; screen.height = 144; screen.margin = 0; break; default: assert(0); break; } setvideomode(&screen); sms = ms_init(&screen, rspecs, nosound ? SND_OFF : SND_ON, joypads[0], joypads[1], environment->backup); if(sms==NULL) { log4me_error(LOG_EMU_MAIN, "Unable to allocate and initialize the SMS emulator.\n"); exit(EXIT_FAILURE); } SDL_SetWindowTitle(screen.window, CSTR(sms->romname)); done = pause = bookmark = 0; ms_start(sms); while (!done) { SDL_Event event; while(SDL_PollEvent(&event)) { input_process_event(&event); done |= (event.type==SDL_QUIT); } done |= input_key_pressed(SDL_SCANCODE_ESCAPE); if(input_key_down(SDL_SCANCODE_PAUSE)) { pause ^= 1; ms_pause(sms, pause); } if(input_key_down(SDL_SCANCODE_F9)) takesnapshot(sms, environment->snapshots); if(input_key_down(SDL_SCANCODE_F10)) takescreenshot(sms, environment->screenshots); if(input_key_down(SDL_SCANCODE_F2)) { ms_pause(sms, 1); screen.scale -= 0.2; setvideomode(&screen); ms_pause(sms, 0); } if(input_key_down(SDL_SCANCODE_F3)) { ms_pause(sms, 1); screen.scale += 0.2; setvideomode(&screen); ms_pause(sms, 0); } if(input_key_down(SDL_SCANCODE_F4)) { ms_pause(sms, 1); screen.fullscreen ^= 1; setvideomode(&screen); ms_pause(sms, 0); } #ifdef DEBUG if(input_key_down(SDL_SCANCODE_B)) log4me_print("[BKM] %d\n", bookmark++); if(input_key_down(SDL_SCANCODE_F5)) savetiles(sms, environment->debug); if(input_key_down(SDL_SCANCODE_F6)) tms9918a_toggledisplaypalette(&sms->vdp); #endif if(!ms_ispaused(sms)) ms_execute(sms); } releaseobject(sms); releaseobject(rspecs); for(i=0;i<NJOYSTICKS;i++) input_release_pad(joypads[i]); releaseobject(environment); return 0; }