Code optimization

This commit is contained in:
Sour 2019-02-21 17:17:55 -05:00
parent a71de2a7bf
commit b2af226467

View file

@ -101,6 +101,7 @@ private:
uint64_t _masterClock; uint64_t _masterClock;
uint64_t _lastMasterClock; uint64_t _lastMasterClock;
uint8_t _masterClockTable[0x10000];
public: public:
void Initialize(shared_ptr<Console> console) void Initialize(shared_ptr<Console> console)
@ -149,6 +150,8 @@ public:
} }
_cart->RegisterHandlers(*this); _cart->RegisterHandlers(*this);
GenerateMasterClockTable();
} }
~MemoryManager() ~MemoryManager()
@ -171,41 +174,47 @@ public:
} }
} }
void IncrementMasterClock(uint32_t addr) void GenerateMasterClockTable()
{ {
//This is incredibly inaccurate //This is incredibly inaccurate
uint8_t bank = (addr & 0xFF0000) >> 8; for(int i = 0; i < 0x10000; i++) {
if(bank >= 0x40 && bank <= 0x7F) { uint8_t bank = (i & 0xFF00) >> 8;
//Slow if(bank >= 0x40 && bank <= 0x7F) {
_masterClock += 8;
} else if(bank >= 0xCF) {
//Slow or fast (depending on register)
//Use slow
_masterClock += 8;
} else {
uint8_t page = (addr & 0xFF00) >> 8;
if(page <= 0x1F) {
//Slow //Slow
_masterClock += 6; _masterClockTable[i] = 8;
} else if(page >= 0x20 && page <= 0x3F) { } else if(bank >= 0xCF) {
//Fast
_masterClock += 6;
} else if(page == 0x40 || page == 0x41) {
//extra slow
_masterClock += 12;
} else if(page >= 0x42 && page <= 0x5F) {
//Fast
_masterClock += 6;
} else if(page >= 0x60 && page <= 0x7F) {
//Slow
_masterClock += 8;
} else {
//Slow or fast (depending on register) //Slow or fast (depending on register)
//Use slow //Use slow
_masterClock += 8; _masterClockTable[i] = 8;
} else {
uint8_t page = (i & 0xFF);
if(page <= 0x1F) {
//Slow
_masterClockTable[i] = 6;
} else if(page >= 0x20 && page <= 0x3F) {
//Fast
_masterClockTable[i] = 6;
} else if(page == 0x40 || page == 0x41) {
//extra slow
_masterClockTable[i] = 12;
} else if(page >= 0x42 && page <= 0x5F) {
//Fast
_masterClockTable[i] = 6;
} else if(page >= 0x60 && page <= 0x7F) {
//Slow
_masterClockTable[i] = 8;
} else {
//Slow or fast (depending on register)
//Use slow
_masterClockTable[i] = 8;
}
} }
} }
}
void IncrementMasterClock(uint32_t addr)
{
_masterClock += _masterClockTable[addr >> 8];
while(_lastMasterClock < _masterClock - 3) { while(_lastMasterClock < _masterClock - 3) {
_ppu->Exec(); _ppu->Exec();
_lastMasterClock += 4; _lastMasterClock += 4;