optimized display update region

This commit is contained in:
2025-03-14 02:50:01 -04:00
parent af39b2ab07
commit 4f7083d7c7
4 changed files with 47 additions and 10 deletions

View File

@@ -87,9 +87,7 @@ void Interpreter::tick() {
case 0x0000: // 0NNN - call machine language routine
switch(inst) {
case 0x00E0: // clear display
for(auto &scanline : *mrDisplay.mpFramebuffer) {
scanline.reset();
}
mrDisplay.clear();
break;
case 0x00EE: // return from subroutine
mvSpecialReg[SR_PC] = mCallStack.top();
@@ -292,7 +290,7 @@ void Interpreter::executeDraw(uint8_t x, uint8_t y, uint8_t n) {
// we draw one scanline per sprite row in high-res mode, but twice in low-res mode
for(int j = 0; j < (mIsHighResMode ? 1 : 2); j++) {
Scanline &targetScanline = mrDisplay.mpFramebuffer->at(y + i * (mIsHighResMode ? 1 : 2) + j);
Scanline &targetScanline = mrDisplay.getModifyableScanline(y + i * (mIsHighResMode ? 1 : 2) + j);
if((targetScanline & spriteScanline) != 0) {
collisionCount += 1;
}