merge more pic patches
This commit is contained in:
parent
f73cdfaeac
commit
360900d7bd
@ -699,6 +699,7 @@ void bx_pic_c::service_master_pic(void)
|
||||
return;
|
||||
}
|
||||
|
||||
isr = BX_PIC_THIS s.master_pic.isr;
|
||||
if (BX_PIC_THIS s.master_pic.special_mask) {
|
||||
/* all priorities may be enabled. check all IRR bits except ones
|
||||
* which have corresponding ISR bits set
|
||||
@ -707,9 +708,8 @@ void bx_pic_c::service_master_pic(void)
|
||||
}
|
||||
else { /* normal mode */
|
||||
/* Find the highest priority IRQ that is enabled due to current ISR */
|
||||
isr = BX_PIC_THIS s.master_pic.isr;
|
||||
max_irq = highest_priority;
|
||||
if (isr) {
|
||||
max_irq = highest_priority;
|
||||
while ((isr & (1 << max_irq)) == 0) {
|
||||
max_irq++;
|
||||
if(max_irq > 7)
|
||||
@ -719,8 +719,6 @@ void bx_pic_c::service_master_pic(void)
|
||||
* no other priorities allowed */
|
||||
if (max_irq > 7) BX_PANIC(("error in service_master_pic()"));
|
||||
}
|
||||
else
|
||||
max_irq = highest_priority; /* 0..7 bits in ISR are cleared */
|
||||
}
|
||||
|
||||
/* now, see if there are any higher priority requests */
|
||||
@ -730,7 +728,7 @@ void bx_pic_c::service_master_pic(void)
|
||||
/* for special mode, since we're looking at all IRQ's, skip if
|
||||
* current IRQ is already in-service
|
||||
*/
|
||||
if (! (BX_PIC_THIS s.master_pic.special_mask && ((BX_PIC_THIS s.master_pic.isr >> irq) & 0x01))) {
|
||||
if (! (BX_PIC_THIS s.master_pic.special_mask && ((isr >> irq) & 0x01))) {
|
||||
if (unmasked_requests & (1 << irq)) {
|
||||
BX_DEBUG(("signalling IRQ(%u)", (unsigned) irq));
|
||||
BX_PIC_THIS s.master_pic.INT = 1;
|
||||
@ -760,6 +758,7 @@ void bx_pic_c::service_slave_pic(void)
|
||||
return;
|
||||
}
|
||||
|
||||
isr = BX_PIC_THIS s.slave_pic.isr;
|
||||
if (BX_PIC_THIS s.slave_pic.special_mask) {
|
||||
/* all priorities may be enabled. check all IRR bits except ones
|
||||
* which have corresponding ISR bits set
|
||||
@ -768,9 +767,8 @@ void bx_pic_c::service_slave_pic(void)
|
||||
}
|
||||
else { /* normal mode */
|
||||
/* Find the highest priority IRQ that is enabled due to current ISR */
|
||||
isr = BX_PIC_THIS s.slave_pic.isr;
|
||||
max_irq = highest_priority;
|
||||
if (isr) {
|
||||
max_irq = highest_priority;
|
||||
while ((isr & (1 << max_irq)) == 0) {
|
||||
max_irq++;
|
||||
if(max_irq > 7)
|
||||
@ -778,10 +776,8 @@ void bx_pic_c::service_slave_pic(void)
|
||||
}
|
||||
if (max_irq == highest_priority) return; /* Highest priority interrupt in-service,
|
||||
* no other priorities allowed */
|
||||
if (max_irq > 7) BX_PANIC(("error in service_master_pic()"));
|
||||
if (max_irq > 7) BX_PANIC(("error in service_slave_pic()"));
|
||||
}
|
||||
else
|
||||
max_irq = highest_priority; /* 0..7 bits in ISR are cleared */
|
||||
}
|
||||
|
||||
/* now, see if there are any higher priority requests */
|
||||
@ -791,7 +787,7 @@ void bx_pic_c::service_slave_pic(void)
|
||||
/* for special mode, since we're looking at all IRQ's, skip if
|
||||
* current IRQ is already in-service
|
||||
*/
|
||||
if (! (BX_PIC_THIS s.slave_pic.special_mask && ((BX_PIC_THIS s.slave_pic.isr >> irq) & 0x01))) {
|
||||
if (! (BX_PIC_THIS s.slave_pic.special_mask && ((isr >> irq) & 0x01))) {
|
||||
if (unmasked_requests & (1 << irq)) {
|
||||
BX_DEBUG(("slave: signalling IRQ(%u)", (unsigned) 8 + irq));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user