mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 08:49:37 +00:00
At huge copy-and-paste cost, fix MOVE.l.
This commit is contained in:
parent
bfd0b683bf
commit
48d51759cd
@ -110,13 +110,6 @@ enum ExecutionState: int {
|
|||||||
Perform_np_n,
|
Perform_np_n,
|
||||||
Perform_np_nn,
|
Perform_np_nn,
|
||||||
|
|
||||||
MOVE,
|
|
||||||
MOVE_predec,
|
|
||||||
MOVE_predec_l,
|
|
||||||
MOVE_prefetch_decode,
|
|
||||||
MOVE_complete,
|
|
||||||
MOVE_complete_l,
|
|
||||||
|
|
||||||
TwoOp_Predec_bw,
|
TwoOp_Predec_bw,
|
||||||
TwoOp_Predec_l,
|
TwoOp_Predec_l,
|
||||||
|
|
||||||
@ -194,6 +187,7 @@ 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef AddressingDispatch
|
#undef AddressingDispatch
|
||||||
@ -756,7 +750,7 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Duplicate(MOVEAw, MOVEw)
|
Duplicate(MOVEAw, MOVEw)
|
||||||
StdCASE(MOVEw, perform_state_ = MOVE_w);
|
StdCASE(MOVEw, perform_state_ = MOVE_w);
|
||||||
Duplicate(MOVEAl, MOVEl)
|
Duplicate(MOVEAl, MOVEl)
|
||||||
StdCASE(MOVEl, perform_state_ = MOVE);
|
StdCASE(MOVEl, perform_state_ = MOVE_l);
|
||||||
|
|
||||||
StdCASE(CMPb, perform_state_ = Perform_np);
|
StdCASE(CMPb, perform_state_ = Perform_np);
|
||||||
StdCASE(CMPw, perform_state_ = Perform_np);
|
StdCASE(CMPw, perform_state_ = Perform_np);
|
||||||
@ -1121,6 +1115,8 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
operand_[next_operand_] = registers_[instruction_.lreg(next_operand_)];
|
operand_[next_operand_] = registers_[instruction_.lreg(next_operand_)];
|
||||||
MoveToNextOperand(FetchOperand_l);
|
MoveToNextOperand(FetchOperand_l);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterDirect):
|
||||||
|
BeginStateMode(MOVE_l, DataRegisterDirect):
|
||||||
BeginStateMode(MOVE_bw, AddressRegisterDirect):
|
BeginStateMode(MOVE_bw, AddressRegisterDirect):
|
||||||
registers_[instruction_.reg(1)] = operand_[1];
|
registers_[instruction_.reg(1)] = operand_[1];
|
||||||
Prefetch();
|
Prefetch();
|
||||||
@ -1160,14 +1156,26 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
MoveToNextOperand(FetchOperand_bw);
|
MoveToNextOperand(FetchOperand_bw);
|
||||||
|
|
||||||
BeginStateMode(MOVE_bw, AddressRegisterIndirect):
|
BeginStateMode(MOVE_bw, AddressRegisterIndirect):
|
||||||
effective_address_[1].l = registers_[8 + instruction_.reg(1)].l;
|
SetDataAddress(registers_[8 + instruction_.reg(1)].l);
|
||||||
SetDataAddress(effective_address_[1].l);
|
|
||||||
SetupDataAccess(0, data_select(instruction_));
|
SetupDataAccess(0, data_select(instruction_));
|
||||||
|
|
||||||
Access(operand_[next_operand_].low); // nw
|
Access(operand_[next_operand_].low); // nw
|
||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterIndirect):
|
||||||
|
effective_address_[1] = registers_[8 + instruction_.reg(1)];
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nW
|
||||||
|
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AddressRegisterIndirect):
|
BeginStateMode(FetchOperand_l, AddressRegisterIndirect):
|
||||||
effective_address_[next_operand_].l = registers_[8 + instruction_.reg(next_operand_)].l;
|
effective_address_[next_operand_].l = registers_[8 + instruction_.reg(next_operand_)].l;
|
||||||
SetDataAddress(effective_address_[next_operand_].l);
|
SetDataAddress(effective_address_[next_operand_].l);
|
||||||
@ -1205,13 +1213,25 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
MoveToNextOperand(FetchOperand_bw);
|
MoveToNextOperand(FetchOperand_bw);
|
||||||
|
|
||||||
BeginStateMode(MOVE_bw, AddressRegisterIndirectWithPostincrement):
|
BeginStateMode(MOVE_bw, AddressRegisterIndirectWithPostincrement):
|
||||||
effective_address_[1].l = registers_[8 + instruction_.reg(1)].l;
|
SetDataAddress(registers_[8 + instruction_.reg(1)].l);
|
||||||
|
SetupDataAccess(0, data_select(instruction_));
|
||||||
|
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
|
||||||
registers_[8 + instruction_.reg(next_operand_)].l +=
|
registers_[8 + instruction_.reg(next_operand_)].l +=
|
||||||
address_increments[int(instruction_.operand_size())][instruction_.reg(1)];
|
address_increments[int(instruction_.operand_size())][instruction_.reg(1)];
|
||||||
|
|
||||||
SetDataAddress(effective_address_[1].l);
|
Prefetch(); // np
|
||||||
SetupDataAccess(0, data_select(instruction_));
|
MoveToStateSpecific(Decode);
|
||||||
Access(operand_[next_operand_].low); // nw
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterIndirectWithPostincrement):
|
||||||
|
SetDataAddress(registers_[8 + instruction_.reg(next_operand_)].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
registers_[8 + instruction_.reg(next_operand_)].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nW
|
||||||
|
registers_[8 + instruction_.reg(next_operand_)].l += 2;
|
||||||
|
|
||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
@ -1257,6 +1277,18 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Access(operand_[next_operand_].low); // nw
|
Access(operand_[next_operand_].low); // nw
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterIndirectWithPredecrement):
|
||||||
|
SetDataAddress(registers_[8 + instruction_.reg(1)].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Prefetch(); // np
|
||||||
|
|
||||||
|
registers_[8 + instruction_.reg(1)].l -= 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
registers_[8 + instruction_.reg(1)].l -= 2;
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithPredecrement):
|
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithPredecrement):
|
||||||
registers_[8 + instruction_.reg(next_operand_)].l -= 4;
|
registers_[8 + instruction_.reg(next_operand_)].l -= 4;
|
||||||
effective_address_[next_operand_].l = registers_[8 + instruction_.reg(next_operand_)].l;
|
effective_address_[next_operand_].l = registers_[8 + instruction_.reg(next_operand_)].l;
|
||||||
@ -1304,6 +1336,21 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterIndirectWithDisplacement):
|
||||||
|
effective_address_[1].l =
|
||||||
|
registers_[8 + instruction_.reg(1)].l +
|
||||||
|
uint32_t(int16_t(prefetch_.w));
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithDisplacement):
|
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithDisplacement):
|
||||||
effective_address_[next_operand_].l =
|
effective_address_[next_operand_].l =
|
||||||
registers_[8 + instruction_.reg(next_operand_)].l +
|
registers_[8 + instruction_.reg(next_operand_)].l +
|
||||||
@ -1365,6 +1412,21 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, ProgramCounterIndirectWithDisplacement):
|
||||||
|
effective_address_[1].l =
|
||||||
|
program_counter_.l - 2 +
|
||||||
|
uint32_t(int16_t(prefetch_.w));
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, ProgramCounterIndirectWithDisplacement):
|
BeginStateMode(FetchOperand_l, ProgramCounterIndirectWithDisplacement):
|
||||||
effective_address_[next_operand_].l =
|
effective_address_[next_operand_].l =
|
||||||
program_counter_.l - 2 +
|
program_counter_.l - 2 +
|
||||||
@ -1431,6 +1493,20 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AddressRegisterIndirectWithIndex8bitDisplacement):
|
||||||
|
effective_address_[1].l = d8Xn(registers_[8 + instruction_.reg(1)].l);
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
IdleBus(1); // n
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithIndex8bitDisplacement):
|
BeginStateMode(FetchOperand_l, AddressRegisterIndirectWithIndex8bitDisplacement):
|
||||||
effective_address_[next_operand_].l = d8Xn(registers_[8 + instruction_.reg(next_operand_)].l);
|
effective_address_[next_operand_].l = d8Xn(registers_[8 + instruction_.reg(next_operand_)].l);
|
||||||
SetDataAddress(effective_address_[next_operand_].l);
|
SetDataAddress(effective_address_[next_operand_].l);
|
||||||
@ -1495,6 +1571,20 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, ProgramCounterIndirectWithIndex8bitDisplacement):
|
||||||
|
effective_address_[1].l = d8Xn(program_counter_.l - 2);
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
IdleBus(1); // n
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, ProgramCounterIndirectWithIndex8bitDisplacement):
|
BeginStateMode(FetchOperand_l, ProgramCounterIndirectWithIndex8bitDisplacement):
|
||||||
effective_address_[next_operand_].l = d8Xn(program_counter_.l - 2);
|
effective_address_[next_operand_].l = d8Xn(program_counter_.l - 2);
|
||||||
SetDataAddress(effective_address_[next_operand_].l);
|
SetDataAddress(effective_address_[next_operand_].l);
|
||||||
@ -1559,6 +1649,19 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AbsoluteShort):
|
||||||
|
effective_address_[1].l = uint32_t(int16_t(prefetch_.w));
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AbsoluteShort):
|
BeginStateMode(FetchOperand_l, AbsoluteShort):
|
||||||
effective_address_[next_operand_].l = uint32_t(int16_t(prefetch_.w));
|
effective_address_[next_operand_].l = uint32_t(int16_t(prefetch_.w));
|
||||||
SetDataAddress(effective_address_[next_operand_].l);
|
SetDataAddress(effective_address_[next_operand_].l);
|
||||||
@ -1626,6 +1729,38 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
MoveToStateSpecific(Decode);
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginStateMode(MOVE_l, AbsoluteLong):
|
||||||
|
Prefetch(); // np
|
||||||
|
|
||||||
|
effective_address_[1].l = prefetch_.l;
|
||||||
|
|
||||||
|
SetDataAddress(effective_address_[1].l);
|
||||||
|
SetupDataAccess(0, Microcycle::SelectWord);
|
||||||
|
|
||||||
|
switch(instruction_.mode(0)) {
|
||||||
|
case Mode::AddressRegisterDirect:
|
||||||
|
case Mode::DataRegisterDirect:
|
||||||
|
case Mode::ImmediateData:
|
||||||
|
MoveToStateSpecific(MOVE_l_AbsoluteLong_prefetch_first);
|
||||||
|
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
|
BeginState(MOVE_l_AbsoluteLong_prefetch_first):
|
||||||
|
Prefetch(); // np
|
||||||
|
Access(operand_[next_operand_].high); // nW
|
||||||
|
effective_address_[1].l += 2;
|
||||||
|
Access(operand_[next_operand_].low); // nw
|
||||||
|
Prefetch(); // np
|
||||||
|
MoveToStateSpecific(Decode);
|
||||||
|
|
||||||
BeginStateMode(FetchOperand_l, AbsoluteLong):
|
BeginStateMode(FetchOperand_l, AbsoluteLong):
|
||||||
Prefetch(); // np
|
Prefetch(); // np
|
||||||
|
|
||||||
@ -1794,107 +1929,9 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
// Specific forms of perform...
|
// Specific forms of perform...
|
||||||
//
|
//
|
||||||
|
|
||||||
BeginState(MOVE):
|
//
|
||||||
PerformDynamic();
|
// MOVE
|
||||||
|
//
|
||||||
// In all cases except predecrement mode: do the usual address
|
|
||||||
// calculate and storage, then do the next prefetch and decode.
|
|
||||||
//
|
|
||||||
// In predecrement mode: do the prefetch, then write the result.
|
|
||||||
//
|
|
||||||
// For here, lump data and address register direct in with predec,
|
|
||||||
// so that all that's left is modes that write to memory and then
|
|
||||||
// prefetch.
|
|
||||||
switch(instruction_.mode(1)) {
|
|
||||||
case Mode::DataRegisterDirect: {
|
|
||||||
const uint32_t write_mask = size_masks[int(instruction_.operand_size())];
|
|
||||||
const int reg = instruction_.reg(1);
|
|
||||||
|
|
||||||
registers_[reg].l =
|
|
||||||
(operand_[1].l & write_mask) |
|
|
||||||
(registers_[reg].l & ~write_mask);
|
|
||||||
}
|
|
||||||
MoveToStateSpecific(MOVE_prefetch_decode);
|
|
||||||
|
|
||||||
case Mode::AddressRegisterDirect:
|
|
||||||
registers_[8 + instruction_.reg(1)].l = operand_[1].l;
|
|
||||||
MoveToStateSpecific(MOVE_prefetch_decode);
|
|
||||||
|
|
||||||
case Mode::AddressRegisterIndirectWithPredecrement:
|
|
||||||
MoveToStateSpecific(MOVE_predec);
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
next_operand_ = 1;
|
|
||||||
post_ea_state_ = MOVE_complete;
|
|
||||||
MoveToStateSpecific(CalcEffectiveAddress);
|
|
||||||
|
|
||||||
BeginState(MOVE_prefetch_decode):
|
|
||||||
Prefetch();
|
|
||||||
MoveToStateSpecific(Decode);
|
|
||||||
|
|
||||||
BeginState(MOVE_predec):
|
|
||||||
Prefetch();
|
|
||||||
|
|
||||||
SetDataAddress(registers_[8 + instruction_.reg(1)].l);
|
|
||||||
switch(instruction_.operand_size()) {
|
|
||||||
case InstructionSet::M68k::DataSize::LongWord:
|
|
||||||
MoveToStateSpecific(MOVE_predec_l);
|
|
||||||
|
|
||||||
case InstructionSet::M68k::DataSize::Word:
|
|
||||||
SetupDataAccess(0, Microcycle::SelectWord);
|
|
||||||
registers_[8 + instruction_.reg(1)].l -= 2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case InstructionSet::M68k::DataSize::Byte:
|
|
||||||
SetupDataAccess(0, Microcycle::SelectByte);
|
|
||||||
registers_[8 + instruction_.reg(1)].l -=
|
|
||||||
address_increments[0][instruction_.reg(next_operand_)];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
SetDataAddress(registers_[8 + instruction_.reg(1)].l);
|
|
||||||
Access(operand_[1].low);
|
|
||||||
MoveToStateSpecific(Decode);
|
|
||||||
|
|
||||||
BeginState(MOVE_predec_l):
|
|
||||||
SetupDataAccess(0, Microcycle::SelectWord);
|
|
||||||
|
|
||||||
registers_[8 + instruction_.reg(1)].l -= 2;
|
|
||||||
Access(operand_[1].low);
|
|
||||||
registers_[8 + instruction_.reg(1)].l -= 2;
|
|
||||||
Access(operand_[1].high);
|
|
||||||
MoveToStateSpecific(Decode);
|
|
||||||
|
|
||||||
BeginState(MOVE_complete):
|
|
||||||
SetDataAddress(effective_address_[1].l);
|
|
||||||
|
|
||||||
switch(instruction_.operand_size()) {
|
|
||||||
case InstructionSet::M68k::DataSize::LongWord:
|
|
||||||
SetupDataAccess(0, Microcycle::SelectWord);
|
|
||||||
MoveToStateSpecific(MOVE_complete_l);
|
|
||||||
|
|
||||||
case InstructionSet::M68k::DataSize::Word:
|
|
||||||
SetupDataAccess(0, Microcycle::SelectWord);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case InstructionSet::M68k::DataSize::Byte:
|
|
||||||
SetupDataAccess(0, Microcycle::SelectByte);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Access(operand_[1].low);
|
|
||||||
Prefetch();
|
|
||||||
MoveToStateSpecific(Decode);
|
|
||||||
|
|
||||||
BeginState(MOVE_complete_l):
|
|
||||||
Access(operand_[1].high);
|
|
||||||
effective_address_[1].l += 2;
|
|
||||||
Access(operand_[1].low);
|
|
||||||
Prefetch();
|
|
||||||
MoveToStateSpecific(Decode);
|
|
||||||
|
|
||||||
BeginState(MOVE_b):
|
BeginState(MOVE_b):
|
||||||
PerformSpecific(MOVEb);
|
PerformSpecific(MOVEb);
|
||||||
MoveToAddressingMode(MOVE_bw, instruction_.mode(1));
|
MoveToAddressingMode(MOVE_bw, instruction_.mode(1));
|
||||||
@ -1903,6 +1940,10 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
|
|||||||
PerformSpecific(MOVEw);
|
PerformSpecific(MOVEw);
|
||||||
MoveToAddressingMode(MOVE_bw, instruction_.mode(1));
|
MoveToAddressingMode(MOVE_bw, instruction_.mode(1));
|
||||||
|
|
||||||
|
BeginState(MOVE_l):
|
||||||
|
PerformSpecific(MOVEl);
|
||||||
|
MoveToAddressingMode(MOVE_l, instruction_.mode(1));
|
||||||
|
|
||||||
//
|
//
|
||||||
// [ABCD/SBCD/SUBX/ADDX] (An)-, (An)-
|
// [ABCD/SBCD/SUBX/ADDX] (An)-, (An)-
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user