16#include "SubComponent.h"
21class C64Memory final :
public SubComponent,
public Inspectable<MemInfo, MemStats> {
25 Descriptions descriptions = {{
28 .description =
"C64 Memory"
31 ConfigOptions options = {
39 MemConfig config = { };
50 MemoryType bankMap[32][16];
71 MemoryType peekSrc[16];
74 MemoryType pokeTarget[16];
77 bool checkWatchpoints =
false;
91 C64Memory& operator= (
const C64Memory& other) {
98 CLONE_ARRAY(pokeTarget)
113 void serialize(T& worker)
115 if (isSoftResetter(worker))
return;
122 if (isResetter(worker))
return;
130 << config.ramPattern;
134 void operator << (SerResetter &worker)
override { serialize(worker); }
135 void operator << (SerChecker &worker)
override { serialize(worker); }
136 void operator << (SerCounter &worker)
override;
137 void operator << (SerReader &worker)
override;
138 void operator << (SerWriter &worker)
override;
147 const Descriptions &getDescriptions()
const override {
return descriptions; }
151 void _dump(Category category, std::ostream& os)
const override;
152 void _reset(
bool hard)
override;
161 const MemConfig &getConfig()
const {
return config; }
162 const ConfigOptions &getOptions()
const override {
return options; }
163 i64 getOption(Option opt)
const override;
164 void checkOption(Option opt, i64 value)
override;
165 void setOption(Option opt, i64 value)
override;
174 void cacheInfo(MemInfo &result)
const override;
184 void eraseWithPattern(RamPattern pattern);
189 void updatePeekPokeLookupTables();
192 MemoryType getPeekSource(u16 addr) {
return peekSrc[addr >> 12]; }
195 MemoryType getPokeTarget(u16 addr) {
return pokeTarget[addr >> 12]; }
198 u8 peek(u16 addr, MemoryType source);
199 u8 peek(u16 addr,
bool gameLine,
bool exromLine);
200 u8 peek(u16 addr) {
return peek(addr, peekSrc[addr >> 12]); }
206 void peekIdle(u16 addr) { (void)peek(addr); }
207 void peekZPIdle(u8 addr) { (void)peekZP(addr); }
208 void peekStackIdle(u8 sp) { (void)peekStack(sp); }
209 void peekIOIdle(u16 addr) { (void)peekIO(addr); }
212 u8 spypeek(u16 addr, MemoryType source)
const;
213 u8 spypeek(u16 addr)
const {
return spypeek(addr, peekSrc[addr >> 12]); }
214 u8 spypeekIO(u16 addr)
const;
215 u8 spypeekColor(u16 addr)
const;
218 void poke(u16 addr, u8 value, MemoryType target);
219 void poke(u16 addr, u8 value,
bool gameLine,
bool exromLine);
220 void poke(u16 addr, u8 value) { poke(addr, value, pokeTarget[addr >> 12]); }
221 void pokeZP(u8 addr, u8 value);
222 void pokeStack(u8 sp, u8 value);
223 void pokeIO(u16 addr, u8 value);
226 u16 nmiVector()
const;
227 u16 irqVector()
const;
231 string memdump(u16 addr, isize num,
bool hex, isize pads, MemoryType src)
const;
232 string hexdump(u16 addr, isize num, isize pads, MemoryType src)
const;
233 string decdump(u16 addr, isize num, isize pads, MemoryType src)
const;
234 string txtdump(u16 addr, isize num, MemoryType src)
const;
237 string memdump(u16 addr, isize num,
bool hex) {
return memdump(addr, num, hex, 1, peekSrc[addr >> 12]); }
238 string hexdump(u16 addr, isize num) {
return hexdump(addr, num, 1, peekSrc[addr >> 12]); }
239 string decdump(u16 addr, isize num) {
return decdump(addr, num, 1, peekSrc[addr >> 12]); }
240 string txtdump(u16 addr, isize num) {
return txtdump(addr, num, peekSrc[addr >> 12]); }
243 void memDump(std::ostream& os, u16 addr, isize numLines = 16,
bool hex =
true);
VirtualC64 project namespace.
Definition CmdQueue.cpp:16
@ OPT_MEM_INIT_PATTERN
Ram initialization pattern.
Definition OptionTypes.h:129
@ OPT_MEM_HEATMAP
Memory heatmap.
Definition OptionTypes.h:130
@ OPT_MEM_SAVE_ROMS
Save Roms in snapshots.
Definition OptionTypes.h:131