VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
EasyFlash.h
1// -----------------------------------------------------------------------------
2// This file is part of VirtualC64
3//
4// Copyright (C) Dirk W. Hoffmann. www.dirkwhoffmann.de
5// This FILE is dual-licensed. You are free to choose between:
6//
7// - The GNU General Public License v3 (or any later version)
8// - The Mozilla Public License v2
9//
10// SPDX-License-Identifier: GPL-3.0-or-later OR MPL-2.0
11// -----------------------------------------------------------------------------
12
13#pragma once
14
15#include "Cartridge.h"
16#include "FlashRom.h"
17
18namespace vc64 {
19
20class EasyFlash final : public Cartridge {
21
22 CartridgeTraits traits = {
23
24 .type = CRT_EASYFLASH,
25 .title = "EasyFlash",
26 .memory = 256,
27 .leds = 1
28 };
29
30 virtual const CartridgeTraits &getCartridgeTraits() const override { return traits; }
31
32 // Flash Rom mapping to ROML ($8000 - $9FFF)
33 FlashRom flashRomL = FlashRom(c64);
34
35 // Flash Rom mapping to ROMH ($A000 - $B000 or $E000 - $FFFF)
36 FlashRom flashRomH = FlashRom(c64);
37
38 // Registers register
39 u8 bankReg = 0;
40 u8 modeReg = 0;
41
42 // Selected memory bank
43 u8 bank = 0;
44
45 // Jumper for controlling the Game line
46 bool jumper = false;
47
48public:
49
50 //
51 // Initializing
52 //
53
54 EasyFlash(C64 &ref);
55
56 void resetCartConfig() override;
57
58
59 //
60 // Methods from CoreObject
61 //
62
63private:
64
65 void _dump(Category category, std::ostream& os) const override;
66
67
68 //
69 // Methods from CoreComponent
70 //
71
72public:
73
74 EasyFlash& operator= (const EasyFlash& other) {
75
76 Cartridge::operator=(other);
77
78 CLONE(flashRomL)
79 CLONE(flashRomH)
80
81 CLONE(bankReg)
82 CLONE(modeReg)
83 CLONE(bank)
84
85 CLONE(jumper)
86
87 return *this;
88 }
89 virtual void clone(const Cartridge &other) override { *this = (const EasyFlash &)other; }
90
91 template <class T>
92 void serialize(T& worker)
93 {
94 worker
95
96 << flashRomL
97 << flashRomH
98
99 << bankReg
100 << modeReg
101 << bank;
102
103 if (isResetter(worker)) return;
104
105 worker
106
107 << jumper;
108
109 } CARTRIDGE_SERIALIZERS(serialize);
110
111 void _reset(bool hard) override;
112
113
114 //
115 // Handling ROM packets
116 //
117
118 void loadChip(isize nr, const CRTFile &crt) override;
119
120
121 //
122 // Accessing cartridge memory
123 //
124
125public:
126
127 u8 peek(u16 addr) override;
128 u8 spypeek(u16 addr) const override;
129 void poke(u16 addr, u8 value) override;
130 void pokeRomL(u16 addr, u8 value) override;
131 void pokeRomH(u16 addr, u8 value) override;
132 u8 peekIO1(u16 addr) override;
133 u8 spypeekIO1(u16 addr) const override;
134 u8 peekIO2(u16 addr) override;
135 u8 spypeekIO2(u16 addr) const override;
136 void pokeIO1(u16 addr, u8 value) override;
137 void pokeIO2(u16 addr, u8 value) override;
138 void pokeBankReg(u8 value);
139 void pokeModeReg(u8 value);
140};
141
142}
VirtualC64 project namespace.
Definition CmdQueue.cpp:16