mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-19 07:31:15 +00:00
Enable 6502 for 'exhaustive' disassembly.
This commit is contained in:
parent
34c631ed3b
commit
e42a2578da
@ -236,7 +236,7 @@ static void AddToDisassembly(PartialDisassembly &disassembly, const std::vector<
|
||||
case Instruction::Relative: {
|
||||
std::size_t operand_address = address_mapper(address);
|
||||
if(operand_address >= memory.size()) return;
|
||||
address++;
|
||||
++address;
|
||||
|
||||
instruction.operand = memory[operand_address];
|
||||
}
|
||||
@ -291,20 +291,34 @@ static void AddToDisassembly(PartialDisassembly &disassembly, const std::vector<
|
||||
}
|
||||
|
||||
// Decide on overall flow control.
|
||||
if(instruction.operation == Instruction::RTS || instruction.operation == Instruction::RTI) return;
|
||||
if(instruction.operation == Instruction::BRK) return; // TODO: check whether IRQ vector is within memory range
|
||||
if(instruction.operation == Instruction::JSR) {
|
||||
disassembly.remaining_entry_points.push_back(instruction.operand);
|
||||
}
|
||||
if(instruction.operation == Instruction::JMP) {
|
||||
if(instruction.addressing_mode == Instruction::Absolute)
|
||||
disassembly.remaining_entry_points.push_back(instruction.operand);
|
||||
return;
|
||||
}
|
||||
|
||||
// All relative instructions are flow control.
|
||||
if(instruction.addressing_mode == Instruction::Relative) {
|
||||
uint16_t destination = uint16_t(address + int8_t(instruction.operand));
|
||||
disassembly.remaining_entry_points.push_back(destination);
|
||||
}
|
||||
|
||||
switch(instruction.operation) {
|
||||
default: break;
|
||||
|
||||
case Instruction::KIL:
|
||||
case Instruction::RTS:
|
||||
case Instruction::RTI:
|
||||
case Instruction::BRK: // TODO: check whether IRQ vector is within memory range.
|
||||
disassembly.implicit_entry_points.push_back(address);
|
||||
return;
|
||||
|
||||
case Instruction::JMP:
|
||||
// Adding a new entry point for relative jumps was handled above.
|
||||
if(instruction.addressing_mode == Instruction::Absolute) {
|
||||
disassembly.remaining_entry_points.push_back(instruction.operand);
|
||||
}
|
||||
return;
|
||||
|
||||
case Instruction::JSR:
|
||||
disassembly.remaining_entry_points.push_back(instruction.operand);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user