mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-08-16 19:24:23 +02:00
Update to v094r29 release.
byuu says: Note: for Windows users, please go to nall/intrinsics.hpp line 60 and correct the typo from "DISPLAY_WINDOW" to "DISPLAY_WINDOWS" before compiling, otherwise things won't work at all. This will be a really major WIP for the core SNES emulation, so please test as thoroughly as possible. I rewrote the 65816 CPU core's dispatcher from a jump table to a switch table. This was so that I could pass class variables as parameters to opcodes without crazy theatrics. With that, I killed the regs.r[N] stuff, the flag_t operator|=, &=, ^= stuff, and all of the template versions of opcodes. I also removed some stupid pointless flag tests in xcn and pflag that would always be true. I sure hope that AWJ is happy with this; because this change was so that my flag assignments and branch tests won't need to build regs.P into a full 8-bit variable anymore. It does of course incur a slight performance hit when you pass in variables by-value to functions, but it should help with binary size (and thus cache) by reducing a lot of extra functions. (I know I could have used template parameters for some things even with a switch table, but chose not to for the aforementioned reasons.) Overall, it's about a ~1% speedup from the previous build. The CPU core instructions were never a bottleneck, but I did want to fix the P flag building stuff because that really was a dumb mistake v_v'
This commit is contained in:
@@ -5,7 +5,7 @@ namespace hiro {
|
||||
auto pKeyboard::poll() -> vector<bool> {
|
||||
vector<bool> result;
|
||||
char state[256];
|
||||
#if defined(PLATFORM_XORG)
|
||||
#if defined(DISPLAY_XORG)
|
||||
XQueryKeymap(pApplication::display, state);
|
||||
#endif
|
||||
for(auto& code : settings->keycodes) {
|
||||
@@ -16,7 +16,7 @@ auto pKeyboard::poll() -> vector<bool> {
|
||||
|
||||
auto pKeyboard::pressed(unsigned code) -> bool {
|
||||
char state[256];
|
||||
#if defined(PLATFORM_XORG)
|
||||
#if defined(DISPLAY_XORG)
|
||||
XQueryKeymap(pApplication::display, state);
|
||||
#endif
|
||||
return _pressed(state, code);
|
||||
@@ -26,12 +26,12 @@ auto pKeyboard::_pressed(const char* state, uint16_t code) -> bool {
|
||||
uint8_t lo = code >> 0;
|
||||
uint8_t hi = code >> 8;
|
||||
|
||||
#if defined(PLATFORM_WINDOWS)
|
||||
#if defined(DISPLAY_WINDOWS)
|
||||
if(lo && GetAsyncKeyState(lo) & 0x8000) return true;
|
||||
if(hi && GetAsyncKeyState(hi) & 0x8000) return true;
|
||||
#endif
|
||||
|
||||
#if defined(PLATFORM_XORG)
|
||||
#if defined(DISPLAY_XORG)
|
||||
if(lo && state[lo >> 3] & (1 << (lo & 7))) return true;
|
||||
if(hi && state[hi >> 3] & (1 << (hi & 7))) return true;
|
||||
#endif
|
||||
@@ -223,7 +223,7 @@ auto pKeyboard::_translate(unsigned code) -> signed {
|
||||
|
||||
auto pKeyboard::initialize() -> void {
|
||||
auto append = [](unsigned lo, unsigned hi = 0) {
|
||||
#if defined(PLATFORM_XORG)
|
||||
#if defined(DISPLAY_XORG)
|
||||
lo = lo ? (uint8_t)XKeysymToKeycode(pApplication::display, lo) : 0;
|
||||
hi = hi ? (uint8_t)XKeysymToKeycode(pApplication::display, hi) : 0;
|
||||
#endif
|
||||
@@ -232,11 +232,11 @@ auto pKeyboard::initialize() -> void {
|
||||
|
||||
#define map(name, ...) if(key == name) { append(__VA_ARGS__); continue; }
|
||||
for(auto& key : Keyboard::keys) {
|
||||
#if defined(PLATFORM_WINDOWS)
|
||||
#if defined(DISPLAY_WINDOWS)
|
||||
#include <hiro/platform/windows/keyboard.hpp>
|
||||
#endif
|
||||
|
||||
#if defined(PLATFORM_XORG)
|
||||
#if defined(DISPLAY_XORG)
|
||||
#include <hiro/platform/xorg/keyboard.hpp>
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user