diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-11-28 17:16:41 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-28 23:16:41 +0100 |
commit | e973236203292637eb7bd009a4cfbd6fd785181f (patch) | |
tree | 4c348a9927bfa6f8f37cc943291174a1096434b3 /src/DSi_NDMA.cpp | |
parent | c84cb174628c5a2e8e6cc0179e16de3eab47864a (diff) |
Refactor `NDS` and `DSi` to be objects (#1893)
* First crack at refactoring NDS and DSi into objects
- Remove all global/`static` variables in `NDS` and related classes
- Rely more on virtual dispatch when we need to pick methods at runtime
- Pass `NDS&` or `DSi&` to its constituent components where necessary
- Introduce some headers or move some definitions to break `#include` cycles
* Refactor the frontend to accommodate the core's changes
* Move up `SchedList`'s declaration
- Move it to before the components are initialized so the `map`s inside are initialized
- Fields in C++ are initialized in the order they're declared
* Fix a crash when allocating memory
* Fix JIT-free builds
* Fix GDB-free builds
* Fix Linux builds
- Explicitly qualify some member types in NDS, since they share the same name as their classes
* Remove an unnecessary template argument
- This was causing the build to fail on macOS
* Fix ARM and Android builds
* Rename `Constants.h` to `MemConstants.h`
* Add `NDS::IsRunning()`
* Use an `#include` guard instead of `#pragma once`
Diffstat (limited to 'src/DSi_NDMA.cpp')
-rw-r--r-- | src/DSi_NDMA.cpp | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/src/DSi_NDMA.cpp b/src/DSi_NDMA.cpp index 4f248ea..fe1f0ba 100644 --- a/src/DSi_NDMA.cpp +++ b/src/DSi_NDMA.cpp @@ -28,7 +28,7 @@ namespace melonDS using Platform::Log; using Platform::LogLevel; -DSi_NDMA::DSi_NDMA(u32 cpu, u32 num, melonDS::GPU& gpu) : GPU(gpu) +DSi_NDMA::DSi_NDMA(u32 cpu, u32 num, melonDS::DSi& dsi) : DSi(dsi), CPU(cpu), Num(num) { CPU = cpu; Num = num; @@ -127,7 +127,7 @@ void DSi_NDMA::WriteCnt(u32 val) if ((StartMode & 0x1F) == 0x10) Start(); else if (StartMode == 0x0A) - GPU.GPU3D.CheckFIFODMA(); + DSi.GPU.GPU3D.CheckFIFODMA(); // TODO: unsupported start modes: // * timers (00-03) @@ -181,13 +181,13 @@ void DSi_NDMA::Start() //if (SubblockTimer & 0xFFFF) // printf("TODO! NDMA SUBBLOCK TIMER: %08X\n", SubblockTimer); - if (NDS::DMAsRunning(CPU)) + if (DSi.DMAsRunning(CPU)) Running = 1; else Running = 2; InProgress = true; - NDS::StopCPU(CPU, 1<<(Num+4)); + DSi.StopCPU(CPU, 1<<(Num+4)); } void DSi_NDMA::Run() @@ -199,7 +199,7 @@ void DSi_NDMA::Run() void DSi_NDMA::Run9() { - if (NDS::ARM9Timestamp >= NDS::ARM9Target) return; + if (DSi.ARM9Timestamp >= DSi.ARM9Target) return; Executing = true; @@ -214,11 +214,11 @@ void DSi_NDMA::Run9() if ((CurSrcAddr >> 24) == 0x02 && (CurDstAddr >> 24) == 0x02) { - unitcycles = NDS::ARM9MemTimings[CurSrcAddr >> 14][2] + NDS::ARM9MemTimings[CurDstAddr >> 14][2]; + unitcycles = DSi.ARM9MemTimings[CurSrcAddr >> 14][2] + DSi.ARM9MemTimings[CurDstAddr >> 14][2]; } else { - unitcycles = NDS::ARM9MemTimings[CurSrcAddr >> 14][3] + NDS::ARM9MemTimings[CurDstAddr >> 14][3]; + unitcycles = DSi.ARM9MemTimings[CurSrcAddr >> 14][3] + DSi.ARM9MemTimings[CurDstAddr >> 14][3]; if ((CurSrcAddr >> 24) == (CurDstAddr >> 24)) unitcycles++; else if ((CurSrcAddr >> 24) == 0x02) @@ -234,12 +234,12 @@ void DSi_NDMA::Run9() while (IterCount > 0 && !Stall) { - NDS::ARM9Timestamp += (unitcycles << NDS::ARM9ClockShift); + DSi.ARM9Timestamp += (unitcycles << DSi.ARM9ClockShift); if (dofill) - DSi::ARM9Write32(CurDstAddr, FillData); + DSi.ARM9Write32(CurDstAddr, FillData); else - DSi::ARM9Write32(CurDstAddr, DSi::ARM9Read32(CurSrcAddr)); + DSi.ARM9Write32(CurDstAddr, DSi.ARM9Read32(CurSrcAddr)); CurSrcAddr += SrcAddrInc<<2; CurDstAddr += DstAddrInc<<2; @@ -247,7 +247,7 @@ void DSi_NDMA::Run9() RemCount--; TotalRemCount--; - if (NDS::ARM9Timestamp >= NDS::ARM9Target) break; + if (DSi.ARM9Timestamp >= DSi.ARM9Target) break; } Executing = false; @@ -258,10 +258,10 @@ void DSi_NDMA::Run9() if (IterCount == 0) { Running = 0; - NDS::ResumeCPU(0, 1<<(Num+4)); + DSi.ResumeCPU(0, 1<<(Num+4)); if (StartMode == 0x0A) - GPU.GPU3D.CheckFIFODMA(); + DSi.GPU.GPU3D.CheckFIFODMA(); } return; @@ -270,25 +270,25 @@ void DSi_NDMA::Run9() if ((StartMode & 0x1F) == 0x10) // CHECKME { Cnt &= ~(1<<31); - if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num); + if (Cnt & (1<<30)) DSi.SetIRQ(0, IRQ_DSi_NDMA0 + Num); } else if (!(Cnt & (1<<29))) { if (TotalRemCount == 0) { Cnt &= ~(1<<31); - if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num); + if (Cnt & (1<<30)) DSi.SetIRQ(0, IRQ_DSi_NDMA0 + Num); } } Running = 0; InProgress = false; - NDS::ResumeCPU(0, 1<<(Num+4)); + DSi.ResumeCPU(0, 1<<(Num+4)); } void DSi_NDMA::Run7() { - if (NDS::ARM7Timestamp >= NDS::ARM7Target) return; + if (DSi.ARM7Timestamp >= DSi.ARM7Target) return; Executing = true; @@ -303,11 +303,11 @@ void DSi_NDMA::Run7() if ((CurSrcAddr >> 24) == 0x02 && (CurDstAddr >> 24) == 0x02) { - unitcycles = NDS::ARM7MemTimings[CurSrcAddr >> 15][2] + NDS::ARM7MemTimings[CurDstAddr >> 15][2]; + unitcycles = DSi.ARM7MemTimings[CurSrcAddr >> 15][2] + DSi.ARM7MemTimings[CurDstAddr >> 15][2]; } else { - unitcycles = NDS::ARM7MemTimings[CurSrcAddr >> 15][3] + NDS::ARM7MemTimings[CurDstAddr >> 15][3]; + unitcycles = DSi.ARM7MemTimings[CurSrcAddr >> 15][3] + DSi.ARM7MemTimings[CurDstAddr >> 15][3]; if ((CurSrcAddr >> 23) == (CurDstAddr >> 23)) unitcycles++; else if ((CurSrcAddr >> 24) == 0x02) @@ -323,12 +323,12 @@ void DSi_NDMA::Run7() while (IterCount > 0 && !Stall) { - NDS::ARM7Timestamp += unitcycles; + DSi.ARM7Timestamp += unitcycles; if (dofill) - DSi::ARM7Write32(CurDstAddr, FillData); + DSi.ARM7Write32(CurDstAddr, FillData); else - DSi::ARM7Write32(CurDstAddr, DSi::ARM7Read32(CurSrcAddr)); + DSi.ARM7Write32(CurDstAddr, DSi.ARM7Read32(CurSrcAddr)); CurSrcAddr += SrcAddrInc<<2; CurDstAddr += DstAddrInc<<2; @@ -336,7 +336,7 @@ void DSi_NDMA::Run7() RemCount--; TotalRemCount--; - if (NDS::ARM7Timestamp >= NDS::ARM7Target) break; + if (DSi.ARM7Timestamp >= DSi.ARM7Target) break; } Executing = false; @@ -347,10 +347,10 @@ void DSi_NDMA::Run7() if (IterCount == 0) { Running = 0; - NDS::ResumeCPU(1, 1<<(Num+4)); + DSi.ResumeCPU(1, 1<<(Num+4)); - DSi::AES->CheckInputDMA(); - DSi::AES->CheckOutputDMA(); + DSi.AES.CheckInputDMA(); + DSi.AES.CheckOutputDMA(); } return; @@ -359,23 +359,23 @@ void DSi_NDMA::Run7() if ((StartMode & 0x1F) == 0x10) // CHECKME { Cnt &= ~(1<<31); - if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num); + if (Cnt & (1<<30)) DSi.SetIRQ(1, IRQ_DSi_NDMA0 + Num); } else if (!(Cnt & (1<<29))) { if (TotalRemCount == 0) { Cnt &= ~(1<<31); - if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num); + if (Cnt & (1<<30)) DSi.SetIRQ(1, IRQ_DSi_NDMA0 + Num); } } Running = 0; InProgress = false; - NDS::ResumeCPU(1, 1<<(Num+4)); + DSi.ResumeCPU(1, 1<<(Num+4)); - DSi::AES->CheckInputDMA(); - DSi::AES->CheckOutputDMA(); + DSi.AES.CheckInputDMA(); + DSi.AES.CheckOutputDMA(); } }
\ No newline at end of file |