//DBG LOAD DSK UNUSED void enter_gui(){ char dskimg[512]="\0"; static int inbrowser=1; int ret=0; sprintf(dskimg,"%s\0",filebrowser(DEFAULT_PATH)); if(strcmp(dskimg,"EMPTY\0")==0){ mprintf("Cancel Fileselect(%s)\n",dskimg); inbrowser=0; pauseg=0; Screen_SetFullUpdate(); return; } else if(strcmp(dskimg,"NO CHOICE\0")==0){ } else{ mprintf("Ok Fileselect(%s)\n",dskimg); //loadadsk(dskimg); inbrowser=0; pauseg=0; Screen_SetFullUpdate(); return; } }
/** * Force things associated with changing between low/medium/high res. */ void Screen_ModeChanged(void) { if (!sdlscrn) { /* screen not yet initialized */ return; } /* Set new display mode, if differs from current */ Screen_SetResolution(); Screen_SetFullUpdate(); if (bInFullScreen || bGrabMouse) { SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetWindowGrab(sdlWindow, SDL_TRUE); } else { SDL_SetRelativeMouseMode(SDL_FALSE); SDL_SetWindowGrab(sdlWindow, SDL_FALSE); } }
/** * Start/continue emulation * * @return true if continued, false if was already running */ bool Main_UnPauseEmulation(void) { if ( bEmulationActive ) return false; //Audio_Output_Enable(ConfigureParams.Sound.bEnableSound); bEmulationActive = true; /* Cause full screen update (to clear all) */ Screen_SetFullUpdate(); if (bGrabMouse) { /* Grab mouse pointer again */ SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetWindowGrab(sdlWindow, SDL_TRUE); } return true; }
void update_input(void) { int i; // RETRO B Y SLT STA UP DWN LEFT RGT A X L R L2 R2 L3 R3 // INDEX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static int vbt[16]={0x1C,0x39,0x01,0x3B,0x01,0x02,0x04,0x08,0x80,0x6D,0x15,0x31,0x24,0x1F,0x6E,0x6F}; static int oldi=-1; static int vkx=0,vky=0; MXjoy0=0; if(oldi!=-1) { retro_key_up(oldi); oldi=-1; } input_poll_cb(); Process_key(); if (key_state[RETROK_F11] || input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y)) { pauseg=1; //enter_gui(); //old } i=3;//show vkey toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHOWKEY=-SHOWKEY; Screen_SetFullUpdate(); } i=2;//mouse/joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; MOUSEMODE=-MOUSEMODE; } i=10;//num joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; NUMJOY++;if(NUMJOY>1)NUMJOY=0; NUMjoy=-NUMjoy; } i=11;//mouse gui speed if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; PAS++;if(PAS>MAXPAS)PAS=1; } /* //FIXME i=9;//switch shift On/Off if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHIFTON=-SHIFTON; Screen_SetFullUpdate(); } */ i=12;//show/hide statut if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if (mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i)) { mbt[i]=0; STATUTON=-STATUTON; Screen_SetFullUpdate(); } i=13;//sonud on/off if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SND=-SND; //Screen_SetFullUpdate(); } if(SHOWKEY==1) { static int vkflag[5]={0,0,0,0,0}; if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) && vkflag[0]==0 ) vkflag[0]=1; else if (vkflag[0]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) ) { vkflag[0]=0; vky -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) && vkflag[1]==0 ) vkflag[1]=1; else if (vkflag[1]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) ) { vkflag[1]=0; vky += 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) && vkflag[2]==0 ) vkflag[2]=1; else if (vkflag[2]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) ) { vkflag[2]=0; vkx -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) && vkflag[3]==0 ) vkflag[3]=1; else if (vkflag[3]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) ) { vkflag[3]=0; vkx += 1; } if(vkx < 0) vkx=9; if(vkx > 9) vkx=0; if(vky < 0) vky=4; if(vky > 4) vky=0; virtual_kdb(bmp,vkx,vky); i=8; if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==0) vkflag[4]=1; else if( !input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==1) { vkflag[4]=0; i=check_vkey2(vkx,vky); if(i==-2) { NPAGE=-NPAGE;oldi=-1; //Clear interface zone Screen_SetFullUpdate(); } else if(i==-1) oldi=-1; else if(i==-3) {//KDB bgcolor Screen_SetFullUpdate(); KCOL=-KCOL; oldi=-1; } else if(i==-4) {//VKbd show/hide oldi=-1; Screen_SetFullUpdate(); SHOWKEY=-SHOWKEY; } else if(i==-5) {//Change Joy number NUMjoy=-NUMjoy; oldi=-1; } else { if(i==0x60/*AK_LSH*/) { if(SHIFTON == 1) retro_key_up(i); else retro_key_down(i); SHIFTON=-SHIFTON; Screen_SetFullUpdate(); oldi=-1; } else { oldi=i; retro_key_down(i); } } } if(STATUTON==1) Print_Statut(); return; } static int mbL=0,mbR=0; int mouse_l; int mouse_r; int16_t mouse_x; int16_t mouse_y; if(MOUSEMODE==-1) { //Joy mode al[0] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X)); al[1] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y)); setjoybuttonstate (0,0,input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A)); setjoybuttonstate (0,1,input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B)); if(opt_analog) { setjoystickstate (0, 0, al[0], 32767); setjoystickstate (0, 1, al[1], 32767); } else { for(i=4;i<8/*9*/;i++) if( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) MXjoy0 |= vbt[i]; // Joy press retro_joy0(MXjoy0); } mouse_x = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); mouse_y = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); mouse_l = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); mouse_r = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); fmousex=mouse_x; fmousey=mouse_y; } else { //Mouse mode fmousex=fmousey=0; //ANALOG RIGHT ar[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X)); ar[1] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y)); if(ar[0]<=-1024) fmousex-=(-ar[0])/1024; if(ar[0]>= 1024) fmousex+=( ar[0])/1024; if(ar[1]<=-1024) fmousey-=(-ar[1])/1024; if(ar[1]>= 1024) fmousey+=( ar[1])/1024; //PAD if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT)) fmousex += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT)) fmousex -= PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN)) fmousey += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP)) fmousey -= PAS; mouse_l=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); mouse_r=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); } if(mbL==0 && mouse_l) { mbL=1; retro_mouse_but0(1); } else if(mbL==1 && !mouse_l) { retro_mouse_but0(0); mbL=0; } if(mbR==0 && mouse_r) { mbR=1; retro_mouse_but1(1); } else if(mbR==1 && !mouse_r) { retro_mouse_but1(0); mbR=0; } retro_mouse(fmousex, fmousey); if(STATUTON==1) Print_Statut(); }
void update_input(void) { int i; // RETRO B Y SLT STA UP DWN LEFT RGT A X L R L2 R2 L3 R3 // INDEX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static int vbt[16]={0x20,0x39,0x01,0x3B,0x01,0x02,0x04,0x08,0x10,0x6D,0x15,0x31,0x24,0x1F,0x6E,0x6F}; static int oldi=-1; static int vkx=0,vky=0; MXjoy0=0; if(oldi!=-1){retro_key_up(oldi);oldi=-1;} input_poll_cb(); if (input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_F11) || input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y) ) pauseg=4; //fMSX menu //if (input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, RETROK_F10) ) // pauseg=1; // DBG LOADFILE i=10;//show vkey toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; SHOWKEY=-SHOWKEY; Screen_SetFullUpdate(); } i=2;//SELECT if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; RVSYNC=!RVSYNC; } i=3;//START if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; MOUSEMODE=-MOUSEMODE; } /* i=0;//BTN B if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; } */ i=9;//BTN X if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; browsedsk1(); } i=12;//show/hide statut if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; STATUTON=-STATUTON; Screen_SetFullUpdate(); } i=13;//snd on/off if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; SND=-SND; } i=11;//reset if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0; retro_reset_msx(); } if(SHOWKEY==1){ static int vkflag[5]={0,0,0,0,0}; if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) && vkflag[0]==0 ) vkflag[0]=1; else if (vkflag[0]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) ){ vkflag[0]=0; vky -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) && vkflag[1]==0 ) vkflag[1]=1; else if (vkflag[1]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) ){ vkflag[1]=0; vky += 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) && vkflag[2]==0 ) vkflag[2]=1; else if (vkflag[2]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) ){ vkflag[2]=0; vkx -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) && vkflag[3]==0 ) vkflag[3]=1; else if (vkflag[3]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) ){ vkflag[3]=0; vkx += 1; } if(vkx<0)vkx=9; if(vkx>9)vkx=0; if(vky<0)vky=4; if(vky>4)vky=0; virtual_kdb(bmp,vkx,vky); i=8; if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==0) vkflag[4]=1; else if( !input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==1) { vkflag[4]=0; i=check_vkey2(vkx,vky); if(i==-2){ NPAGE=-NPAGE;oldi=-1; //Screen_SetFullUpdate(); } else if(i==-1)oldi=-1; else if(i==-3){//KDB bgcolor //Screen_SetFullUpdate(); KCOL=-KCOL; oldi=-1; } else if(i==-4){//VKbd show/hide oldi=-1; Screen_SetFullUpdate(); SHOWKEY=-SHOWKEY; } else if(i==-5){//Change Joy NUMjoy=-NUMjoy; oldi=-1; } else if(i==-6){//EXIT oldi=-1; retro_deinit(); exit(0); } else if(i==-7){//savestate //retro_savestate_msx("DEFAULT.STA"); oldi=-1; } else { if(i<200/*128*/){ oldi=i; retro_key_down(i); } else{ i=keyboard_translation[i]; if(i==0x05){ if(SHIFTON == 1)retro_key_up(i); else retro_key_down(i); SHIFTON=-SHIFTON; //Screen_SetFullUpdate(); oldi=-1; } else { oldi=i; retro_key_down(i); } } } } if(STATUTON==1)Print_Statut(); return ; } static int mbL=0,mbR=0; int mouse_l; int mouse_r; int16_t mouse_x; int16_t mouse_y; if(MOUSEMODE==-1){ //Joy mode for(i=4;i<9;i++)if( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) )MXjoy0 |= vbt[i]; // Joy press //btn 2 if( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, 0) )MXjoy0 |=0x20; retro_joy0(MXjoy0); mouse_x = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); mouse_y = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); mouse_l = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); mouse_r = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); fmousex=mouse_x; fmousey=mouse_y; } else { //Mouse mode fmousex=fmousey=0; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT))fmousex += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT))fmousex -= PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN))fmousey += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP))fmousey -= PAS; mouse_l=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); mouse_r=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); } retro_mouse(fmousex, fmousey); if(mbL==0 && mouse_l){ mbL=1; retro_mouse_but0(1,tomx, tomy); } else if(mbL==1 && !mouse_l) { retro_mouse_but0(0,tomx, tomy); mbL=0; } if(mbR==0 && mouse_r){ mbR=1; retro_mouse_but1(1,tomx, tomy); } else if(mbR==1 && !mouse_r) { retro_mouse_but1(0,tomx, tomy); mbR=0; } if(STATUTON==1)Print_Statut(); return ; }
/** * Initialize SDL screen surface / set resolution. */ static void Screen_SetResolution(void) { int Width, Height, nZoom, SBarHeight, BitCount, maxW, maxH; bool bDoubleLowRes = false; BitCount = 0; /* host native */ nBorderPixelsTop = nBorderPixelsBottom = 0; nBorderPixelsLeft = nBorderPixelsRight = 0; nScreenZoomX = 1; nScreenZoomY = 1; Width = 1120; Height = 832; nZoom = 1; /* Statusbar height for doubled screen size */ SBarHeight = Statusbar_GetHeightForSize(1120, 832); Resolution_GetLimits(&maxW, &maxH, &BitCount); Screen_SetSTScreenOffsets(); Height += Statusbar_SetHeight(Width, Height); /* Check if we really have to change the video mode: */ if (!sdlscrn || sdlscrn->w != Width || sdlscrn->h != Height || (BitCount && sdlscrn->format->BitsPerPixel != BitCount)) { #ifdef _MUDFLAP if (sdlscrn) { __mf_unregister(sdlscrn->pixels, sdlscrn->pitch*sdlscrn->h, __MF_TYPE_GUESS); } #endif if (bInFullScreen) { /* unhide the Hatari WM window for fullscreen */ Control_ReparentWindow(Width, Height, bInFullScreen); } /* Set new video mode */ SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); fprintf(stderr, "SDL screen request: %d x %d @ %d (%s)\n", Width, Height, BitCount, bInFullScreen?"fullscreen":"windowed"); sdlWindow = SDL_CreateWindow(PROG_NAME, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, Width, Height, 0); sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, 0); if (!sdlWindow || !sdlRenderer) { fprintf(stderr,"Failed to create window or renderer!\n"); exit(-1); } SDL_RenderSetLogicalSize(sdlRenderer, Width, Height); sdlscrn = SDL_CreateRGBSurface(SDL_SWSURFACE, Width, Height, 32, 0x00FF0000, 0x0000FF00, 0x000000FF, 0x00000000); sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_STREAMING, Width, Height); fprintf(stderr, "SDL screen granted: %d x %d @ %d\n", sdlscrn->w, sdlscrn->h, sdlscrn->format->BitsPerPixel); /* Exit if we can not open a screen */ if (!sdlscrn) { fprintf(stderr, "Could not set video mode:\n %s\n", SDL_GetError() ); SDL_Quit(); exit(-2); } #ifdef _MUDFLAP __mf_register(sdlscrn->pixels, sdlscrn->pitch*sdlscrn->h, __MF_TYPE_GUESS, "SDL pixels"); #endif if (!bInFullScreen) { /* re-embed the new Hatari SDL window */ Control_ReparentWindow(Width, Height, bInFullScreen); } /* Re-init screen palette: */ if (sdlscrn->format->BitsPerPixel == 8) Screen_Handle8BitPalettes(); /* Initialize new 8 bit palette */ else Screen_SetupRGBTable(); /* Create color convertion table */ Statusbar_Init(sdlscrn); /* screen area without the statusbar */ NEXTScreenRect.x = 0; NEXTScreenRect.y = 0; NEXTScreenRect.w = sdlscrn->w; NEXTScreenRect.h = sdlscrn->h - Statusbar_GetHeight(); } /* Set drawing functions */ Screen_SetDrawFunctions(sdlscrn->format->BitsPerPixel, bDoubleLowRes); Screen_SetFullUpdate(); /* Cause full update of screen */ }
void update_input(void) { int i; // RETRO B Y SLT STA UP DWN LEFT RGT A X L R L2 R2 L3 R3 // INDEX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static int vbt[16]={0x1C,0x39,0x01,0x3B,0x01,0x02,0x04,0x08,0x80,0x6D,0x15,0x31,0x24,0x1F,0x6E,0x6F}; static int oldi=-1; static int vkx=0,vky=0; MXjoy0=0; if(oldi!=-1) { IKBD_PressSTKey(oldi,0); oldi=-1; } input_poll_cb(); Process_key(); if (Key_Sate[RETROK_F11] || input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y) ) pauseg=1; i=10;//show vkey toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHOWKEY=-SHOWKEY; Screen_SetFullUpdate(); } i=2;//mouse/joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; MOUSEMODE=-MOUSEMODE; } i=3;//num joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; NUMJOY++;if(NUMJOY>1)NUMJOY=0; NUMjoy=-NUMjoy; } i=11;//mouse gui speed if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; PAS++;if(PAS>MAXPAS)PAS=1; } i=9;//switch shift On/Off if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHIFTON=-SHIFTON; Screen_SetFullUpdate(); } i=12;//show/hide statut if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; STATUTON=-STATUTON; Screen_SetFullUpdate(); } i=13;//swap kbd pages if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; if(SHOWKEY==1) { NPAGE=-NPAGE; Screen_SetFullUpdate(); } } if(SHOWKEY==1) { static int vkflag[5]={0,0,0,0,0}; if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) && vkflag[0]==0 ) vkflag[0]=1; else if (vkflag[0]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) ) { vkflag[0]=0; vky -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) && vkflag[1]==0 ) vkflag[1]=1; else if (vkflag[1]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) ) { vkflag[1]=0; vky += 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) && vkflag[2]==0 ) vkflag[2]=1; else if (vkflag[2]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) ) { vkflag[2]=0; vkx -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) && vkflag[3]==0 ) vkflag[3]=1; else if (vkflag[3]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) ) { vkflag[3]=0; vkx += 1; } if(vkx<0)vkx=9; if(vkx>9)vkx=0; if(vky<0)vky=4; if(vky>4)vky=0; virtual_kdb(bmp,vkx,vky); i=8; if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==0) vkflag[4]=1; else if( !input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==1) { vkflag[4]=0; i=check_vkey2(vkx,vky); if(i==-2) { NPAGE=-NPAGE;oldi=-1; //Clear interface zone Screen_SetFullUpdate(); } else if(i==-1) oldi=-1; else if(i==-3) { //KDB bgcolor Screen_SetFullUpdate(); KCOL=-KCOL; oldi=-1; } else if(i==-4) { //VKbd show/hide oldi=-1; Screen_SetFullUpdate(); SHOWKEY=-SHOWKEY; } else if(i==-5) { //Change Joy number NUMjoy=-NUMjoy; oldi=-1; } else { if(i==0x2a) { IKBD_PressSTKey(i,(SHIFTON == 1)?0:1); SHIFTON=-SHIFTON; Screen_SetFullUpdate(); oldi=-1; } else { oldi=i; IKBD_PressSTKey(i,1); } } } if(STATUTON==1) Print_Statut(); return; } static int mbL=0,mbR=0; int mouse_l; int mouse_r; int16_t mouse_x; int16_t mouse_y; if(MOUSEMODE==-1) { //Joy mode //emulate Joy0 with joy analog left al[0] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X));///2; al[1] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y));///2; /* Directions */ if (al[1] <= JOYRANGE_UP_VALUE) MXjoy0 |= ATARIJOY_BITMASK_UP; else if (al[1] >= JOYRANGE_DOWN_VALUE) MXjoy0 |= ATARIJOY_BITMASK_DOWN; if (al[0] <= JOYRANGE_LEFT_VALUE) MXjoy0 |= ATARIJOY_BITMASK_LEFT; else if (al[0] >= JOYRANGE_RIGHT_VALUE) MXjoy0 |= ATARIJOY_BITMASK_RIGHT; for(i=4;i<9;i++)if( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) )MXjoy0 |= vbt[i]; // Joy press mouse_x = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); mouse_y = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); mouse_l = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); mouse_r = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); fmousex=mouse_x; fmousey=mouse_y; } else { //Mouse mode fmousex=fmousey=0; //emulate mouse with joy analog right ar[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X)); ar[1] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y)); if(ar[0]<=-1024) fmousex -=(-ar[0])/1024; if(ar[0]>= 1024) fmousex +=( ar[0])/1024; if(ar[1]<=-1024) fmousey -=(-ar[1])/1024; if(ar[1]>= 1024) fmousey +=( ar[1])/1024; //emulate mouse with dpad if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT)) fmousex += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT)) fmousex -= PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN)) fmousey += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP)) fmousey -= PAS; mouse_l=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); mouse_r=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); } if(mbL==0 && mouse_l) { mbL=1; Keyboard.bLButtonDown |= BUTTON_MOUSE; } else if(mbL==1 && !mouse_l) { Keyboard.bLButtonDown &= ~BUTTON_MOUSE; mbL=0; } if(mbR==0 && mouse_r) { mbR=1; Keyboard.bRButtonDown |= BUTTON_MOUSE; } else if(mbR==1 && !mouse_r) { Keyboard.bRButtonDown &= ~BUTTON_MOUSE; mbR=0; } Main_HandleMouseMotion(); if(STATUTON==1) Print_Statut(); }
int Retro_PollEvent() { // RETRO B Y SLT STA UP DWN LEFT RGT A X L R L2 R2 L3 R3 // INDEX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // C64 BOOT VKB M/J R/S UP DWN LEFT RGT B1 GUI F7 F1 F5 F3 SPC 1 int SAVPAS=PAS; int i; input_poll_cb(); int mouse_l; int mouse_r; int16_t mouse_x,mouse_y; mouse_x=mouse_y=0; if(SHOWKEY==-1 && pauseg==0)Process_key(); if(pauseg==0) { i=1;//show vkbd toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHOWKEY=-SHOWKEY; Screen_SetFullUpdate(0); } } i=2;//mouse/joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; MOUSE_EMULATED=-MOUSE_EMULATED; } /* i=3;//push r/s if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ){ mbt[i]=1;kbd_handle_keydown(RETROK_ESCAPE); } else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ){ mbt[i]=0;kbd_handle_keyup(RETROK_ESCAPE)); } */ if(MOUSE_EMULATED==1) { if(slowdown>0)return 1; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT))mouse_x += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT))mouse_x -= PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN))mouse_y += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP))mouse_y -= PAS; mouse_l=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); mouse_r=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); PAS=SAVPAS; slowdown=1; } else { mouse_x = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); mouse_y = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); mouse_l = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); mouse_r = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); } static int mmbL=0,mmbR=0; if(mmbL==0 && mouse_l) { mmbL=1; pushi=1; touch=1; } else if(mmbL==1 && !mouse_l) { mmbL=0; pushi=0; touch=-1; } if(mmbR==0 && mouse_r) { mmbR=1; } else if(mmbR==1 && !mouse_r) { mmbR=0; } if(pauseg==0 && c64mouse_enable) { mouse_move((int)mouse_x, (int)mouse_y); mouse_button(0,mmbL); mouse_button(1,mmbR); } gmx+=mouse_x; gmy+=mouse_y; if(gmx<0)gmx=0; if(gmx>retrow-1)gmx=retrow-1; if(gmy<0)gmy=0; if(gmy>retroh-1)gmy=retroh-1; return 1; }