class MbcWisdomTree : public Mbc { public: explicit MbcWisdomTree(MemPtrs &memptrs) : memptrs_(memptrs) , rombank_(0) { } virtual unsigned char curRomBank() const { return rombank_; } virtual void romWrite(unsigned const p, unsigned const data, unsigned long const /*cc*/) { rombank_ = (p & 0xFF) << 1; setRombank(); } virtual void saveState(SaveState::Mem &ss) const { ss.rombank = rombank_; } virtual void loadState(SaveState::Mem const &ss) { rombank_ = ss.rombank; setRombank(); } private: MemPtrs &memptrs_; unsigned char rombank_; void setRombank() const { memptrs_.setRombank0(rombank_ & (rombanks(memptrs_) - 1)); memptrs_.setRombank((rombank_ + 1) & (rombanks(memptrs_) - 1)); } virtual bool isAddressWithinAreaRombankCanBeMappedTo(unsigned addr, unsigned bank) const { return (addr < 0x8000); } };