13 sram = make_unique<SRAM>(
getName() +
" SRAM", 0x1000, config);
24 for (
int region = 0; region < 4; ++region) {
26 bankSelect[region] = 0;
33 if ((control & 0x04) && ((address & 0x7FF9) == 0x7FF0)) {
36 int bank = (address & 6) / 2;
37 return bankSelect[
bank];
39 if ((control & 0x02) && ((address & 0x3FFF) == 0x3FFD)) {
41 return (*
sram)[sramAddr & 0x0FFF];
49 if ((control & 0x02) && ((address & 0x3FFF) == 0x3FFD)) {
57 if ((0x3FF0 & CacheLine::HIGH) == (address & 0x3FFF)) {
67 if (address == 0x6000) {
68 bankSelect[1] = value;
70 }
else if (address == 0x6400) {
71 bankSelect[0] = value;
73 }
else if (address == 0x7000) {
74 bankSelect[2] = value;
76 }
else if (address == 0x7400) {
77 bankSelect[3] = value;
79 }
else if (address == 0x7FF9) {
82 }
else if (control & 0x02) {
84 if (address == 0x3FFA) {
86 sramAddr = (sramAddr & 0x00FFFF) | value << 16;
87 }
else if (address == 0x3FFB) {
89 sramAddr = (sramAddr & 0xFF00FF) | value << 8;
90 }
else if (address == 0x3FFC) {
92 sramAddr = (sramAddr & 0xFFFF00) | value;
93 }
else if (address == 0x3FFD) {
94 sram->write((sramAddr++ & 0x0FFF), value);
101 if ((address == (0x6000 & CacheLine::HIGH)) ||
102 (address == (0x6400 & CacheLine::HIGH)) ||
103 (address == (0x7000 & CacheLine::HIGH)) ||
104 (address == (0x7400 & CacheLine::HIGH)) ||
105 (address == (0x7FF9 & CacheLine::HIGH))) {
107 }
else if ((address & 0x3FFF) == (0x3FFA & CacheLine::HIGH)) {
114 template<
typename Archive>
117 ar.template serializeBase<Rom16kBBlocks>(*this);
118 ar.serialize(
"control", control);
119 ar.serialize(
"sramAddr", sramAddr);
120 ar.serialize(
"bankSelect", bankSelect);