NINTV-DS/arm9/source/emucore/ECS.cpp
2021-09-02 17:32:31 -04:00

52 lines
1.2 KiB
C++

#include <iostream>
#include "ECS.h"
ECS::ECS()
: Peripheral("Electronic Computer System", "ECS"),
keyboard(2),
ramBank(ECS_RAM_SIZE, 0x4000, 8),
uart(4, 0xE0, 8),
psg2(0x00F0, &keyboard, &keyboard),
bank0("ECS ROM #1", "ecs.bin", 0, 2, 0x1000, 0x2000),
bank0Banker(&bank0, 0x2FFF, 0xFFF0, 0x2A50, 0x000F, 1),
bank1("ECS ROM #2", "ecs.bin", 8192, 2, 0x1000, 0x7000),
bank1Banker(&bank1, 0x7FFF, 0xFFF0, 0x7A50, 0x000F, 0),
bank2("ECS ROM #3", "ecs.bin", 16384, 2, 0x1000, 0xE000),
bank2Banker(&bank2, 0xEFFF, 0xFFF0, 0xEA50, 0x000F, 1)
{
AddROM(&bank0);
AddRAM(&bank0Banker);
AddROM(&bank1);
AddRAM(&bank1Banker);
AddROM(&bank2);
AddRAM(&bank2Banker);
AddRAM(&ramBank);
AddRAM(&uart);
AddProcessor(&psg2);
AddAudioProducer(&psg2);
AddRAM(&psg2.registers);
AddInputConsumer(&keyboard);
}
ECSState ECS::getState()
{
ECSState state = {0};
state.ramState = ramBank.getState(state.ramImage);
state.uartState = uart.getState(NULL);
state.psg2State = psg2.getState();
return state;
}
void ECS::setState(ECSState state)
{
ramBank.setState(state.ramState, state.ramImage);
uart.setState(state.uartState, NULL);
psg2.setState(state.psg2State);
}