mirror of
https://github.com/dingusdev/dingusppc.git
synced 2024-12-24 12:30:05 +00:00
viacuda: fix interrupts.
This commit is contained in:
parent
b38d00ce2d
commit
994f8d7155
@ -62,7 +62,6 @@ ViaCuda::ViaCuda() {
|
|||||||
|
|
||||||
this->_via_ifr = 0; // all flags cleared
|
this->_via_ifr = 0; // all flags cleared
|
||||||
this->_via_ier = 0; // all interrupts disabled
|
this->_via_ier = 0; // all interrupts disabled
|
||||||
this->irq = 0; // IRQ is not active
|
|
||||||
|
|
||||||
// intialize counters/timers
|
// intialize counters/timers
|
||||||
this->t1_counter = 0xFFFF;
|
this->t1_counter = 0xFFFF;
|
||||||
@ -249,11 +248,14 @@ void ViaCuda::print_enabled_ints() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void ViaCuda::update_irq() {
|
void ViaCuda::update_irq()
|
||||||
uint8_t new_irq = !!(this->_via_ifr & this->_via_ier & 0x7F);
|
{
|
||||||
this->_via_ifr = (this->_via_ifr & 0x7F) | (new_irq << 7);
|
uint8_t active_ints = this->_via_ifr & this->_via_ier & 0x7F;
|
||||||
if (new_irq != this->irq) {
|
if (active_ints != this->old_ifr) {
|
||||||
this->irq = new_irq;
|
uint8_t new_irq = !!active_ints;
|
||||||
|
this->_via_ifr = (active_ints) | (new_irq << 7);
|
||||||
|
this->old_ifr = active_ints;
|
||||||
|
LOG_F(6, "VIA: assert IRQ, IFR=0x%02X", this->_via_ifr);
|
||||||
this->int_ctrl->ack_int(this->irq_id, new_irq);
|
this->int_ctrl->ack_int(this->irq_id, new_irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -195,7 +195,7 @@ private:
|
|||||||
uint32_t irq_id;
|
uint32_t irq_id;
|
||||||
uint8_t _via_ifr;
|
uint8_t _via_ifr;
|
||||||
uint8_t _via_ier;
|
uint8_t _via_ier;
|
||||||
uint8_t irq;
|
uint8_t old_ifr = 0;
|
||||||
|
|
||||||
/* Cuda state. */
|
/* Cuda state. */
|
||||||
uint8_t old_tip;
|
uint8_t old_tip;
|
||||||
|
Loading…
Reference in New Issue
Block a user