Ejemplo n.º 1
0
Archivo: osint.c Proyecto: zhuowei/vecx
AS3_Val flash_init(void *data, AS3_Val args){
	FILE *f;
	if(!(f = fopen(romfilename, "rb"))){
		perror(romfilename);
		return AS3_Int(1);
	}
	if(fread(rom, 1, sizeof (rom), f) != sizeof (rom)){
		printf("Invalid rom length\n");
		return AS3_Int(2);
	}
	fclose(f);

	memset(cart, 0, sizeof (cart));
	if(cartfilename){
		FILE *f;
		if(!(f = fopen(cartfilename, "rb"))){
			perror(cartfilename);
			return AS3_Int(2);
		}
		fread(cart, 1, sizeof (cart), f);
		fclose(f);
	}
	vecx_reset();
	return AS3_Int(0);
}
Ejemplo n.º 2
0
void osint_emuloop(){
	Uint32 next_time = SDL_GetTicks() + EMU_TIMER;
	vecx_reset();
	for(;;){
		vecx_emu((VECTREX_MHZ / 1000) * EMU_TIMER, 0);
		readevents();

		{
			Uint32 now = SDL_GetTicks();
			if(now < next_time)
				SDL_Delay(next_time - now);
			else
				next_time = now;
			next_time += EMU_TIMER;
		}
	}
}
Ejemplo n.º 3
0
bool retro_load_game(const struct retro_game_info *info)
{
   size_t cart_sz;
   struct retro_input_descriptor desc[] = {
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT,  "Left" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP,    "Up" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN,  "Down" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B,     "2" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A,     "1" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X,     "3" },
      { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y,     "4" },

      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT,  "Left" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP,    "Up" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN,  "Down" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B,     "2" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A,     "1" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X,     "3" },
      { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y,     "4" },
   };

   environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc);

   /* start with a fresh BIOS copy */
	memcpy(rom, bios_data, bios_data_size);

   /* just memcpy buffer, ROMs are so tiny on Vectrex */
	cart_sz = sizeof(cart) / sizeof(cart[0]);

	if (info->data && info->size > 0 && info->size <= cart_sz)
   {
      memset(cart, 0, cart_sz);
      memcpy(cart, info->data, info->size);

      vecx_reset();
      e8910_init_sound();

      return true;
   }

	return false;
}
Ejemplo n.º 4
0
Archivo: osint.c Proyecto: visy/vecx
void osint_emuloop(){
	next_time = SDL_GetTicks() + EMU_TIMER;
	vecx_reset();


}
Ejemplo n.º 5
0
void osint_emuloop (void)
{
	int frames, running;
    double t, t0, t1, fps;
    char    titlestr[ 200 ];
    SDL_Event event;
	
	// reset the vectrex hardware
	vecx_reset ();

    frames = 0;
	running = 1;
	t0 = SDL_GetTicks();
	t1 = t0;
	while (running) {

	    // Grab all the events off the queue. 
	    while( SDL_PollEvent( &event ) ) {
		   switch( event.type ) {
			case SDL_KEYDOWN:
				// Handle key presses
				switch(event.key.keysym.sym) {
					case SDLK_LEFT :
						alg_jch0 = 0x00;
						break;
					case SDLK_RIGHT :
						alg_jch0 = 0xFF;
						break;
					case SDLK_UP :
						alg_jch1 = 0xFF;
						break;
					case SDLK_DOWN :
						alg_jch1 = 0x00;
						break;
					case SDLK_a :
						snd_regs[14] &= ~0x01;
						break;
					case SDLK_s :
						snd_regs[14] &= ~0x02;
						break;
					case SDLK_d:
						snd_regs[14] &= ~0x04;
						break;
					case SDLK_f :
						snd_regs[14] &= ~0x08;
						break;
					case SDLK_p :					// pause
					case SDLK_SPACE :
						if(1 == running) {
							running = 2;		// 2 = "pause state"
							SDL_PauseAudio(1);
						}
						else {
							running = 1;
							SDL_PauseAudio(0);
						}
						break;
					case SDLK_w :					// toggle sound debug on/off
						if(AY_debug) AY_debug = 0;
						else AY_debug = 1;
						break;
					case SDLK_q :					// quit
					case SDLK_ESCAPE :
						running = 0;
						break;
				} // end switch keydown
				break;
			case SDL_KEYUP:
				// Handle key releases
				switch(event.key.keysym.sym) {
					case SDLK_LEFT :
						alg_jch0 = 0x80;
						break;
					case SDLK_RIGHT :
						alg_jch0 = 0x80;
						break;
					case SDLK_UP :
						alg_jch1 = 0x80;
						break;
					case SDLK_DOWN :
						alg_jch1 = 0x80;
						break;
					case SDLK_a :
						snd_regs[14] |= 0x01;
						break;
					case SDLK_s :
						snd_regs[14] |= 0x02;
						break;
					case SDLK_d:
						snd_regs[14] |= 0x04;
						break;
					case SDLK_f :
						snd_regs[14] |= 0x08;
						break;
				} //end switch keyup
				break;
			case SDL_QUIT:
				/* Handle quit requests (like Ctrl-c). */
				running = 0;
				break;
			} // end outer switch

		} // wend events

        // Calculate and display Window caption info
		if(2 == running) {
			SDL_WM_SetCaption("VecX/SDL/GL (PAUSED)", NULL);
		}
		else {
			// Get time
			t = SDL_GetTicks();
			if(AY_debug) {
				// update AY debug info 10x a second
				if( (t-t1) >= 100)
				{
					fps = (double)frames;
					sprintf(titlestr, "F: %04d %04d %04d  V: %02d %02d %02d  TE: %d %d %d",
							AY_spufreq[0], AY_spufreq[1], AY_spufreq[2],
							AY_vol[0], AY_vol[1], AY_vol[2], 
							AY_tone_enable[0], AY_tone_enable[1], AY_tone_enable[2]);
					SDL_WM_SetCaption(titlestr, NULL);
					t1 = t;
					frames = 0;
				}
			}
			else {
				// update fps display once per second
				if( (t-t1) >= 1000)
				{
					fps = (double)frames;
					sprintf( titlestr, "VecX/SDL/GL (%.1f FPS) Drawn: %d ", 
							fps, vector_draw_cnt );
					SDL_WM_SetCaption(titlestr, NULL);
					t1 = t;
					frames = 0;
				}
			}
	        frames ++;
		}

		// emulate this "frame" (if not paused)
		if(1 == running)
			vecx_emu ((VECTREX_MHZ / 1000) * EMU_TIMER, 0);

		// speed control
		while(SDL_GetTicks() < (t0 + EMU_TIMER)) ;
		t0 = SDL_GetTicks();

	} // wend running

printf("Exit emuloop.\n");
}
Ejemplo n.º 6
0
Archivo: osint.c Proyecto: zhuowei/vecx
AS3_Val flash_reset(void *data, AS3_Val args){
	vecx_reset();
	return AS3_Int(0);
}
Ejemplo n.º 7
0
void retro_reset(void)
{
	vecx_reset();
	e8910_init_sound();
}
Ejemplo n.º 8
0
void retro_unload_game(void)
{
	memset(cart, 0, sizeof(cart) / sizeof(cart[0]));
	vecx_reset();
}