Adding OAM buffer
This commit is contained in:
parent
5a459e582d
commit
116a195cae
@ -22,7 +22,13 @@ add_executable(nes
|
||||
src/Window.cpp
|
||||
src/Window.h
|
||||
src/Shifter.cpp
|
||||
src/Shifter.h src/Logger.cpp src/Logger.h src/Controller.cpp src/Controller.h src/SdlKeyboardController.cpp src/SdlKeyboardController.h)
|
||||
src/Shifter.h
|
||||
src/Logger.cpp
|
||||
src/Logger.h
|
||||
src/Controller.cpp
|
||||
src/Controller.h
|
||||
src/SdlKeyboardController.cpp
|
||||
src/SdlKeyboardController.h)
|
||||
|
||||
find_package(SDL2 CONFIG REQUIRED)
|
||||
find_package(fmt REQUIRED)
|
||||
|
||||
11
src/Bus.cpp
11
src/Bus.cpp
@ -17,7 +17,6 @@ namespace nes {
|
||||
return _ram[address & 0x07FF];
|
||||
}
|
||||
else if(address >= 0x2000 && address < 0x4000) {
|
||||
//std::cout << "PPU read at address: " << address << std::endl;
|
||||
return _ppu->read(address & 0x0007);
|
||||
}
|
||||
else if(address >= 0x8000) {
|
||||
@ -26,6 +25,10 @@ namespace nes {
|
||||
else if(address == 0x4016) {
|
||||
return _controller1->read();
|
||||
}
|
||||
else if(address == 0x4017) {
|
||||
// Controller 2
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -40,9 +43,15 @@ namespace nes {
|
||||
else if(address >= 0x8000) {
|
||||
std::cout << "Cartridge write at address: " << address << std::endl;
|
||||
}
|
||||
else if(address == 0x4014) {
|
||||
// DMA
|
||||
}
|
||||
else if(address == 0x4016) {
|
||||
_controller1->poll();
|
||||
}
|
||||
else if(address == 0x4017) {
|
||||
// Controller 2
|
||||
}
|
||||
}
|
||||
|
||||
void Bus::connect(std::shared_ptr<Cartridge> cartridge) {
|
||||
|
||||
10
src/Ppu.cpp
10
src/Ppu.cpp
@ -12,6 +12,7 @@ namespace nes {
|
||||
_nameTable = std::make_unique<uint8_t[]>(1024);
|
||||
_paletteTable = std::make_unique<uint8_t[]>(32);
|
||||
_palette = std::make_unique<Pixel[]>(64);
|
||||
_oamData = std::make_unique<SpriteInfo[]>(64);
|
||||
|
||||
_palette[0x00] = Pixel(84, 84, 84);
|
||||
_palette[0x01] = Pixel(0, 30, 116);
|
||||
@ -176,6 +177,9 @@ namespace nes {
|
||||
}
|
||||
_vRamAddress.value += _control.incrementMode ? 32 : 1;
|
||||
break;
|
||||
case OamData:
|
||||
value = reinterpret_cast<uint8_t*>(_oamData.get())[_oamAddress];
|
||||
break;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
@ -214,6 +218,12 @@ namespace nes {
|
||||
internalWrite(_vRamAddress.value, value);
|
||||
_vRamAddress.value += _control.incrementMode ? 32 : 1;
|
||||
break;
|
||||
case OamAddress:
|
||||
_oamAddress = value;
|
||||
break;
|
||||
case OamData:
|
||||
reinterpret_cast<uint8_t*>(_oamData.get())[_oamAddress] = value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
10
src/Ppu.h
10
src/Ppu.h
@ -97,6 +97,13 @@ namespace nes {
|
||||
uint8_t msb;
|
||||
};
|
||||
|
||||
struct SpriteInfo {
|
||||
uint8_t y;
|
||||
uint8_t id;
|
||||
uint8_t attr;
|
||||
uint8_t x;
|
||||
};
|
||||
|
||||
public:
|
||||
Ppu();
|
||||
bool tick();
|
||||
@ -142,6 +149,9 @@ namespace nes {
|
||||
std::unique_ptr<Pixel[]> _palette;
|
||||
std::unique_ptr<uint8_t[]> _paletteTable;
|
||||
|
||||
std::unique_ptr<SpriteInfo[]> _oamData;
|
||||
uint8_t _oamAddress;
|
||||
|
||||
private:
|
||||
std::unique_ptr<Pixel[]> _frameBuffer;
|
||||
std::shared_ptr<Cartridge> _cartridge;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user