From 863bde899b53ae31e854096ac5258208c848a293 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Thu, 6 Mar 2014 21:07:54 +0200 Subject: [PATCH 15/27] Fix mouse speed support --- snes/config/config.cpp | 1 + snes/config/config.hpp | 3 +++ snes/controller/mouse/mouse.cpp | 11 +++++++++-- snes/controller/mouse/mouse.hpp | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/snes/config/config.cpp b/snes/config/config.cpp index 206daae0..19831370 100755 --- a/snes/config/config.cpp +++ b/snes/config/config.cpp @@ -8,6 +8,7 @@ Configuration::Configuration() { expansion_port = System::ExpansionPortDevice::BSX; region = System::Region::Autodetect; random = true; + mouse_speed_fix = false; cpu.version = 2; cpu.ntsc_frequency = 21477272; //315 / 88 * 6000000 diff --git a/snes/config/config.hpp b/snes/config/config.hpp index dabde597..68fe0bde 100755 --- a/snes/config/config.hpp +++ b/snes/config/config.hpp @@ -1,9 +1,12 @@ +#define BSNES_SUPPORTS_MOUSE_SPEED_FIX + struct Configuration { Input::Device controller_port1; Input::Device controller_port2; System::ExpansionPortDevice expansion_port; System::Region region; bool random; + bool mouse_speed_fix; struct CPU { unsigned version; diff --git a/snes/controller/mouse/mouse.cpp b/snes/controller/mouse/mouse.cpp index 1a066b98..caa7a358 100755 --- a/snes/controller/mouse/mouse.cpp +++ b/snes/controller/mouse/mouse.cpp @@ -1,6 +1,10 @@ #ifdef CONTROLLER_CPP uint2 Mouse::data() { + if(config.mouse_speed_fix && latched) { + speed = (speed + 1) % 3; + return 0; + } if(counter >= 32) return 1; if(counter == 0) { @@ -31,8 +35,8 @@ uint2 Mouse::data() { case 8: return interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Right); case 9: return interface->inputPoll(port, Input::Device::Mouse, 0, (unsigned)Input::MouseID::Left); - case 10: return 0; //speed (0 = slow, 1 = normal, 2 = fast, 3 = unused) - case 11: return 0; // || + case 10: return speed >> 1; //speed (0 = slow, 1 = normal, 2 = fast, 3 = unused) + case 11: return speed & 1; // || case 12: return 0; //signature case 13: return 0; // || @@ -75,10 +79,12 @@ void Mouse::serialize(serializer& s) { block[3] = (unsigned short)_position_x; block[4] = (unsigned short)_position_y >> 8; block[5] = (unsigned short)_position_y; + block[6] = speed; s.array(block, Controller::SaveSize); if(s.mode() == nall::serializer::Load) { latched = (block[0] != 0); counter = block[1]; + speed = block[6]; _position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]); _position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]); } @@ -87,6 +93,7 @@ void Mouse::serialize(serializer& s) { Mouse::Mouse(bool port) : Controller(port) { latched = 0; counter = 0; + speed = 0; } #endif diff --git a/snes/controller/mouse/mouse.hpp b/snes/controller/mouse/mouse.hpp index b07c8ab7..13a9313e 100755 --- a/snes/controller/mouse/mouse.hpp +++ b/snes/controller/mouse/mouse.hpp @@ -6,6 +6,7 @@ struct Mouse : Controller { private: bool latched; unsigned counter; + unsigned speed; int _position_x; int _position_y; }; -- 2.15.0.rc1