mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-10 23:31:24 +00:00
Fix state transitions.
Confirmed that the 68000 mk 2 now appears correctly to perform a reset.
This commit is contained in:
parent
e94efe887c
commit
c7aa4d8b6d
@ -27,9 +27,12 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
// 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()
|
||||||
|
|
||||||
// Performs ConsiderExit() only if permit_overrun is true
|
// Performs ConsiderExit() only if permit_overrun is true.
|
||||||
#define CheckOverrun() if constexpr (permit_overrun) ConsiderExit()
|
#define CheckOverrun() if constexpr (permit_overrun) ConsiderExit()
|
||||||
|
|
||||||
|
// Sets `x` as the next state, and exits now if all remaining time has been extended and permit_overrun is true.
|
||||||
|
#define MoveToState(x) state_ = x; if (permit_overrun && time_remaining_ <= HalfCycles(0)) return
|
||||||
|
|
||||||
//
|
//
|
||||||
// So basic structure is, in general:
|
// So basic structure is, in general:
|
||||||
//
|
//
|
||||||
@ -40,9 +43,8 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
// Spend(10);
|
// Spend(10);
|
||||||
// do_a_third_thing();
|
// do_a_third_thing();
|
||||||
// Spend(30);
|
// Spend(30);
|
||||||
// CheckOverrun();
|
|
||||||
//
|
//
|
||||||
// state_ = next_action;
|
// MoveToState(next_action);
|
||||||
// break;
|
// break;
|
||||||
//
|
//
|
||||||
// Additional notes:
|
// Additional notes:
|
||||||
@ -171,11 +173,11 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
IdleBus(1); // n
|
IdleBus(1); // n
|
||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
|
|
||||||
state_ = State::Dispatch;
|
MoveToState(State::Dispatch);
|
||||||
CheckOverrun();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: assert(false);
|
default:
|
||||||
|
assert(false);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
#undef CheckOverrun
|
#undef CheckOverrun
|
||||||
|
Loading…
x
Reference in New Issue
Block a user