22#ifndef SYSTEMROMBANKS_H
23#define SYSTEMROMBANKS_H
31#include "c64/CPU/opcodes.h"
44 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) std::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)
101 std::fill(std::begin(
rom), std::end(
rom), RTSn);
150 resetVectorLo =
getVal(0xfffc);
151 resetVectorHi =
getVal(0xfffd);
157 setVal(0xfffc, resetVectorLo);
158 setVal(0xfffd, resetVectorHi);
168 setVal(0xfffc, endian_16lo8(addr));
169 setVal(0xfffd, endian_16hi8(addr));
185 void set(
const uint8_t* basic)
190 std::memcpy(trap,
getPtr(0xa7ae),
sizeof(trap));
192 std::memcpy(subTune,
getPtr(0xbf53),
sizeof(subTune));
198 std::memcpy(
getPtr(0xa7ae), trap,
sizeof(trap));
200 std::memcpy(
getPtr(0xbf53), subTune,
sizeof(subTune));
211 setVal(0xa7af, endian_16lo8(addr));
212 setVal(0xa7b0, endian_16hi8(addr));
215 void setSubtune(uint8_t tune)
Definition SystemROMBanks.h:179
void installTrap(uint_least16_t addr)
Definition SystemROMBanks.h:208
Definition SystemROMBanks.h:236
Definition SystemROMBanks.h:89
void installResetHook(uint_least16_t addr)
Definition SystemROMBanks.h:166
Definition SystemROMBanks.h:43
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