VirtualC64 v5.0 beta
Commodore 64 Emulator
Loading...
Searching...
No Matches
PageFox.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
17namespace vc64 {
18
19class PageFox final : public Cartridge {
20
21 CartridgeTraits traits = {
22
23 .type = CRT_PAGEFOX,
24 .title = "Pagefox",
25
26 .memory = KB(32)
27 };
28
29 virtual const CartridgeTraits &getCartridgeTraits() const override { return traits; }
30
31
32 /* The cartridge has a single control register which can be accessed in
33 * the $DE80 - $DEFF memory range.
34 */
35 u8 ctrlReg = 0;
36
37public:
38
39 //
40 // Initializing
41 //
42
43 using Cartridge::Cartridge;
44
45
46 //
47 // Methods from CoreObject
48 //
49
50private:
51
52 void _dump(Category category, std::ostream& os) const override;
53
54
55 //
56 // Methods from CoreComponent
57 //
58
59public:
60
61 PageFox& operator= (const PageFox& other) {
62
63 Cartridge::operator=(other);
64
65 CLONE(ctrlReg)
66
67 return *this;
68 }
69 virtual void clone(const Cartridge &other) override { *this = (const PageFox &)other; }
70
71
72 template <class T>
73 void serialize(T& worker)
74 {
75 if (isResetter(worker)) return;
76
77 worker
78
79 << ctrlReg;
80
81 } CARTRIDGE_SERIALIZERS(serialize);
82
83 void _reset(bool hard) override;
84
85
86 //
87 // Intepreting the control register
88 //
89
90 u16 bankSelect() const { return (ctrlReg & 0b00010) >> 1; }
91 u8 chipSelect() const { return (ctrlReg & 0b01100) >> 2; }
92 u8 bank() const { return (ctrlReg & 0b00110) >> 1; }
93 u8 disabled() const { return (ctrlReg & 0b10000) >> 4; }
94 u8 ramIsVisible() const { return chipSelect() == 0b10; }
95
96 //
97 // Accessing cartridge memory
98 //
99
100public:
101
102 void resetCartConfig() override;
103 u8 peekRomL(u16 addr) override;
104 u8 spypeekRomL(u16 addr) const override;
105 u8 peekRomH(u16 addr) override;
106 u8 spypeekRomH(u16 addr) const override;
107 void pokeRomL(u16 addr, u8 value) override;
108 void pokeRomH(u16 addr, u8 value) override;
109 u8 peekIO1(u16 addr) override;
110 u8 spypeekIO1(u16 addr) const override;
111 void pokeIO1(u16 addr, u8 value) override;
112 void updatePeekPokeLookupTables() override;
113
114private:
115
116 u16 ramAddrL(u16 addr) const { return (u16)(bankSelect() << 14 | (addr & 0x1FFF)); }
117 u16 ramAddrH(u16 addr) const { return 0x2000 + ramAddrL(addr); }
118};
119
120}
VirtualC64 project namespace.
Definition CmdQueue.cpp:16