void IRQ_Handler(tRegs *Regs)
{
int i, irq = Regs->int_num - 0xF0;
+ int bHandled = 0;
//Log("IRQ_Handler: (Regs={int_num:%i})", Regs->int_num);
if( irq != 8 )
Log("IRQ %i: Call %p", Regs->int_num, gIRQ_Handlers[Regs->int_num][i]);
#endif
+ bHandled = 1;
}
}
+
+ if( !bHandled ) {
+ Log_Debug("IRQ", "Unhandled IRQ %i", irq);
+ }
//Log(" IRQ_Handler: Resetting");
if(irq >= 8)
int i;
for( i = 0; i < MAX_CALLBACKS_PER_IRQ; i++ )
{
- if( gIRQ_Handlers[Num][i] == NULL ) {
+ if( gIRQ_Handlers[Num][i] == NULL )
+ {
Log_Log("IRQ", "Added IRQ%i Cb#%i %p", Num, i, Callback);
gIRQ_Handlers[Num][i] = Callback;
gaIRQ_DataPointers[Num][i] = Ptr;
- return 1;
+ return Num * MAX_CALLBACKS_PER_IRQ + i;
}
}
Log_Warning("IRQ", "No free callbacks on IRQ%i", Num);
- return 0;
+ return -1;
+}
+
+void IRQ_RemHandler(int Handle)
+{
+ int Num = Handle / MAX_CALLBACKS_PER_IRQ;
+ int id = Handle % MAX_CALLBACKS_PER_IRQ;
+ gIRQ_Handlers[Num][id] = NULL;
}