mirror of https://github.com/stella-emu/stella.git
79 lines
2.0 KiB
C++
79 lines
2.0 KiB
C++
//============================================================================
|
|
//
|
|
// MM MM 6666 555555 0000 2222
|
|
// MMMM MMMM 66 66 55 00 00 22 22
|
|
// MM MMM MM 66 55 00 00 22
|
|
// MM M MM 66666 55555 00 00 22222 -- "A 6502 Microprocessor Emulator"
|
|
// MM MM 66 66 55 00 00 22
|
|
// MM MM 66 66 55 55 00 00 22
|
|
// MM MM 6666 5555 0000 222222
|
|
//
|
|
// Copyright (c) 1995-2020 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.
|
|
//============================================================================
|
|
|
|
#ifndef DISPATCH_RESULT_HXX
|
|
#define DISPATCH_RESULT_HXX
|
|
|
|
#include "bspf.hxx"
|
|
|
|
class DispatchResult
|
|
{
|
|
public:
|
|
enum class Status { invalid, ok, debugger, fatal };
|
|
|
|
public:
|
|
|
|
Status getStatus() const { return myStatus; }
|
|
|
|
uInt64 getCycles() const { return myCycles; }
|
|
|
|
const string& getMessage() const { assertStatus(Status::debugger, Status::fatal); return myMessage; }
|
|
|
|
int getAddress() const { assertStatus(Status::debugger); return myAddress; }
|
|
|
|
bool wasReadTrap() const { assertStatus(Status::debugger); return myWasReadTrap; }
|
|
|
|
bool isSuccess() const;
|
|
|
|
void setOk(uInt64 cycles);
|
|
|
|
void setDebugger(uInt64 cycles, const string& message = "", int address = -1,
|
|
bool wasReadTrap = true);
|
|
|
|
void setFatal(uInt64 cycles);
|
|
|
|
void setMessage(const string& message);
|
|
|
|
private:
|
|
|
|
void assertStatus(Status status) const
|
|
{
|
|
if (myStatus != status) throw runtime_error("invalid status for operation");
|
|
}
|
|
|
|
template<typename ...Ts> void assertStatus(Status status, Ts... more) const
|
|
{
|
|
if (myStatus == status) return;
|
|
|
|
assertStatus(more...);
|
|
}
|
|
|
|
private:
|
|
|
|
Status myStatus{Status::invalid};
|
|
|
|
uInt64 myCycles{0};
|
|
|
|
string myMessage;
|
|
|
|
int myAddress{0};
|
|
|
|
bool myWasReadTrap{false};
|
|
};
|
|
|
|
#endif // DISPATCH_RESULT_HXX
|