Refactor Parallel RDP wrapper
This commit is contained in:
@@ -6,15 +6,12 @@ namespace n64 {
|
||||
struct BaseCPU {
|
||||
virtual ~BaseCPU() = default;
|
||||
virtual int Step() = 0;
|
||||
virtual void Reset() {
|
||||
regs.Reset();
|
||||
mem.Reset();
|
||||
}
|
||||
virtual void Reset() = 0;
|
||||
virtual bool ShouldServiceInterrupt() = 0;
|
||||
virtual void CheckCompareInterrupt() = 0;
|
||||
virtual std::vector<u8> Serialize() = 0;
|
||||
virtual void Deserialize(const std::vector<u8>&) = 0;
|
||||
Registers regs;
|
||||
Mem mem{regs};
|
||||
virtual Mem& GetMem() = 0;
|
||||
virtual Registers& GetRegs() = 0;
|
||||
};
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
#include <Core.hpp>
|
||||
|
||||
namespace n64 {
|
||||
Interpreter::Interpreter(ParallelRDP& parallel) : mem(regs, parallel) { }
|
||||
|
||||
bool Interpreter::ShouldServiceInterrupt() {
|
||||
bool interrupts_pending = (regs.cop0.status.im & regs.cop0.cause.interruptPending) != 0;
|
||||
|
||||
@@ -5,11 +5,25 @@
|
||||
|
||||
namespace n64 {
|
||||
struct Core;
|
||||
struct Interpreter : BaseCPU {
|
||||
Interpreter() = default;
|
||||
struct Interpreter final : BaseCPU {
|
||||
explicit Interpreter(ParallelRDP&);
|
||||
~Interpreter() override = default;
|
||||
int Step() override;
|
||||
void Reset() override {
|
||||
regs.Reset();
|
||||
mem.Reset();
|
||||
}
|
||||
|
||||
Mem& GetMem() override {
|
||||
return mem;
|
||||
}
|
||||
|
||||
Registers& GetRegs() override {
|
||||
return regs;
|
||||
}
|
||||
private:
|
||||
Registers regs;
|
||||
Mem mem;
|
||||
u64 cop2Latch{};
|
||||
friend struct Cop1;
|
||||
#define check_address_error(mask, vaddr) (((!regs.cop0.is64BitAddressing) && (s32)(vaddr) != (vaddr)) || (((vaddr) & (mask)) != 0))
|
||||
|
||||
@@ -8,12 +8,14 @@
|
||||
#include <core/RSP.hpp>
|
||||
#include <core/RDP.hpp>
|
||||
|
||||
class ParallelRDP;
|
||||
|
||||
namespace n64 {
|
||||
struct Mem;
|
||||
struct Registers;
|
||||
|
||||
struct MMIO {
|
||||
MMIO(Mem& mem, Registers& regs) : vi(mem, regs), mi(regs), ai(mem, regs), pi(mem, regs), si(mem, regs), rsp(mem, regs), rdp(mem, regs) {}
|
||||
MMIO(Mem& mem, Registers& regs, ParallelRDP& parallel) : vi(mem, regs), mi(regs), ai(mem, regs), pi(mem, regs), si(mem, regs), rsp(mem, regs), rdp(mem, regs, parallel) {}
|
||||
void Reset();
|
||||
|
||||
VI vi;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <cassert>
|
||||
|
||||
namespace n64 {
|
||||
Mem::Mem(Registers& regs) : flash(saveData), mmio(*this, regs) {
|
||||
Mem::Mem(Registers& regs, ParallelRDP& parallel) : flash(saveData), mmio(*this, regs, parallel) {
|
||||
memset(readPages, 0, PAGE_COUNT);
|
||||
memset(writePages, 0, PAGE_COUNT);
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ struct Flash {
|
||||
|
||||
struct Mem {
|
||||
~Mem() = default;
|
||||
Mem(Registers&);
|
||||
Mem(Registers&, ParallelRDP&);
|
||||
void Reset();
|
||||
void LoadSRAM(SaveType, fs::path);
|
||||
static std::vector<u8> OpenROM(const std::string&, size_t&);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <core/mmio/Interrupt.hpp>
|
||||
|
||||
namespace n64 {
|
||||
RDP::RDP(Mem& mem, Registers& regs) : mem(mem), regs(regs) {
|
||||
RDP::RDP(Mem& mem, Registers& regs, ParallelRDP& parallel) : mem(mem), regs(regs), parallel(parallel) {
|
||||
rdram.resize(RDRAM_SIZE);
|
||||
memset(cmd_buf, 0, 0x100000);
|
||||
dpc.status.raw = 0x80;
|
||||
@@ -177,7 +177,7 @@ void RDP::RunCommand() {
|
||||
}
|
||||
|
||||
if (cmd >= 8) {
|
||||
ParallelRdpEnqueueCommand(cmd_len, &cmd_buf[buf_index]);
|
||||
parallel.EnqueueCommand(cmd_len, &cmd_buf[buf_index]);
|
||||
}
|
||||
|
||||
if (cmd == 0x29) {
|
||||
@@ -199,7 +199,7 @@ void RDP::RunCommand() {
|
||||
}
|
||||
|
||||
void RDP::OnFullSync() {
|
||||
ParallelRdpOnFullSync();
|
||||
parallel.OnFullSync();
|
||||
|
||||
dpc.status.pipeBusy = false;
|
||||
dpc.status.startGclk = false;
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#include <common.hpp>
|
||||
#include <vector>
|
||||
|
||||
class ParallelRDP;
|
||||
|
||||
namespace n64 {
|
||||
|
||||
struct RSP;
|
||||
@@ -54,7 +56,7 @@ struct RDP {
|
||||
DPC dpc{};
|
||||
u32 cmd_buf[0xFFFFF]{};
|
||||
|
||||
RDP(Mem&, Registers&);
|
||||
RDP(Mem&, Registers&, ParallelRDP&);
|
||||
void Reset();
|
||||
|
||||
std::vector<u8> rdram{};
|
||||
@@ -82,5 +84,6 @@ struct RDP {
|
||||
private:
|
||||
Mem& mem;
|
||||
Registers& regs;
|
||||
ParallelRDP& parallel;
|
||||
};
|
||||
} // backend
|
||||
|
||||
Reference in New Issue
Block a user