Fix special mask mode

This commit is contained in:
copy 2016-01-23 00:00:16 +01:00
parent 8602dde704
commit fd14f0232d

View file

@ -86,15 +86,9 @@ function PIC(cpu, master)
}
var irq_mask = enabled_irr & -enabled_irr;
var special_mask = this.special_mask_mode ? this.irq_mask : -1;
if(this.isr & irq_mask)
{
dbg_log("master> same prio: isr=" + h(this.isr, 2) +
" mask=" + h(this.irq_mask & 0xff, 2) + " irq=" + h(irq_mask, 2), LOG_PIC);
return false;
}
if(!this.special_mask_mode && this.isr && (this.isr & -this.isr) <= irq_mask)
if(this.isr && (this.isr & -this.isr & special_mask) <= irq_mask)
{
// wait for eoi of higher or same priority interrupt
dbg_log("master> higher prio: isr=" + h(this.isr, 2) +
@ -149,13 +143,9 @@ function PIC(cpu, master)
}
var irq_mask = enabled_irr & -enabled_irr;
var special_mask = this.special_mask_mode ? this.irq_mask : -1;
if(this.isr & irq_mask)
{
dbg_log("slave > higher prio: isr=" + h(this.isr, 2) + " irq=" + h(irq_mask, 2), LOG_PIC);
}
if(!this.special_mask_mode && this.isr && (this.isr & -this.isr) <= irq_mask)
if(this.isr && (this.isr & -this.isr & special_mask) <= irq_mask)
{
// wait for eoi of higher or same priority interrupt
dbg_log("slave > higher prio: isr=" + h(this.isr, 2) + " irq=" + h(irq_mask, 2), LOG_PIC);
@ -256,7 +246,7 @@ function PIC(cpu, master)
}
if(data_byte & 0x40)
{
this.special_mask_mode = data_byte & 0x20;
this.special_mask_mode = (data_byte & 0x20) === 0x20;
dbg_log("special mask mode: " + this.special_mask_mode, LOG_PIC);
}
}