GBA Hardware: Small e-Reader cleanup

This commit is contained in:
Vicki Pfau 2020-02-19 23:11:15 -08:00
parent 2823ee1e02
commit 1cf03b435a
2 changed files with 21 additions and 5 deletions

View File

@ -735,6 +735,14 @@ void GBAHardwareEReaderWriteFlash(struct GBACartridgeHardware* hw, uint32_t addr
case 0xFFB1:
_eReaderWriteControl1(hw, value);
break;
case 0xFFB2:
hw->eReaderRegisterLed &= 0xFF00;
hw->eReaderRegisterLed |= value;
break;
case 0xFFB3:
hw->eReaderRegisterLed &= 0x00FF;
hw->eReaderRegisterLed |= value << 8;
break;
default:
mLOG(GBA_HW, STUB, "Unimplemented e-Reader write to flash: %04X:%02X", address, value);
}
@ -742,6 +750,7 @@ void GBAHardwareEReaderWriteFlash(struct GBACartridgeHardware* hw, uint32_t addr
uint16_t GBAHardwareEReaderRead(struct GBACartridgeHardware* hw, uint32_t address) {
address &= 0x700FF;
uint16_t value;
switch (address >> 17) {
case 0:
return hw->eReaderRegisterUnk;
@ -751,7 +760,8 @@ uint16_t GBAHardwareEReaderRead(struct GBACartridgeHardware* hw, uint32_t addres
if (address > 0x40088) {
return 0;
}
return hw->eReaderData[(address & 0xFE) >> 1];
LOAD_16(value, address & 0xFE, hw->eReaderData);
return value;
}
mLOG(GBA_HW, STUB, "Unimplemented e-Reader read: %05X", address);
return 0;
@ -984,7 +994,9 @@ void _eReaderWriteControl1(struct GBACartridgeHardware* hw, uint8_t value) {
++hw->eReaderY;
if (hw->eReaderY == (hw->eReaderSerial[0x15] | (hw->eReaderSerial[0x14] << 8))) {
hw->eReaderY = 0;
hw->eReaderX += 36;
if (hw->eReaderX < 3400) {
hw->eReaderX += 225;
}
}
_eReaderReadData(hw);
}
@ -1019,13 +1031,14 @@ void _eReaderReadData(struct GBACartridgeHardware* hw) {
word |= origin[(x + 13) / 3] << 5;
word |= origin[(x + 14) / 3] << 6;
word |= origin[(x + 15) / 3] << 7;
hw->eReaderData[19 - i] = word;
STORE_16(word, (19 - i) << 1, hw->eReaderData);
}
}
}
hw->eReaderRegisterControl1 = EReaderControl1FillScanline(hw->eReaderRegisterControl1);
if (EReaderControl0IsLedEnable(hw->eReaderRegisterControl0)) {
GBARaiseIRQ(hw->p, IRQ_GAMEPAK, -2754);
uint16_t led = 2754; // TODO: Figure out why this breaks if using the LED register
GBARaiseIRQ(hw->p, IRQ_GAMEPAK, -led);
}
}

View File

@ -1125,7 +1125,10 @@ void Window::setupMenu(QMenuBar* menubar) {
#endif
m_actions.addAction(tr("Replace ROM..."), "replaceROM", this, &Window::replaceROM, "file");
m_actions.addAction(tr("Scan e-Reader dotcode..."), "scanCard", this, &Window::scanCard, "file");
#ifdef M_CORE_GBA
Action* scanCard = addGameAction(tr("Scan e-Reader dotcode..."), "scanCard", this, &Window::scanCard, "file");
m_platformActions.insert(PLATFORM_GBA, scanCard);
#endif
Action* romInfo = addGameAction(tr("ROM &info..."), "romInfo", openControllerTView<ROMInfo>(), "file");