22 #ifndef SYSTEMROMBANKS_H
23 #define SYSTEMROMBANKS_H
29 #include "c64/CPU/opcodes.h"
33 namespace libsidplayfp
43 static_assert((N != 0) && ((N & (N - 1)) == 0),
"N must be a power of two");
54 void setVal(uint_least16_t address, uint8_t val) {
rom[address & (N-1)]=val; }
59 uint8_t
getVal(uint_least16_t address)
const {
return rom[address & (N-1)]; }
64 void*
getPtr(uint_least16_t address)
const {
return (
void*)&
rom[address & (N-1)]; }
70 void set(
const uint8_t* source) {
if (source !=
nullptr) memcpy(
rom, source, N); }
75 void poke(uint_least16_t, uint8_t)
override {}
80 uint8_t
peek(uint_least16_t address)
override {
return rom[address & (N-1)]; }
91 uint8_t resetVectorLo;
92 uint8_t resetVectorHi;
95 void set(
const uint8_t* kernal)
99 if (kernal ==
nullptr)
124 resetVectorLo =
getVal(0xfffc);
125 resetVectorHi =
getVal(0xfffd);
131 setVal(0xfffc, resetVectorLo);
132 setVal(0xfffd, resetVectorHi);
142 setVal(0xfffc, endian_16lo8(addr));
143 setVal(0xfffd, endian_16hi8(addr));
159 void set(
const uint8_t* basic)
164 memcpy(trap,
getPtr(0xa7ae),
sizeof(trap));
166 memcpy(subTune,
getPtr(0xbf53),
sizeof(subTune));
172 memcpy(
getPtr(0xa7ae), trap,
sizeof(trap));
174 memcpy(
getPtr(0xbf53), subTune,
sizeof(subTune));
185 setVal(0xa7af, endian_16lo8(addr));
186 setVal(0xa7b0, endian_16hi8(addr));
189 void setSubtune(uint8_t tune)
Definition: SystemROMBanks.h:153
void installTrap(uint_least16_t addr)
Definition: SystemROMBanks.h:182
Definition: SystemROMBanks.h:210
Definition: SystemROMBanks.h:89
void installResetHook(uint_least16_t addr)
Definition: SystemROMBanks.h:140
Definition: SystemROMBanks.h:41
void set(const uint8_t *source)
Definition: SystemROMBanks.h:70
uint8_t peek(uint_least16_t address) override
Definition: SystemROMBanks.h:80
uint8_t getVal(uint_least16_t address) const
Definition: SystemROMBanks.h:59
void poke(uint_least16_t, uint8_t) override
Definition: SystemROMBanks.h:75
uint8_t rom[N]
The ROM array.
Definition: SystemROMBanks.h:48
void setVal(uint_least16_t address, uint8_t val)
Definition: SystemROMBanks.h:54
void * getPtr(uint_least16_t address) const
Definition: SystemROMBanks.h:64