mirror of https://github.com/stella-emu/stella.git
fixed a bug in branch cycle counting (now the test value is less than 0.1% off)
This commit is contained in:
parent
6175176a6a
commit
06c6c1ccaa
|
@ -49,7 +49,7 @@ void CartridgeARMWidget::addCycleWidgets(int xpos, int ypos)
|
|||
myCycleFactor = new SliderWidget(_boss, _font, myIncCycles->getRight() + _fontWidth * 2, ypos - 1,
|
||||
_fontWidth * 10, _lineHeight, "Cycle factor", _fontWidth * 14,
|
||||
kFactorChanged, _fontWidth * 4, "%");
|
||||
myCycleFactor->setMinValue(80); myCycleFactor->setMaxValue(100);
|
||||
myCycleFactor->setMinValue(90); myCycleFactor->setMaxValue(110);
|
||||
myCycleFactor->setTickmarkIntervals(4);
|
||||
myCycleFactor->setToolTip("Correct approximated ARM cycles by factor.");
|
||||
myCycleFactor->setTarget(this);
|
||||
|
|
|
@ -248,7 +248,7 @@ Settings::Settings()
|
|||
setPermanent("dev.thumb.trapfatal", "true");
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
setPermanent("dev.thumb.inccycles", "true");
|
||||
setPermanent("dev.thumb.cyclefactor", "0.95");
|
||||
setPermanent("dev.thumb.cyclefactor", "1.05");
|
||||
setPermanent("dev.thumb.chiptype", "0"); // = LPC2103
|
||||
setPermanent("dev.thumb.mammode", "2");
|
||||
#endif
|
||||
|
|
|
@ -629,8 +629,8 @@ void Thumbulator::write_register(uInt32 reg, uInt32 data, bool isFlowBreak)
|
|||
if(isFlowBreak)
|
||||
{
|
||||
// dummy fetch + fill the pipeline
|
||||
INC_N_CYCLES(reg_norm[15] + 4, AccessType::data);
|
||||
INC_S_CYCLES(data, AccessType::branch);
|
||||
INC_N_CYCLES(reg_norm[15] - 2, AccessType::prefetch);
|
||||
INC_S_CYCLES(data - 2, AccessType::branch);
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
@ -1176,13 +1176,14 @@ int Thumbulator::execute()
|
|||
|
||||
//B(1) conditional branch
|
||||
case Op::b1: {
|
||||
rb = (inst >> 0) & 0xFF;
|
||||
rb = inst & 0xFF;
|
||||
if(rb & 0x80)
|
||||
rb |= (~0U) << 8;
|
||||
op=(inst >> 8) & 0xF;
|
||||
rb <<= 1;
|
||||
rb += pc;
|
||||
rb += 2;
|
||||
|
||||
op = (inst >> 8) & 0xF;
|
||||
switch(op)
|
||||
{
|
||||
case 0x0: //b eq z set
|
||||
|
|
|
@ -300,7 +300,7 @@ class Thumbulator
|
|||
bool _lockMamcr{false};
|
||||
|
||||
#ifdef THUMB_CYCLE_COUNT
|
||||
double _armCyclesFactor{0.90};
|
||||
double _armCyclesFactor{1.05};
|
||||
CycleType _fetchCycleType{CycleType::S};
|
||||
#ifdef EMULATE_PIPELINE
|
||||
uInt32 _fetchPipeline{0}; // reserve fetch cycles resulting from pipelining (execution stage)
|
||||
|
|
Loading…
Reference in New Issue