summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md20
-rw-r--r--src/core/CMakeLists.txt8
-rw-r--r--src/core/arm/interpreter/armemu.cpp24
-rw-r--r--src/core/hle/service/am_app.cpp23
-rw-r--r--src/core/hle/service/am_app.h27
-rw-r--r--src/core/hle/service/cecd_u.cpp23
-rw-r--r--src/core/hle/service/cecd_u.h27
-rw-r--r--src/core/hle/service/ldr_ro.cpp28
-rw-r--r--src/core/hle/service/ldr_ro.h27
-rw-r--r--src/core/hle/service/nim_aoc.cpp31
-rw-r--r--src/core/hle/service/nim_aoc.h27
-rw-r--r--src/core/hle/service/service.cpp8
12 files changed, 258 insertions, 15 deletions
diff --git a/README.md b/README.md
index 554553ee8..a76520c93 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,12 @@
1citra emulator 1Citra Emulator
2============== 2==============
3[![Travis CI Build Status](https://travis-ci.org/citra-emu/citra.svg)](https://travis-ci.org/citra-emu/citra) 3[![Travis CI Build Status](https://travis-ci.org/citra-emu/citra.svg)](https://travis-ci.org/citra-emu/citra)
4 4
5An experimental open-source Nintendo 3DS emulator/debugger written in C++. Citra is written with portability in mind, with builds actively maintained for Windows, Linux and OS X. At this time, it only emulates a subset of 3DS hardware, and therefore is generally only useful for booting/debugging very simple homebrew demos. Citra is licensed under the GPLv2. Refer to the license.txt file included. Please read the [FAQ](https://github.com/citra-emu/citra/wiki/FAQ) before getting started with the project. 5Citra is an experimental open-source Nintendo 3DS emulator/debugger written in C++. It is written with portability in mind, with builds actively maintained for Windows, Linux and OS X. At this time, it only emulates a subset of 3DS hardware, and therefore is generally only useful for booting/debugging very simple homebrew demos. However, this is changing as more and more progress is being made on running commercial titles, too.
6 6
7For development discussion, please join us @ #citra on [freenode](http://webchat.freenode.net/). 7Citra is licensed under the GPLv2. Refer to the license.txt file included. Please read the [FAQ](https://github.com/citra-emu/citra/wiki/FAQ) before getting started with the project.
8
9For development discussion, please join us @ #citra on [freenode](http://webchat.freenode.net/?channels=citra).
8 10
9### Development 11### Development
10 12
@@ -15,3 +17,15 @@ If you want to contribute please take a took at the [Contributor's Guide](CONTRI
15* __Windows__: [Windows Build](https://github.com/citra-emu/citra/wiki/Windows-Build) 17* __Windows__: [Windows Build](https://github.com/citra-emu/citra/wiki/Windows-Build)
16* __Linux__: [Linux Build](https://github.com/citra-emu/citra/wiki/Linux-Build) 18* __Linux__: [Linux Build](https://github.com/citra-emu/citra/wiki/Linux-Build)
17* __OSX__: [OS X Build](https://github.com/citra-emu/citra/wiki/OS-X-Build) 19* __OSX__: [OS X Build](https://github.com/citra-emu/citra/wiki/OS-X-Build)
20
21
22### Support
23If you like, you can [donate by PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K899FANUJ2ZXW) - any donation received will go towards things like:
24* 3DS consoles for developers to explore the hardware
25* 3DS games for testing
26* Any equipment required for homebrew
27* Infrastructure setup
28* Eventually 3D displays to get proper 3D output working
29* ... etc ...
30
31We also more than gladly accept used 3DS consoles, preferrably ones with firmware 4.5 or lower! If you would like to give yours away, don't hesitate to join our IRC channel #citra on [Freenode](http://webchat.freenode.net/?channels=citra) and talk to neobrain or bunnei. Mind you, IRC is slow-paced, so it might be a while until people reply. If you're in a hurry you can just leave contact details in the channel or via private message and we'll get back to you.
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index ce63aab09..198e4afd3 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -31,9 +31,11 @@ set(SRCS
31 hle/kernel/shared_memory.cpp 31 hle/kernel/shared_memory.cpp
32 hle/kernel/thread.cpp 32 hle/kernel/thread.cpp
33 hle/service/ac_u.cpp 33 hle/service/ac_u.cpp
34 hle/service/am_app.cpp
34 hle/service/am_net.cpp 35 hle/service/am_net.cpp
35 hle/service/apt_u.cpp 36 hle/service/apt_u.cpp
36 hle/service/boss_u.cpp 37 hle/service/boss_u.cpp
38 hle/service/cecd_u.cpp
37 hle/service/cfg_i.cpp 39 hle/service/cfg_i.cpp
38 hle/service/cfg_u.cpp 40 hle/service/cfg_u.cpp
39 hle/service/csnd_snd.cpp 41 hle/service/csnd_snd.cpp
@@ -46,7 +48,9 @@ set(SRCS
46 hle/service/hid_user.cpp 48 hle/service/hid_user.cpp
47 hle/service/ir_rst.cpp 49 hle/service/ir_rst.cpp
48 hle/service/ir_u.cpp 50 hle/service/ir_u.cpp
51 hle/service/ldr_ro.cpp
49 hle/service/mic_u.cpp 52 hle/service/mic_u.cpp
53 hle/service/nim_aoc.cpp
50 hle/service/ndm_u.cpp 54 hle/service/ndm_u.cpp
51 hle/service/nwm_uds.cpp 55 hle/service/nwm_uds.cpp
52 hle/service/pm_app.cpp 56 hle/service/pm_app.cpp
@@ -111,9 +115,11 @@ set(HEADERS
111 hle/kernel/shared_memory.h 115 hle/kernel/shared_memory.h
112 hle/kernel/thread.h 116 hle/kernel/thread.h
113 hle/service/ac_u.h 117 hle/service/ac_u.h
118 hle/service/am_app.h
114 hle/service/am_net.h 119 hle/service/am_net.h
115 hle/service/apt_u.h 120 hle/service/apt_u.h
116 hle/service/boss_u.h 121 hle/service/boss_u.h
122 hle/service/cecd_u.h
117 hle/service/cfg_i.h 123 hle/service/cfg_i.h
118 hle/service/cfg_u.h 124 hle/service/cfg_u.h
119 hle/service/csnd_snd.h 125 hle/service/csnd_snd.h
@@ -126,7 +132,9 @@ set(HEADERS
126 hle/service/hid_user.h 132 hle/service/hid_user.h
127 hle/service/ir_rst.h 133 hle/service/ir_rst.h
128 hle/service/ir_u.h 134 hle/service/ir_u.h
135 hle/service/ldr_ro.h
129 hle/service/mic_u.h 136 hle/service/mic_u.h
137 hle/service/nim_aoc.h
130 hle/service/ndm_u.h 138 hle/service/ndm_u.h
131 hle/service/nwm_uds.h 139 hle/service/nwm_uds.h
132 hle/service/pm_app.h 140 hle/service/pm_app.h
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index ec40881f8..33ebc7986 100644
--- a/src/core/arm/interpreter/armemu.cpp
+++ b/src/core/arm/interpreter/armemu.cpp
@@ -6101,18 +6101,18 @@ L_stm_s_takeabort:
6101 6101
6102 return 1; 6102 return 1;
6103 } 6103 }
6104 case 0x6c: 6104 case 0x6c:
6105 if ((instr & 0xf03f0) == 0xf0070) { //uxtb16 6105 if ((instr & 0xf03f0) == 0xf0070) { //uxtb16
6106 u8 src1 = BITS(0, 3); 6106 u8 rm_idx = BITS(0, 3);
6107 u8 tar = BITS(12, 15); 6107 u8 rd_idx = BITS(12, 15);
6108 u32 base = state->Reg[src1]; 6108 u32 rm_val = state->Reg[rm_idx];
6109 u32 shamt = BITS(9,10)* 8; 6109 u32 rotation = BITS(10, 11) * 8;
6110 u32 in = ((base << (32 - shamt)) | (base >> shamt)); 6110 u32 in = ((rm_val << (32 - rotation)) | (rm_val >> rotation));
6111 state->Reg[tar] = in & 0x00FF00FF; 6111 state->Reg[rd_idx] = in & 0x00FF00FF;
6112 return 1; 6112 return 1;
6113 } else 6113 } else
6114 printf ("Unhandled v6 insn: uxtab16\n"); 6114 printf ("Unhandled v6 insn: uxtab16\n");
6115 break; 6115 break;
6116 case 0x6e: { 6116 case 0x6e: {
6117 ARMword Rm; 6117 ARMword Rm;
6118 int ror = -1; 6118 int ror = -1;
diff --git a/src/core/hle/service/am_app.cpp b/src/core/hle/service/am_app.cpp
new file mode 100644
index 000000000..05c34832b
--- /dev/null
+++ b/src/core/hle/service/am_app.cpp
@@ -0,0 +1,23 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#include "common/log.h"
6#include "core/hle/hle.h"
7#include "core/hle/service/am_app.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace AM_APP
11
12namespace AM_APP {
13
14const Interface::FunctionInfo FunctionTable[] = {
15};
16////////////////////////////////////////////////////////////////////////////////////////////////////
17// Interface class
18
19Interface::Interface() {
20 Register(FunctionTable, ARRAY_SIZE(FunctionTable));
21}
22
23} // namespace
diff --git a/src/core/hle/service/am_app.h b/src/core/hle/service/am_app.h
new file mode 100644
index 000000000..86a5f5b74
--- /dev/null
+++ b/src/core/hle/service/am_app.h
@@ -0,0 +1,27 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace AM_APP
11
12namespace AM_APP {
13
14class Interface : public Service::Interface {
15public:
16 Interface();
17
18 /**
19 * Gets the string port name used by CTROS for the service
20 * @return Port name of service
21 */
22 std::string GetPortName() const override {
23 return "am:app";
24 }
25};
26
27} // namespace
diff --git a/src/core/hle/service/cecd_u.cpp b/src/core/hle/service/cecd_u.cpp
new file mode 100644
index 000000000..d72f1da3f
--- /dev/null
+++ b/src/core/hle/service/cecd_u.cpp
@@ -0,0 +1,23 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#include "common/log.h"
6#include "core/hle/hle.h"
7#include "core/hle/service/cecd_u.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace CECD_U
11
12namespace CECD_U {
13
14const Interface::FunctionInfo FunctionTable[] = {
15};
16////////////////////////////////////////////////////////////////////////////////////////////////////
17// Interface class
18
19Interface::Interface() {
20 Register(FunctionTable, ARRAY_SIZE(FunctionTable));
21}
22
23} // namespace
diff --git a/src/core/hle/service/cecd_u.h b/src/core/hle/service/cecd_u.h
new file mode 100644
index 000000000..969e1ed1b
--- /dev/null
+++ b/src/core/hle/service/cecd_u.h
@@ -0,0 +1,27 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace CECD_U
11
12namespace CECD_U {
13
14class Interface : public Service::Interface {
15public:
16 Interface();
17
18 /**
19 * Gets the string port name used by CTROS for the service
20 * @return Port name of service
21 */
22 std::string GetPortName() const override {
23 return "cecd:u";
24 }
25};
26
27} // namespace
diff --git a/src/core/hle/service/ldr_ro.cpp b/src/core/hle/service/ldr_ro.cpp
new file mode 100644
index 000000000..91b1a6fc5
--- /dev/null
+++ b/src/core/hle/service/ldr_ro.cpp
@@ -0,0 +1,28 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#include "common/log.h"
6#include "core/hle/hle.h"
7#include "core/hle/service/ldr_ro.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace LDR_RO
11
12namespace LDR_RO {
13
14const Interface::FunctionInfo FunctionTable[] = {
15 {0x000100C2, nullptr, "Initialize"},
16 {0x00020082, nullptr, "CRR_Load"},
17 {0x00030042, nullptr, "CRR_Unload"},
18 {0x000402C2, nullptr, "CRO_LoadAndFix"},
19 {0x000500C2, nullptr, "CRO_ApplyRelocationPatchesAndLink"}
20};
21////////////////////////////////////////////////////////////////////////////////////////////////////
22// Interface class
23
24Interface::Interface() {
25 Register(FunctionTable, ARRAY_SIZE(FunctionTable));
26}
27
28} // namespace
diff --git a/src/core/hle/service/ldr_ro.h b/src/core/hle/service/ldr_ro.h
new file mode 100644
index 000000000..32d7c29cf
--- /dev/null
+++ b/src/core/hle/service/ldr_ro.h
@@ -0,0 +1,27 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace LDR_RO
11
12namespace LDR_RO {
13
14class Interface : public Service::Interface {
15public:
16 Interface();
17
18 /**
19 * Gets the string port name used by CTROS for the service
20 * @return Port name of service
21 */
22 std::string GetPortName() const override {
23 return "ldr:ro";
24 }
25};
26
27} // namespace
diff --git a/src/core/hle/service/nim_aoc.cpp b/src/core/hle/service/nim_aoc.cpp
new file mode 100644
index 000000000..04c1e0cf3
--- /dev/null
+++ b/src/core/hle/service/nim_aoc.cpp
@@ -0,0 +1,31 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#include "common/log.h"
6#include "core/hle/hle.h"
7#include "core/hle/service/nim_aoc.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace NIM_AOC
11
12namespace NIM_AOC {
13
14const Interface::FunctionInfo FunctionTable[] = {
15 {0x00030042, nullptr, "SetApplicationId"},
16 {0x00040042, nullptr, "SetTin"},
17 {0x000902D0, nullptr, "ListContentSetsEx"},
18 {0x00180000, nullptr, "GetBalance"},
19 {0x001D0000, nullptr, "GetCustomerSupportCode"},
20 {0x00210000, nullptr, "Initialize"},
21 {0x00240282, nullptr, "CalculateContentsRequiredSize"},
22 {0x00250000, nullptr, "RefreshServerTime"},
23};
24////////////////////////////////////////////////////////////////////////////////////////////////////
25// Interface class
26
27Interface::Interface() {
28 Register(FunctionTable, ARRAY_SIZE(FunctionTable));
29}
30
31} // namespace
diff --git a/src/core/hle/service/nim_aoc.h b/src/core/hle/service/nim_aoc.h
new file mode 100644
index 000000000..2cc673118
--- /dev/null
+++ b/src/core/hle/service/nim_aoc.h
@@ -0,0 +1,27 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2+
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9////////////////////////////////////////////////////////////////////////////////////////////////////
10// Namespace NIM_AOC
11
12namespace NIM_AOC {
13
14class Interface : public Service::Interface {
15public:
16 Interface();
17
18 /**
19 * Gets the string port name used by CTROS for the service
20 * @return Port name of service
21 */
22 std::string GetPortName() const override {
23 return "nim:aoc";
24 }
25};
26
27} // namespace
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 037211e73..2230045e3 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -7,9 +7,11 @@
7 7
8#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
9#include "core/hle/service/ac_u.h" 9#include "core/hle/service/ac_u.h"
10#include "core/hle/service/am_app.h"
10#include "core/hle/service/am_net.h" 11#include "core/hle/service/am_net.h"
11#include "core/hle/service/apt_u.h" 12#include "core/hle/service/apt_u.h"
12#include "core/hle/service/boss_u.h" 13#include "core/hle/service/boss_u.h"
14#include "core/hle/service/cecd_u.h"
13#include "core/hle/service/cfg_i.h" 15#include "core/hle/service/cfg_i.h"
14#include "core/hle/service/cfg_u.h" 16#include "core/hle/service/cfg_u.h"
15#include "core/hle/service/csnd_snd.h" 17#include "core/hle/service/csnd_snd.h"
@@ -21,7 +23,9 @@
21#include "core/hle/service/hid_user.h" 23#include "core/hle/service/hid_user.h"
22#include "core/hle/service/ir_rst.h" 24#include "core/hle/service/ir_rst.h"
23#include "core/hle/service/ir_u.h" 25#include "core/hle/service/ir_u.h"
26#include "core/hle/service/ldr_ro.h"
24#include "core/hle/service/mic_u.h" 27#include "core/hle/service/mic_u.h"
28#include "core/hle/service/nim_aoc.h"
25#include "core/hle/service/ndm_u.h" 29#include "core/hle/service/ndm_u.h"
26#include "core/hle/service/nwm_uds.h" 30#include "core/hle/service/nwm_uds.h"
27#include "core/hle/service/pm_app.h" 31#include "core/hle/service/pm_app.h"
@@ -84,9 +88,11 @@ void Init() {
84 88
85 g_manager->AddService(new SRV::Interface); 89 g_manager->AddService(new SRV::Interface);
86 g_manager->AddService(new AC_U::Interface); 90 g_manager->AddService(new AC_U::Interface);
91 g_manager->AddService(new AM_APP::Interface);
87 g_manager->AddService(new AM_NET::Interface); 92 g_manager->AddService(new AM_NET::Interface);
88 g_manager->AddService(new APT_U::Interface); 93 g_manager->AddService(new APT_U::Interface);
89 g_manager->AddService(new BOSS_U::Interface); 94 g_manager->AddService(new BOSS_U::Interface);
95 g_manager->AddService(new CECD_U::Interface);
90 g_manager->AddService(new CFG_I::Interface); 96 g_manager->AddService(new CFG_I::Interface);
91 g_manager->AddService(new CFG_U::Interface); 97 g_manager->AddService(new CFG_U::Interface);
92 g_manager->AddService(new CSND_SND::Interface); 98 g_manager->AddService(new CSND_SND::Interface);
@@ -98,7 +104,9 @@ void Init() {
98 g_manager->AddService(new HID_User::Interface); 104 g_manager->AddService(new HID_User::Interface);
99 g_manager->AddService(new IR_RST::Interface); 105 g_manager->AddService(new IR_RST::Interface);
100 g_manager->AddService(new IR_U::Interface); 106 g_manager->AddService(new IR_U::Interface);
107 g_manager->AddService(new LDR_RO::Interface);
101 g_manager->AddService(new MIC_U::Interface); 108 g_manager->AddService(new MIC_U::Interface);
109 g_manager->AddService(new NIM_AOC::Interface);
102 g_manager->AddService(new NDM_U::Interface); 110 g_manager->AddService(new NDM_U::Interface);
103 g_manager->AddService(new NWM_UDS::Interface); 111 g_manager->AddService(new NWM_UDS::Interface);
104 g_manager->AddService(new PM_APP::Interface); 112 g_manager->AddService(new PM_APP::Interface);