mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-23 20:29:42 +00:00
The Copper can now skip Chipset::perform
.
This commit is contained in:
parent
54aa211f56
commit
bd69948d37
@ -808,7 +808,7 @@ void Chipset::update_interrupts() {
|
||||
void Chipset::perform(const CPU::MC68000::Microcycle &cycle) {
|
||||
using Microcycle = CPU::MC68000::Microcycle;
|
||||
|
||||
const uint32_t register_address = *cycle.address & 0x1fe;
|
||||
const uint32_t register_address = *cycle.address & ChipsetAddressMask;
|
||||
if(cycle.operation & Microcycle::Read) {
|
||||
cycle.set_value16(read<true>(register_address));
|
||||
} else {
|
||||
|
@ -110,6 +110,8 @@ class Chipset: private ClockingHint::Observer {
|
||||
// MARK: - Register read/write functions.
|
||||
template <bool allow_conversion> uint16_t read(uint32_t address);
|
||||
template <bool allow_conversion> void write(uint32_t address, uint16_t value);
|
||||
static constexpr uint32_t ChipsetAddressMask = 0x1fe;
|
||||
friend class Copper;
|
||||
|
||||
// MARK: - E Clock and keyboard dividers.
|
||||
|
||||
|
@ -114,14 +114,7 @@ bool Copper::advance_dma(uint16_t position, uint16_t blitter_status) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Construct a 68000-esque Microcycle in order to be able to perform the access.
|
||||
CPU::MC68000::Microcycle cycle;
|
||||
cycle.operation = CPU::MC68000::Microcycle::SelectWord;
|
||||
uint32_t full_address = instruction_[0];
|
||||
CPU::RegisterPair16 data = instruction_[1];
|
||||
cycle.address = &full_address;
|
||||
cycle.value = &data;
|
||||
chipset_.perform(cycle);
|
||||
chipset_.write<true>(instruction_[0] & Chipset::ChipsetAddressMask, instruction_[1]);
|
||||
}
|
||||
|
||||
// Roll onto the next command.
|
||||
|
Loading…
Reference in New Issue
Block a user