//============================================================================ // // SSSS tt lll lll // SS SS tt ll ll // SS tttttt eeee ll ll aaaa // SSSS tt ee ee ll ll aa // SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // // Copyright (c) 1995-2013 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // // $Id$ //============================================================================ #include "CartF0.hxx" #include "PopUpWidget.hxx" #include "CartF0Widget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeF0Widget::CartridgeF0Widget( GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, CartridgeF0& cart) : CartDebugWidget(boss, font, x, y, w, h), myCart(cart) { uInt32 size = 16 * 4096; ostringstream info; info << "64K Megaboy F0 cartridge, 16 4K banks\n" << "Startup bank = " << cart.myStartBank << "\n" << "Bankswitch triggered by accessing $1FF0\n"; // Eventually, we should query this from the debugger/disassembler for(uInt32 i = 0, offset = 0xFFC; i < 16; ++i, offset += 0x1000) { uInt16 start = (cart.myImage[offset+1] << 8) | cart.myImage[offset]; start -= start % 0x1000; info << "Bank " << dec << i << " @ $" << HEX4 << start << " - " << "$" << (start + 0xFFF) << "\n"; } int xpos = 10, ypos = addBaseInformation(size, "Dynacom Megaboy", info.str()) + myLineHeight; VariantList items; items.push_back(" 0"); items.push_back(" 1"); items.push_back(" 2"); items.push_back(" 3"); items.push_back(" 4"); items.push_back(" 5"); items.push_back(" 6"); items.push_back(" 7"); items.push_back(" 8"); items.push_back(" 9"); items.push_back(" 10"); items.push_back(" 11"); items.push_back(" 12"); items.push_back(" 13"); items.push_back(" 14"); items.push_back(" 15"); myBank = new PopUpWidget(boss, font, xpos, ypos-2, font.getStringWidth(" 15 "), myLineHeight, items, "Set bank: ", font.getStringWidth("Set bank: "), kBankChanged); myBank->setTarget(this); addFocusWidget(myBank); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF0Widget::loadConfig() { myBank->setSelected(myCart.myCurrentBank); CartDebugWidget::loadConfig(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF0Widget::handleCommand(CommandSender* sender, int cmd, int data, int id) { if(cmd == kBankChanged) { myCart.unlockBank(); myCart.bank(myBank->getSelected()); myCart.lockBank(); invalidate(); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string CartridgeF0Widget::bankState() { ostringstream& buf = buffer(); buf << "Bank = " << myCart.myCurrentBank << ", hotspot = $FF0"; return buf.str(); }