diff --git a/devices/floppy/swim3.cpp b/devices/floppy/swim3.cpp index b6333b3..c2da74e 100644 --- a/devices/floppy/swim3.cpp +++ b/devices/floppy/swim3.cpp @@ -171,10 +171,12 @@ void Swim3Ctrl::write(uint8_t reg_offset, uint8_t value) void Swim3Ctrl::update_irq() { - uint8_t new_irq = !!(this->int_flags & this->int_mask); - if (new_irq != this->irq) { - this->irq = new_irq; - this->int_ctrl->ack_int(this->irq_id, new_irq); + if (this->mode_reg & SWIM3_INT_ENA) { + uint8_t new_irq = !!(this->int_flags & this->int_mask); + if (new_irq != this->irq) { + this->irq = new_irq; + this->int_ctrl->ack_int(this->irq_id, new_irq); + } } } diff --git a/devices/floppy/swim3.h b/devices/floppy/swim3.h index d6050bc..2b5a154 100644 --- a/devices/floppy/swim3.h +++ b/devices/floppy/swim3.h @@ -55,6 +55,7 @@ enum Swim3Reg : uint8_t { /** Mode register bits. */ enum { + SWIM3_INT_ENA = 0x01, SWIM3_GO = 0x08, SWIM3_WR_MODE = 0x10, SWIM3_GO_STEP = 0x80,