Fix special mask mode
This commit is contained in:
parent
8602dde704
commit
fd14f0232d
20
src/pic.js
20
src/pic.js
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue