22#ifndef SYSTEMROMBANKS_H
23#define SYSTEMROMBANKS_H
29#include "c64/CPU/opcodes.h"
42 static_assert((N != 0) && ((N & (N - 1)) == 0),
"N must be a power of two");
52 void setVal(uint_least16_t address, uint8_t val) {
rom[address & (N-1)]=val; }
57 uint8_t
getVal(uint_least16_t address)
const {
return rom[address & (N-1)]; }
62 void*
getPtr(uint_least16_t address)
const {
return (
void*)&
rom[address & (N-1)]; }
68 void set(
const uint8_t* source) {
if (source !=
nullptr) std::memcpy(
rom, source, N); }
73 void poke(uint_least16_t, uint8_t)
override {}
78 uint8_t
peek(uint_least16_t address)
override {
return rom[address & (N-1)]; }
89 uint8_t resetVectorLo;
90 uint8_t resetVectorHi;
93 void set(
const uint8_t* kernal)
97 if (kernal ==
nullptr)
122 resetVectorLo =
getVal(0xfffc);
123 resetVectorHi =
getVal(0xfffd);
129 setVal(0xfffc, resetVectorLo);
130 setVal(0xfffd, resetVectorHi);
140 setVal(0xfffc, endian_16lo8(addr));
141 setVal(0xfffd, endian_16hi8(addr));
157 void set(
const uint8_t* basic)
162 std::memcpy(trap,
getPtr(0xa7ae),
sizeof(trap));
164 std::memcpy(subTune,
getPtr(0xbf53),
sizeof(subTune));
170 std::memcpy(
getPtr(0xa7ae), trap,
sizeof(trap));
172 std::memcpy(
getPtr(0xbf53), subTune,
sizeof(subTune));
183 setVal(0xa7af, endian_16lo8(addr));
184 setVal(0xa7b0, endian_16hi8(addr));
187 void setSubtune(uint8_t tune)
Definition SystemROMBanks.h:151
void installTrap(uint_least16_t addr)
Definition SystemROMBanks.h:180
Definition SystemROMBanks.h:208
Definition SystemROMBanks.h:87
void installResetHook(uint_least16_t addr)
Definition SystemROMBanks.h:138
Definition SystemROMBanks.h:41
void set(const uint8_t *source)
Definition SystemROMBanks.h:68
uint8_t peek(uint_least16_t address) override
Definition SystemROMBanks.h:78
uint8_t getVal(uint_least16_t address) const
Definition SystemROMBanks.h:57
void poke(uint_least16_t, uint8_t) override
Definition SystemROMBanks.h:73
uint8_t rom[N]
The ROM array.
Definition SystemROMBanks.h:46
void setVal(uint_least16_t address, uint8_t val)
Definition SystemROMBanks.h:52
void * getPtr(uint_least16_t address) const
Definition SystemROMBanks.h:62