OXYGENHUB
◆ main openmsx / src / memory / RomArc.cc
1.1 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
// Parallax' Arc
2
3
#include "RomArc.hh"
4
#include "MSXCPUInterface.hh"
5
#include "serialize.hh"
6
7
namespace openmsx {
8
9
RomArc::RomArc(const DeviceConfig& config, Rom&& rom_)
10
	: Rom16kBBlocks(config, std::move(rom_))
11
{
12
	setUnmapped(0);
13
	setRom(1, 0);
14
	setRom(2, 1);
15
	setUnmapped(3);
16
17
	reset(EmuTime::dummy());
18
19
	getCPUInterface().register_IO_InOut(0x7f, this);
20
}
21
22
RomArc::~RomArc()
23
{
24
	getCPUInterface().unregister_IO_InOut(0x7f, this);
25
}
26
27
void RomArc::reset(EmuTime /*time*/)
28
{
29
	offset = 0x00;
30
}
31
32
void RomArc::writeIO(uint16_t /*port*/, byte value, EmuTime /*time*/)
33
{
34
	if (value == 0x35) {
35
		++offset;
36
	}
37
}
38
39
byte RomArc::readIO(uint16_t port, EmuTime time)
40
{
41
	return RomArc::peekIO(port, time);
42
}
43
44
byte RomArc::peekIO(uint16_t /*port*/, EmuTime /*time*/) const
45
{
46
	return ((offset & 0x03) == 0x03) ? 0xda : 0xff;
47
}
48
49
template<typename Archive>
50
void RomArc::serialize(Archive& ar, unsigned /*version*/)
51
{
52
	ar.template serializeBase<Rom16kBBlocks>(*this);
53
	ar.serialize("offset", offset);
54
}
55
INSTANTIATE_SERIALIZE_METHODS(RomArc);
56
REGISTER_MSXDEVICE(RomArc, "RomArc");
57
58
} // namespace openmsx