void S9xDeinitDisplay (void) { S9xTextMode(); TakedownImage(); XSync(GUI.display, False); XCloseDisplay(GUI.display); S9xBlitFilterDeinit(); S9xBlit2xSaIFilterDeinit(); S9xBlitHQ2xFilterDeinit(); }
void S9xDeinitDisplay () { S9xTextMode (); if (ourdisp == NULL) return; XDestroyWindow (ourdisp, inputwin); free (GFX.Screen); free (GFX.SubScreen); #ifdef USE_XF86VIDMODE free (orig_mode); free (mod320x240); if (orig_mode->privsize) XFree (orig_mode->c_private); if (mod320x240->privsize) XFree (orig_mode->c_private); #endif XFree (ourdisp); }
const char *S9xSelectFilename (const char *def, const char *dir1, const char *ext1, const char *title) { static char path [PATH_MAX]; char buffer [PATH_MAX]; S9xTextMode (); printf ("\n%s (default: %s): ", title, def); fflush (stdout); if (fgets (buffer, sizeof (buffer) - 1, stdin)) { char *p = buffer; while (isspace (*p) || *p == '\n') p++; if (!*p) { strcpy (buffer, def); p = buffer; } char *q = strrchr (p, '\n'); if (q) *q = 0; char fname [PATH_MAX]; char drive [_MAX_DRIVE]; char dir [_MAX_DIR]; char ext [_MAX_EXT]; _splitpath (p, drive, dir, fname, ext); _makepath (path, drive, *dir ? dir : dir1, fname, *ext ? ext : ext1); S9xGraphicsMode (); return (path); } S9xGraphicsMode (); return (NULL); }
void S9xDeinitDisplay () { S9xTextMode (); #ifdef GRIP_SUPPORT if (grip_initialised) { GrShutdown (); GrUnlink (); } #endif destroy_bitmap (off_screen); if (sub_screen) destroy_bitmap (sub_screen); delete Delta; if (GFX.ZBuffer) free ((char *) GFX.ZBuffer); if (GFX.SubZBuffer) free ((char *) GFX.SubZBuffer); GFX.ZBuffer = NULL; GFX.SubZBuffer = NULL; }
void S9xProcessEvents (bool8 block) { static fd_set fds; static struct timeval tv = { 0, 0 }; /* if (joypads[0] & SNES_TL_MASK && joypads[0] & SNES_TR_MASK) S9xExit(); */ if (!is_graphics) { while (True) { char c; if (read (0, &c, 1) >= 0) if (c == '\n') { S9xGraphicsMode (); Settings.Paused ^= 1; return; } } } while (block || XPending (ourdisp)) { XEvent event; XNextEvent (ourdisp, &event); block = FALSE; uint8 byte1 = 0; uint8 byte2 = 0; uint8 byte3 = 0; uint8 byte4 = 0; switch (event.type) { case KeyPress: case KeyRelease: { int key; switch (key = XKeycodeToKeysym (ourdisp, event.xkey.keycode, 0)) { case XK_k: case XK_Right: byte2 = 1; break; case XK_h: case XK_Left: byte2 = 2; break; case XK_j: case XK_n: case XK_Down: byte2 = 4; break; case XK_u: case XK_Up: byte2 = 8; break; case XK_Return: byte2 = 16; break; // Start case XK_space: byte2 = 32; break; // Select case XK_period: case XK_t: case XK_d: byte1 = 128; break; // A case XK_slash: case XK_y: case XK_c: byte2 = 128; break; // B case XK_m: case XK_e: case XK_s: byte1 = 64; break; // X case XK_comma: case XK_r: case XK_x: byte2 = 64; break; // Y case XK_v: case XK_q: case XK_a: byte1 = 32; break; // TL case XK_b: case XK_w: case XK_z: byte1 = 16; break; // TR case XK_KP_4: byte4 = 1; break; case XK_KP_6: byte4 = 2; break; case XK_KP_2: byte4 = 4; break; case XK_KP_8: byte4 = 8; break; case XK_KP_Enter: byte4 = 16; break; // Start case XK_KP_Add: byte4 = 32; break; // Select case XK_Prior: byte3 = 128; break; // A case XK_Next: byte4 = 128; break; // B case XK_Home: byte3 = 64; break; // X case XK_End: byte4 = 64; break; // Y case XK_Insert: byte3 = 32; break; // TL case XK_Delete: byte3 = 16; break; // TR case XK_Escape: S9xExit (); break; case XK_0: if (event.type == KeyPress) Settings.DisableHDMA = !Settings.DisableHDMA; break; case XK_1: if (event.type == KeyPress) Settings.BG_Forced ^= 1; break; case XK_2: if (event.type == KeyPress) Settings.BG_Forced ^= 2; break; case XK_3: if (event.type == KeyPress) Settings.BG_Forced ^= 4; break; case XK_4: if (event.type == KeyPress) Settings.BG_Forced ^= 8; break; case XK_5: if (event.type == KeyPress) Settings.BG_Forced ^= 16; break; case XK_6: if (event.type == KeyPress) Settings.SwapJoypads = !Settings.SwapJoypads; break; case XK_9: if (event.type == KeyPress) if (Settings.SixteenBit) Settings.Transparency = !Settings.Transparency; break; case XK_8: if (event.type == KeyPress) Settings.BGLayering = !Settings.BGLayering; break; case XK_7: if (event.type == KeyPress) S9xNextController (); break; case XK_minus: if (event.type == KeyPress) { if (Settings.SkipFrames <= 1) Settings.SkipFrames = AUTO_FRAMERATE; else if (Settings.SkipFrames != AUTO_FRAMERATE) Settings.SkipFrames--; } break; case XK_equal: case XK_plus: if (event.type == KeyPress) { if (Settings.SkipFrames == AUTO_FRAMERATE) Settings.SkipFrames = 1; else if (Settings.SkipFrames < 10) Settings.SkipFrames++; } break; case XK_BackSpace: if (event.type == KeyPress) { Settings.DisableGraphicWindows = !Settings.DisableGraphicWindows; } break; case XK_Scroll_Lock: case XK_Pause: case XK_Break: if (event.type == KeyPress) { if (Settings.Paused) S9xGraphicsMode (); else S9xTextMode (); Settings.Paused ^= 1; } break; /* case XK_Tab: if (event.type == KeyPress) superscope_turbo = !superscope_turbo; break; case XK_grave: superscope_pause = event.type == KeyPress; break; */ case XK_F1: #ifdef DEBUGGER if (event.type == KeyPress && (event.xkey.state & Mod1Mask)) { CPU.Flags |= DEBUG_MODE_FLAG; break; } #endif // Fall... case XK_F2: if (event.type == KeyPress && (event.xkey.state & Mod1Mask)) { S9xLoadSnapshot (S9xChooseFilename (TRUE)); break; } // Fall... case XK_F3: if (event.type == KeyPress && (event.xkey.state & Mod1Mask)) { Snapshot (S9xChooseFilename (FALSE)); break; } // Fall... case XK_F4: case XK_F5: case XK_F6: case XK_F7: case XK_F8: case XK_F9: case XK_F10: case XK_F11: case XK_F12: if (event.type == KeyPress) { if (!(event.xkey.state & (ShiftMask | Mod1Mask))) { if (key == XK_F11) { S9xLoadSnapshot (S9xChooseFilename (TRUE)); break; } else if (key == XK_F12) { Snapshot (S9xChooseFilename (FALSE)); break; } char def [PATH_MAX]; char filename [PATH_MAX]; char drive [_MAX_DRIVE]; char dir [_MAX_DIR]; char ext [_MAX_EXT]; _splitpath (Memory.ROMFilename, drive, dir, def, ext); sprintf (filename, "%s%s%s.%03d", S9xGetSnapshotDirectory (), SLASH_STR, def, key - XK_F1); S9xLoadSnapshot (filename); } else if (event.xkey.state & Mod1Mask) { if (key >= XK_F4) S9xToggleSoundChannel (key - XK_F4); } else { char def [PATH_MAX]; char filename [PATH_MAX]; char drive [_MAX_DRIVE]; char dir [_MAX_DIR]; char ext [_MAX_EXT]; _splitpath (Memory.ROMFilename, drive, dir, def, ext); sprintf (filename, "%s%s%s.%03d", S9xGetSnapshotDirectory (), SLASH_STR, def, key - XK_F1); Snapshot (filename); } } break; } if (event.type == KeyPress) { joypads [0] |= byte1; joypads [0] |= (byte2 << 8); joypads [1] |= byte3; joypads [1] |= (byte4 << 8); } else { joypads [0] &= ~byte1; joypads [0] &= ~(byte2 << 8); joypads [1] &= ~byte3; joypads [1] &= ~(byte4 << 8); } break; } #if 0 case ButtonPress: mouse_buttons = (event.xbutton.state | (1 << event.xbutton.button)) & 0x1f; break; case ButtonRelease: mouse_buttons = (event.xbutton.state & ~(1 << event.xbutton.button)) & 0x1f; break; #endif } } }
void S9xInitDisplay (int /*argc*/, char ** /*argv*/) { if (vga_init() < 0) { fprintf (stdout, "Unable to initialise vga.\n"); S9xExit (); } S9xTextMode (); if (mode < 0) { if (Settings.SixteenBit) mode = 6; else mode = 2; } info = vga_getmodeinfo (modes [mode].mode); if (info->flags & IS_MODEX) planar = 1; if (info->flags & CAPABLE_LINEAR) video_page_size = ~0; else if (info->flags & EXT_INFO_AVAILABLE) video_page_size = info->aperture_size; else video_page_size = 64 * 1024; if (!screen_pitch) screen_pitch = info->linewidth; if (info->bytesperpixel > 1) { Settings.Transparency = TRUE; Settings.SixteenBit = TRUE; } else { Settings.Transparency = FALSE; Settings.SixteenBit = FALSE; } if (info->width >= 512 && info->height >= 578) Settings.SupportHiRes = TRUE; if (!Settings.SixteenBit || info->width < 512 || info->height < 240) interpolation = FALSE; if (interpolation) { GFX.Pitch = (IMAGE_WIDTH + 2) * 2; GFX.Screen = (uint8 *) malloc (GFX.Pitch * IMAGE_HEIGHT); GFX.SubScreen = (uint8 *) malloc (GFX.Pitch * IMAGE_HEIGHT); DeltaScreen = (uint8 *) malloc (GFX.Pitch * IMAGE_HEIGHT); GFX.ZBuffer = (uint8 *) malloc ((GFX.Pitch >> 1) * IMAGE_HEIGHT); GFX.SubZBuffer = (uint8 *) malloc ((GFX.Pitch >> 1) * IMAGE_HEIGHT); if (!GFX.Screen || !GFX.SubScreen || !DeltaScreen || !GFX.ZBuffer || !GFX.SubZBuffer) { fprintf (stdout, "Cannot allocate screen buffer.\n"); S9xExit (); } } else if (Settings.SixteenBit)