2016-07-17 09:58:51 -04:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "MMC3.h"
|
|
|
|
|
|
|
|
class MMC3_182 : public MMC3
|
|
|
|
{
|
|
|
|
protected:
|
2016-12-17 23:14:47 -05:00
|
|
|
virtual void WriteRegister(uint16_t addr, uint8_t value) override
|
2016-07-17 09:58:51 -04:00
|
|
|
{
|
|
|
|
switch(addr & 0xE001) {
|
|
|
|
case 0x8001: MMC3::WriteRegister(0xA000, value); break;
|
|
|
|
case 0xA000: {
|
|
|
|
uint8_t data = (value & 0xF8);
|
|
|
|
switch(value & 0x07) {
|
|
|
|
case 0: data |= 0; break;
|
|
|
|
case 1: data |= 3; break;
|
|
|
|
case 2: data |= 1; break;
|
|
|
|
case 3: data |= 5; break;
|
|
|
|
case 4: data |= 6; break;
|
|
|
|
case 5: data |= 7; break;
|
|
|
|
case 6: data |= 2; break;
|
|
|
|
case 7: data |= 4; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
MMC3::WriteRegister(0x8000, data);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 0xC000: MMC3::WriteRegister(0x8001, value); break;
|
|
|
|
case 0xC001:
|
|
|
|
MMC3::WriteRegister(0xC000, value);
|
|
|
|
MMC3::WriteRegister(0xC001, value);
|
|
|
|
break;
|
2018-04-09 17:41:30 -04:00
|
|
|
case 0xE000: MMC3::WriteRegister(0xE000, value); break;
|
|
|
|
case 0xE001: MMC3::WriteRegister(0xE001, value); break;
|
2016-07-17 09:58:51 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|