Esempio n. 1
0
/*============================================================================*/
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
}
Esempio n. 2
0
static void setadplugvideo()
  /* Setup AdPlay's idea of the video state */
{
  setvideomode(3);
  if(hivideo) load88font();
  clearscreen(backcol);
  hidecursor();
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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) */	

}
Esempio n. 6
0
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");
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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;
}