Example #1
0
File: osint.c Project: visy/vecx
void mainloop() {
	vecx_emu((VECTREX_MHZ / 1000) * EMU_TIMER);
	readevents();

	{
		Uint32 now = SDL_GetTicks();
		if(now < next_time) {
			next_time += EMU_TIMER;
			return;
		}
		else {
			next_time = now;
			next_time += EMU_TIMER;
		}
	}
}
Example #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;
		}
	}
}
Example #3
0
File: osint.c Project: zhuowei/vecx
AS3_Val flash_tick(void *data, AS3_Val args){
	vecx_emu((VECTREX_MHZ / 1000) * EMU_TIMER, 0);
	return AS3_Int(0);
}
Example #4
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");
}
Example #5
0
void retro_run(void)
{
	int i;
	unsigned char asamples[882] = {0};
	uint8_t buffer[882] = {0};

   (void)asamples;
	
   /* poll input and update states;
      buttons (snd_regs[14], 4 buttons/pl => 4 bits starting from LSB, |= for rel. &= ~ for push)
      analog stick (alg_jch0, alg_jch1, => -1 (0x00) .. 0 (0x80) .. 1 (0xff)) */
	poll_cb();

   /* Player 1 */

	if      (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT ))
      alg_jch0 = 0x00;
	else if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT))
      alg_jch0 = 0xff;
	else
      alg_jch0 = 0x80;
	
	if      (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP   ))
      alg_jch1 = 0xff;
	else if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN ))
      alg_jch1 = 0x00;
	else
      alg_jch1 = 0x80;

	
	if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A ))
      snd_regs[14] &= ~1;
	else
      snd_regs[14] |= 1;
	
	if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B ))
      snd_regs[14] &= ~2;
	else
      snd_regs[14] |= 2;

	if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X ))
      snd_regs[14] &= ~4;
	else
      snd_regs[14] |= 4;

	if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y ))
      snd_regs[14] &= ~8;
	else
      snd_regs[14] |= 8;

   /* Player 2 */
	if      (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT ))
      alg_jch2 = 0x00;
	else if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT))
      alg_jch2 = 0xff;
	else
      alg_jch2 = 0x80;
	
	if      (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP   ))
      alg_jch3 = 0xff;
	else if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN ))
      alg_jch3 = 0x00;
	else
      alg_jch3 = 0x80;

	if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A ))
      snd_regs[14] &= ~16;
	else
      snd_regs[14] |= 16;
	
	if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B ))
      snd_regs[14] &= ~32;
	else
      snd_regs[14] |= 32;

	if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X ))
      snd_regs[14] &= ~64;
	else
      snd_regs[14] |= 64;
	
	if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y ))
      snd_regs[14] &= ~128;
	else
      snd_regs[14] |= 128;
		
	vecx_emu(30000); /* 1500000 / 1000 * 20 */
	
	e8910_callback(NULL, buffer, 882);
	
	for (i = 0; i < 882; i++)
   {
		short convs = (buffer[i] << 8) - 0x7ff;
		audio_cb(convs, convs);
	}

	video_cb(framebuffer, WIDTH, HEIGHT, WIDTH * sizeof(unsigned short));
}