mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-25 16:31:42 +00:00
Fix downward block data transfers.
This commit is contained in:
parent
19fa0b8945
commit
bc27e3998d
@ -380,7 +380,11 @@ struct Executor {
|
|||||||
|
|
||||||
uint32_t final_address;
|
uint32_t final_address;
|
||||||
if constexpr (!flags.add_offset()) {
|
if constexpr (!flags.add_offset()) {
|
||||||
final_address = address + total * 4;
|
// Decrementing mode; final_address is the value the base register should
|
||||||
|
// have after this operation if writeback is enabled, so it's below
|
||||||
|
// the original address. But also writes always occur from lowest address
|
||||||
|
// to highest, so push the current address to the bottom.
|
||||||
|
final_address = address - total * 4;
|
||||||
address = final_address;
|
address = final_address;
|
||||||
} else {
|
} else {
|
||||||
final_address = address + total * 4;
|
final_address = address + total * 4;
|
||||||
|
@ -261,7 +261,7 @@ struct Interrupts {
|
|||||||
// IRQ A.
|
// IRQ A.
|
||||||
case 0x3200010 & AddressMask:
|
case 0x3200010 & AddressMask:
|
||||||
value = irq_a_.status;
|
value = irq_a_.status;
|
||||||
logger.error().append("IRQ A status is %02x", value);
|
// logger.error().append("IRQ A status is %02x", value);
|
||||||
return true;
|
return true;
|
||||||
case 0x3200014 & AddressMask:
|
case 0x3200014 & AddressMask:
|
||||||
value = irq_a_.request();
|
value = irq_a_.request();
|
||||||
@ -275,7 +275,7 @@ struct Interrupts {
|
|||||||
// IRQ B.
|
// IRQ B.
|
||||||
case 0x3200020 & AddressMask:
|
case 0x3200020 & AddressMask:
|
||||||
value = irq_b_.status;
|
value = irq_b_.status;
|
||||||
logger.error().append("IRQ B status is %02x", value);
|
// logger.error().append("IRQ B status is %02x", value);
|
||||||
return true;
|
return true;
|
||||||
case 0x3200024 & AddressMask:
|
case 0x3200024 & AddressMask:
|
||||||
value = irq_b_.request();
|
value = irq_b_.request();
|
||||||
@ -905,7 +905,7 @@ class ConcreteMachine:
|
|||||||
|
|
||||||
static bool log = false;
|
static bool log = false;
|
||||||
|
|
||||||
// if(executor_.pc() == 0x0380214c) {
|
// if(executor_.pc() == 0x03810398) {
|
||||||
// printf("");
|
// printf("");
|
||||||
// }
|
// }
|
||||||
// log |= (executor_.pc() > 0x02000000 && executor_.pc() < 0x02000078);
|
// log |= (executor_.pc() > 0x02000000 && executor_.pc() < 0x02000078);
|
||||||
|
Loading…
Reference in New Issue
Block a user