diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index ab10b8a34..e7f6bf8c2 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -67,8 +67,17 @@ public: | |||
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { | 69 | void ExceptionRaised(u64 pc, Dynarmic::A64::Exception exception) override { |
| 70 | ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")", | 70 | switch (exception) { |
| 71 | static_cast<size_t>(exception), pc); | 71 | case Dynarmic::A64::Exception::WaitForInterrupt: |
| 72 | case Dynarmic::A64::Exception::WaitForEvent: | ||
| 73 | case Dynarmic::A64::Exception::SendEvent: | ||
| 74 | case Dynarmic::A64::Exception::SendEventLocal: | ||
| 75 | case Dynarmic::A64::Exception::Yield: | ||
| 76 | return; | ||
| 77 | default: | ||
| 78 | ASSERT_MSG(false, "ExceptionRaised(exception = %zu, pc = %" PRIx64 ")", | ||
| 79 | static_cast<size_t>(exception), pc); | ||
| 80 | } | ||
| 72 | } | 81 | } |
| 73 | 82 | ||
| 74 | void CallSVC(u32 swi) override { | 83 | void CallSVC(u32 swi) override { |
| @@ -85,11 +94,15 @@ public: | |||
| 85 | u64 GetTicksRemaining() override { | 94 | u64 GetTicksRemaining() override { |
| 86 | return ticks_remaining; | 95 | return ticks_remaining; |
| 87 | } | 96 | } |
| 97 | u64 GetCNTPCT() override { | ||
| 98 | return CoreTiming::GetTicks(); | ||
| 99 | } | ||
| 88 | 100 | ||
| 89 | ARM_Dynarmic& parent; | 101 | ARM_Dynarmic& parent; |
| 90 | size_t ticks_remaining = 0; | 102 | size_t ticks_remaining = 0; |
| 91 | size_t num_interpreted_instructions = 0; | 103 | size_t num_interpreted_instructions = 0; |
| 92 | u64 tpidrro_el0 = 0; | 104 | u64 tpidrro_el0 = 0; |
| 105 | u64 tpidr_el0 = 0; | ||
| 93 | }; | 106 | }; |
| 94 | 107 | ||
| 95 | std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_Callbacks>& cb) { | 108 | std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_Callbacks>& cb) { |
| @@ -98,10 +111,13 @@ std::unique_ptr<Dynarmic::A64::Jit> MakeJit(const std::unique_ptr<ARM_Dynarmic_C | |||
| 98 | Dynarmic::A64::UserConfig config; | 111 | Dynarmic::A64::UserConfig config; |
| 99 | config.callbacks = cb.get(); | 112 | config.callbacks = cb.get(); |
| 100 | config.tpidrro_el0 = &cb->tpidrro_el0; | 113 | config.tpidrro_el0 = &cb->tpidrro_el0; |
| 114 | config.tpidr_el0 = &cb->tpidr_el0; | ||
| 101 | config.dczid_el0 = 4; | 115 | config.dczid_el0 = 4; |
| 116 | config.ctr_el0 = 0x8444c004; | ||
| 102 | config.page_table = reinterpret_cast<void**>(page_table); | 117 | config.page_table = reinterpret_cast<void**>(page_table); |
| 103 | config.page_table_address_space_bits = Memory::ADDRESS_SPACE_BITS; | 118 | config.page_table_address_space_bits = Memory::ADDRESS_SPACE_BITS; |
| 104 | config.silently_mirror_page_table = false; | 119 | config.silently_mirror_page_table = false; |
| 120 | |||
| 105 | return std::make_unique<Dynarmic::A64::Jit>(config); | 121 | return std::make_unique<Dynarmic::A64::Jit>(config); |
| 106 | } | 122 | } |
| 107 | 123 | ||