summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/citra_qt/main.cpp18
-rw-r--r--src/citra_qt/main.h8
-rw-r--r--src/common/file_util.cpp2
-rw-r--r--src/common/logging/backend.cpp1
-rw-r--r--src/common/logging/log.h1
-rw-r--r--src/common/x64/emitter.cpp4
-rw-r--r--src/core/file_sys/disk_archive.cpp6
-rw-r--r--src/core/hle/service/cfg/cfg.cpp20
-rw-r--r--src/core/hle/service/ir/ir.cpp72
-rw-r--r--src/core/hle/service/ir/ir.h47
-rw-r--r--src/core/hle/service/ir/ir_user.cpp41
-rw-r--r--src/core/hle/svc.cpp1
12 files changed, 195 insertions, 26 deletions
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 144f11117..da9ea6c91 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -171,6 +171,8 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
171 } 171 }
172 UpdateRecentFiles(); 172 UpdateRecentFiles();
173 173
174 confirm_before_closing = settings.value("confirmClose", true).toBool();
175
174 // Setup connections 176 // Setup connections
175 connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString))); 177 connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)));
176 connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile())); 178 connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile()));
@@ -497,7 +499,22 @@ void GMainWindow::OnConfigure() {
497 //GControllerConfigDialog* dialog = new GControllerConfigDialog(controller_ports, this); 499 //GControllerConfigDialog* dialog = new GControllerConfigDialog(controller_ports, this);
498} 500}
499 501
502bool GMainWindow::ConfirmClose() {
503 if (emu_thread == nullptr || !confirm_before_closing)
504 return true;
505
506 auto answer = QMessageBox::question(this, tr("Citra"),
507 tr("Are you sure you want to close Citra?"),
508 QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
509 return answer != QMessageBox::No;
510}
511
500void GMainWindow::closeEvent(QCloseEvent* event) { 512void GMainWindow::closeEvent(QCloseEvent* event) {
513 if (!ConfirmClose()) {
514 event->ignore();
515 return;
516 }
517
501 // Save window layout 518 // Save window layout
502 QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra"); 519 QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra");
503 520
@@ -512,6 +529,7 @@ void GMainWindow::closeEvent(QCloseEvent* event) {
512 settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked()); 529 settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked());
513 settings.setValue("displayTitleBars", ui.actionDisplay_widget_title_bars->isChecked()); 530 settings.setValue("displayTitleBars", ui.actionDisplay_widget_title_bars->isChecked());
514 settings.setValue("firstStart", false); 531 settings.setValue("firstStart", false);
532 settings.setValue("confirmClose", confirm_before_closing);
515 game_list->SaveInterfaceLayout(settings); 533 game_list->SaveInterfaceLayout(settings);
516 SaveHotkeys(settings); 534 SaveHotkeys(settings);
517 535
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index f6d429cd9..8c195f816 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -82,6 +82,13 @@ private:
82 */ 82 */
83 void UpdateRecentFiles(); 83 void UpdateRecentFiles();
84 84
85 /**
86 * If the emulation is running,
87 * asks the user if he really want to close the emulator
88 *
89 * @return true if the user confirmed
90 */
91 bool ConfirmClose();
85 void closeEvent(QCloseEvent* event) override; 92 void closeEvent(QCloseEvent* event) override;
86 93
87private slots: 94private slots:
@@ -122,6 +129,7 @@ private:
122 GPUCommandListWidget* graphicsCommandsWidget; 129 GPUCommandListWidget* graphicsCommandsWidget;
123 130
124 QAction* actions_recent_files[max_recent_files_item]; 131 QAction* actions_recent_files[max_recent_files_item];
132 bool confirm_before_closing;
125}; 133};
126 134
127#endif // _CITRA_QT_MAIN_HXX_ 135#endif // _CITRA_QT_MAIN_HXX_
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp
index 052c0ecd6..c3061479a 100644
--- a/src/common/file_util.cpp
+++ b/src/common/file_util.cpp
@@ -457,7 +457,7 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo
457 if (virtual_name == "." || virtual_name == "..") 457 if (virtual_name == "." || virtual_name == "..")
458 continue; 458 continue;
459 459
460 unsigned ret_entries; 460 unsigned ret_entries = 0;
461 if (!callback(&ret_entries, directory, virtual_name)) { 461 if (!callback(&ret_entries, directory, virtual_name)) {
462 callback_error = true; 462 callback_error = true;
463 break; 463 break;
diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 58819012d..54291429a 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -49,6 +49,7 @@ namespace Log {
49 SUB(Service, DSP) \ 49 SUB(Service, DSP) \
50 SUB(Service, HID) \ 50 SUB(Service, HID) \
51 SUB(Service, SOC) \ 51 SUB(Service, SOC) \
52 SUB(Service, IR) \
52 SUB(Service, Y2R) \ 53 SUB(Service, Y2R) \
53 CLS(HW) \ 54 CLS(HW) \
54 SUB(HW, Memory) \ 55 SUB(HW, Memory) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index ec7bb00b8..4b01805ae 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -64,6 +64,7 @@ enum class Class : ClassType {
64 Service_DSP, ///< The DSP (DSP control) service 64 Service_DSP, ///< The DSP (DSP control) service
65 Service_HID, ///< The HID (Human interface device) service 65 Service_HID, ///< The HID (Human interface device) service
66 Service_SOC, ///< The SOC (Socket) service 66 Service_SOC, ///< The SOC (Socket) service
67 Service_IR, ///< The IR service
67 Service_Y2R, ///< The Y2R (YUV to RGB conversion) service 68 Service_Y2R, ///< The Y2R (YUV to RGB conversion) service
68 HW, ///< Low-level hardware emulation 69 HW, ///< Low-level hardware emulation
69 HW_Memory, ///< Memory-map and address translation 70 HW_Memory, ///< Memory-map and address translation
diff --git a/src/common/x64/emitter.cpp b/src/common/x64/emitter.cpp
index 939df210e..1dcf2416c 100644
--- a/src/common/x64/emitter.cpp
+++ b/src/common/x64/emitter.cpp
@@ -225,14 +225,14 @@ void OpArg::WriteVex(XEmitter* emit, X64Reg regOp1, X64Reg regOp2, int L, int pp
225 // do we need any VEX fields that only appear in the three-byte form? 225 // do we need any VEX fields that only appear in the three-byte form?
226 if (X == 1 && B == 1 && W == 0 && mmmmm == 1) 226 if (X == 1 && B == 1 && W == 0 && mmmmm == 1)
227 { 227 {
228 u8 RvvvvLpp = (R << 7) | (vvvv << 3) | (L << 1) | pp; 228 u8 RvvvvLpp = (R << 7) | (vvvv << 3) | (L << 2) | pp;
229 emit->Write8(0xC5); 229 emit->Write8(0xC5);
230 emit->Write8(RvvvvLpp); 230 emit->Write8(RvvvvLpp);
231 } 231 }
232 else 232 else
233 { 233 {
234 u8 RXBmmmmm = (R << 7) | (X << 6) | (B << 5) | mmmmm; 234 u8 RXBmmmmm = (R << 7) | (X << 6) | (B << 5) | mmmmm;
235 u8 WvvvvLpp = (W << 7) | (vvvv << 3) | (L << 1) | pp; 235 u8 WvvvvLpp = (W << 7) | (vvvv << 3) | (L << 2) | pp;
236 emit->Write8(0xC4); 236 emit->Write8(0xC4);
237 emit->Write8(RXBmmmmm); 237 emit->Write8(RXBmmmmm);
238 emit->Write8(WvvvvLpp); 238 emit->Write8(WvvvvLpp);
diff --git a/src/core/file_sys/disk_archive.cpp b/src/core/file_sys/disk_archive.cpp
index 0ba502200..a51416774 100644
--- a/src/core/file_sys/disk_archive.cpp
+++ b/src/core/file_sys/disk_archive.cpp
@@ -139,7 +139,7 @@ bool DiskFile::Close() const {
139 139
140//////////////////////////////////////////////////////////////////////////////////////////////////// 140////////////////////////////////////////////////////////////////////////////////////////////////////
141 141
142DiskDirectory::DiskDirectory(const DiskArchive& archive, const Path& path) { 142DiskDirectory::DiskDirectory(const DiskArchive& archive, const Path& path) : directory() {
143 // TODO(Link Mauve): normalize path into an absolute path without "..", it can currently bypass 143 // TODO(Link Mauve): normalize path into an absolute path without "..", it can currently bypass
144 // the root directory we set while opening the archive. 144 // the root directory we set while opening the archive.
145 // For example, opening /../../usr/bin can give the emulated program your installed programs. 145 // For example, opening /../../usr/bin can give the emulated program your installed programs.
@@ -149,7 +149,9 @@ DiskDirectory::DiskDirectory(const DiskArchive& archive, const Path& path) {
149bool DiskDirectory::Open() { 149bool DiskDirectory::Open() {
150 if (!FileUtil::IsDirectory(path)) 150 if (!FileUtil::IsDirectory(path))
151 return false; 151 return false;
152 FileUtil::ScanDirectoryTree(path, directory); 152 unsigned size = FileUtil::ScanDirectoryTree(path, directory);
153 directory.size = size;
154 directory.isDirectory = true;
153 children_iterator = directory.children.begin(); 155 children_iterator = directory.children.begin();
154 return true; 156 return true;
155} 157}
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index 7556aa6a5..4c82a58e4 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -4,9 +4,10 @@
4 4
5#include <algorithm> 5#include <algorithm>
6 6
7#include "common/file_util.h"
7#include "common/logging/log.h" 8#include "common/logging/log.h"
8#include "common/string_util.h" 9#include "common/string_util.h"
9#include "common/file_util.h" 10#include "common/swap.h"
10 11
11#include "core/file_sys/archive_systemsavedata.h" 12#include "core/file_sys/archive_systemsavedata.h"
12#include "core/file_sys/file_backend.h" 13#include "core/file_sys/file_backend.h"
@@ -334,6 +335,18 @@ ResultCode FormatConfig() {
334 res = CreateConfigInfoBlk(0x000A0000, sizeof(CONSOLE_USERNAME_BLOCK), 0xE, &CONSOLE_USERNAME_BLOCK); 335 res = CreateConfigInfoBlk(0x000A0000, sizeof(CONSOLE_USERNAME_BLOCK), 0xE, &CONSOLE_USERNAME_BLOCK);
335 if (!res.IsSuccess()) return res; 336 if (!res.IsSuccess()) return res;
336 337
338 // 0x000A0000 - Profile username
339 struct {
340 u16_le username[10];
341 u8 unused[4];
342 u32_le wordfilter_version; // Unused by Citra
343 } profile_username = {};
344
345 std::u16string username_string = Common::UTF8ToUTF16("Citra");
346 std::copy(username_string.cbegin(), username_string.cend(), profile_username.username);
347 res = CreateConfigInfoBlk(0x000A0000, sizeof(profile_username), 0xE, &profile_username);
348 if (!res.IsSuccess()) return res;
349
337 // 0x000A0001 - Profile birthday 350 // 0x000A0001 - Profile birthday
338 const u8 profile_birthday[2] = {3, 25}; // March 25th, 2014 351 const u8 profile_birthday[2] = {3, 25}; // March 25th, 2014
339 res = CreateConfigInfoBlk(0x000A0001, sizeof(profile_birthday), 0xE, profile_birthday); 352 res = CreateConfigInfoBlk(0x000A0001, sizeof(profile_birthday), 0xE, profile_birthday);
@@ -344,9 +357,10 @@ ResultCode FormatConfig() {
344 res = CreateConfigInfoBlk(0x000B0000, sizeof(COUNTRY_INFO), 0xE, &COUNTRY_INFO); 357 res = CreateConfigInfoBlk(0x000B0000, sizeof(COUNTRY_INFO), 0xE, &COUNTRY_INFO);
345 if (!res.IsSuccess()) return res; 358 if (!res.IsSuccess()) return res;
346 359
347 char16_t country_name_buffer[16][0x40] = {}; 360 u16_le country_name_buffer[16][0x40] = {};
361 std::u16string region_name = Common::UTF8ToUTF16("Gensokyo");
348 for (size_t i = 0; i < 16; ++i) { 362 for (size_t i = 0; i < 16; ++i) {
349 Common::UTF8ToUTF16("Gensokyo").copy(country_name_buffer[i], 0x40); 363 std::copy(region_name.cbegin(), region_name.cend(), country_name_buffer[i]);
350 } 364 }
351 // 0x000B0001 - Localized names for the profile Country 365 // 0x000B0001 - Localized names for the profile Country
352 res = CreateConfigInfoBlk(0x000B0001, sizeof(country_name_buffer), 0xE, country_name_buffer); 366 res = CreateConfigInfoBlk(0x000B0001, sizeof(country_name_buffer), 0xE, country_name_buffer);
diff --git a/src/core/hle/service/ir/ir.cpp b/src/core/hle/service/ir/ir.cpp
index 0f8eed33a..c2121cb2e 100644
--- a/src/core/hle/service/ir/ir.cpp
+++ b/src/core/hle/service/ir/ir.cpp
@@ -2,20 +2,22 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/kernel/event.h"
6#include "core/hle/kernel/shared_memory.h"
7
5#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
6#include "core/hle/service/ir/ir.h" 9#include "core/hle/service/ir/ir.h"
7#include "core/hle/service/ir/ir_rst.h" 10#include "core/hle/service/ir/ir_rst.h"
8#include "core/hle/service/ir/ir_u.h" 11#include "core/hle/service/ir/ir_u.h"
9#include "core/hle/service/ir/ir_user.h" 12#include "core/hle/service/ir/ir_user.h"
10 13
11#include "core/hle/kernel/event.h"
12#include "core/hle/kernel/shared_memory.h"
13
14namespace Service { 14namespace Service {
15namespace IR { 15namespace IR {
16 16
17static Kernel::SharedPtr<Kernel::Event> handle_event; 17static Kernel::SharedPtr<Kernel::Event> handle_event;
18static Kernel::SharedPtr<Kernel::Event> conn_status_event;
18static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory; 19static Kernel::SharedPtr<Kernel::SharedMemory> shared_memory;
20static Kernel::SharedPtr<Kernel::SharedMemory> transfer_shared_memory;
19 21
20void GetHandles(Service::Interface* self) { 22void GetHandles(Service::Interface* self) {
21 u32* cmd_buff = Kernel::GetCommandBuffer(); 23 u32* cmd_buff = Kernel::GetCommandBuffer();
@@ -26,6 +28,64 @@ void GetHandles(Service::Interface* self) {
26 cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom(); 28 cmd_buff[4] = Kernel::g_handle_table.Create(Service::IR::handle_event).MoveFrom();
27} 29}
28 30
31void InitializeIrNopShared(Interface* self) {
32 u32* cmd_buff = Kernel::GetCommandBuffer();
33
34 u32 transfer_buff_size = cmd_buff[1];
35 u32 recv_buff_size = cmd_buff[2];
36 u32 unk1 = cmd_buff[3];
37 u32 send_buff_size = cmd_buff[4];
38 u32 unk2 = cmd_buff[5];
39 u8 baud_rate = cmd_buff[6] & 0xFF;
40 Handle handle = cmd_buff[8];
41
42 if(Kernel::g_handle_table.IsValid(handle)) {
43 transfer_shared_memory = Kernel::g_handle_table.Get<Kernel::SharedMemory>(handle);
44 transfer_shared_memory->name = "IR:TransferSharedMemory";
45 }
46
47 cmd_buff[1] = RESULT_SUCCESS.raw;
48
49 LOG_WARNING(Service_IR, "(STUBBED) called, transfer_buff_size=%d, recv_buff_size=%d, "
50 "unk1=%d, send_buff_size=%d, unk2=%d, baud_rate=%u, handle=0x%08X",
51 transfer_buff_size, recv_buff_size, unk1, send_buff_size, unk2, baud_rate, handle);
52}
53
54void RequireConnection(Interface* self) {
55 u32* cmd_buff = Kernel::GetCommandBuffer();
56
57 conn_status_event->Signal();
58
59 cmd_buff[1] = RESULT_SUCCESS.raw;
60
61 LOG_WARNING(Service_IR, "(STUBBED) called");
62}
63
64void Disconnect(Interface* self) {
65 u32* cmd_buff = Kernel::GetCommandBuffer();
66
67 cmd_buff[1] = RESULT_SUCCESS.raw;
68
69 LOG_WARNING(Service_IR, "(STUBBED) called");
70}
71
72void GetConnectionStatusEvent(Interface* self) {
73 u32* cmd_buff = Kernel::GetCommandBuffer();
74
75 cmd_buff[1] = RESULT_SUCCESS.raw;
76 cmd_buff[3] = Kernel::g_handle_table.Create(Service::IR::conn_status_event).MoveFrom();
77
78 LOG_WARNING(Service_IR, "(STUBBED) called");
79}
80
81void FinalizeIrNop(Interface* self) {
82 u32* cmd_buff = Kernel::GetCommandBuffer();
83
84 cmd_buff[1] = RESULT_SUCCESS.raw;
85
86 LOG_WARNING(Service_IR, "(STUBBED) called");
87}
88
29void Init() { 89void Init() {
30 using namespace Kernel; 90 using namespace Kernel;
31 91
@@ -35,15 +95,19 @@ void Init() {
35 95
36 using Kernel::MemoryPermission; 96 using Kernel::MemoryPermission;
37 shared_memory = SharedMemory::Create(0x1000, Kernel::MemoryPermission::ReadWrite, 97 shared_memory = SharedMemory::Create(0x1000, Kernel::MemoryPermission::ReadWrite,
38 Kernel::MemoryPermission::ReadWrite, "IR:SharedMemory"); 98 Kernel::MemoryPermission::ReadWrite, "IR:SharedMemory");
99 transfer_shared_memory = nullptr;
39 100
40 // Create event handle(s) 101 // Create event handle(s)
41 handle_event = Event::Create(RESETTYPE_ONESHOT, "IR:HandleEvent"); 102 handle_event = Event::Create(RESETTYPE_ONESHOT, "IR:HandleEvent");
103 conn_status_event = Event::Create(RESETTYPE_ONESHOT, "IR:ConnectionStatusEvent");
42} 104}
43 105
44void Shutdown() { 106void Shutdown() {
107 transfer_shared_memory = nullptr;
45 shared_memory = nullptr; 108 shared_memory = nullptr;
46 handle_event = nullptr; 109 handle_event = nullptr;
110 conn_status_event = nullptr;
47} 111}
48 112
49} // namespace IR 113} // namespace IR
diff --git a/src/core/hle/service/ir/ir.h b/src/core/hle/service/ir/ir.h
index 3e107a8fe..72d44ce60 100644
--- a/src/core/hle/service/ir/ir.h
+++ b/src/core/hle/service/ir/ir.h
@@ -20,6 +20,53 @@ namespace IR {
20 */ 20 */
21void GetHandles(Interface* self); 21void GetHandles(Interface* self);
22 22
23/**
24 * IR::InitializeIrNopShared service function
25 * Inputs:
26 * 1 : Size of transfer buffer
27 * 2 : Recv buffer size
28 * 3 : unknown
29 * 4 : Send buffer size
30 * 5 : unknown
31 * 6 : BaudRate (u8)
32 * 7 : 0
33 * 8 : Handle of transfer shared memory
34 * Outputs:
35 * 1 : Result of function, 0 on success, otherwise error code
36 */
37void InitializeIrNopShared(Interface* self);
38
39/**
40 * IR::FinalizeIrNop service function
41 * Outputs:
42 * 1 : Result of function, 0 on success, otherwise error code
43 */
44void FinalizeIrNop(Interface* self);
45
46/**
47 * IR::GetConnectionStatusEvent service function
48 * Outputs:
49 * 1 : Result of function, 0 on success, otherwise error code
50 * 2 : Connection Status Event handle
51 */
52void GetConnectionStatusEvent(Interface* self);
53
54/**
55 * IR::Disconnect service function
56 * Outputs:
57 * 1 : Result of function, 0 on success, otherwise error code
58 */
59void Disconnect(Interface* self);
60
61/**
62 * IR::RequireConnection service function
63 * Inputs:
64 * 1 : unknown (u8), looks like always 1
65 * Outputs:
66 * 1 : Result of function, 0 on success, otherwise error code
67 */
68void RequireConnection(Interface* self);
69
23/// Initialize IR service 70/// Initialize IR service
24void Init(); 71void Init();
25 72
diff --git a/src/core/hle/service/ir/ir_user.cpp b/src/core/hle/service/ir/ir_user.cpp
index 0a98e5801..06a601029 100644
--- a/src/core/hle/service/ir/ir_user.cpp
+++ b/src/core/hle/service/ir/ir_user.cpp
@@ -2,26 +2,39 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "core/hle/service/ir/ir.h"
5#include "core/hle/service/ir/ir_user.h" 6#include "core/hle/service/ir/ir_user.h"
6 7
7namespace Service { 8namespace Service {
8namespace IR { 9namespace IR {
9 10
10const Interface::FunctionInfo FunctionTable[] = { 11const Interface::FunctionInfo FunctionTable[] = {
11 {0x00010182, nullptr, "InitializeIrNop"}, 12 {0x00010182, nullptr, "InitializeIrNop"},
12 {0x00020000, nullptr, "FinalizeIrNop"}, 13 {0x00020000, FinalizeIrNop, "FinalizeIrNop"},
13 {0x00030000, nullptr, "ClearReceiveBuffer"}, 14 {0x00030000, nullptr, "ClearReceiveBuffer"},
14 {0x00040000, nullptr, "ClearSendBuffer"}, 15 {0x00040000, nullptr, "ClearSendBuffer"},
15 {0x00060040, nullptr, "RequireConnection"}, 16 {0x000500C0, nullptr, "WaitConnection"},
16 {0x00090000, nullptr, "Disconnect"}, 17 {0x00060040, RequireConnection, "RequireConnection"},
17 {0x000A0000, nullptr, "GetReceiveEvent"}, 18 {0x000702C0, nullptr, "AutoConnection"},
18 {0x000B0000, nullptr, "GetSendEvent"}, 19 {0x00080000, nullptr, "AnyConnection"},
19 {0x000C0000, nullptr, "GetConnectionStatusEvent"}, 20 {0x00090000, Disconnect, "Disconnect"},
20 {0x000D0042, nullptr, "SendIrNop"}, 21 {0x000A0000, nullptr, "GetReceiveEvent"},
21 {0x000E0042, nullptr, "SendIrNopLarge"}, 22 {0x000B0000, nullptr, "GetSendEvent"},
22 {0x00180182, nullptr, "InitializeIrNopShared"}, 23 {0x000C0000, GetConnectionStatusEvent, "GetConnectionStatusEvent"},
23 {0x00190040, nullptr, "ReleaseReceivedData"}, 24 {0x000D0042, nullptr, "SendIrNop"},
24 {0x001A0040, nullptr, "SetOwnMachineId"}, 25 {0x000E0042, nullptr, "SendIrNopLarge"},
26 {0x000F0040, nullptr, "ReceiveIrnop"},
27 {0x00100042, nullptr, "ReceiveIrnopLarge"},
28 {0x00110040, nullptr, "GetLatestReceiveErrorResult"},
29 {0x00120040, nullptr, "GetLatestSendErrorResult"},
30 {0x00130000, nullptr, "GetConnectionStatus"},
31 {0x00140000, nullptr, "GetTryingToConnectStatus"},
32 {0x00150000, nullptr, "GetReceiveSizeFreeAndUsed"},
33 {0x00160000, nullptr, "GetSendSizeFreeAndUsed"},
34 {0x00170000, nullptr, "GetConnectionRole"},
35 {0x00180182, InitializeIrNopShared, "InitializeIrNopShared"},
36 {0x00190040, nullptr, "ReleaseReceivedData"},
37 {0x001A0040, nullptr, "SetOwnMachineId"},
25}; 38};
26 39
27IR_User_Interface::IR_User_Interface() { 40IR_User_Interface::IR_User_Interface() {
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index ba21e06d5..7a39b101d 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -486,6 +486,7 @@ static ResultCode CreateThread(Handle* out_handle, s32 priority, u32 entry_point
486 } 486 }
487 487
488 switch (processor_id) { 488 switch (processor_id) {
489 case THREADPROCESSORID_ALL:
489 case THREADPROCESSORID_DEFAULT: 490 case THREADPROCESSORID_DEFAULT:
490 case THREADPROCESSORID_0: 491 case THREADPROCESSORID_0:
491 case THREADPROCESSORID_1: 492 case THREADPROCESSORID_1: