mirror of https://github.com/stella-emu/stella.git
segfault Stella protection added
some more small optimizations (fetch32 removed)
This commit is contained in:
parent
d188b5024f
commit
bb3075947b
|
@ -89,8 +89,10 @@ string Thumbulator::run()
|
||||||
#if defined(THUMB_DISS) || defined(THUMB_DBUG)
|
#if defined(THUMB_DISS) || defined(THUMB_DBUG)
|
||||||
dump_counters();
|
dump_counters();
|
||||||
cout << statusMsg.str() << endl;
|
cout << statusMsg.str() << endl;
|
||||||
#endif
|
|
||||||
return statusMsg.str();
|
return statusMsg.str();
|
||||||
|
#else
|
||||||
|
return "";
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -211,42 +213,6 @@ uInt32 Thumbulator::fetch16(uInt32 addr)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
uInt32 Thumbulator::fetch32(uInt32 addr)
|
|
||||||
{
|
|
||||||
uInt32 data;
|
|
||||||
switch(addr & 0xF0000000)
|
|
||||||
{
|
|
||||||
case 0x00000000: //ROM
|
|
||||||
if(addr < 0x50)
|
|
||||||
{
|
|
||||||
data = read32(addr);
|
|
||||||
DO_DBUG(statusMsg << "fetch32(" << Base::HEX8 << addr << ")=" << Base::HEX8 << data << endl);
|
|
||||||
if(addr == 0x00000000) return data;
|
|
||||||
if(addr == 0x00000004) return data;
|
|
||||||
#ifndef UNSAFE_OPTIMIZATIONS
|
|
||||||
if(addr == 0x0000003C) return data;
|
|
||||||
fatalError("fetch32", addr, "abort");
|
|
||||||
#else
|
|
||||||
return data;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
[[fallthrough]];
|
|
||||||
|
|
||||||
#ifndef UNSAFE_OPTIMIZATIONS
|
|
||||||
case 0x40000000: //RAM
|
|
||||||
#else
|
|
||||||
default:
|
|
||||||
#endif
|
|
||||||
data = read32(addr);
|
|
||||||
DO_DBUG(statusMsg << "fetch32(" << Base::HEX8 << addr << ")=" << Base::HEX8 << data << endl);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
#ifndef UNSAFE_OPTIMIZATIONS
|
|
||||||
return fatalError("fetch32", addr, "abort");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Thumbulator::write16(uInt32 addr, uInt32 data)
|
void Thumbulator::write16(uInt32 addr, uInt32 data)
|
||||||
{
|
{
|
||||||
|
@ -849,7 +815,7 @@ int Thumbulator::execute()
|
||||||
else
|
else
|
||||||
decodedOp = decodeInstructionWord(inst);
|
decodedOp = decodeInstructionWord(inst);
|
||||||
#else
|
#else
|
||||||
decodedOp = decodedRom[instructionPtr >> 1];
|
decodedOp = decodedRom[(instructionPtr & ROMADDMASK) >> 1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (decodedOp) {
|
switch (decodedOp) {
|
||||||
|
@ -2438,7 +2404,9 @@ int Thumbulator::execute()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#if defined(THUMB_DISS)
|
||||||
statusMsg << endl << endl << "swi 0x" << Base::HEX2 << rb << endl;
|
statusMsg << endl << endl << "swi 0x" << Base::HEX2 << rb << endl;
|
||||||
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2554,8 +2522,9 @@ int Thumbulator::reset()
|
||||||
#ifndef NO_THUMB_STATS
|
#ifndef NO_THUMB_STATS
|
||||||
fetches = reads = writes = 0;
|
fetches = reads = writes = 0;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef UNSAFE_OPTIMIZATIONS
|
||||||
statusMsg.str("");
|
statusMsg.str("");
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,7 +152,6 @@ class Thumbulator
|
||||||
uInt32 read_register(uInt32 reg);
|
uInt32 read_register(uInt32 reg);
|
||||||
void write_register(uInt32 reg, uInt32 data);
|
void write_register(uInt32 reg, uInt32 data);
|
||||||
uInt32 fetch16(uInt32 addr);
|
uInt32 fetch16(uInt32 addr);
|
||||||
uInt32 fetch32(uInt32 addr);
|
|
||||||
uInt32 read16(uInt32 addr);
|
uInt32 read16(uInt32 addr);
|
||||||
uInt32 read32(uInt32 addr);
|
uInt32 read32(uInt32 addr);
|
||||||
#ifndef UNSAFE_OPTIMIZATIONS
|
#ifndef UNSAFE_OPTIMIZATIONS
|
||||||
|
@ -208,9 +207,9 @@ class Thumbulator
|
||||||
uInt32 T1TC; // Timer 1 Timer Counter
|
uInt32 T1TC; // Timer 1 Timer Counter
|
||||||
double timing_factor;
|
double timing_factor;
|
||||||
|
|
||||||
|
#ifndef UNSAFE_OPTIMIZATIONS
|
||||||
ostringstream statusMsg;
|
ostringstream statusMsg;
|
||||||
|
|
||||||
#ifndef UNSAFE_OPTIMIZATIONS
|
|
||||||
static bool trapOnFatal;
|
static bool trapOnFatal;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue