Skip to content

Commit

Permalink
Added GBA support
Browse files Browse the repository at this point in the history
  • Loading branch information
SourMesen committed Mar 30, 2024
1 parent ec9c892 commit 13acb3f
Show file tree
Hide file tree
Showing 247 changed files with 17,379 additions and 804 deletions.
52 changes: 52 additions & 0 deletions Core/Core.vcxproj
Expand Up @@ -31,6 +31,35 @@
<ClInclude Include="Gameboy\Carts\GbMbc3Rtc.h" />
<ClInclude Include="Gameboy\Carts\GbMbc6.h" />
<ClInclude Include="Gameboy\Carts\GbMbc7.h" />
<ClInclude Include="GBA\APU\GbaApu.h" />
<ClInclude Include="GBA\APU\GbaApuFifo.h" />
<ClInclude Include="GBA\APU\GbaEnvelope.h" />
<ClInclude Include="GBA\APU\GbaNoiseChannel.h" />
<ClInclude Include="GBA\APU\GbaSquareChannel.h" />
<ClInclude Include="GBA\APU\GbaWaveChannel.h" />
<ClInclude Include="GBA\Cart\GbaEeprom.h" />
<ClInclude Include="GBA\Cart\GbaFlash.h" />
<ClInclude Include="GBA\Debugger\DummyGbaCpu.h" />
<ClInclude Include="GBA\Debugger\GbaAssembler.h" />
<ClInclude Include="GBA\Debugger\GbaCodeDataLogger.h" />
<ClInclude Include="GBA\Debugger\GbaDebugger.h" />
<ClInclude Include="GBA\Debugger\GbaDisUtils.h" />
<ClInclude Include="GBA\Debugger\GbaEventManager.h" />
<ClInclude Include="GBA\Debugger\GbaPpuTools.h" />
<ClInclude Include="GBA\Debugger\GbaTraceLogger.h" />
<ClInclude Include="GBA\Cart\GbaCart.h" />
<ClInclude Include="GBA\GbaConsole.h" />
<ClInclude Include="GBA\GbaControlManager.h" />
<ClInclude Include="GBA\GbaCpu.h" />
<ClInclude Include="GBA\GbaDefaultVideoFilter.h" />
<ClInclude Include="GBA\GbaDmaController.h" />
<ClInclude Include="GBA\GbaPpu.h" />
<ClInclude Include="GBA\GbaMemoryManager.h" />
<ClInclude Include="GBA\GbaRomPrefetch.h" />
<ClInclude Include="GBA\GbaSerial.h" />
<ClInclude Include="GBA\GbaTimer.h" />
<ClInclude Include="GBA\GbaTypes.h" />
<ClInclude Include="GBA\Input\GbaController.h" />
<ClInclude Include="NES\HdPacks\HdBuilderPpu.h" />
<ClInclude Include="NES\HdPacks\HdPackBuilder.h" />
<ClInclude Include="PCE\CdRom\PceCdSeekDelay.h" />
Expand All @@ -39,6 +68,7 @@
<ClInclude Include="NES\Mappers\Nintendo\FnsMmc1.h" />
<ClInclude Include="Shared\SaveStateCompatInfo.h" />
<ClInclude Include="Shared\Utilities\Emu2413Serializer.h" />
<ClInclude Include="Shared\Video\GenericNtscFilter.h" />
<ClInclude Include="Shared\Video\SoftwareRenderer.h" />
<ClInclude Include="SMS\Carts\SmsCodemasterCart.h" />
<ClInclude Include="SMS\Carts\SmsNemesisCart.h" />
Expand Down Expand Up @@ -720,6 +750,7 @@
<ClCompile Include="Debugger\DisassemblySearch.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.Cx4.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.Gameboy.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.Gba.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.Gsu.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.NecDsp.cpp" />
<ClCompile Include="Debugger\ExpressionEvaluator.Nes.cpp" />
Expand All @@ -733,6 +764,27 @@
<ClCompile Include="Gameboy\Debugger\GbPpuTools.cpp" />
<ClCompile Include="Gameboy\GbControlManager.cpp" />
<ClCompile Include="Gameboy\GbDefaultVideoFilter.cpp" />
<ClCompile Include="GBA\APU\GbaApu.cpp" />
<ClCompile Include="GBA\APU\GbaNoiseChannel.cpp" />
<ClCompile Include="GBA\APU\GbaSquareChannel.cpp" />
<ClCompile Include="GBA\APU\GbaWaveChannel.cpp" />
<ClCompile Include="GBA\Cart\GbaCart.cpp" />
<ClCompile Include="GBA\Debugger\DummyGbaCpu.cpp" />
<ClCompile Include="GBA\Debugger\GbaDebugger.cpp" />
<ClCompile Include="GBA\Debugger\GbaDisUtils.cpp" />
<ClCompile Include="GBA\Debugger\GbaEventManager.cpp" />
<ClCompile Include="GBA\Debugger\GbaPpuTools.cpp" />
<ClCompile Include="GBA\Debugger\GbaTraceLogger.cpp" />
<ClCompile Include="GBA\GbaConsole.cpp" />
<ClCompile Include="GBA\GbaControlManager.cpp" />
<ClCompile Include="GBA\GbaCpu.Arm.cpp" />
<ClCompile Include="GBA\GbaCpu.cpp" />
<ClCompile Include="GBA\GbaCpu.Thumb.cpp" />
<ClCompile Include="GBA\GbaDefaultVideoFilter.cpp" />
<ClCompile Include="GBA\GbaDmaController.cpp" />
<ClCompile Include="GBA\GbaMemoryManager.cpp" />
<ClCompile Include="GBA\GbaPpu.cpp" />
<ClCompile Include="GBA\GbaTimer.cpp" />
<ClCompile Include="NES\BaseNesPpu.cpp" />
<ClCompile Include="NES\BisqwitNtscFilter.cpp" />
<ClCompile Include="NES\Debugger\DummyNesCpu.cpp" />
Expand Down
171 changes: 171 additions & 0 deletions Core/Core.vcxproj.filters
Expand Up @@ -2715,6 +2715,96 @@
<ClInclude Include="Gameboy\APU\GbEnvelope.h">
<Filter>Gameboy\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaConsole.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\DummyGbaCpu.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaDebugger.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaDisUtils.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaEventManager.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaPpuTools.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaTraceLogger.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaCpu.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaTypes.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaMemoryManager.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaControlManager.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaDefaultVideoFilter.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaPpu.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaAssembler.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaDmaController.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\Input\GbaController.h">
<Filter>GBA\Input</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaTimer.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaApu.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\Cart\GbaCart.h">
<Filter>GBA\Cart</Filter>
</ClInclude>
<ClInclude Include="GBA\Cart\GbaEeprom.h">
<Filter>GBA\Cart</Filter>
</ClInclude>
<ClInclude Include="GBA\Cart\GbaFlash.h">
<Filter>GBA\Cart</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaSerial.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaNoiseChannel.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaSquareChannel.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaWaveChannel.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaEnvelope.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\APU\GbaApuFifo.h">
<Filter>GBA\APU</Filter>
</ClInclude>
<ClInclude Include="GBA\GbaRomPrefetch.h">
<Filter>GBA</Filter>
</ClInclude>
<ClInclude Include="Shared\Video\GenericNtscFilter.h">
<Filter>Shared\Video</Filter>
</ClInclude>
<ClInclude Include="GBA\Debugger\GbaCodeDataLogger.h">
<Filter>GBA\Debugger</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Shared\Video\RotateFilter.cpp">
Expand Down Expand Up @@ -2918,6 +3008,72 @@
<ClCompile Include="Gameboy\APU\GbWaveChannel.cpp">
<Filter>Gameboy\APU</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaConsole.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\DummyGbaCpu.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\GbaDebugger.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\GbaDisUtils.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\GbaEventManager.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\GbaPpuTools.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\Debugger\GbaTraceLogger.cpp">
<Filter>GBA\Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaCpu.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaDefaultVideoFilter.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="Debugger\ExpressionEvaluator.Gba.cpp">
<Filter>Debugger</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaCpu.Arm.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaCpu.Thumb.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaPpu.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaDmaController.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaControlManager.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaTimer.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\APU\GbaApu.cpp">
<Filter>GBA\APU</Filter>
</ClCompile>
<ClCompile Include="GBA\Cart\GbaCart.cpp">
<Filter>GBA\Cart</Filter>
</ClCompile>
<ClCompile Include="GBA\GbaMemoryManager.cpp">
<Filter>GBA</Filter>
</ClCompile>
<ClCompile Include="GBA\APU\GbaNoiseChannel.cpp">
<Filter>GBA\APU</Filter>
</ClCompile>
<ClCompile Include="GBA\APU\GbaSquareChannel.cpp">
<Filter>GBA\APU</Filter>
</ClCompile>
<ClCompile Include="GBA\APU\GbaWaveChannel.cpp">
<Filter>GBA\APU</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Filter Include="PCE">
Expand Down Expand Up @@ -3013,5 +3169,20 @@
<Filter Include="Gameboy\APU">
<UniqueIdentifier>{2ce2d3b6-58f7-4b68-bf2b-1236e5bbfaed}</UniqueIdentifier>
</Filter>
<Filter Include="GBA">
<UniqueIdentifier>{108b719f-c802-46f9-b986-8c4ec5fa435b}</UniqueIdentifier>
</Filter>
<Filter Include="GBA\Debugger">
<UniqueIdentifier>{7d3eff06-05c9-4bc9-9e23-ae2a82e7d257}</UniqueIdentifier>
</Filter>
<Filter Include="GBA\Input">
<UniqueIdentifier>{a17e421b-59fb-4e80-9f21-ae1bb819812c}</UniqueIdentifier>
</Filter>
<Filter Include="GBA\APU">
<UniqueIdentifier>{6dc9cf91-5871-4abe-8c4f-610f9d6f3eb0}</UniqueIdentifier>
</Filter>
<Filter Include="GBA\Cart">
<UniqueIdentifier>{4cc96bee-c354-4a9b-9947-85959ccc072f}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>
5 changes: 4 additions & 1 deletion Core/Debugger/BaseEventManager.cpp
Expand Up @@ -105,7 +105,10 @@ void BaseEventManager::GetDisplayBuffer(uint32_t* buffer, uint32_t bufferSize)

void BaseEventManager::DrawLine(uint32_t* buffer, FrameInfo size, uint32_t color, uint32_t row)
{
uint32_t offset = row * 2 * size.Width;
int32_t x = 0;
int32_t y = row - GetScanlineOffset();
ConvertScanlineCycleToRowColumn(x, y);
uint32_t offset = y * size.Width;
for(int i = 0; i < (int)size.Width; i++) {
buffer[offset + i] = color;
buffer[offset + size.Width + i] = color;
Expand Down
24 changes: 16 additions & 8 deletions Core/Debugger/BaseTraceLogger.h
Expand Up @@ -103,7 +103,10 @@ enum class RowDataType
TRB,

FlagsA,
FlagsB
FlagsB,

CPSR,
Mode,
};

struct TraceLogPpuState
Expand Down Expand Up @@ -186,26 +189,31 @@ class BaseTraceLogger : public ITraceLogger
void WriteEffectiveAddress(DisassemblyInfo& info, RowPart& rowPart, void* cpuState, string& output, MemoryType cpuMemoryType, CpuType cpuType)
{
EffectiveAddressInfo effectiveAddress = info.GetEffectiveAddress(_debugger, cpuState, cpuType);
if(effectiveAddress.ShowAddress && effectiveAddress.Address.Address >= 0) {
MemoryType effectiveMemType = effectiveAddress.Address.Type == MemoryType::None ? cpuMemoryType : effectiveAddress.Address.Type;
if(effectiveAddress.ShowAddress && effectiveAddress.Address >= 0) {
MemoryType effectiveMemType = effectiveAddress.Type == MemoryType::None ? cpuMemoryType : effectiveAddress.Type;
if(_options.UseLabels) {
AddressInfo addr { effectiveAddress.Address.Address, effectiveMemType };
AddressInfo addr { (int32_t)effectiveAddress.Address, effectiveMemType };
string label = _labelManager->GetLabel(addr);
if(!label.empty()) {
WriteStringValue(output, " [" + label + "]", rowPart);
if(label.size() > 2 && label[label.size() - 1] == '0' && label[label.size() - 2] == '+') {
//If label ends in +0, strip the +0 (write the original label name instead)
WriteStringValue(output, " [" + label.substr(0, label.size() - 2) + "]", rowPart);
} else {
WriteStringValue(output, " [" + label + "]", rowPart);
}
return;
}
}

WriteStringValue(output, " [$" + DebugUtilities::AddressToHex(cpuType, effectiveAddress.Address.Address) + "]", rowPart);
WriteStringValue(output, " [$" + DebugUtilities::AddressToHex(cpuType, effectiveAddress.Address) + "]", rowPart);
}
}

void WriteMemoryValue(DisassemblyInfo& info, RowPart& rowPart, void* cpuState, string& output, MemoryType memType, CpuType cpuType)
{
EffectiveAddressInfo effectiveAddress = info.GetEffectiveAddress(_debugger, cpuState, cpuType);
if(effectiveAddress.Address.Address >= 0 && effectiveAddress.ValueSize > 0) {
MemoryType effectiveMemType = effectiveAddress.Address.Type == MemoryType::None ? memType : effectiveAddress.Address.Type;
if(effectiveAddress.Address >= 0 && effectiveAddress.ValueSize > 0) {
MemoryType effectiveMemType = effectiveAddress.Type == MemoryType::None ? memType : effectiveAddress.Type;
uint16_t value = info.GetMemoryValue(effectiveAddress, _memoryDumper, effectiveMemType);
if(rowPart.DisplayInHex) {
output += "= $";
Expand Down
19 changes: 17 additions & 2 deletions Core/Debugger/Breakpoint.cpp
Expand Up @@ -3,12 +3,23 @@
#include "Debugger/DebugTypes.h"
#include "Debugger/DebugUtilities.h"

template<uint8_t accessWidth>
bool Breakpoint::Matches(MemoryOperationInfo& operation, AddressInfo &info)
{
if(operation.MemType == _memoryType && DebugUtilities::IsRelativeMemory(_memoryType)) {
return (int32_t)operation.Address >= _startAddr && (int32_t)operation.Address <= _endAddr;
for(int i = 0; i < accessWidth; i++) {
if((int32_t)operation.Address + i >= _startAddr && (int32_t)operation.Address + i <= _endAddr) {
return true;
}
}
return false;
} else if(_memoryType == info.Type) {
return info.Address >= _startAddr && info.Address <= _endAddr;
for(int i = 0; i < accessWidth; i++) {
if(info.Address + i >= _startAddr && info.Address + i <= _endAddr) {
return true;
}
}
return false;
}

return false;
Expand Down Expand Up @@ -61,3 +72,7 @@ bool Breakpoint::IsAllowedForOpType(MemoryOperationType opType)
}
return true;
}

template bool Breakpoint::Matches<1>(MemoryOperationInfo& operation, AddressInfo& info);
template bool Breakpoint::Matches<2>(MemoryOperationInfo& operation, AddressInfo& info);
template bool Breakpoint::Matches<4>(MemoryOperationInfo& operation, AddressInfo& info);
3 changes: 1 addition & 2 deletions Core/Debugger/Breakpoint.h
Expand Up @@ -6,14 +6,13 @@ enum class MemoryType;
struct AddressInfo;
enum class BreakpointType;
enum class BreakpointTypeFlags;
enum class BreakpointCategory;
enum class MemoryOperationType;
struct MemoryOperationInfo;

class Breakpoint
{
public:
bool Matches(MemoryOperationInfo &opInfo, AddressInfo &info);
template<uint8_t accessWidth = 1> bool Matches(MemoryOperationInfo &opInfo, AddressInfo &info);
bool HasBreakpointType(BreakpointType type);
string GetCondition();
bool HasCondition();
Expand Down

0 comments on commit 13acb3f

Please sign in to comment.