mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-19 08:31:11 +00:00
Corrects RTS behaviour: the return address on the stack is off by one.
Dormann's tests now proceed to a BRK.
This commit is contained in:
parent
907c3374c3
commit
054e0af071
@ -455,6 +455,10 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
|
|||||||
pc_ = data_buffer_.value;
|
pc_ = data_buffer_.value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RTS:
|
||||||
|
pc_ = data_buffer_.value + 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case JSL:
|
case JSL:
|
||||||
program_bank_ = instruction_buffer_.value & 0xff0000;
|
program_bank_ = instruction_buffer_.value & 0xff0000;
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -678,7 +682,6 @@ template <typename BusHandler> void Processor<BusHandler>::run_for(const Cycles
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
// TODO:
|
// TODO:
|
||||||
// PHK,
|
|
||||||
// TRB, TSB,
|
// TRB, TSB,
|
||||||
// REP, SEP,
|
// REP, SEP,
|
||||||
// XCE, XBA,
|
// XCE, XBA,
|
||||||
|
@ -661,7 +661,7 @@ struct CPU::WDC65816::ProcessorStorageConstructor {
|
|||||||
target(CyclePull); // PCH
|
target(CyclePull); // PCH
|
||||||
target(CycleAccessStack); // IO
|
target(CycleAccessStack); // IO
|
||||||
|
|
||||||
target(OperationPerform); // [JMP, to perform the RTS]
|
target(OperationPerform); // [RTS]
|
||||||
}
|
}
|
||||||
|
|
||||||
// 22i. Stack; s, RTL.
|
// 22i. Stack; s, RTL.
|
||||||
@ -812,7 +812,7 @@ ProcessorStorage::ProcessorStorage() {
|
|||||||
/* 0x5e LSR a, x */ op(absolute_x_rmw, LSR);
|
/* 0x5e LSR a, x */ op(absolute_x_rmw, LSR);
|
||||||
/* 0x5f EOR al, x */ op(absolute_long_x, EOR);
|
/* 0x5f EOR al, x */ op(absolute_long_x, EOR);
|
||||||
|
|
||||||
/* 0x60 RTS s */ op(stack_rts, JMPind); // [sic]; loads the PC from data as per an RTS.
|
/* 0x60 RTS s */ op(stack_rts, RTS);
|
||||||
/* 0x61 ADC (d, x) */ op(direct_indexed_indirect, ADC);
|
/* 0x61 ADC (d, x) */ op(direct_indexed_indirect, ADC);
|
||||||
/* 0x62 PER s */ op(stack_per, NOP);
|
/* 0x62 PER s */ op(stack_per, NOP);
|
||||||
/* 0x63 ADC d, s */ op(stack_relative, ADC);
|
/* 0x63 ADC d, s */ op(stack_relative, ADC);
|
||||||
|
@ -191,6 +191,9 @@ enum Operation: uint8_t {
|
|||||||
/// placing the old PC into the data buffer (and only the PC; PBR not included).
|
/// placing the old PC into the data buffer (and only the PC; PBR not included).
|
||||||
JSL,
|
JSL,
|
||||||
|
|
||||||
|
/// Loads the PC with the contents of the data buffer + 1.
|
||||||
|
RTS,
|
||||||
|
|
||||||
/// i.e. jump to vector. TODO: is this really distinct from JMP? I'm assuming so for now,
|
/// i.e. jump to vector. TODO: is this really distinct from JMP? I'm assuming so for now,
|
||||||
/// as I assume the PBR is implicitly modified. But then is it just JML? We'll see.
|
/// as I assume the PBR is implicitly modified. But then is it just JML? We'll see.
|
||||||
BRK,
|
BRK,
|
||||||
|
Loading…
Reference in New Issue
Block a user