early-access version 3975
This commit is contained in:
@@ -153,6 +153,14 @@ void ARM_Interface::Run() {
|
||||
Kernel::KThread* current_thread{Kernel::GetCurrentThreadPointer(system.Kernel())};
|
||||
HaltReason hr{};
|
||||
|
||||
// If the thread is scheduled for termination, exit the thread.
|
||||
if (current_thread->HasDpc()) {
|
||||
if (current_thread->IsTerminationRequested()) {
|
||||
current_thread->Exit();
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
// Notify the debugger and go to sleep if a step was performed
|
||||
// and this thread has been scheduled again.
|
||||
if (current_thread->GetStepState() == StepState::StepPerformed) {
|
||||
@@ -174,14 +182,6 @@ void ARM_Interface::Run() {
|
||||
}
|
||||
system.ExitCPUProfile();
|
||||
|
||||
// If the thread is scheduled for termination, exit the thread.
|
||||
if (current_thread->HasDpc()) {
|
||||
if (current_thread->IsTerminationRequested()) {
|
||||
current_thread->Exit();
|
||||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
// Notify the debugger and go to sleep if a breakpoint was hit,
|
||||
// or if the thread is unable to continue for any reason.
|
||||
if (True(hr & HaltReason::InstructionBreakpoint) || True(hr & HaltReason::PrefetchAbort)) {
|
||||
|
@@ -76,6 +76,7 @@ void CoreTiming::Initialize(std::function<void()>&& on_thread_init_) {
|
||||
}
|
||||
|
||||
void CoreTiming::ClearPendingEvents() {
|
||||
std::scoped_lock lock{basic_lock};
|
||||
event_queue.clear();
|
||||
}
|
||||
|
||||
@@ -113,6 +114,7 @@ bool CoreTiming::IsRunning() const {
|
||||
}
|
||||
|
||||
bool CoreTiming::HasPendingEvents() const {
|
||||
std::scoped_lock lock{basic_lock};
|
||||
return !(wait_set && event_queue.empty());
|
||||
}
|
||||
|
||||
|
@@ -161,7 +161,7 @@ private:
|
||||
std::shared_ptr<EventType> ev_lost;
|
||||
Common::Event event{};
|
||||
Common::Event pause_event{};
|
||||
std::mutex basic_lock;
|
||||
mutable std::mutex basic_lock;
|
||||
std::mutex advance_lock;
|
||||
std::unique_ptr<std::jthread> timer_thread;
|
||||
std::atomic<bool> paused{};
|
||||
|
@@ -243,10 +243,12 @@ void EmulatedController::LoadTASParams() {
|
||||
tas_button_params[Settings::NativeButton::DUp].Set("button", 13);
|
||||
tas_button_params[Settings::NativeButton::DRight].Set("button", 14);
|
||||
tas_button_params[Settings::NativeButton::DDown].Set("button", 15);
|
||||
tas_button_params[Settings::NativeButton::SL].Set("button", 16);
|
||||
tas_button_params[Settings::NativeButton::SR].Set("button", 17);
|
||||
tas_button_params[Settings::NativeButton::SLLeft].Set("button", 16);
|
||||
tas_button_params[Settings::NativeButton::SRLeft].Set("button", 17);
|
||||
tas_button_params[Settings::NativeButton::Home].Set("button", 18);
|
||||
tas_button_params[Settings::NativeButton::Screenshot].Set("button", 19);
|
||||
tas_button_params[Settings::NativeButton::SLRight].Set("button", 20);
|
||||
tas_button_params[Settings::NativeButton::SRRight].Set("button", 21);
|
||||
|
||||
tas_stick_params[Settings::NativeAnalog::LStick].Set("axis_x", 0);
|
||||
tas_stick_params[Settings::NativeAnalog::LStick].Set("axis_y", 1);
|
||||
@@ -296,10 +298,12 @@ void EmulatedController::LoadVirtualGamepadParams() {
|
||||
virtual_button_params[Settings::NativeButton::DUp].Set("button", 13);
|
||||
virtual_button_params[Settings::NativeButton::DRight].Set("button", 14);
|
||||
virtual_button_params[Settings::NativeButton::DDown].Set("button", 15);
|
||||
virtual_button_params[Settings::NativeButton::SL].Set("button", 16);
|
||||
virtual_button_params[Settings::NativeButton::SR].Set("button", 17);
|
||||
virtual_button_params[Settings::NativeButton::SLLeft].Set("button", 16);
|
||||
virtual_button_params[Settings::NativeButton::SRLeft].Set("button", 17);
|
||||
virtual_button_params[Settings::NativeButton::Home].Set("button", 18);
|
||||
virtual_button_params[Settings::NativeButton::Screenshot].Set("button", 19);
|
||||
virtual_button_params[Settings::NativeButton::SLRight].Set("button", 20);
|
||||
virtual_button_params[Settings::NativeButton::SRRight].Set("button", 21);
|
||||
|
||||
virtual_stick_params[Settings::NativeAnalog::LStick].Set("axis_x", 0);
|
||||
virtual_stick_params[Settings::NativeAnalog::LStick].Set("axis_y", 1);
|
||||
@@ -867,12 +871,16 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
|
||||
controller.npad_button_state.down.Assign(current_status.value);
|
||||
controller.debug_pad_button_state.d_down.Assign(current_status.value);
|
||||
break;
|
||||
case Settings::NativeButton::SL:
|
||||
case Settings::NativeButton::SLLeft:
|
||||
controller.npad_button_state.left_sl.Assign(current_status.value);
|
||||
break;
|
||||
case Settings::NativeButton::SLRight:
|
||||
controller.npad_button_state.right_sl.Assign(current_status.value);
|
||||
break;
|
||||
case Settings::NativeButton::SR:
|
||||
case Settings::NativeButton::SRLeft:
|
||||
controller.npad_button_state.left_sr.Assign(current_status.value);
|
||||
break;
|
||||
case Settings::NativeButton::SRRight:
|
||||
controller.npad_button_state.right_sr.Assign(current_status.value);
|
||||
break;
|
||||
case Settings::NativeButton::Home:
|
||||
@@ -1890,12 +1898,16 @@ NpadButton EmulatedController::GetTurboButtonMask() const {
|
||||
case Settings::NativeButton::DDown:
|
||||
button_mask.down.Assign(1);
|
||||
break;
|
||||
case Settings::NativeButton::SL:
|
||||
case Settings::NativeButton::SLLeft:
|
||||
button_mask.left_sl.Assign(1);
|
||||
break;
|
||||
case Settings::NativeButton::SLRight:
|
||||
button_mask.right_sl.Assign(1);
|
||||
break;
|
||||
case Settings::NativeButton::SR:
|
||||
case Settings::NativeButton::SRLeft:
|
||||
button_mask.left_sr.Assign(1);
|
||||
break;
|
||||
case Settings::NativeButton::SRRight:
|
||||
button_mask.right_sr.Assign(1);
|
||||
break;
|
||||
default:
|
||||
|
@@ -1617,9 +1617,9 @@ void KPageTableBase::RemapPageGroup(PageLinkedList* page_list, KProcessAddress a
|
||||
const KMemoryInfo info = it->GetMemoryInfo();
|
||||
|
||||
// Determine the range to map.
|
||||
KProcessAddress map_address = std::max(info.GetAddress(), GetInteger(start_address));
|
||||
KProcessAddress map_address = std::max<u64>(info.GetAddress(), GetInteger(start_address));
|
||||
const KProcessAddress map_end_address =
|
||||
std::min(info.GetEndAddress(), GetInteger(end_address));
|
||||
std::min<u64>(info.GetEndAddress(), GetInteger(end_address));
|
||||
ASSERT(map_end_address != map_address);
|
||||
|
||||
// Determine if we should disable head merge.
|
||||
|
@@ -457,12 +457,14 @@ void Controller_NPad::RequestPadStateUpdate(Core::HID::NpadIdType npad_id) {
|
||||
pad_entry.l_stick = stick_state.left;
|
||||
}
|
||||
|
||||
if (controller_type == Core::HID::NpadStyleIndex::JoyconLeft) {
|
||||
if (controller_type == Core::HID::NpadStyleIndex::JoyconLeft ||
|
||||
controller_type == Core::HID::NpadStyleIndex::JoyconDual) {
|
||||
pad_entry.npad_buttons.left_sl.Assign(button_state.left_sl);
|
||||
pad_entry.npad_buttons.left_sr.Assign(button_state.left_sr);
|
||||
}
|
||||
|
||||
if (controller_type == Core::HID::NpadStyleIndex::JoyconRight) {
|
||||
if (controller_type == Core::HID::NpadStyleIndex::JoyconRight ||
|
||||
controller_type == Core::HID::NpadStyleIndex::JoyconDual) {
|
||||
pad_entry.npad_buttons.right_sl.Assign(button_state.right_sl);
|
||||
pad_entry.npad_buttons.right_sr.Assign(button_state.right_sr);
|
||||
}
|
||||
|
Reference in New Issue
Block a user