mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-06 22:25:41 +12:00
Bare minimum createAddressArbiter HLE
This commit is contained in:
parent
cd168bca56
commit
e0204a1eff
7 changed files with 56 additions and 7 deletions
|
@ -43,9 +43,11 @@ else()
|
||||||
message(FATAL_ERROR "THIS IS NOT x64 WAIT FOR THE KVM IMPLEMENTATION")
|
message(FATAL_ERROR "THIS IS NOT x64 WAIT FOR THE KVM IMPLEMENTATION")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SOURCE_FILES src/main.cpp src/emulator.cpp src/core/CPU/cpu_dynarmic.cpp src/core/memory.cpp src/core/elf.cpp)
|
set(SOURCE_FILES src/main.cpp src/emulator.cpp src/core/CPU/cpu_dynarmic.cpp src/core/memory.cpp src/core/elf.cpp
|
||||||
|
src/core/kernel.cpp
|
||||||
|
)
|
||||||
set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/opengl.hpp include/termcolor.hpp
|
set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/opengl.hpp include/termcolor.hpp
|
||||||
include/cpu.hpp include/cpu_dynarmic.hpp include/memory.hpp
|
include/cpu.hpp include/cpu_dynarmic.hpp include/memory.hpp include/kernel.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp
|
set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp
|
||||||
|
|
|
@ -3,12 +3,14 @@
|
||||||
#include "dynarmic/interface/A32/a32.h"
|
#include "dynarmic/interface/A32/a32.h"
|
||||||
#include "dynarmic/interface/A32/config.h"
|
#include "dynarmic/interface/A32/config.h"
|
||||||
#include "helpers.hpp"
|
#include "helpers.hpp"
|
||||||
|
#include "kernel.hpp"
|
||||||
#include "memory.hpp"
|
#include "memory.hpp"
|
||||||
|
|
||||||
class MyEnvironment final : public Dynarmic::A32::UserCallbacks {
|
class MyEnvironment final : public Dynarmic::A32::UserCallbacks {
|
||||||
public:
|
public:
|
||||||
u64 ticks_left = 0;
|
u64 ticks_left = 0;
|
||||||
Memory& mem;
|
Memory& mem;
|
||||||
|
Kernel& kernel;
|
||||||
|
|
||||||
u8 MemoryRead8(u32 vaddr) override {
|
u8 MemoryRead8(u32 vaddr) override {
|
||||||
return mem.read8(vaddr);
|
return mem.read8(vaddr);
|
||||||
|
@ -49,7 +51,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallSVC(u32 swi) override {
|
void CallSVC(u32 swi) override {
|
||||||
Helpers::panic("Called SVC %d", swi);
|
kernel.serviceSVC(swi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override {
|
void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override {
|
||||||
|
@ -68,7 +70,7 @@ public:
|
||||||
return ticks_left;
|
return ticks_left;
|
||||||
}
|
}
|
||||||
|
|
||||||
MyEnvironment(Memory& mem) : mem(mem) {}
|
MyEnvironment(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPU {
|
class CPU {
|
||||||
|
@ -77,7 +79,7 @@ class CPU {
|
||||||
Memory& mem;
|
Memory& mem;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPU(Memory& mem);
|
CPU(Memory& mem, Kernel& kernel);
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
void setReg(int index, u32 value) {
|
void setReg(int index, u32 value) {
|
||||||
|
|
|
@ -11,13 +11,15 @@
|
||||||
class Emulator {
|
class Emulator {
|
||||||
CPU cpu;
|
CPU cpu;
|
||||||
Memory memory;
|
Memory memory;
|
||||||
|
Kernel kernel;
|
||||||
|
|
||||||
sf::RenderWindow window;
|
sf::RenderWindow window;
|
||||||
static constexpr u32 width = 400;
|
static constexpr u32 width = 400;
|
||||||
static constexpr u32 height = 240 * 2; // * 2 because 2 screens
|
static constexpr u32 height = 240 * 2; // * 2 because 2 screens
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Emulator() : window(sf::VideoMode(width, height), "Alber", sf::Style::Default, sf::ContextSettings(0, 0, 0, 4, 3)),
|
Emulator() : window(sf::VideoMode(width, height), "Alber", sf::Style::Default, sf::ContextSettings(0, 0, 0, 4, 3)),
|
||||||
cpu(memory) {
|
kernel(cpu.regs(), memory), cpu(memory, kernel) {
|
||||||
reset();
|
reset();
|
||||||
window.setActive(true);
|
window.setActive(true);
|
||||||
}
|
}
|
||||||
|
|
22
include/kernel.hpp
Normal file
22
include/kernel.hpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#pragma once
|
||||||
|
#include <array>
|
||||||
|
#include "helpers.hpp"
|
||||||
|
#include "memory.hpp"
|
||||||
|
|
||||||
|
namespace SVCResult {
|
||||||
|
enum : u32 {
|
||||||
|
Success = 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
class Kernel {
|
||||||
|
std::array<u32, 16>& regs;
|
||||||
|
Memory& mem;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Kernel(std::array<u32, 16>& regs, Memory& mem) : regs(regs), mem(mem) {}
|
||||||
|
void serviceSVC(u32 svc);
|
||||||
|
void reset();
|
||||||
|
|
||||||
|
void createAddressArbiter();
|
||||||
|
};
|
|
@ -1,7 +1,7 @@
|
||||||
#ifdef CPU_DYNARMIC
|
#ifdef CPU_DYNARMIC
|
||||||
#include "cpu_dynarmic.hpp"
|
#include "cpu_dynarmic.hpp"
|
||||||
|
|
||||||
CPU::CPU(Memory& mem) : mem(mem), env(mem) {}
|
CPU::CPU(Memory& mem, Kernel& kernel) : mem(mem), env(mem, kernel) {}
|
||||||
|
|
||||||
void CPU::reset() {
|
void CPU::reset() {
|
||||||
// ARM mode, all flags disabled, interrupts and aborts all enabled, user mode
|
// ARM mode, all flags disabled, interrupts and aborts all enabled, user mode
|
||||||
|
|
20
src/core/kernel.cpp
Normal file
20
src/core/kernel.cpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#include "kernel.hpp"
|
||||||
|
|
||||||
|
void Kernel::serviceSVC(u32 svc) {
|
||||||
|
switch (svc) {
|
||||||
|
case 0x21: createAddressArbiter(); break;
|
||||||
|
default: Helpers::panic("Unimplemented svc: %x", svc); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Kernel::reset() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Result CreateAddressArbiter(Handle* arbiter)
|
||||||
|
// in: r0 -> Pointer to Handle object
|
||||||
|
// out: r0 -> result
|
||||||
|
void Kernel::createAddressArbiter() {
|
||||||
|
printf("Stubbed call to CreateAddressArbiter. Handle address: %08X\n", regs[0]);
|
||||||
|
regs[0] = SVCResult::Success;
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
void Emulator::reset() {
|
void Emulator::reset() {
|
||||||
cpu.reset();
|
cpu.reset();
|
||||||
|
kernel.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Emulator::step() {}
|
void Emulator::step() {}
|
||||||
|
|
Loading…
Add table
Reference in a new issue