mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-02-23 22:52:34 +01:00
byuu says: This WIP removes nall/input.hpp entirely, and implements the new universal cheat format for FC/SFC/GB/GBC/SGB. GBA is going to be tricky since there's some consternation around byte/word/dword overrides. It's also not immediately obvious to me how to implement the code search in logarithmic time, due to the optional compare value. Lastly, the cheat values inside cheats.bml seem to be broken for the SFC. Likely there's a bug somewhere in the conversion process. Obviously I'll have to fix that before v094. I received no feedback on the universal cheat format. If nobody adds anything before v094, then I don't want to hear any complaining about the formatting :P
63 lines
920 B
C++
63 lines
920 B
C++
#include <gb/gb.hpp>
|
|
|
|
#define MEMORY_CPP
|
|
namespace GameBoy {
|
|
|
|
Unmapped unmapped;
|
|
Bus bus;
|
|
|
|
uint8_t& Memory::operator[](unsigned addr) {
|
|
return data[addr];
|
|
}
|
|
|
|
void Memory::allocate(unsigned size_) {
|
|
free();
|
|
size = size_;
|
|
data = new uint8_t[size]();
|
|
}
|
|
|
|
void Memory::copy(const uint8_t* data_, unsigned size_) {
|
|
free();
|
|
size = size_;
|
|
data = new uint8_t[size];
|
|
memcpy(data, data_, size);
|
|
}
|
|
|
|
void Memory::free() {
|
|
if(data) {
|
|
delete[] data;
|
|
data = 0;
|
|
}
|
|
}
|
|
|
|
Memory::Memory() {
|
|
data = 0;
|
|
size = 0;
|
|
}
|
|
|
|
Memory::~Memory() {
|
|
free();
|
|
}
|
|
|
|
//
|
|
|
|
uint8 Bus::read(uint16 addr) {
|
|
uint8 data = mmio[addr]->mmio_read(addr);
|
|
|
|
if(cheat.enable()) {
|
|
if(auto result = cheat.find(addr, data)) return result();
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
void Bus::write(uint16 addr, uint8 data) {
|
|
mmio[addr]->mmio_write(addr, data);
|
|
}
|
|
|
|
void Bus::power() {
|
|
for(unsigned n = 0x0000; n <= 0xffff; n++) mmio[n] = &unmapped;
|
|
}
|
|
|
|
}
|