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