mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-15 20:31:36 +00:00
Merge pull request #1057 from TomHarte/ContinuousLabels
68000: Eliminate large gap in `case` values.
This commit is contained in:
commit
970087eefb
@ -24,7 +24,7 @@ namespace MC68000Mk2 {
|
|||||||
/// me for their purpose rather than automatically by file position.
|
/// me for their purpose rather than automatically by file position.
|
||||||
/// These are negative to avoid ambiguity with the other group.
|
/// These are negative to avoid ambiguity with the other group.
|
||||||
enum ExecutionState: int {
|
enum ExecutionState: int {
|
||||||
Reset = std::numeric_limits<int>::min(),
|
Reset,
|
||||||
Decode,
|
Decode,
|
||||||
WaitForDTACK,
|
WaitForDTACK,
|
||||||
WaitForInterrupt,
|
WaitForInterrupt,
|
||||||
@ -189,6 +189,8 @@ enum ExecutionState: int {
|
|||||||
MOVE_b, MOVE_w,
|
MOVE_b, MOVE_w,
|
||||||
AddressingDispatch(MOVE_bw), MOVE_bw_AbsoluteLong_prefetch_first,
|
AddressingDispatch(MOVE_bw), MOVE_bw_AbsoluteLong_prefetch_first,
|
||||||
AddressingDispatch(MOVE_l), MOVE_l_AbsoluteLong_prefetch_first,
|
AddressingDispatch(MOVE_l), MOVE_l_AbsoluteLong_prefetch_first,
|
||||||
|
|
||||||
|
Max
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef AddressingDispatch
|
#undef AddressingDispatch
|
||||||
@ -214,7 +216,7 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
|
|
||||||
// Check whether all remaining time has been expended; if so then exit, having set this line up as
|
// Check whether all remaining time has been expended; if so then exit, having set this line up as
|
||||||
// the next resumption point.
|
// the next resumption point.
|
||||||
#define ConsiderExit() if(time_remaining_ < HalfCycles(0)) { state_ = __COUNTER__+1; return; } [[fallthrough]]; case __COUNTER__:
|
#define ConsiderExit() if(time_remaining_ < HalfCycles(0)) { state_ = ExecutionState::Max+__COUNTER__+1; return; } [[fallthrough]]; case ExecutionState::Max+__COUNTER__:
|
||||||
|
|
||||||
// Subtracts `n` half-cycles from `time_remaining_`; if permit_overrun is false, also ConsiderExit()
|
// Subtracts `n` half-cycles from `time_remaining_`; if permit_overrun is false, also ConsiderExit()
|
||||||
#define Spend(n) time_remaining_ -= (n); if constexpr (!permit_overrun) ConsiderExit()
|
#define Spend(n) time_remaining_ -= (n); if constexpr (!permit_overrun) ConsiderExit()
|
||||||
@ -296,11 +298,11 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
if constexpr (!dtack_is_implicit && !dtack_ && !vpa_ && !berr_) { \
|
if constexpr (!dtack_is_implicit && !dtack_ && !vpa_ && !berr_) { \
|
||||||
awaiting_dtack = x; \
|
awaiting_dtack = x; \
|
||||||
awaiting_dtack.length = HalfCycles(2); \
|
awaiting_dtack.length = HalfCycles(2); \
|
||||||
post_dtack_state_ = __COUNTER__+1; \
|
post_dtack_state_ = ExecutionState::Max+__COUNTER__+1; \
|
||||||
state_ = ExecutionState::WaitForDTACK; \
|
state_ = ExecutionState::WaitForDTACK; \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
[[fallthrough]]; case __COUNTER__:
|
[[fallthrough]]; case ExecutionState::Max+__COUNTER__:
|
||||||
|
|
||||||
// Performs the bus operation provided, which will be one with a
|
// Performs the bus operation provided, which will be one with a
|
||||||
// SelectWord or SelectByte operation, stretching it to match the E
|
// SelectWord or SelectByte operation, stretching it to match the E
|
||||||
|
@ -25,7 +25,7 @@ struct ProcessorBase: public InstructionSet::M68k::NullFlowController {
|
|||||||
ProcessorBase(const ProcessorBase& rhs) = delete;
|
ProcessorBase(const ProcessorBase& rhs) = delete;
|
||||||
ProcessorBase& operator=(const ProcessorBase& rhs) = delete;
|
ProcessorBase& operator=(const ProcessorBase& rhs) = delete;
|
||||||
|
|
||||||
int state_ = std::numeric_limits<int>::min();
|
int state_ = 0;
|
||||||
|
|
||||||
/// Counts time left on the clock before the current batch of processing
|
/// Counts time left on the clock before the current batch of processing
|
||||||
/// is complete; may be less than zero.
|
/// is complete; may be less than zero.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user