mirror of
https://github.com/rodamaral/lsnes.git
synced 2025-04-02 10:42:15 -04:00
76 lines
2.2 KiB
C++
Executable file
76 lines
2.2 KiB
C++
Executable file
//Memory
|
|
|
|
unsigned Memory::size() const { return 0; }
|
|
|
|
//StaticRAM
|
|
|
|
uint8* StaticRAM::data() { return data_; }
|
|
unsigned StaticRAM::size() const { return size_; }
|
|
|
|
uint8 StaticRAM::read(unsigned addr) { return data_[addr]; }
|
|
void StaticRAM::write(unsigned addr, uint8 n) { data_[addr] = n; }
|
|
uint8& StaticRAM::operator[](unsigned addr) { return data_[addr]; }
|
|
const uint8& StaticRAM::operator[](unsigned addr) const { return data_[addr]; }
|
|
|
|
StaticRAM::StaticRAM(unsigned n) : size_(n) { data_ = new uint8[size_]; }
|
|
StaticRAM::~StaticRAM() { delete[] data_; }
|
|
|
|
//MappedRAM
|
|
|
|
void MappedRAM::reset() {
|
|
if(data_) {
|
|
delete[] data_;
|
|
data_ = 0;
|
|
}
|
|
size_ = 0;
|
|
write_protect_ = false;
|
|
}
|
|
|
|
void MappedRAM::map(uint8 *source, unsigned length) {
|
|
reset();
|
|
data_ = source;
|
|
size_ = data_ ? length : 0;
|
|
}
|
|
|
|
void MappedRAM::copy(const uint8 *data, unsigned size) {
|
|
if(!data_) {
|
|
size_ = (size & ~255) + ((bool)(size & 255) << 8);
|
|
data_ = new uint8[size_]();
|
|
}
|
|
memcpy(data_, data, min(size_, size));
|
|
}
|
|
|
|
void MappedRAM::write_protect(bool status) { write_protect_ = status; }
|
|
uint8* MappedRAM::data() { return data_; }
|
|
unsigned MappedRAM::size() const { return size_; }
|
|
|
|
uint8 MappedRAM::read(unsigned addr) { return data_[addr]; }
|
|
void MappedRAM::write(unsigned addr, uint8 n) { if(!write_protect_) data_[addr] = n; }
|
|
const uint8& MappedRAM::operator[](unsigned addr) const { return data_[addr]; }
|
|
MappedRAM::MappedRAM() : data_(0), size_(0), write_protect_(false) {}
|
|
|
|
//Bus
|
|
|
|
uint8 Bus::read(unsigned addr, bool exec) {
|
|
uint8 emask = exec ? 0x24 : 0x09;
|
|
uint8 val;
|
|
if(__builtin_expect(cheat.override[addr], 0))
|
|
val = cheat.read(addr);
|
|
else
|
|
val = reader[lookup[addr]](target[addr]);
|
|
if(__builtin_expect((u_debugflags | debugflags[addr]) & emask, 0)) {
|
|
unsigned daddr = target[addr];
|
|
uint8 mclass = classmap[addr];
|
|
debug_read(mclass, daddr, addr, val, exec);
|
|
}
|
|
return val;
|
|
}
|
|
|
|
void Bus::write(unsigned addr, uint8 data) {
|
|
if(__builtin_expect((u_debugflags | debugflags[addr]) & 0x12, 0)) {
|
|
unsigned daddr = target[addr];
|
|
uint8 mclass = classmap[addr];
|
|
debug_write(mclass, daddr, addr, data);
|
|
}
|
|
return writer[lookup[addr]](target[addr], data);
|
|
}
|