mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-19 23:29:05 +00:00
Causes the 65C02 not to accept interrupts immediately after untaken branches.
This commit is contained in:
parent
60e00ddd02
commit
592ec69d36
@ -533,7 +533,13 @@ if(number_of_cycles <= Cycles(0)) break;
|
|||||||
|
|
||||||
// MARK: - Branching
|
// MARK: - Branching
|
||||||
|
|
||||||
#define BRA(condition) pc_.full++; if(condition) scheduled_program_counter_ = do_branch
|
#define BRA(condition) \
|
||||||
|
pc_.full++; \
|
||||||
|
if(condition) { \
|
||||||
|
scheduled_program_counter_ = do_branch; \
|
||||||
|
} else if(is_65c02(personality)) { \
|
||||||
|
scheduled_program_counter_ = fetch_decode_execute; \
|
||||||
|
}
|
||||||
|
|
||||||
case OperationBPL: BRA(!(negative_result_&0x80)); continue;
|
case OperationBPL: BRA(!(negative_result_&0x80)); continue;
|
||||||
case OperationBMI: BRA(negative_result_&0x80); continue;
|
case OperationBMI: BRA(negative_result_&0x80); continue;
|
||||||
|
@ -160,8 +160,11 @@ class ProcessorStorage {
|
|||||||
OperationBCC, // schedules the branch program if the carry flag is clear
|
OperationBCC, // schedules the branch program if the carry flag is clear
|
||||||
OperationBCS, // schedules the branch program if the carry flag is set
|
OperationBCS, // schedules the branch program if the carry flag is set
|
||||||
OperationBNE, // schedules the branch program if the zero flag is clear
|
OperationBNE, // schedules the branch program if the zero flag is clear
|
||||||
OperationBEQ, // schedules the branch program if the zero flag is set
|
OperationBEQ, // schedules the branch program if the zero flag is set; 65C02: otherwise jumps straight into a fetch-decode-execute without considering whether to take an interrupt
|
||||||
OperationBRA, // schedules the branch program
|
OperationBRA, // schedules the branch program
|
||||||
|
// 65C02 modification to all branches: if the branch isn't taken, the next fetch-decode-execute
|
||||||
|
// sequence is scheduled immediately, without any possibility of responding to an interrupt.
|
||||||
|
// Cf. http://forum.6502.org/viewtopic.php?f=4&t=1634
|
||||||
|
|
||||||
OperationBBRBBS, // inspecting the operation_, if the appropriate bit of operand_ is set or clear schedules a program to read and act upon the second operand; otherwise schedule a program to read and discard it
|
OperationBBRBBS, // inspecting the operation_, if the appropriate bit of operand_ is set or clear schedules a program to read and act upon the second operand; otherwise schedule a program to read and discard it
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user