From: <bi...@us...> - 2012-09-30 19:10:50
|
Revision: 12890 http://openmsx.svn.sourceforge.net/openmsx/?rev=12890&view=rev Author: bifimsx Date: 2012-09-30 19:10:43 +0000 (Sun, 30 Sep 2012) Log Message: ----------- added MSXtra romtype, a debugging tool released by PTC which comes with its own RAM Modified Paths: -------------- openmsx/trunk/src/memory/RomFactory.cc openmsx/trunk/src/memory/RomInfo.cc openmsx/trunk/src/memory/RomInfoTopic.cc openmsx/trunk/src/memory/RomTypes.hh openmsx/trunk/src/memory/node.mk Added Paths: ----------- openmsx/trunk/src/memory/RomMSXtra.cc openmsx/trunk/src/memory/RomMSXtra.hh Modified: openmsx/trunk/src/memory/RomFactory.cc =================================================================== --- openmsx/trunk/src/memory/RomFactory.cc 2012-09-30 17:41:47 UTC (rev 12889) +++ openmsx/trunk/src/memory/RomFactory.cc 2012-09-30 19:10:43 UTC (rev 12890) @@ -41,6 +41,7 @@ #include "RomArc.hh" #include "MegaFlashRomSCCPlus.hh" #include "RomDooly.hh" +#include "RomMSXtra.hh" #include "Rom.hh" #include "Reactor.hh" #include "RomDatabase.hh" @@ -334,6 +335,9 @@ case ROM_DOOLY: result.reset(new RomDooly(config, rom)); break; + case ROM_MSXTRA: + result.reset(new RomMSXtra(config, rom)); + break; default: throw MSXException("Unknown ROM type"); } Modified: openmsx/trunk/src/memory/RomInfo.cc =================================================================== --- openmsx/trunk/src/memory/RomInfo.cc 2012-09-30 17:41:47 UTC (rev 12889) +++ openmsx/trunk/src/memory/RomInfo.cc 2012-09-30 19:10:43 UTC (rev 12890) @@ -77,6 +77,7 @@ romTypeMap["Arc"] = ROM_ARC; romTypeMap["Dooly"] = ROM_DOOLY; romTypeMap["MegaFlashRomSccPlus"]= ROM_MEGAFLASHROMSCCPLUS; + romTypeMap["MSXtra"] = ROM_MSXTRA; // ROM mapper types used for system ROMs in machines romTypeMap["Panasonic"] = ROM_PANASONIC; Modified: openmsx/trunk/src/memory/RomInfoTopic.cc =================================================================== --- openmsx/trunk/src/memory/RomInfoTopic.cc 2012-09-30 17:41:47 UTC (rev 12889) +++ openmsx/trunk/src/memory/RomInfoTopic.cc 2012-09-30 19:10:43 UTC (rev 12890) @@ -52,6 +52,7 @@ description[ROM_MATRAINK] = "Matra Ink"; description[ROM_ARC] = "Parallax' ARC"; description[ROM_DOOLY] = "Baby Dinosaur Dooly"; + description[ROM_MSXTRA] = "PTC MSXtra"; description[ROM_MIRRORED] = "Plain rom, mirrored (any size)"; description[ROM_MIRRORED0000] = "Plain rom, mirrored start at 0x0000"; Added: openmsx/trunk/src/memory/RomMSXtra.cc =================================================================== --- openmsx/trunk/src/memory/RomMSXtra.cc (rev 0) +++ openmsx/trunk/src/memory/RomMSXtra.cc 2012-09-30 19:10:43 UTC (rev 12890) @@ -0,0 +1,71 @@ +// + +#include "RomMSXtra.hh" +#include "Rom.hh" +#include "Ram.hh" +#include "MSXMotherBoard.hh" +#include "serialize.hh" + +namespace openmsx { + +RomMSXtra::RomMSXtra(const DeviceConfig& config, std::auto_ptr<Rom> rom) + : MSXRom(config, rom) + , ram(new Ram(config, getName() + " RAM", "MSXtra RAM", + 0x0800)) +{ + byte j[2]; j[0] = 0xa5; j[1] = 0x5a; + for (int i=0;i<0x800;i++) (*ram)[i] = j[i&1]; +} + +RomMSXtra::~RomMSXtra() +{ +} + +byte RomMSXtra::readMem(word address, EmuTime::param /*time*/) +{ + if ((0x4000 <= address) && (address < 0x6000)) { + return (*rom)[address & 0x1fff]; + } else if ((0x6000 <= address) && (address < 0x8000)) { + return (*ram)[address & 0x07ff]; + } else { + return 0xff; + } +} + +const byte* RomMSXtra::getReadCacheLine(word address) const +{ + if ((0x4000 <= address) && (address < 0x6000)) { + return &(*rom)[address & 0x1fff]; + } else if ((0x6000 <= address) && (address < 0x8000)) { + return &(*ram)[address & 0x07ff]; + } else { + return unmappedRead; + } +} + +void RomMSXtra::writeMem(word address, byte value, EmuTime::param /*time*/) +{ + if ((0x6000 <= address) && (address < 0x8000)) { + (*ram)[address & 0x07ff] = value; + } +} + +byte* RomMSXtra::getWriteCacheLine(word address) const +{ + if ((0x6000 <= address) && (address < 0x8000)) { + return const_cast<byte*>(&(*ram)[address & 0x07ff]); + } else { + return unmappedWrite; + } +} + +template<typename Archive> +void RomMSXtra::serialize(Archive& ar, unsigned /*version*/) +{ + ar.template serializeBase<MSXDevice>(*this); + ar.serialize("ram", *ram); +} +INSTANTIATE_SERIALIZE_METHODS(RomMSXtra); +REGISTER_MSXDEVICE(RomMSXtra, "RomMSXtra"); + +} // namespace Added: openmsx/trunk/src/memory/RomMSXtra.hh =================================================================== --- openmsx/trunk/src/memory/RomMSXtra.hh (rev 0) +++ openmsx/trunk/src/memory/RomMSXtra.hh 2012-09-30 19:10:43 UTC (rev 12890) @@ -0,0 +1,32 @@ +// + +#ifndef ROMMSXTRA_HH +#define ROMMSXTRA_HH + +#include "MSXRom.hh" + +namespace openmsx { + +class Ram; + +class RomMSXtra : public MSXRom +{ +public: + RomMSXtra(const DeviceConfig& config, std::auto_ptr<Rom> rom); + virtual ~RomMSXtra(); + + virtual byte readMem(word address, EmuTime::param time); + virtual const byte* getReadCacheLine(word address) const; + virtual void writeMem(word address, byte value, EmuTime::param time); + virtual byte* getWriteCacheLine(word address) const; + + template<typename Archive> + void serialize(Archive& ar, unsigned version); + +protected: + const std::auto_ptr<Ram> ram; +}; + +} // namespace + +#endif Modified: openmsx/trunk/src/memory/RomTypes.hh =================================================================== --- openmsx/trunk/src/memory/RomTypes.hh 2012-09-30 17:41:47 UTC (rev 12889) +++ openmsx/trunk/src/memory/RomTypes.hh 2012-09-30 19:10:43 UTC (rev 12890) @@ -37,6 +37,7 @@ ROM_ARC = 28, ROM_MEGAFLASHROMSCCPLUS = 29, ROM_DOOLY = 30, + ROM_MSXTRA = 31, ROM_PAGE0 = 32 + 1, ROM_PAGE1 = 32 + 2, Modified: openmsx/trunk/src/memory/node.mk =================================================================== --- openmsx/trunk/src/memory/node.mk 2012-09-30 17:41:47 UTC (rev 12889) +++ openmsx/trunk/src/memory/node.mk 2012-09-30 19:10:43 UTC (rev 12890) @@ -29,7 +29,7 @@ MSXPac \ MSXHBI55 \ ESE_RAM ESE_SCC \ - RomManbow2 RomMatraInk RomArc RomDooly \ + RomManbow2 RomMatraInk RomArc RomDooly RomMSXtra \ MegaFlashRomSCCPlus HDR_ONLY:= \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |