First pass at reworking the way auto-detect information is presented to

the user.  Previously, the only way to see certain info was at the
commandline (a bias on my part, as I always launch Stella from the console
and view the output there).  Now, we can see bankswitch type and cart
display format as part of the 'stats' message in TIA emulation.

Reporting this info to the commandline is currently broken.  Also todo
is start on the cart random startup bank infrastructure, and also show
this in the stats message.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1589 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2009-01-01 00:08:59 +00:00
parent bbdac2b646
commit d1379b54bb
5 changed files with 60 additions and 33 deletions

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: Cart.cxx,v 1.44 2008-11-24 18:02:19 stephena Exp $ // $Id: Cart.cxx,v 1.45 2009-01-01 00:08:59 stephena Exp $
//============================================================================ //============================================================================
#include <cassert> #include <cassert>
@ -73,21 +73,19 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size,
// Collect some info about the ROM // Collect some info about the ROM
ostringstream buf; ostringstream buf;
buf << " ROM Size: " << size << endl
<< " Bankswitch Type: " << type;
// See if we should try to auto-detect the cartridge type // See if we should try to auto-detect the cartridge type
// If we ask for extended info, always do an autodetect // If we ask for extended info, always do an autodetect
if(type == "AUTO-DETECT" || settings.getBool("rominfo")) if(type == "AUTO-DETECT" || settings.getBool("rominfo"))
{ {
string detected = autodetectType(image, size); string detected = autodetectType(image, size);
buf << " ==> " << detected; buf << "AUTO => ";
if(type != "AUTO-DETECT" && type != detected) if(type != "AUTO-DETECT" && type != detected)
buf << " (auto-detection not consistent)"; cerr << "Auto-detection not consistent: " << type << ", " << detected << endl;
type = detected; type = detected;
} }
buf << endl; buf << type << " (" << (size/1024) << "K) ";
myAboutString = buf.str(); myAboutString = buf.str();
// We should know the cart's type by now so let's create it // We should know the cart's type by now so let's create it

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: Console.cxx,v 1.149 2008-06-20 12:19:42 stephena Exp $ // $Id: Console.cxx,v 1.150 2009-01-01 00:08:59 stephena Exp $
//============================================================================ //============================================================================
#include <cassert> #include <cassert>
@ -126,7 +126,6 @@ Console::Console(OSystem* osystem, Cartridge* cart, const Properties& props)
// Auto-detect NTSC/PAL mode if it's requested // Auto-detect NTSC/PAL mode if it's requested
myDisplayFormat = myProperties.get(Display_Format); myDisplayFormat = myProperties.get(Display_Format);
vidinfo << " Display Format: " << myDisplayFormat;
if(myDisplayFormat == "AUTO-DETECT" || if(myDisplayFormat == "AUTO-DETECT" ||
myOSystem->settings().getBool("rominfo")) myOSystem->settings().getBool("rominfo"))
{ {
@ -145,8 +144,9 @@ Console::Console(OSystem* osystem, Cartridge* cart, const Properties& props)
} }
myDisplayFormat = (palCount >= 15) ? "PAL" : "NTSC"; myDisplayFormat = (palCount >= 15) ? "PAL" : "NTSC";
if(myProperties.get(Display_Format) == "AUTO-DETECT") if(myProperties.get(Display_Format) == "AUTO-DETECT")
vidinfo << " ==> " << myDisplayFormat; myConsoleInfo.DisplayFormat = "AUTO => ";
} }
myConsoleInfo.DisplayFormat += myDisplayFormat;
// Set up the correct properties used when toggling format // Set up the correct properties used when toggling format
// Note that this can be overridden if a format is forced // Note that this can be overridden if a format is forced
@ -178,18 +178,14 @@ Console::Console(OSystem* osystem, Cartridge* cart, const Properties& props)
myOSystem->eventHandler().allowAllDirections(allow); myOSystem->eventHandler().allowAllDirections(allow);
// Reset the system to its power-on state // Reset the system to its power-on state
// TODO - a reset still isn't completely working with Boulderdash
mySystem->reset(); mySystem->reset();
// Finally, show some info about the console // Finally, add remaining info about the console
about << " Cart Name: " << myProperties.get(Cartridge_Name) << endl myConsoleInfo.CartName = myProperties.get(Cartridge_Name);
<< " Cart MD5: " << myProperties.get(Cartridge_MD5) << endl myConsoleInfo.CartMD5 = myProperties.get(Cartridge_MD5);
<< " Controller 0: " << myControllers[0]->about() << endl myConsoleInfo.Control0 = myControllers[0]->about();
<< " Controller 1: " << myControllers[1]->about() << endl myConsoleInfo.Control1 = myControllers[1]->about();
<< vidinfo.str() << endl myConsoleInfo.BankSwitch = cart->about();
<< cart->about();
myAboutString = about.str();
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: Console.hxx,v 1.69 2008-05-30 19:07:55 stephena Exp $ // $Id: Console.hxx,v 1.70 2009-01-01 00:08:59 stephena Exp $
//============================================================================ //============================================================================
#ifndef CONSOLE_HXX #ifndef CONSOLE_HXX
@ -35,11 +35,24 @@ class System;
#include "AtariVox.hxx" #include "AtariVox.hxx"
#include "Serializable.hxx" #include "Serializable.hxx"
/**
Contains detailed info about a console.
*/
struct ConsoleInfo
{
string BankSwitch;
string CartName;
string CartMD5;
string Control0;
string Control1;
string DisplayFormat;
};
/** /**
This class represents the entire game console. This class represents the entire game console.
@author Bradford W. Mott @author Bradford W. Mott
@version $Id: Console.hxx,v 1.69 2008-05-30 19:07:55 stephena Exp $ @version $Id: Console.hxx,v 1.70 2009-01-01 00:08:59 stephena Exp $
*/ */
class Console : public Serializable class Console : public Serializable
{ {
@ -150,9 +163,9 @@ class Console : public Serializable
void setProperties(const Properties& props); void setProperties(const Properties& props);
/** /**
Query some information about this console. Query detailed information about this console.
*/ */
const string& about() const { return myAboutString; } inline const ConsoleInfo& about() const { return myConsoleInfo; }
public: public:
/** /**
@ -320,8 +333,8 @@ class Console : public Serializable
// successfully loaded // successfully loaded
bool myUserPaletteDefined; bool myUserPaletteDefined;
// Contains info about this console in string format // Contains detailed info about this console
string myAboutString; ConsoleInfo myConsoleInfo;
// Table of RGB values for NTSC, PAL and SECAM // Table of RGB values for NTSC, PAL and SECAM
static uInt32 ourNTSCPalette[256]; static uInt32 ourNTSCPalette[256];

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: FrameBuffer.cxx,v 1.150 2008-12-29 20:42:15 stephena Exp $ // $Id: FrameBuffer.cxx,v 1.151 2009-01-01 00:08:59 stephena Exp $
//============================================================================ //============================================================================
#include <algorithm> #include <algorithm>
@ -125,8 +125,8 @@ bool FrameBuffer::initialize(const string& title, uInt32 width, uInt32 height)
// Create surfaces for TIA statistics and general messages // Create surfaces for TIA statistics and general messages
myStatsMsg.color = kBtnTextColor; myStatsMsg.color = kBtnTextColor;
myStatsMsg.w = myOSystem->consoleFont().getStringWidth("000 LINES %00.00 FPS"); myStatsMsg.w = myOSystem->consoleFont().getMaxCharWidth() * 21;
myStatsMsg.h = myOSystem->consoleFont().getFontHeight(); myStatsMsg.h = (myOSystem->consoleFont().getFontHeight() + 2) * 3;
if(myStatsMsg.surface == NULL) if(myStatsMsg.surface == NULL)
{ {
@ -169,13 +169,18 @@ void FrameBuffer::update()
if(myStatsMsg.enabled) if(myStatsMsg.enabled)
{ {
// FIXME - sizes hardcoded for now; fix during UI refactoring // FIXME - sizes hardcoded for now; fix during UI refactoring
const ConsoleInfo& info = myOSystem->console().about();
char msg[30]; char msg[30];
sprintf(msg, "%u LINES %2.2f FPS", sprintf(msg, "%u LINES %2.2f FPS",
myOSystem->console().mediaSource().scanlines(), myOSystem->console().mediaSource().scanlines(),
myOSystem->console().getFramerate()); myOSystem->console().getFramerate());
myStatsMsg.surface->fillRect(0, 0, myStatsMsg.w, myStatsMsg.h, kBGColor); myStatsMsg.surface->fillRect(0, 0, myStatsMsg.w, myStatsMsg.h, kBGColor);
myStatsMsg.surface->drawString(&myOSystem->consoleFont(), msg, 1, 1, myStatsMsg.surface->drawString(&myOSystem->consoleFont(),
myStatsMsg.w, myStatsMsg.color, kTextAlignLeft); msg, 1, 1, myStatsMsg.w, myStatsMsg.color, kTextAlignLeft);
myStatsMsg.surface->drawString(&myOSystem->consoleFont(),
info.DisplayFormat, 1, 15, myStatsMsg.w, myStatsMsg.color, kTextAlignLeft);
myStatsMsg.surface->drawString(&myOSystem->consoleFont(),
info.BankSwitch, 1, 30, myStatsMsg.w, myStatsMsg.color, kTextAlignLeft);
myStatsMsg.surface->addDirtyRect(0, 0, 0, 0); // force a full draw myStatsMsg.surface->addDirtyRect(0, 0, 0, 0); // force a full draw
myStatsMsg.surface->setPos(myImageRect.x() + 3, myImageRect.y() + 3); myStatsMsg.surface->setPos(myImageRect.x() + 3, myImageRect.y() + 3);
myStatsMsg.surface->update(); myStatsMsg.surface->update();

View File

@ -13,7 +13,7 @@
// See the file "license" for information on usage and redistribution of // See the file "license" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: OSystem.cxx,v 1.136 2008-12-29 20:42:15 stephena Exp $ // $Id: OSystem.cxx,v 1.137 2009-01-01 00:08:59 stephena Exp $
//============================================================================ //============================================================================
#include <cassert> #include <cassert>
@ -412,7 +412,7 @@ bool OSystem::createConsole(const string& romfile, const string& md5sum)
if(mySettings->getBool("showinfo")) if(mySettings->getBool("showinfo"))
cout << "Game console created:" << endl cout << "Game console created:" << endl
<< " ROM file: " << myRomFile << endl << endl << " ROM file: " << myRomFile << endl << endl
<< myConsole->about() << endl; << " FIXME : myConsole->about()" << endl;
// Update the timing info for a new console run // Update the timing info for a new console run
resetLoopTiming(); resetLoopTiming();
@ -613,6 +613,21 @@ string OSystem::MD5FromFile(const string& filename)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string OSystem::getROMInfo(const string& romfile) string OSystem::getROMInfo(const string& romfile)
{ {
// FIXME - convert this into a string
// also, combine this method with ::createConsole(), as there's
// quite a bit of redundant code
/*
about << " Cart Name: " << myProperties.get(Cartridge_Name) << endl
<< " Cart MD5: " << myProperties.get(Cartridge_MD5) << endl
<< " Controller 0: " << myControllers[0]->about() << endl
<< " Controller 1: " << myControllers[1]->about() << endl
<< vidinfo.str() << endl
<< cart->about();
myAboutString = about.str();
*/
ostringstream buf; ostringstream buf;
// Open the cartridge image and read it in // Open the cartridge image and read it in
@ -628,7 +643,7 @@ string OSystem::getROMInfo(const string& romfile)
{ {
Console* console = new Console(this, cart, props); Console* console = new Console(this, cart, props);
if(console) if(console)
buf << console->about(); buf << "FIXME : console->about()\n";
else else
buf << "ERROR: Couldn't get ROM info for " << romfile << " ..." << endl; buf << "ERROR: Couldn't get ROM info for " << romfile << " ..." << endl;