41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
//
|
|
// Created by Palindromic Bread Loaf on 7/21/25.
|
|
//
|
|
|
|
#include "bus.h"
|
|
|
|
// Bus class
|
|
uint8_t Bus::Read(uint32_t address) {
|
|
// TODO: Map properly based on SNES memory map
|
|
if (address < 0x2000) {
|
|
return wram[address];
|
|
} else if (address >= 0x7E0000 && address < 0x800000) {
|
|
return wram[address - 0x7E0000];
|
|
} else if (address >= 0x800000 && cartridge) {
|
|
// ROM access
|
|
uint32_t rom_addr = address & 0x7FFFFF;
|
|
if (rom_addr < cartridge->size()) {
|
|
return (*cartridge)[rom_addr];
|
|
}
|
|
}
|
|
return 0x00; // Open bus
|
|
}
|
|
|
|
void Bus::Write(uint32_t address, uint8_t value) {
|
|
if (address < 0x2000) {
|
|
wram[address] = value;
|
|
} else if (address >= 0x7E0000 && address < 0x800000) {
|
|
wram[address - 0x7E0000] = value;
|
|
}
|
|
// TODO: Add PPU/APU register writes here
|
|
}
|
|
|
|
uint16_t Bus::Read16(uint32_t address) {
|
|
return Read(address) | (Read(address + 1) << 8);
|
|
}
|
|
|
|
void Bus::Write16(uint32_t address, uint16_t value) {
|
|
Write(address, value & 0xFF);
|
|
Write(address + 1, (value >> 8) & 0xFF);
|
|
}
|