mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-29 12:50:28 +00:00
Add MOVEA, be slightly more careful about next_operand_.
This commit is contained in:
parent
4b07c41df9
commit
a7e8aef9d3
@ -20,7 +20,7 @@ namespace MC68000Mk2 {
|
|||||||
// TODO: BERR, interrupt inputs, etc; and obeying the trace flag.
|
// TODO: BERR, interrupt inputs, etc; and obeying the trace flag.
|
||||||
// Also, from Instruction.hpp:
|
// Also, from Instruction.hpp:
|
||||||
//
|
//
|
||||||
// MOVEAw, MOVEAl
|
// TRAP, TRAPV
|
||||||
//
|
//
|
||||||
// Not provided by a 68000: Bccl, BSRl
|
// Not provided by a 68000: Bccl, BSRl
|
||||||
|
|
||||||
@ -585,7 +585,9 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
StdCASE(EXTwtol, perform_state_ = Perform_np);
|
StdCASE(EXTwtol, perform_state_ = Perform_np);
|
||||||
|
|
||||||
StdCASE(MOVEb, perform_state_ = MOVE);
|
StdCASE(MOVEb, perform_state_ = MOVE);
|
||||||
|
Duplicate(MOVEAw, MOVEw)
|
||||||
StdCASE(MOVEw, perform_state_ = MOVE);
|
StdCASE(MOVEw, perform_state_ = MOVE);
|
||||||
|
Duplicate(MOVEAl, MOVEl)
|
||||||
StdCASE(MOVEl, perform_state_ = MOVE);
|
StdCASE(MOVEl, perform_state_ = MOVE);
|
||||||
|
|
||||||
StdCASE(CMPb, perform_state_ = Perform_np);
|
StdCASE(CMPb, perform_state_ = Perform_np);
|
||||||
@ -814,12 +816,10 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
|
|
||||||
StdCASE(LEA, {
|
StdCASE(LEA, {
|
||||||
post_ea_state_ = LEA;
|
post_ea_state_ = LEA;
|
||||||
next_operand_ = 0;
|
|
||||||
MoveToStateSpecific(CalcEffectiveAddress);
|
MoveToStateSpecific(CalcEffectiveAddress);
|
||||||
});
|
});
|
||||||
StdCASE(PEA, {
|
StdCASE(PEA, {
|
||||||
post_ea_state_ = PEA;
|
post_ea_state_ = PEA;
|
||||||
next_operand_ = 0;
|
|
||||||
MoveToStateSpecific(CalcEffectiveAddress);
|
MoveToStateSpecific(CalcEffectiveAddress);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -830,7 +830,6 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
// for the other cases.
|
// for the other cases.
|
||||||
if(instruction_.mode(0) != Mode::DataRegisterDirect) {
|
if(instruction_.mode(0) != Mode::DataRegisterDirect) {
|
||||||
post_ea_state_ = TAS;
|
post_ea_state_ = TAS;
|
||||||
next_operand_ = 0;
|
|
||||||
MoveToStateSpecific(CalcEffectiveAddress);
|
MoveToStateSpecific(CalcEffectiveAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1439,9 +1438,13 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
//
|
//
|
||||||
// Various generic forms of perform.
|
// Various generic forms of perform.
|
||||||
//
|
//
|
||||||
#define MoveToWritePhase() \
|
#define MoveToWritePhase() \
|
||||||
next_operand_ = 0; \
|
if(operand_flags_ & 0x0c) { \
|
||||||
if(operand_flags_ & 0x0c) MoveToStateSpecific(StoreOperand) else MoveToStateSpecific(Decode)
|
next_operand_ = 0; \
|
||||||
|
MoveToStateSpecific(StoreOperand); \
|
||||||
|
} else { \
|
||||||
|
MoveToStateSpecific(Decode); \
|
||||||
|
}
|
||||||
|
|
||||||
BeginState(Perform_np):
|
BeginState(Perform_np):
|
||||||
PerformDynamic();
|
PerformDynamic();
|
||||||
|
@ -87,7 +87,7 @@ struct ProcessorBase: public InstructionSet::M68k::NullFlowController {
|
|||||||
|
|
||||||
/// When fetching or storing operands, this is the next one to fetch
|
/// When fetching or storing operands, this is the next one to fetch
|
||||||
/// or store.
|
/// or store.
|
||||||
int next_operand_ = 0;
|
int next_operand_ = -1;
|
||||||
|
|
||||||
/// Storage for a temporary address, which can't be a local because it'll
|
/// Storage for a temporary address, which can't be a local because it'll
|
||||||
/// be used to populate microcycles, which may persist beyond an entry
|
/// be used to populate microcycles, which may persist beyond an entry
|
||||||
|
Loading…
Reference in New Issue
Block a user