Esempio n. 1
0
void exit() {

	uae_quit();

	if(ctrlstate == UADE_R_STATE) {
		__android_log_print(ANDROID_LOG_VERBOSE, "UADE", "We are in R STATE ?!");
		if (uade_receive_message(um, sizeof(space), &uadeipc) <= 0)
			__android_log_print(ANDROID_LOG_VERBOSE, "UADE", "Can not receive events from uade");
		else
			__android_log_print(ANDROID_LOG_VERBOSE, "UADE", "Got msg %d", um->msgtype);
	}

	 if (uade_send_short_message(UADE_COMMAND_REBOOT, &state.ipc)) {
		 __android_log_print(ANDROID_LOG_VERBOSE, "UADEPlugin", "Send reboot failed");
	 }
	__android_log_print(ANDROID_LOG_VERBOSE, "UADEPlugin", "Waiting for UAE to exit");
	int rc = pthread_join(thread, NULL);
	__android_log_print(ANDROID_LOG_VERBOSE, "UADEPlugin", "Exit with %d", rc);
	thread = 0;

	if(soundBuffer)
		free(soundBuffer);
	soundBuffer = 0;

}
Esempio n. 2
0
static void my_kbd_handlerx (int scancode, int newstate)
{
    int akey = scancode2amiga (scancode);

    assert (scancode >= 0 && scancode < 0x100);
    if (scancode == SCODE_F12) {
	uae_quit ();
    } else if (scancode == SCODE_F11) {
	gui_requested = 1;
    }
    if (keystate[scancode] == newstate)
	return;

    keystate[scancode] = newstate;

    if (akey == -1)
	return;

    if (newstate == KEY_EVENTPRESS) {
	if (akey == AK_inhibit)
	    toggle_inhibit_frame (0);
	else
	    record_key (akey << 1);
    } else
	record_key ((akey << 1) | 1);

    /* "Affengriff" */
    if ((keystate[AK_CTRL] || keystate[AK_RCTRL]) && keystate[AK_LAMI] && keystate[AK_RAMI])
	uae_reset ();
}
Esempio n. 3
0
/* 0 = normal, 1 = nogui, -1 = disable nogui */
void uae_restart (int opengui, char *cfgfile)
{
    uae_quit ();
    restart_program = opengui > 0 ? 1 : (opengui == 0 ? 2 : 3);
    restart_config[0] = 0;
    if (cfgfile)
	strcpy (restart_config, cfgfile);
}
Esempio n. 4
0
/* 0 = normal, 1 = nogui, -1 = disable nogui */
void uae_restart (int opengui, TCHAR *cfgfile)
{
	uae_quit ();
	restart_program = opengui > 0 ? 1 : (opengui == 0 ? 2 : 3);
	restart_config[0] = 0;
	default_config = 0;
	if (cfgfile)
		_tcscpy (restart_config, cfgfile);
}
Esempio n. 5
0
static void REGPARAM2 filesys_bput (uaecptr addr, uae_u32 b)
{
    write_log ("filesys_bput called. This usually means that you are using\n");
    write_log ("Kickstart 1.2. Please give UAE the \"-a\" option next time\n");
    write_log ("you start it. If you are _not_ using Kickstart 1.2, then\n");
    write_log ("there's a bug somewhere.\n");
    write_log ("Exiting...\n");
    uae_quit ();
}
Esempio n. 6
0
static void ersatz_failed (void)
{
    if (already_failed)
	return;
    already_failed = 1;
#if 0
    notify_user (NUMSG_KICKREPNO);
    uae_restart (-1, NULL);
#endif
    uae_quit ();
}
Esempio n. 7
0
bool UAE::QuitRequested(void)
{
	// Quit the thread
	uae_quit();

	status_t status;
	wait_for_thread(fEmulationThread, &status);

	ShowCursor();

	return true;
}
Esempio n. 8
0
/* 0 = normal, 1 = nogui, -1 = disable nogui */
void uae_restart (int opengui, const TCHAR *cfgfile)
{
#ifdef FSUAE
	write_log("uae_restart\n");
#endif
	uae_quit ();
	restart_program = opengui > 0 ? 1 : (opengui == 0 ? 2 : 3);
	restart_config[0] = 0;
	default_config = 0;
	if (cfgfile)
		_tcscpy (restart_config, cfgfile);
	target_restart ();
}
Esempio n. 9
0
static int do_gui (int mode)
{
    char cwd[1024];

    if (getcwd (cwd, 1024) == NULL)
	return 0;

    tui_setup ();

    for (;;) {
	int c;

	tui_selwin (0);
	print_configuration ();
	c = tui_menubrowse (mode == 0 ? mainmenu2 : mainmenu, MENU_COL_OFFSET, 4, 0, MAX_MENU_HEIGHT);
	if (c == -1) {
	    tui_shutdown ();
	    return -2;
	}
	if (mode == 1) {
	    if (c == 8)
		break;
	    switch (c) {
	     case 0: DiskOptions (); break;
	     case 1: VideoOptions (); break;
	     case 2: MemoryOptions (); break;
	     case 3: CPUOptions (); break;
	     case 4: HDOptions (); break;
	     case 5: SoundOptions (); break;
	     case 6: OtherOptions (); break;
	     case 7: save_settings (); break;
	    }
	} else {
	    if (c == 5)
		break;
	    switch (c) {
	     case 0: DiskOptions (); break;
	     case 1: OtherOptions (); break;
	     case 2: save_settings (); break;
	     case 3: uae_reset (0); break;
	     case 4: uae_quit (); break;
	    }
	}
    }
    tui_shutdown ();

    chdir (cwd);
    return 0;
}
Esempio n. 10
0
void ersatz_perform (uae_u16 what)
{
    switch (what) {
     case EOP_INIT:
	ersatz_init ();
	break;

     case EOP_SERVEINT:
	/* Just reset all the interrupt request bits */
	put_word (0xDFF09C, get_word (0xDFF01E) & 0x3FFF);
	break;

     case EOP_DOIO:
	ersatz_doio ();
	break;

     case EOP_AVAILMEM:
	_68k_dreg(0) = _68k_dreg(1) & 4 ? 0 : 0x70000;
	break;

     case EOP_ALLOCMEM:
	_68k_dreg(0) = _68k_dreg(1) & 4 ? 0 : 0x0F000;
	break;

     case EOP_ALLOCABS:
	_68k_dreg(0) = _68k_areg(1);
	break;

     case EOP_NIMP:
	write_log ("Unimplemented Kickstart function called\n");
	uae_quit ();
	
	/* fall through */
     case EOP_LOOP:
	_68k_setpc (0xF80010);
	break;

     case EOP_OPENLIB:
     default:
	write_log ("Internal error. Giving up.\n");
	return;
    }
}
Esempio n. 11
0
/* there's a problem remaining with the semantics of the '#' key on U.S. keyboards */
static int scancode2amiga (int keycode, int scancode)
{
	static int firstscan=0;
	if (!firstscan)
	{
	    keyboardlayoutid=GetKeyboardLayout(0);
	    keyboardlangid=LOWORD(keyboardlayoutid);
	    firstscan=1;
	}
#if DEBUG_KBD
    write_log ( "keycode = 0x%x, scancode = 0x%x\n", keycode, scancode ); 
#endif

    if(keyboardlangid==MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN))
    {
	if (keystate[AK_CTRL] &&
	    keystate[AK_RALT])
	{
	    switch (keycode & 0xff) 
	    {
	    case 0xdb:
		return AK_BACKSLASH;
	    case 0x51:          //@	     
		record_key ((AK_CTRL << 1)+1);
		return 0x10;
	    case 0xbb:          //~
		record_key ((AK_CTRL << 1)+1);
		return 0x1b;
		
	    }
	}
    }

#define USE_OLD_SHIFT_CODE

    switch (keycode & 0xff) 
    {
#ifndef USE_OLD_SHIFT_CODE
    case VK_SHIFT:
	{
	    SHORT lsh, rsh;
	    lsh = GetKeyState( VK_LSHIFT );
	    rsh = GetKeyState( VK_RSHIFT );
	    if( !keystate[AK_RSH] && (rsh & 0x8000))
		return AK_RSH;
	    if( keystate[AK_RSH] && !(rsh & 0x8000))
		return AK_RSH;
	    if( !keystate[AK_LSH] && (lsh & 0x8000))
		return AK_LSH;
	    if( keystate[AK_LSH] && !(lsh & 0x8000))
		return AK_LSH;
	}
#endif
     case VK_INSERT:
     case VK_LWIN:
	return AK_LAMI;
     case VK_HOME:
     case VK_RWIN:
	return AK_RAMI;
     case VK_MENU:
	 return scancode & KF_EXTENDED ? AK_RALT:AK_LALT;
     case VK_APPS: /* Map Windows "Menu" key to Right-Alt of Amiga, for Stefan Stuntz */
	 return AK_RALT;
     case VK_SCROLL:
	return AK_inhibit;
     case VK_F11:
#if 0
	 if( currprefs.win32_ctrl_F11_is_quit )
	 {
	    if (GetAsyncKeyState (VK_CONTROL)&0x8000)
		uae_quit();
	 }
#endif
	 return AK_BACKSLASH;
     case VK_F12:
	 if (GetAsyncKeyState (VK_CONTROL)&0x8000)
	     return -6;
	 if( shiftpressed() )
	     return -5;
	 else
	     return -2;
	 break;
     case VK_PAUSE:
	return -3;
     case VK_DECIMAL:
	return AK_NPDEL;
     case VK_DIVIDE:
	return AK_NPDIV;
     case VK_MULTIPLY:
	return AK_NPMUL;
     case VK_SUBTRACT:
	return AK_NPSUB;
     case VK_ADD:
	return AK_NPADD;
     case VK_NUMPAD0:
	return AK_NP0;
     case VK_NUMPAD1:
	return AK_NP1;
     case VK_NUMPAD2:
	return AK_NP2;
     case VK_NUMPAD3:
	return AK_NP3;
     case VK_NUMPAD4:
	return AK_NP4;
     case VK_NUMPAD5:
	return AK_NP5;
     case VK_NUMPAD6:
	return AK_NP6;
     case VK_NUMPAD7:
	return AK_NP7;
     case VK_NUMPAD8:
	return AK_NP8;
     case VK_NUMPAD9:
	return AK_NP9;
     case VK_UP:
	return AK_UP;
     case VK_DOWN:
	return AK_DN;
     case VK_LEFT:
	return AK_LF;
     case VK_RIGHT:
	return AK_RT;
     case VK_CONTROL:
	return scancode & KF_EXTENDED ? AK_RCTRL : AK_CTRL;
     case VK_RETURN:
	return scancode & KF_EXTENDED ? AK_ENT : AK_RET;
     case VK_CAPITAL:
	return -4;
     case VK_F1:
	if (helppressed ())
	    return -10 - shiftpressed ();
	return AK_F1;
     case VK_F2:
	if (helppressed ())
	    return -12 - shiftpressed ();
	return AK_F2;
    case VK_F3:
	if (helppressed ())
	    return -14 - shiftpressed ();
	return AK_F3;
    case VK_F4:
	if (helppressed ())
	    return -16 - shiftpressed ();
	return AK_F4;
     case VK_F5:
	return AK_F5;
     case VK_F6:
	return AK_F6;
     case VK_F7:
	return AK_F7;
     case VK_F8:
	return AK_F8;
     case VK_F9:
	return AK_F9;
     case VK_F10:
	return AK_F10;
     case VK_NEXT:
	return AK_HELP;
    }

    switch (scancode) {
     case 0x01:
	return 0x45;
     case 0x29:
	return 0x00;
     case 0x02:
	return 0x01;
     case 0x03:
	return 0x02;
     case 0x04:
	return 0x03;
     case 0x05:
	return 0x04;
     case 0x06:
	return 0x05;
     case 0x07:
	return 0x06;
     case 0x08:
	return 0x07;
     case 0x09:
	return 0x08;
     case 0x0a:
	return 0x09;
     case 0x0b:
	return 0x0a;
     case 0x0c:
	return 0x0b;
     case 0x0d:
	return 0x0c;
     case 0x57: /* This is F11 */
	return AK_BACKSLASH;
     case 0x0e:
	return 0x41;
     case 0x0f:
	return 0x42;
     case 0x10:
	return 0x10;
     case 0x11:
	return 0x11;
     case 0x12:
	return 0x12;
     case 0x13:
	return 0x13;
     case 0x14:
	return 0x14;
     case 0x15:
	return 0x15;
     case 0x16:
	return 0x16;
     case 0x17:
	return 0x17;
     case 0x18:
	return 0x18;
     case 0x19:
	return 0x19;
     case 0x1a:
	return 0x1a;
     case 0x1b:
	return 0x1b;
	/* special handling for caps lock: return 0x63*/
     case 0x3a:
	return 0x62;
     case 0x1e:
	return 0x20;
     case 0x1f:
	return 0x21;
     case 0x20:
	return 0x22;
     case 0x21:
	return 0x23;
     case 0x22:
	return 0x24;
     case 0x23:
	return 0x25;
     case 0x24:
	return 0x26;
     case 0x25:
	return 0x27;
     case 0x26:
	return 0x28;
     case 0x27:
	return AK_SEMICOLON;
     case 0x28:
	return AK_QUOTE;
     case 0x2b: /* This scancode is \ on US keyboards, but # on German ones - figure out which! */
	 if( getascii( keycode & 0xFF, scancode ) == '#' )
	     return AK_NUMBERSIGN;
	 else
	     return AK_BACKSLASH;
	 break;
#ifdef USE_OLD_SHIFT_CODE
     case 0x2a:
	return AK_LSH;
     case 0x36:
	return AK_RSH;
#endif
     case 0x56:
	return AK_LTGT;
     case 0x2c:
	return 0x31;
     case 0x2d:
	return 0x32;
     case 0x2e:
	return 0x33;
     case 0x2f:
	return 0x34;
     case 0x30:
	return 0x35;
     case 0x31:
	return 0x36;
     case 0x32:
	return 0x37;
     case 0x33:
	return 0x38;
     case 0x34:
	return 0x39;
     case 0x35:
	return 0x3a;
     case 0x38:
	return 0x64;
     case 0x39:
	return 0x40;
     case 0x153:
	return 0x46;
     case 0x51:
	return 0x5f;
     case 0x52:
	return AK_LAMI;
     case 0x47:
	return AK_RAMI;
     case 0x4b:
	return 0x4f;
     case 0x50:
	return 0x4d;
     case 0x4d:
	return 0x4e;
     case 0x48:
	return 0x4c;
     case 0x4e:
	return 0x5e;
     case 0x4a:
	return 0x4a;
     case 0x37:
	return 0x5d;
    }

    return -1;
}
Esempio n. 12
0
static void ersatz_init (void)
{
	int32_t f;
	uaecptr request;
	uaecptr a;

	already_failed = 0;
	write_log (_T("initializing kickstart replacement\n"));
	if (disk_empty (0)) {
		already_failed = 1;
		notify_user (NUMSG_KICKREP);
		uae_quit ();
		//uae_restart (-1, NULL);
		return;
	}

	regs.s = 0;
	/* Set some interrupt vectors */
	for (a = 8; a < 0xC0; a += 4) {
		put_long (a, 0xF8001A);
	}
	regs.isp = regs.msp = regs.usp = 0x800;
	m68k_areg (regs, 7) = 0x80000;
	regs.intmask = 0;

	/* Build a dummy execbase */
	put_long (4, m68k_areg (regs, 6) = 0x676);
	put_byte (0x676 + 0x129, 0);
	for (f = 1; f < 105; f++) {
		put_word (0x676 - 6*f, 0x4EF9);
		put_long (0x676 - 6*f + 2, 0xF8000C);
	}
	/* Some "supported" functions */
	put_long (0x676 - 456 + 2, 0xF80014);
	put_long (0x676 - 216 + 2, 0xF80020);
	put_long (0x676 - 198 + 2, 0xF80026);
	put_long (0x676 - 204 + 2, 0xF8002c);
	put_long (0x676 - 210 + 2, 0xF8002a);

	/* Build an IORequest */
	request = 0x800;
	put_word (request + 0x1C, 2);
	put_long (request + 0x28, 0x4000);
	put_long (request + 0x2C, 0);
	put_long (request + 0x24, 0x200 * 4);
	m68k_areg (regs, 1) = request;
	ersatz_doio ();
	/* kickstart disk loader */
	if (get_long (0x4000) == 0x4b49434b) {
		/* a kickstart disk was found in drive 0! */
		write_log (_T("Loading Kickstart rom image from Kickstart disk\n"));
		/* print some notes... */
		write_log (_T("NOTE: if UAE crashes set CPU to 68000 and/or chipmem size to 512KB!\n"));

		/* read rom image from kickstart disk */
		put_word (request + 0x1C, 2);
		put_long (request + 0x28, 0xF80000);
		put_long (request + 0x2C, 0x200);
		put_long (request + 0x24, 0x200 * 512);
		m68k_areg (regs, 1) = request;
		ersatz_doio ();

		/* read rom image once again to mirror address space.
		not elegant, but it works... */
		put_word (request + 0x1C, 2);
		put_long (request + 0x28, 0xFC0000);
		put_long (request + 0x2C, 0x200);
		put_long (request + 0x24, 0x200 * 512);
		m68k_areg (regs, 1) = request;
		ersatz_doio ();

		disk_eject (0);

		m68k_setpc (0xFC0002);
		fill_prefetch ();
		uae_reset (0);
		ersatzkickfile = 0;
		return;
	}

	m68k_setpc (0x400C);
	fill_prefetch ();

	/* Init the hardware */
	put_long (0x3000, 0xFFFFFFFEul);
	put_long (0xDFF080, 0x3000);
	put_word (0xDFF088, 0);
	put_word (0xDFF096, 0xE390);
	put_word (0xDFF09A, 0xE02C);
	put_word (0xDFF09E, 0x0000);
	put_word (0xDFF092, 0x0038);
	put_word (0xDFF094, 0x00D0);
	put_word (0xDFF08E, 0x2C81);
	put_word (0xDFF090, 0xF4C1);
	put_word (0xDFF02A, 0x8000);

	put_byte (0xBFD100, 0xF7);
	put_byte (0xBFEE01, 0);
	put_byte (0xBFEF01, 0x08);
	put_byte (0xBFDE00, 0x04);
	put_byte (0xBFDF00, 0x84);
	put_byte (0xBFDD00, 0x9F);
	put_byte (0xBFED01, 0x9F);
}
Esempio n. 13
0
extern "C" void
JAVA_EXPORT_NAME(DemoActivity_nativeQuit) ( JNIEnv*  env, jobject  thiz) {
    uae_quit();
    exit(0);
}
Esempio n. 14
0
void handle_events (void)
{
    SDL_Event rEvent;
    int iAmigaKeyCode;
    int i, j;
    int iIsHotKey = 0;
#ifdef DEBUG_EVENTS
    dbg("Function: handle_events");
#endif


#ifdef MAX_AUTOEVENTS
	{
		static unsigned cuenta=0;
// /*
		switch(cuenta&63)
		{
			case 8:
				if ((cuenta<6500)||(cuenta>8000))
					joy1button=1;
				break;
			case 16:
				buttonstate[0]=1; break;
			case 24:
				joy1button=0; break;
			case 28:
				if (cuenta>11000)
					joy1dir=3;
				break;
			case 32:
				buttonstate[0]=0; break;
			case 62:
				joy1dir=0; break;
		}
//		lastmy+=8;
		switch(cuenta&127)
		{
			case 20:
				record_key(0x12); break;
			case 40:
				record_key(0x13); break;
			case 60:
				record_key(0x88); break;
			case 80:
				record_key(0x89); break;
		}
if (cuenta==7700)
{
strcpy(changed_df[0],"prueba2.adz");
real_changed_df[0]=1;
joy1button=1;
}
// */

// Defender of the Crown
 /*
switch(cuenta)
{
case 2600:
lastmx+=80;
break;
case 2610:
buttonstate[0]=1; break;
break;
case 2615:
buttonstate[0]=0; break;
break;
case 4500:
lastmy+=100;
break;
case 4510:
buttonstate[0]=1; break;
break;
case 4515:
buttonstate[0]=0; break;
break;
case 4640:
lastmy-=60;
lastmx+=550;
break;
case 4700:
lastmx+=200;
break;
case 4710:
buttonstate[0]=1; break;
break;
case 4715:
buttonstate[0]=0; break;
break;


}
// printf("%i -> %.8X\n",cuenta,chipmem_checksum());
 */
printf("%i\n",cuenta); fflush(stdout);


#ifdef START_DEBUG
		if (cuenta>START_DEBUG)
			DEBUG_AHORA=1;
#endif
#ifdef DEBUG_EVENTS
		dbgf(" AUTO EVENTS: %i =?= %i\n",cuenta,MAX_AUTOEVENTS);
#endif
		if (cuenta>MAX_AUTOEVENTS)
			exit(0);
		else
			dbgf("handle_events %i\n",cuenta);
		cuenta++;
	}
#else
    /* Handle GUI events */
    gui_handle_events ();

    while (SDL_PollEvent(&rEvent))
    {
	switch (rEvent.type)
	{
	case SDL_QUIT:
#ifdef DEBUG_EVENTS
	    dbg("Event: quit");
#endif
	    uae_quit();
	    break;
	    break;
	case SDL_JOYBUTTONDOWN:
#if defined (GP2X) || defined (PSP) || defined (GIZMONDO)
		if (gp2xButtonRemappingOn && is_overridden_button(rEvent.jbutton.button))
		{
			// handle the buttons as specified
			handle_remapped_button_down(rEvent.jbutton.button);
		}
#ifdef GP2X
		else if (rEvent.jbutton.button==GP2X_BUTTON_A)
#else
#ifdef GIZMONDO
		else if (rEvent.jbutton.button==GIZ_BACK)
#else
		else if (rEvent.jbutton.button==PSP_BUTTON_SQUARE)
#endif
#endif
		{
			// critical: temporary hack to send return and space when the A button
			// is pressed
			if (!uae4all_keystate[AK_RET])
			{
				uae4all_keystate[AK_RET] = 1;
				record_key(AK_RET << 1);
			}
			if (!uae4all_keystate[AK_SPC])
			{
				uae4all_keystate[AK_SPC] = 1;
				record_key(AK_SPC << 1);
			}
		}
#ifdef GP2X
		else if (rEvent.jbutton.button==GP2X_BUTTON_START)
#else
#ifdef GIZMONDO
		else if (rEvent.jbutton.button==GIZ_STOP)
#else
		else if (rEvent.jbutton.button==PSP_BUTTON_START)
#endif
#endif
		{
			if (!vkbd_mode)
			{
				// only do this if the virtual keyboard isn't visible
				
				// state moves thus:
				// joystick mode (with virt keyboard on L and R)
				// mouse mode (with mouse buttons on L and R)
				// if specified:
				// remapping mode (with whatever's been supplied)
				// back to start of state
				if (!hasGp2xButtonRemapping)
				{
					// skip the remapping state
					gp2xMouseEmuOn = !gp2xMouseEmuOn;
				}
				else
				{
					// start condition is gp2xMouseEmuOn = 0, gp2xButtonRemappingOn = 0
					if (!gp2xButtonRemappingOn && !gp2xMouseEmuOn)
					{
						// move to mouse emu mode
						gp2xMouseEmuOn = 1;
						gp2xButtonRemappingOn = 0;
					}
					else if (gp2xMouseEmuOn && !gp2xButtonRemappingOn)
					{
						// move to button remapping mode
						gp2xMouseEmuOn = 0;
						gp2xButtonRemappingOn = 1;
					}
					else if (!gp2xMouseEmuOn && gp2xButtonRemappingOn)
					{
						gp2xMouseEmuOn = 0;
						gp2xButtonRemappingOn = 0;
					}
				}

				show_inputmode = 1;
			}			
		}
		else if (gp2xMouseEmuOn)
		{
#ifdef GP2X
			if (rEvent.jbutton.button==GP2X_BUTTON_L)
				buttonstate[0] = 1;
			
			if (rEvent.jbutton.button==GP2X_BUTTON_R)
				buttonstate[2] = 1;
#else
#ifdef GIZMONDO
			if (rEvent.jbutton.button==GIZ_LTRIG)
				buttonstate[0] = 1;
			
			if (rEvent.jbutton.button==GIZ_RTRIG)
				buttonstate[2] = 1;

#else
			if (rEvent.jbutton.button==PSP_BUTTON_L)
				buttonstate[0] = 1;
			
			if (rEvent.jbutton.button==PSP_BUTTON_R)
				buttonstate[2] = 1;

#endif
#endif
		}
		
		else if ((!gp2xMouseEmuOn) && (!gp2xButtonRemappingOn) && (!vkbd_mode) && (vkbd_button2!=(SDLKey)0))
		{
			if (vkbd_button2)
				rEvent.key.keysym.sym=vkbd_button2;
			else
				break;
		}
#ifdef GP2X
		if (rEvent.jbutton.button==GP2X_BUTTON_VOLUP)
		{
			if (soundVolume <100)
			{
				soundVolume+= 10;
				
				gp2x_set_volume(soundVolume);
			}
			show_volumecontrol = 1;
		}
		else if (rEvent.jbutton.button==GP2X_BUTTON_VOLDOWN)
		{
			int vol;

			if (soundVolume > 0)
			{
				soundVolume-= 10;
				gp2x_set_volume(soundVolume);
			}
			show_volumecontrol = 1;
		}
#endif
#else         
	    if ((rEvent.jbutton.button==6) && (!vkbd_mode) && (vkbd_button2!=(SDLKey)0))
	    {
		    if (vkbd_button2)
			    rEvent.key.keysym.sym=vkbd_button2;
		    else
			    break;
            }
#endif
	    else
	    	break;
        case SDL_KEYDOWN:
#ifdef DEBUG_EVENTS
	    dbg("Event: key down");
#endif
#if !defined (DREAMCAST) && !defined (GP2X)
	    if ((rEvent.key.keysym.sym!=SDLK_F11)&&(rEvent.key.keysym.sym!=SDLK_F12)&&(rEvent.key.keysym.sym!=SDLK_PAGEUP))
#endif
	    {
		iAmigaKeyCode = keycode2amiga(&(rEvent.key.keysym));
		if (iAmigaKeyCode >= 0)
		{
		    if (!uae4all_keystate[iAmigaKeyCode])
		    {
				if (iAmigaKeyCode == AK_P)
				{
					joy0button = 1;
				}
			uae4all_keystate[iAmigaKeyCode] = 1;
			record_key(iAmigaKeyCode << 1);
		    }
		}
	    }
	    break;
	case SDL_JOYBUTTONUP:
#if defined (GP2X) || defined (PSP) || defined (GIZMONDO)
			if (gp2xButtonRemappingOn && is_overridden_button(rEvent.jbutton.button))
			{
				// handle the buttons as specified
				handle_remapped_button_up(rEvent.jbutton.button);
			}
#ifdef GP2X
        	else if (rEvent.jbutton.button==GP2X_BUTTON_A)
#else
#ifdef GIZMONDO
			else if (rEvent.jbutton.button==GIZ_BACK)
#else
			else if (rEvent.jbutton.button==PSP_BUTTON_SQUARE)
#endif
#endif
			{
				// critical: temporary hack to send return and space when the A button
				// is pressed
				uae4all_keystate[AK_RET] = 0;
				record_key((AK_RET << 1) | 1);
				
				uae4all_keystate[AK_SPC] = 0;
				record_key((AK_SPC << 1) | 1);
			}
			else if (gp2xMouseEmuOn)
			{
#ifdef GP2X
				if (rEvent.jbutton.button==GP2X_BUTTON_L)
				{
					buttonstate[0] = 0;
				}
				else if (rEvent.jbutton.button==GP2X_BUTTON_R)
				{
					buttonstate[2] = 0;
				}
#else
#ifdef GIZMONDO
				if (rEvent.jbutton.button==GIZ_LTRIG)
				{
					buttonstate[0] = 0;
				}
				else if (rEvent.jbutton.button==GIZ_RTRIG)
				{
					buttonstate[2] = 0;
				}
#else
				if (rEvent.jbutton.button==PSP_BUTTON_L)
				{
					buttonstate[0] = 0;
				}
				else if (rEvent.jbutton.button==PSP_BUTTON_R)
				{
					buttonstate[2] = 0;
				}
#endif
#endif
			}
#ifdef GP2X
			if (rEvent.jbutton.button==GP2X_BUTTON_VOLDOWN || rEvent.jbutton.button==GP2X_BUTTON_VOLUP)
			{
				show_volumecontrol = 0;
			}
#endif
#ifdef GP2X
			if (rEvent.jbutton.button==GP2X_BUTTON_START)
#else
#ifdef GIZMONDO
			if (rEvent.jbutton.button==GIZ_STOP)
#else
			if (rEvent.jbutton.button==PSP_BUTTON_START)
#endif
#endif
			{
				show_inputmode = 0;
			}

#else         
	    if ((rEvent.jbutton.button==6) && (!vkbd_mode) && (vkbd_button2!=(SDLKey)0))
	    {
		    if (vkbd_button2)
			    rEvent.key.keysym.sym=vkbd_button2;
		    else
			    break;
            }
#endif
	    else
	    	break;
	case SDL_KEYUP:
#ifdef DEBUG_EVENTS
	    dbg("Event: key up");
#endif
#if !defined (DREAMCAST) && !defined (GP2X)
	    if ((rEvent.key.keysym.sym!=SDLK_F11)&&(rEvent.key.keysym.sym!=SDLK_F12)&&(rEvent.key.keysym.sym!=SDLK_PAGEUP))
#endif
	    {
		iAmigaKeyCode = keycode2amiga(&(rEvent.key.keysym));
		if (iAmigaKeyCode >= 0)
		{
			if (iAmigaKeyCode == AK_P)
				{
					joy0button = 0;
				}
		    uae4all_keystate[iAmigaKeyCode] = 0;
		    record_key((iAmigaKeyCode << 1) | 1);
		}
	    }
	    break;
	case SDL_MOUSEBUTTONDOWN:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse button down");
#endif
#ifdef DREAMCAST
	    if (__sdl_dc_emulate_mouse)
	    {
	    	if (rEvent.button.button==5)
			    buttonstate[0] = 1;
	    	else if (rEvent.button.button==1)
		 	   buttonstate[2] = 1;
	    }
	    else
	    	if (rEvent.button.button)
			buttonstate[2]=1;
		else
			buttonstate[0]=1;
#else
#ifdef ANDROID
		if (right_mouse == 1)
			buttonstate[2] = 1;
		else
			buttonstate[(rEvent.button.button-1)%3] = 1;
#else
	    	buttonstate[(rEvent.button.button-1)%3] = 1;
#endif
#endif
	    break;
	case SDL_MOUSEBUTTONUP:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse button up");
#endif
#ifdef DREAMCAST
	    if (__sdl_dc_emulate_mouse)
	    {
	    	if (rEvent.button.button==5)
			    buttonstate[0] = 0;
	    	else if (rEvent.button.button==1)
			    buttonstate[2] = 0;
	    }
	    else
	    	if (rEvent.button.button)
			buttonstate[2]=0;
		else
			buttonstate[0]=0;
				
#else
#ifdef ANDROID
		if (right_mouse == 1)
			buttonstate[2] = 0;
		else
			buttonstate[(rEvent.button.button-1)%3] = 0;
#else
	    	buttonstate[(rEvent.button.button-1)%3] = 0;
#endif
#endif
	    break;
	case SDL_MOUSEMOTION:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse motion");
#endif
	    lastmx += rEvent.motion.xrel<<1;
	    lastmy += rEvent.motion.yrel<<1;
	    newmousecounters = 1;
	    break;
	}
    }
#endif


    /* Handle UAE reset */
/*
    if ((uae4all_keystate[AK_CTRL] || uae4all_keystate[AK_RCTRL]) && uae4all_keystate[AK_LAMI] && uae4all_keystate[AK_RAMI])
	uae_reset ();
*/
#ifdef DEBUG_EVENTS
    dbg(" handle_events -> terminado");
#endif
}
Esempio n. 15
0
/*
 * Here's where all the action takes place!
 */
void real_main (int argc, char **argv)
{
    show_version ();

#if defined (NATMEM_OFFSET)
    if (NATMEM_OFFSET == 0 && sizeof (void*) < 8) {
      write_log ("NATMEM_OFFSET is 0; I hope you used 'uae-preloader' to load me, or else ...\n");
    }
#endif

#ifdef FILESYS
    currprefs.mountinfo = changed_prefs.mountinfo = &options_mountinfo;
#endif
    restart_program = 1;
#ifdef _WIN32
    sprintf (restart_config, "%sConfigurations\\", start_path);
#endif
    strcat (restart_config, OPTIONSFILENAME);

    /* Initial state is stopped */
    uae_target_state = UAE_STATE_STOPPED;

    while (uae_target_state != UAE_STATE_QUITTING) {
	int want_gui;

	set_state (uae_target_state);

	do_preinit_machine (argc, argv);

	/* Should we open the GUI? TODO: This mess needs to go away */
	want_gui = currprefs.start_gui;
	if (restart_program == 2)
	    want_gui = 0;
	else if (restart_program == 3)
	    want_gui = 1;

	changed_prefs = currprefs;


	if (want_gui) {
	    /* Handle GUI at start-up */
	    int err = gui_open ();

	    if (err >= 0) {
		do {
		    gui_handle_events ();

		    uae_msleep (10);

		} while (!uae_state_change_pending ());
	    } else if (err == - 1) {
		if (restart_program == 3) {
		    restart_program = 0;
		    uae_quit ();
		}
	    } else
		uae_quit ();

	    currprefs = changed_prefs;
	    fix_options ();
	    inputdevice_init ();
	}

	restart_program = 0;

	if (uae_target_state == UAE_STATE_QUITTING)
	    break;

	uae_target_state = UAE_STATE_COLD_START;

	/* Start emulator proper. */
	if (!do_init_machine ())
	    break;

	while (uae_target_state != UAE_STATE_QUITTING && uae_target_state != UAE_STATE_STOPPED) {
	    /* Reset */
	    set_state (uae_target_state);
	    do_reset_machine (uae_state == UAE_STATE_COLD_START);

	    /* Running */
	    uae_target_state = UAE_STATE_RUNNING;

	    /*
	     * Main Loop
	     */
	    do {
		set_state (uae_target_state);

		/* Run emulator. */
		do_run_machine ();

		if (uae_target_state == UAE_STATE_PAUSED) {
		    /* Paused */
		    set_state (uae_target_state);

		    audio_pause ();

		    /* While UAE is paused we have to handle
		     * input events, etc. ourselves.
		     */
		    do {
			gui_handle_events ();
			handle_events ();

			/* Manually pump input device */
			inputdevicefunc_keyboard.read ();
			inputdevicefunc_mouse.read ();
			inputdevicefunc_joystick.read ();
			inputdevice_handle_inputcode ();

			/* Don't busy wait. */
			uae_msleep (10);

		    } while (!uae_state_change_pending ());

		    audio_resume ();
		}

	    } while (uae_target_state == UAE_STATE_RUNNING);

	    /*
	     * End of Main Loop
	     *
	     * We're no longer running or paused.
	     */

	    set_inhibit_frame (IHF_QUIT_PROGRAM);

#ifdef FILESYS
	    /* Ensure any cached changes to virtual filesystem are flushed before
	     * resetting or exitting. */
	    filesys_prepare_reset ();
#endif

	} /* while (!QUITTING && !STOPPED) */

	do_exit_machine ();

	/* TODO: This stuff is a hack. What we need to do is
	 * check whether a config GUI is available. If not,
	 * then quit.
	 */
	restart_program = 3;
    }
    zfile_exit ();
}
Esempio n. 16
0
/*
 * Exits the emulator
 */
static uae_u32 emulib_ExitEmu (void)
{
    uae_quit ();
    return 1;
}
Esempio n. 17
0
static void ersatz_init (void)
{
    int f;
    uaecptr request;
    uaecptr a;

    if (disk_empty (0)) {
	write_log ("You need to have a diskfile in DF0 to use the Kickstart replacement!\n");
	uae_quit ();
	_68k_setpc (0xF80010);
	return;
    }

    _68k_sreg = 0;
    /* Set some interrupt vectors */
    for (a = 8; a < 0xC0; a += 4) {
	put_long (a, 0xF8001A);
    }
    _68k_ispreg = _68k_mspreg = _68k_uspreg = 0x800;
    _68k_areg(7) = 0x80000;
#ifndef USE_FAME_CORE
    _68k_intmask = 0;
#endif

    /* Build a dummy execbase */
    put_long (4, _68k_areg(6) = 0x676);
    put_byte (0x676 + 0x129, 0);
    for (f = 1; f < 105; f++) {
	put_word (0x676 - 6*f, 0x4EF9);
	put_long (0x676 - 6*f + 2, 0xF8000C);
    }
    /* Some "supported" functions */
    put_long (0x676 - 456 + 2, 0xF80014);
    put_long (0x676 - 216 + 2, 0xF80020);
    put_long (0x676 - 198 + 2, 0xF80026);
    put_long (0x676 - 204 + 2, 0xF8002c);
    put_long (0x676 - 210 + 2, 0xF8002a);

    /* Build an IORequest */
    request = 0x800;
    put_word (request + 0x1C, 2);
    put_long (request + 0x28, 0x4000);
    put_long (request + 0x2C, 0);
    put_long (request + 0x24, 0x200 * 4);
    _68k_areg(1) = request;
    ersatz_doio ();
    /* kickstart disk loader */
    if (get_long(0x4000) == 0x4b49434b) {
	/* a kickstart disk was found in drive 0! */
	write_log ("Loading Kickstart rom image from Kickstart disk\n");
	/* print some notes... */
	write_log ("NOTE: if UAE crashes set CPU to 68000 and/or chipmem size to 512KB!\n");

	/* read rom image from kickstart disk */
	put_word (request + 0x1C, 2);
	put_long (request + 0x28, 0xF80000);
	put_long (request + 0x2C, 0x200);
	put_long (request + 0x24, 0x200 * 512);
	_68k_areg(1) = request;
	ersatz_doio ();

	/* read rom image once ajain to mirror address space.
	   not elegant, but it works... */
	put_word (request + 0x1C, 2);
	put_long (request + 0x28, 0xFC0000);
	put_long (request + 0x2C, 0x200);
	put_long (request + 0x24, 0x200 * 512);
	_68k_areg(1) = request;
	ersatz_doio ();

	disk_eject (0);

	_68k_setpc (0xFC0002);
	fill_prefetch_0 ();
	uae_reset ();
	ersatzkickfile = 0;
	return;
    }

    _68k_setpc (0x400C);
    fill_prefetch_0 ();

    /* Init the hardware */
    put_long (0x3000, 0xFFFFFFFEul);
    put_long (0xDFF080, 0x3000);
    put_word (0xDFF088, 0);
    put_word (0xDFF096, 0xE390);
    put_word (0xDFF09A, 0xE02C);
    put_word (0xDFF09E, 0x0000);
    put_word (0xDFF092, 0x0038);
    put_word (0xDFF094, 0x00D0);
    put_word (0xDFF08E, 0x2C81);
    put_word (0xDFF090, 0xF4C1);
    put_word (0xDFF02A, 0x8000);

    put_byte (0xBFD100, 0xF7);
    put_byte (0xBFEE01, 0);
    put_byte (0xBFEF01, 0x08);
    put_byte (0xBFDE00, 0x04);
    put_byte (0xBFDF00, 0x84);
    put_byte (0xBFDD00, 0x9F);
    put_byte (0xBFED01, 0x9F);
}
Esempio n. 18
0
static void parsemessage(TCHAR *in, struct uae_prefs *p, TCHAR *out, int outsize)
{
	int mode;

	out[0] = 0;

	my_trim (in);
	if (!_tcsicmp (in, _T("IPC_QUIT"))) {
		uae_quit ();
		return;
	}
	if (!_tcsicmp (in, _T("ipc_config"))) {
		ipcmode = 1;
		_tcscat (out, _T("200\n"));
		return;
	} else if (!_tcsicmp (in, _T("ipc_event"))) {
		ipcmode = 2;
		_tcscat (out, _T("200\n"));
		return;
	} else if (!_tcsicmp (in, _T("ipc_debug"))) {
		ipcmode = 3;
		_tcscat (out, _T("200\n"));
		return;
	} else if (!_tcsicmp (in, _T("ipc_restore"))) {
		ipcmode = 0;
		_tcscat (out, _T("200\n"));
		return;
	}

	mode = 0;
	if (ipcmode == 1) {
		mode = 1;
	} else if (ipcmode == 2) {
		mode = 1;
	} else if (ipcmode == 3) {
		mode = 2;
	} else if (!_tcsnicmp (in, _T("CFG "), 4) || !_tcsnicmp (in, _T("EVT "), 4)) {
		mode = 1;
		in += 4;
	} else if (!_tcsnicmp (in, _T("DBG "), 4)) {
		mode = 2;
		in += 4;
	}

	if (mode == 1) {
		TCHAR tmpout[256];
		int index = -1;
		int cnt = 0;
		for (;;) {
			int ret;
			tmpout[0] = 0;
			ret = cfgfile_modify (index, in, _tcslen (in), tmpout, sizeof (tmpout) * sizeof (TCHAR));
			index++;
			if (_tcslen (tmpout) > 0) {
				if (_tcslen (out) == 0)
					_tcscat (out, _T("200 "));
				_tcsncat (out, _T("\n"), outsize);
				_tcsncat (out, tmpout, outsize);
			}
			cnt++;
			if (ret >= 0)
				break;
		}
		if (out[0] == 0)
			_tcscat (out, _T("404"));
	} else if (mode == 2) {
		debug_parser (in, out, outsize);
		if (!out[0])
			_tcscpy (out, _T("404"));
	} else {
		_tcscpy (out, _T("501"));
	}
}
Esempio n. 19
0
static void QUIT (void)
{
    uae_quit ();
}
Esempio n. 20
0
void handle_events (void)
{
    SDL_Event rEvent;
    int iAmigaKeyCode;
    int i, j;
    int iIsHotKey = 0;
#ifdef DEBUG_EVENTS
    dbg("Function: handle_events");
#endif


#if defined(MAX_AUTOEVENTS) || defined(AUTOEVENTS)
	{
		static unsigned cuenta=0;
/*
		switch(cuenta&63)
		{
			case 8:
				if ((cuenta<6500)||(cuenta>8000))
					joy1button=1;
				break;
			case 16:
				buttonstate[0]=1; break;
			case 24:
				joy1button=0; break;
			case 28:
				if (cuenta>11000)
					joy1dir=3;
				break;
			case 32:
				buttonstate[0]=0; break;
			case 62:
				joy1dir=0; break;
		}
//		lastmy+=8;
		switch(cuenta&127)
		{
			case 20:
				record_key(0x12); break;
			case 40:
				record_key(0x13); break;
			case 60:
				record_key(0x88); break;
			case 80:
				record_key(0x89); break;
		}
*/
/*
if (cuenta==7700)
{
strcpy(changed_df[0],"prueba2.adz");
real_changed_df[0]=1;
joy1button=1;
}
*/

// Defender of the Crown
 /*
switch(cuenta)
{
case 2600:
lastmx+=80;
break;
case 2610:
buttonstate[0]=1; break;
break;
case 2615:
buttonstate[0]=0; break;
break;
case 4500:
lastmy+=100;
break;
case 4510:
buttonstate[0]=1; break;
break;
case 4515:
buttonstate[0]=0; break;
break;
case 4640:
lastmy-=60;
lastmx+=550;
break;
case 4700:
lastmx+=200;
break;
case 4710:
buttonstate[0]=1; break;
break;
case 4715:
buttonstate[0]=0; break;
break;


}
// printf("%i -> %.8X\n",cuenta,chipmem_checksum());
 */


#if defined(START_DEBUG) && !defined(START_DEBUG_SAVESTATE)
		if (cuenta==START_DEBUG)
		{
#ifdef DEBUG_FILE
			if (!DEBUG_STR_FILE)
				DEBUG_STR_FILE=fopen(DEBUG_FILE,"wt");
#endif
			DEBUG_AHORA=1;
		}
#else
#ifdef START_DEBUG_SAVESTATE
		if (cuenta==START_DEBUG)
			savestate_state = STATE_DOSAVE;
#endif
#endif
#ifdef AUTO_SAVESTATE
		if (cuenta==AUTO_SAVESTATE)
			savestate_state = STATE_DORESTORE;
#endif

#ifdef MAX_AUTOEVENTS
#ifdef DEBUG_EVENTS
		dbgf(" AUTO EVENTS: %i =?= %i\n",cuenta,MAX_AUTOEVENTS);
#endif
		if (cuenta>MAX_AUTOEVENTS)
		{
			int i;
#ifdef DEBUG_FILE
			fclose(DEBUG_STR_FILE);
			SDL_Delay(100);
			for(i=0;i<0x10000;i+=78)
			{
				SDL_FillRect(prSDLScreen, NULL, i);
				SDL_Flip(prSDLScreen);
			}
			SDL_Delay(333);
#endif
			exit(0);
		}
		else
			dbgf("handle_events %i\n",cuenta);
#endif
		cuenta++;
	}
#else
    /* Handle GUI events */
    gui_handle_events ();

#ifdef EMULATED_JOYSTICK
	{
		if ((vkbd_button3==(SDLKey)0)&&(!vkbd_mode))
			buttonstate[0]=emulated_mouse_button1;
		if ((vkbd_button4==(SDLKey)0)&&(!vkbd_mode))
			buttonstate[2]=emulated_mouse_button2;
	}
#endif

    while (SDL_PollEvent(&rEvent))
    {
	switch (rEvent.type)
	{
	case SDL_QUIT:
#ifdef DEBUG_EVENTS
	    dbg("Event: quit");
#endif
	    uae_quit();
	    break;
	    break;
	case SDL_JOYBUTTONDOWN:
	    if (vkbd_mode) break;
	    if ((rEvent.jbutton.button==6) && (vkbd_button2!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button2;
	    else if ((rEvent.jbutton.button==5) && (vkbd_button3!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button3;
	    else if ((rEvent.jbutton.button==1) && (vkbd_button4!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button4;
	    else
	    	break;
        case SDL_KEYDOWN:
#ifdef DEBUG_EVENTS
	    dbg("Event: key down");
#endif
#ifndef DREAMCAST
	    if ((rEvent.key.keysym.sym!=SDLK_F11)&&(rEvent.key.keysym.sym!=SDLK_F12)&&(rEvent.key.keysym.sym!=SDLK_PAGEUP)
#ifdef EMULATED_JOYSTICK
		&&(rEvent.key.keysym.sym!=SDLK_ESCAPE)&&((rEvent.key.keysym.sym!=SDLK_SPACE)||((rEvent.key.keysym.sym==SDLK_SPACE)&&(vkbd_button3!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_LCTRL)&&((rEvent.key.keysym.sym!=SDLK_LALT)||((rEvent.key.keysym.sym==SDLK_LALT)&&(vkbd_button2!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_RETURN)&&((rEvent.key.keysym.sym!=SDLK_LSHIFT)||((rEvent.key.keysym.sym==SDLK_LSHIFT)&&(vkbd_button4!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_TAB)&&(rEvent.key.keysym.sym!=SDLK_BACKSPACE)&&(rEvent.key.keysym.sym!=SDLK_UP)&&(rEvent.key.keysym.sym!=SDLK_DOWN)&&(rEvent.key.keysym.sym!=SDLK_LEFT)&&(rEvent.key.keysym.sym!=SDLK_RIGHT)
#endif
			    )
	    {
		    if ((rEvent.key.keysym.sym==SDLK_LALT)&&(vkbd_button2!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button2;
		    else
		    if ((rEvent.key.keysym.sym==SDLK_LSHIFT)&&(vkbd_button4!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button4;
		    else
		    if ((rEvent.key.keysym.sym==SDLK_SPACE)&&(vkbd_button3!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button3;
#else
	    {
#endif
		iAmigaKeyCode = keycode2amiga(&(rEvent.key.keysym));
		if (iAmigaKeyCode >= 0)
		{
		    if (!uae4all_keystate[iAmigaKeyCode])
		    {
			uae4all_keystate[iAmigaKeyCode] = 1;
			record_key(iAmigaKeyCode << 1);
		    }
		}
	    }
	    break;
	case SDL_JOYBUTTONUP:
	    if (vkbd_mode) break;
	    if ((rEvent.jbutton.button==6) && (vkbd_button2!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button2;
	    else if ((rEvent.jbutton.button==5) && (vkbd_button3!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button3;
	    else if ((rEvent.jbutton.button==1) && (vkbd_button4!=(SDLKey)0))
		    rEvent.key.keysym.sym=vkbd_button4;
	    else
	    	break;
	case SDL_KEYUP:
#ifdef DEBUG_EVENTS
	    dbg("Event: key up");
#endif
#ifndef DREAMCAST
	    if ((rEvent.key.keysym.sym!=SDLK_F11)&&(rEvent.key.keysym.sym!=SDLK_F12)&&(rEvent.key.keysym.sym!=SDLK_PAGEUP)
#ifdef EMULATED_JOYSTICK
		&&(rEvent.key.keysym.sym!=SDLK_ESCAPE)&&((rEvent.key.keysym.sym!=SDLK_SPACE)||((rEvent.key.keysym.sym==SDLK_SPACE)&&(vkbd_button3!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_LCTRL)&&((rEvent.key.keysym.sym!=SDLK_LALT)||((rEvent.key.keysym.sym==SDLK_LALT)&&(vkbd_button2!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_RETURN)&&((rEvent.key.keysym.sym!=SDLK_LSHIFT)||((rEvent.key.keysym.sym==SDLK_LSHIFT)&&(vkbd_button4!=(SDLKey)0)&&(!vkbd_mode)))&&(rEvent.key.keysym.sym!=SDLK_TAB)&&(rEvent.key.keysym.sym!=SDLK_BACKSPACE)&&(rEvent.key.keysym.sym!=SDLK_UP)&&(rEvent.key.keysym.sym!=SDLK_DOWN)&&(rEvent.key.keysym.sym!=SDLK_LEFT)&&(rEvent.key.keysym.sym!=SDLK_RIGHT)
#endif
			    )
	    {
		    if ((rEvent.key.keysym.sym==SDLK_LALT)&&(vkbd_button2!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button2;
		    else
		    if ((rEvent.key.keysym.sym==SDLK_LSHIFT)&&(vkbd_button4!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button4;
		    else
		    if ((rEvent.key.keysym.sym==SDLK_SPACE)&&(vkbd_button3!=(SDLKey)0)&&(!vkbd_mode))
			    rEvent.key.keysym.sym=vkbd_button3;
#else
	    {
#endif
		iAmigaKeyCode = keycode2amiga(&(rEvent.key.keysym));
		if (iAmigaKeyCode >= 0)
		{
		    uae4all_keystate[iAmigaKeyCode] = 0;
		    record_key((iAmigaKeyCode << 1) | 1);
		}
	    }
	    break;
	case SDL_MOUSEBUTTONDOWN:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse button down");
#endif
#ifdef DREAMCAST
	    if (__sdl_dc_emulate_mouse)
	    {
	    	if (vkbd_mode) break;
	    	if (rEvent.button.button==5 ) {
			if (vkbd_button3==(SDLKey)0)
			    buttonstate[0] = 1;
			else 
				break;
		}
	    	else if (rEvent.button.button==1)  {
			if (vkbd_button4==(SDLKey)0)
		 	   buttonstate[2] = 1;
			else
				break;
		}
	    }
	    else
	    	if (rEvent.button.button)
			buttonstate[2]=1;
		else
			buttonstate[0]=1;
#else
	    	buttonstate[(rEvent.button.button-1)%3] = 1;
#endif
	    break;
	case SDL_MOUSEBUTTONUP:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse button up");
#endif
#ifdef DREAMCAST
	    if (__sdl_dc_emulate_mouse)
	    {
	    	if (vkbd_mode) break;
	    	if (rEvent.button.button==5) {
			if (vkbd_button3==(SDLKey)0)
			    buttonstate[0] = 0;
			else
				break;
		}
	    	else if (rEvent.button.button==1) {
			if (vkbd_button4==(SDLKey)0)
			    buttonstate[2] = 0;
			else
				break;
		}
	    }
	    else
	    	if (rEvent.button.button)
			buttonstate[2]=0;
		else
			buttonstate[0]=0;
				
#else
	    	buttonstate[(rEvent.button.button-1)%3] = 0;
#endif
	    break;
	case SDL_MOUSEMOTION:
#ifdef DEBUG_EVENTS
	    dbg("Event: mouse motion");
#endif
	    lastmx += rEvent.motion.xrel<<1;
	    lastmy += rEvent.motion.yrel<<1;
	    newmousecounters = 1;
	    break;
	}
    }
#endif


    /* Handle UAE reset */
/*
    if ((uae4all_keystate[AK_CTRL] || uae4all_keystate[AK_RCTRL]) && uae4all_keystate[AK_LAMI] && uae4all_keystate[AK_RAMI])
	uae_reset ();
*/
#ifdef DEBUG_EVENTS
    dbg(" handle_events -> terminado");
#endif
}

int check_prefs_changed_gfx (void)
{
	extern int mainMenu_vpos;
	static int last_vpos=0;
	int ret=(last_vpos!=mainMenu_vpos);
	last_vpos=mainMenu_vpos;
	return ret;
}

int debuggable (void)
{
    return 1;
}

int needmousehack (void)
{
    return 1;
}



#if !defined(DREAMCAST) && !defined(DINGOO)
int lockscr (void)
{
#ifdef DEBUG_GFX
    dbg("Function: lockscr");
#endif
    if (SDL_MUSTLOCK(prSDLScreen))
	SDL_LockSurface(prSDLScreen);
    return 1;
}

void unlockscr (void)
{
#ifdef DEBUG_GFX
    dbg("Function: unlockscr");
#endif
    if (SDL_MUSTLOCK(prSDLScreen))
    	SDL_UnlockSurface(prSDLScreen);
}
Esempio n. 21
0
int amiga_quit()
{
    printf("UAE: Calling uae_quit\n");
    uae_quit();
    return 1;
}