mirror of https://github.com/stella-emu/stella.git
Fixed bug whereby changes made to RAM from frame advance weren't showing
up in the RamWidget. FrameBuffer::advance() now advances all frames and then returns, instead of setting a flag to advance and then return immediately (RAM wasn't being updated until the frames where advanced, but by that point we'd returned from the method). git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@596 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
a7fefcd123
commit
1ba494a859
|
@ -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: Debugger.cxx,v 1.47 2005-07-02 21:15:22 stephena Exp $
|
// $Id: Debugger.cxx,v 1.48 2005-07-03 00:53:58 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
|
@ -475,6 +475,8 @@ void Debugger::loadState(int state)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
int Debugger::step()
|
int Debugger::step()
|
||||||
{
|
{
|
||||||
|
saveRegs();
|
||||||
|
|
||||||
int cyc = mySystem->cycles();
|
int cyc = mySystem->cycles();
|
||||||
mySystem->m6502().execute(1);
|
mySystem->m6502().execute(1);
|
||||||
myTIAdebug->updateTIA();
|
myTIAdebug->updateTIA();
|
||||||
|
@ -499,6 +501,8 @@ int Debugger::trace()
|
||||||
{
|
{
|
||||||
// 32 is the 6502 JSR instruction:
|
// 32 is the 6502 JSR instruction:
|
||||||
if(mySystem->peek(myDebugger->pc()) == 32) {
|
if(mySystem->peek(myDebugger->pc()) == 32) {
|
||||||
|
saveRegs();
|
||||||
|
|
||||||
int cyc = mySystem->cycles();
|
int cyc = mySystem->cycles();
|
||||||
int targetPC = myDebugger->pc() + 3; // return address
|
int targetPC = myDebugger->pc() + 3; // return address
|
||||||
while(myDebugger->pc() != targetPC)
|
while(myDebugger->pc() != targetPC)
|
||||||
|
@ -834,4 +838,3 @@ void Debugger::saveRegs() {
|
||||||
oldP = getPS();
|
oldP = getPS();
|
||||||
oldPC = getPC();
|
oldPC = getPC();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.50 2005-07-02 01:28:43 stephena Exp $
|
// $Id: FrameBuffer.cxx,v 1.51 2005-07-03 00:53:59 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -294,6 +294,17 @@ void FrameBuffer::refreshOverlay(bool now)
|
||||||
if(now) update();
|
if(now) update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBuffer::advance(int frames)
|
||||||
|
{
|
||||||
|
if(myOSystem->eventHandler().state() != EventHandler::S_DEBUGGER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
theFrameAdvanceIndicator = frames;
|
||||||
|
while(theFrameAdvanceIndicator)
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::showMessage(const string& message)
|
void FrameBuffer::showMessage(const string& message)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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.hxx,v 1.44 2005-07-02 01:28:43 stephena Exp $
|
// $Id: FrameBuffer.hxx,v 1.45 2005-07-03 00:53:59 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_HXX
|
#ifndef FRAMEBUFFER_HXX
|
||||||
|
@ -52,7 +52,7 @@ enum FrameStyle {
|
||||||
All GUI elements (ala ScummVM) are drawn here as well.
|
All GUI elements (ala ScummVM) are drawn here as well.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: FrameBuffer.hxx,v 1.44 2005-07-02 01:28:43 stephena Exp $
|
@version $Id: FrameBuffer.hxx,v 1.45 2005-07-03 00:53:59 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
|
@ -148,7 +148,7 @@ class FrameBuffer
|
||||||
/**
|
/**
|
||||||
Indicates that the emulation should advance one frame.
|
Indicates that the emulation should advance one frame.
|
||||||
*/
|
*/
|
||||||
void advance(int frames) { theFrameAdvanceIndicator = frames; }
|
void advance(int frames);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Toggles between fullscreen and window mode.
|
Toggles between fullscreen and window mode.
|
||||||
|
|
|
@ -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: CpuWidget.cxx,v 1.8 2005-07-02 21:15:22 stephena Exp $
|
// $Id: CpuWidget.cxx,v 1.9 2005-07-03 00:53:59 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -240,7 +240,9 @@ void CpuWidget::fillGrid()
|
||||||
vlist.push_back(dbg.getX());
|
vlist.push_back(dbg.getX());
|
||||||
vlist.push_back(dbg.getY());
|
vlist.push_back(dbg.getY());
|
||||||
|
|
||||||
myCpuGrid->setList(alist, vlist);
|
for(int i = 0; i < 6; ++i) // FIXME - track changes in registers
|
||||||
|
changed.push_back(false);
|
||||||
|
myCpuGrid->setList(alist, vlist, changed);
|
||||||
|
|
||||||
// Update the PS register booleans
|
// Update the PS register booleans
|
||||||
BoolArray b;
|
BoolArray b;
|
||||||
|
|
|
@ -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: DataGridWidget.cxx,v 1.6 2005-07-02 21:15:22 stephena Exp $
|
// $Id: DataGridWidget.cxx,v 1.7 2005-07-03 00:53:59 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -64,30 +64,21 @@ DataGridWidget::~DataGridWidget()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void DataGridWidget::setList(const AddrList& alist, const ValueList& vlist)
|
void DataGridWidget::setList(const AddrList& alist, const ValueList& vlist,
|
||||||
|
const BoolArray& changed)
|
||||||
{
|
{
|
||||||
int size = vlist.size(); // assume the alist is the same size
|
int size = vlist.size(); // assume the alist is the same size
|
||||||
assert(size == _rows * _cols);
|
assert(size == _rows * _cols);
|
||||||
|
|
||||||
_addrList.clear();
|
_addrList.clear();
|
||||||
_addrStringList.clear();
|
_addrStringList.clear();
|
||||||
|
_valueList.clear();
|
||||||
_valueStringList.clear();
|
_valueStringList.clear();
|
||||||
_changedList.clear();
|
_changedList.clear();
|
||||||
|
|
||||||
// Check for any value changes since last time this method was called
|
|
||||||
if(_valueList.size() == 0)
|
|
||||||
{
|
|
||||||
for(int i = 0; i < size; ++i)
|
|
||||||
_changedList.push_back(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(int i = 0; i < size; ++i)
|
|
||||||
_changedList.push_back(_valueList[i] != vlist[i]);
|
|
||||||
}
|
|
||||||
_valueList.clear();
|
|
||||||
_addrList = alist;
|
_addrList = alist;
|
||||||
_valueList = vlist;
|
_valueList = vlist;
|
||||||
|
_changedList = changed;
|
||||||
|
|
||||||
// An efficiency thing
|
// An efficiency thing
|
||||||
string temp;
|
string temp;
|
||||||
|
|
|
@ -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: DataGridWidget.hxx,v 1.4 2005-07-02 21:15:22 stephena Exp $
|
// $Id: DataGridWidget.hxx,v 1.5 2005-07-03 00:53:59 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -50,7 +50,8 @@ class DataGridWidget : public EditableWidget, public CommandSender
|
||||||
int colchars, int range, BaseFormat format = kBASE_DEFAULT);
|
int colchars, int range, BaseFormat format = kBASE_DEFAULT);
|
||||||
virtual ~DataGridWidget();
|
virtual ~DataGridWidget();
|
||||||
|
|
||||||
void setList(const AddrList& alist, const ValueList& vlist);
|
void setList(const AddrList& alist, const ValueList& vlist,
|
||||||
|
const BoolArray& changed);
|
||||||
void setSelectedValue(int value);
|
void setSelectedValue(int value);
|
||||||
|
|
||||||
int getSelectedAddr() const { return _addrList[_selectedItem]; }
|
int getSelectedAddr() const { return _addrList[_selectedItem]; }
|
||||||
|
|
|
@ -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: RamWidget.cxx,v 1.11 2005-07-02 21:15:22 stephena Exp $
|
// $Id: RamWidget.cxx,v 1.12 2005-07-03 00:53:59 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -231,12 +231,15 @@ void RamWidget::fillGrid()
|
||||||
{
|
{
|
||||||
AddrList alist;
|
AddrList alist;
|
||||||
ValueList vlist;
|
ValueList vlist;
|
||||||
|
BoolArray changed;
|
||||||
|
|
||||||
|
Debugger& dbg = instance()->debugger();
|
||||||
for(unsigned int i = 0; i < kRamSize; i++)
|
for(unsigned int i = 0; i < kRamSize; i++)
|
||||||
{
|
{
|
||||||
alist.push_back(kRamStart + i);
|
alist.push_back(kRamStart + i);
|
||||||
vlist.push_back(instance()->debugger().readRAM(i));
|
vlist.push_back(dbg.readRAM(i));
|
||||||
|
changed.push_back(dbg.ramChanged(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
myRamGrid->setList(alist, vlist);
|
myRamGrid->setList(alist, vlist, changed);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue