Debugger: SA1 - Fixed display for BWRAM

This commit is contained in:
Sour 2019-12-08 11:54:19 -05:00
parent 4a7e6df39b
commit 234c494c3e
26 changed files with 60 additions and 52 deletions

View file

@ -36,9 +36,9 @@ public:
return Read(addr); return Read(addr);
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
_handler->PeekBlock(output); _handler->PeekBlock(addr, output);
} }
void Write(uint32_t addr, uint8_t value) override void Write(uint32_t addr, uint8_t value) override

View file

@ -445,7 +445,7 @@ uint8_t Cx4::Peek(uint32_t addr)
return 0; return 0;
} }
void Cx4::PeekBlock(uint8_t* output) void Cx4::PeekBlock(uint32_t addr, uint8_t* output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -122,7 +122,7 @@ public:
void Serialize(Serializer &s) override; void Serialize(Serializer &s) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t* output) override; void PeekBlock(uint32_t addr, uint8_t* output) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;
uint8_t* DebugGetDataRam(); uint8_t* DebugGetDataRam();

View file

@ -583,7 +583,7 @@ uint8_t Gsu::Peek(uint32_t addr)
return 0; return 0;
} }
void Gsu::PeekBlock(uint8_t *output) void Gsu::PeekBlock(uint32_t addr, uint8_t *output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -159,7 +159,7 @@ public:
uint8_t Read(uint32_t addr) override; uint8_t Read(uint32_t addr) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t *output) override; void PeekBlock(uint32_t addr, uint8_t *output) override;
void Write(uint32_t addr, uint8_t value) override; void Write(uint32_t addr, uint8_t value) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;

View file

@ -32,7 +32,7 @@ public:
return Read(addr); return Read(addr);
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
for(int i = 0; i < 0x1000; i++) { for(int i = 0; i < 0x1000; i++) {
output[i] = Read(i); output[i] = Read(i);

View file

@ -43,7 +43,7 @@ public:
return Read(addr); return Read(addr);
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
for(int i = 0; i < 0x1000; i++) { for(int i = 0; i < 0x1000; i++) {
output[i] = Read(i); output[i] = Read(i);

View file

@ -10,7 +10,7 @@ protected:
public: public:
virtual uint8_t Read(uint32_t addr) = 0; virtual uint8_t Read(uint32_t addr) = 0;
virtual uint8_t Peek(uint32_t addr) = 0; virtual uint8_t Peek(uint32_t addr) = 0;
virtual void PeekBlock(uint8_t *output) = 0; virtual void PeekBlock(uint32_t addr, uint8_t *output) = 0;
virtual void Write(uint32_t addr, uint8_t value) = 0; virtual void Write(uint32_t addr, uint8_t value) = 0;
__forceinline SnesMemoryType GetMemoryType() __forceinline SnesMemoryType GetMemoryType()

View file

@ -78,7 +78,7 @@ void MemoryMappings::PeekBlock(uint32_t addr, uint8_t *dest)
{ {
IMemoryHandler* handler = GetHandler(addr); IMemoryHandler* handler = GetHandler(addr);
if(handler) { if(handler) {
handler->PeekBlock(dest); handler->PeekBlock(addr & ~0xFFF, dest);
} else { } else {
memset(dest, 0, 0x1000); memset(dest, 0, 0x1000);
} }

View file

@ -223,7 +223,7 @@ uint8_t NecDsp::Peek(uint32_t addr)
return 0; return 0;
} }
void NecDsp::PeekBlock(uint8_t *output) void NecDsp::PeekBlock(uint32_t addr, uint8_t *output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -63,7 +63,7 @@ public:
void Write(uint32_t addr, uint8_t value) override; void Write(uint32_t addr, uint8_t value) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t * output) override; void PeekBlock(uint32_t addr, uint8_t * output) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;
uint8_t* DebugGetProgramRom(); uint8_t* DebugGetProgramRom();

View file

@ -87,7 +87,7 @@ uint8_t Obc1::Peek(uint32_t addr)
return 0; return 0;
} }
void Obc1::PeekBlock(uint8_t *output) void Obc1::PeekBlock(uint32_t addr, uint8_t *output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -28,6 +28,6 @@ public:
void Serialize(Serializer & s) override; void Serialize(Serializer & s) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t * output) override; void PeekBlock(uint32_t addr, uint8_t * output) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;
}; };

View file

@ -34,7 +34,7 @@ public:
return _ram[addr & _mask]; return _ram[addr & _mask];
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
if(_mask != 0xFFF) { if(_mask != 0xFFF) {
for(int i = 0; i < 0x1000; i++) { for(int i = 0; i < 0x1000; i++) {

View file

@ -45,7 +45,7 @@ public:
} }
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
//Avoid side effects for now //Avoid side effects for now
memset(output, 0, 0x1000); memset(output, 0, 0x1000);

View file

@ -48,7 +48,7 @@ uint8_t RegisterHandlerB::Peek(uint32_t addr)
return 0; return 0;
} }
void RegisterHandlerB::PeekBlock(uint8_t *output) void RegisterHandlerB::PeekBlock(uint32_t addr, uint8_t *output)
{ {
//Avoid side effects for now //Avoid side effects for now
memset(output, 0, 0x1000); memset(output, 0, 0x1000);

View file

@ -28,7 +28,7 @@ public:
uint8_t Read(uint32_t addr) override; uint8_t Read(uint32_t addr) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t *output) override; void PeekBlock(uint32_t addr, uint8_t *output) override;
void Write(uint32_t addr, uint8_t value) override; void Write(uint32_t addr, uint8_t value) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;

View file

@ -467,11 +467,9 @@ uint8_t Sa1::Peek(uint32_t addr)
return 0; return 0;
} }
void Sa1::PeekBlock(uint8_t *output) void Sa1::PeekBlock(uint32_t addr, uint8_t *output)
{ {
for(int i = 0; i < 0x1000; i++) { memset(output, 0, 0x1000);
output[i] = Peek(i);
}
} }
void Sa1::Write(uint32_t addr, uint8_t value) void Sa1::Write(uint32_t addr, uint8_t value)

View file

@ -74,7 +74,7 @@ public:
void Serialize(Serializer & s) override; void Serialize(Serializer & s) override;
uint8_t Read(uint32_t addr) override; uint8_t Read(uint32_t addr) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t * output) override; void PeekBlock(uint32_t addr, uint8_t *output) override;
void Write(uint32_t addr, uint8_t value) override; void Write(uint32_t addr, uint8_t value) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;

View file

@ -20,15 +20,7 @@ private:
return ((_state->Sa1BwBank * 0x2000) | (addr & 0x1FFF)); return ((_state->Sa1BwBank * 0x2000) | (addr & 0x1FFF));
} }
public: __forceinline uint8_t InternalRead(uint32_t addr)
Sa1BwRamHandler(uint8_t* bwRam, uint32_t bwRamSize, Sa1State* state)
{
_ram = bwRam;
_mask = bwRamSize - 1;
_state = state;
}
uint8_t Read(uint32_t addr) override
{ {
if((addr & 0x600000) == 0x600000) { if((addr & 0x600000) == 0x600000) {
return ReadBitmapMode(addr - 0x600000); return ReadBitmapMode(addr - 0x600000);
@ -44,15 +36,28 @@ public:
} }
} }
uint8_t Peek(uint32_t addr) override public:
Sa1BwRamHandler(uint8_t* bwRam, uint32_t bwRamSize, Sa1State* state)
{ {
return Read(addr); _ram = bwRam;
_mask = bwRamSize - 1;
_state = state;
} }
void PeekBlock(uint8_t *output) override uint8_t Read(uint32_t addr) override
{
return InternalRead(addr);
}
uint8_t Peek(uint32_t addr) override
{
return InternalRead(addr);
}
void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
for(int i = 0; i < 0x1000; i++) { for(int i = 0; i < 0x1000; i++) {
output[i] = Read(i); output[i] = InternalRead(addr + i);
} }
} }
@ -96,9 +101,9 @@ public:
{ {
AddressInfo info; AddressInfo info;
if((addr & 0x600000) == 0x600000) { if((addr & 0x600000) == 0x600000) {
info.Address = addr - 0x600000; info.Address = ((addr - 0x600000) >> (_state->BwRam2BppMode ? 2 : 1)) & _mask;
} else { } else {
addr = GetBwRamAddress(addr); addr = GetBwRamAddress(addr) & _mask;
} }
info.Type = SnesMemoryType::SaveRam; info.Type = SnesMemoryType::SaveRam;
return info; return info;

View file

@ -8,6 +8,15 @@ class Sa1IRamHandler : public IMemoryHandler
private: private:
uint8_t * _ram; uint8_t * _ram;
__forceinline uint8_t InternalRead(uint32_t addr)
{
if(addr & 0x800) {
return 0;
} else {
return _ram[addr & 0x7FF];
}
}
public: public:
Sa1IRamHandler(uint8_t *ram) Sa1IRamHandler(uint8_t *ram)
{ {
@ -17,22 +26,18 @@ public:
uint8_t Read(uint32_t addr) override uint8_t Read(uint32_t addr) override
{ {
if(addr & 0x800) { return InternalRead(addr);
return 0;
} else {
return _ram[addr & 0x7FF];
}
} }
uint8_t Peek(uint32_t addr) override uint8_t Peek(uint32_t addr) override
{ {
return Read(addr); return InternalRead(addr);
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
for(int i = 0; i < 0x1000; i++) { for(int i = 0; i < 0x1000; i++) {
output[i] = Read(i); output[i] = InternalRead(i);
} }
} }

View file

@ -58,9 +58,9 @@ public:
return Read(addr); return Read(addr);
} }
void PeekBlock(uint8_t *output) override void PeekBlock(uint32_t addr, uint8_t *output) override
{ {
_handler->PeekBlock(output); _handler->PeekBlock(addr, output);
} }
void Write(uint32_t addr, uint8_t value) override void Write(uint32_t addr, uint8_t value) override

View file

@ -109,7 +109,7 @@ uint8_t Sdd1::Peek(uint32_t addr)
return 0; return 0;
} }
void Sdd1::PeekBlock(uint8_t* output) void Sdd1::PeekBlock(uint32_t addr, uint8_t* output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -19,7 +19,7 @@ public:
void Serialize(Serializer &s) override; void Serialize(Serializer &s) override;
uint8_t Read(uint32_t addr) override; uint8_t Read(uint32_t addr) override;
uint8_t Peek(uint32_t addr) override; uint8_t Peek(uint32_t addr) override;
void PeekBlock(uint8_t* output) override; void PeekBlock(uint32_t addr, uint8_t* output) override;
void Write(uint32_t addr, uint8_t value) override; void Write(uint32_t addr, uint8_t value) override;
AddressInfo GetAbsoluteAddress(uint32_t address) override; AddressInfo GetAbsoluteAddress(uint32_t address) override;
void Reset() override; void Reset() override;

View file

@ -68,7 +68,7 @@ uint8_t Sdd1Mmc::Peek(uint32_t addr)
return 0; return 0;
} }
void Sdd1Mmc::PeekBlock(uint8_t *output) void Sdd1Mmc::PeekBlock(uint32_t addr, uint8_t *output)
{ {
memset(output, 0, 0x1000); memset(output, 0, 0x1000);
} }

View file

@ -25,7 +25,7 @@ public:
// Inherited via IMemoryHandler // Inherited via IMemoryHandler
virtual uint8_t Read(uint32_t addr) override; virtual uint8_t Read(uint32_t addr) override;
virtual uint8_t Peek(uint32_t addr) override; virtual uint8_t Peek(uint32_t addr) override;
virtual void PeekBlock(uint8_t * output) override; virtual void PeekBlock(uint32_t addr, uint8_t * output) override;
virtual void Write(uint32_t addr, uint8_t value) override; virtual void Write(uint32_t addr, uint8_t value) override;
virtual AddressInfo GetAbsoluteAddress(uint32_t address) override; virtual AddressInfo GetAbsoluteAddress(uint32_t address) override;