16#include "SubComponent.h"
17#include "CartridgeRom.h"
22class Cartridge :
public SubComponent,
public Inspectable<CartridgeInfo> {
24 Descriptions descriptions = {{
27 .description =
"Cartridge"
30 CartridgeTraits traits = {
38 virtual const CartridgeTraits &getCartridgeTraits()
const {
return traits; }
41 static const isize MAX_PACKETS = 128;
54 bool gameLineInCrtFile = 1;
55 bool exromLineInCrtFile = 1;
65 CartridgeRom *packet[MAX_PACKETS] = {};
92 u8 *externalRam =
nullptr;
95 isize ramCapacity = 0;
135 static bool isKnownType(CartridgeType type);
138 static bool isSupportedType(CartridgeType type);
141 static bool isROMLaddr(u16 addr);
142 static bool isROMHaddr(u16 addr);
145 static Cartridge *makeWithType(C64 &c64, CartridgeType type)
throws;
146 static Cartridge *makeWithCRTFile(C64 &c64,
const CRTFile &file)
throws;
163 Cartridge& operator= (
const Cartridge& other) {
165 cloneRomAndRam(other);
175 CLONE(gameLineInCrtFile)
176 CLONE(exromLineInCrtFile)
185 void cloneRomAndRam(
const Cartridge& other);
186 virtual void clone(
const Cartridge &other) { *
this = other; }
196 void serialize(T& worker)
208 if (isResetter(worker))
return;
213 << exromLineInCrtFile
223 void operator << (SerResetter &worker)
override;
224 void operator << (SerChecker &worker)
override { serialize(worker); }
225 void operator << (SerCounter &worker)
override;
226 void operator << (SerReader &worker)
override;
227 void operator << (SerWriter &worker)
override;
236 const Descriptions &getDescriptions()
const override {
return descriptions; }
240 const char *objectName()
const override {
return getCartridgeTraits().title; }
241 void _dump(Category category, std::ostream& os)
const override;
250 void cacheInfo(CartridgeInfo &result)
const override;
260 CartridgeRomInfo getRomInfo(isize nr)
const;
263 virtual CartridgeType getCartridgeType()
const {
return getCartridgeTraits().type; }
266 bool isSupported()
const {
return isSupportedType(getCartridgeType()); }
276 virtual bool getGameLineInCrtFile()
const {
return gameLineInCrtFile; }
277 virtual bool getExromLineInCrtFile()
const {
return exromLineInCrtFile; }
283 virtual void resetCartConfig();
293 virtual void loadChip(isize nr,
const CRTFile &c);
296 void bankInROML(isize nr, u16 size, u16 offset);
297 void bankInROMH(isize nr, u16 size, u16 offset);
302 virtual void bankIn(isize nr);
305 void bankOut(isize nr);
317 virtual u8 peek(u16 addr);
318 virtual u8 peekRomL(u16 addr);
319 virtual u8 peekRomH(u16 addr);
321 virtual u8 spypeek(u16 addr)
const;
322 virtual u8 spypeekRomL(u16 addr)
const;
323 virtual u8 spypeekRomH(u16 addr)
const;
325 virtual void poke(u16 addr, u8 value);
326 virtual void pokeRomL(u16 addr, u8 value) {
return; }
327 virtual void pokeRomH(u16 addr, u8 value) {
return; }
330 virtual u8 peekIO1(u16 addr) {
return 0; }
331 virtual u8 peekIO2(u16 addr) {
return 0; }
333 virtual u8 spypeekIO1(u16 addr)
const {
return 0; }
334 virtual u8 spypeekIO2(u16 addr)
const {
return 0; }
336 virtual void pokeIO1(u16 addr, u8 value) { }
337 virtual void pokeIO2(u16 addr, u8 value) { }
345 isize getRamCapacity()
const {
return getCartridgeTraits().memory; }
351 void setRamCapacity(isize size);
354 u8 peekRAM(u32 addr)
const;
355 void pokeRAM(u32 addr, u8 value);
356 void eraseRAM(u8 value);
364 virtual isize numButtons()
const {
return 0; }
369 virtual const char *getButtonTitle(isize nr)
const {
return ""; }
372 virtual void pressButton(isize nr) { }
375 virtual void releaseButton(isize nr) { }
383 virtual isize getSwitch()
const {
return switchPos; }
384 bool switchIsNeutral()
const {
return getSwitch() == 0; }
385 bool switchIsLeft()
const {
return getSwitch() < 0; }
386 bool switchIsRight()
const {
return getSwitch() > 0; }
391 virtual const char *getSwitchDescription(isize pos)
const {
return ""; }
392 const char *getSwitchDescription()
const {
return getSwitchDescription(getSwitch()); }
393 bool validSwitchPosition(isize pos)
const {
return getSwitchDescription(pos) !=
nullptr; }
396 virtual void setSwitch(isize pos);
407 virtual void setLED(
bool value) { led = value; }
417 virtual void execute() { };
420 virtual void updatePeekPokeLookupTables() { };
423 virtual void nmiWillTrigger() { }
426 virtual void nmiDidTrigger() { }
VirtualC64 project namespace.
Definition CmdQueue.cpp:16