'############################################################################################################### '############################################################################################################### '### F B - C O R E '############################################################################################################### '############################################################################################################### '### Version: 1.00.0 '### Revision: 0 '############################################################################################################### '### (c) 2008 By.: /_\ DeltaLab's Germany [experimental computing] '### Autor: Martin Wiemann '### Date of Idea: 2008.08.16 - 17:55:38 '############################################################################################################### '### Copy('s) of this code or a part of this IS allowed!!! '############################################################################################################### '############################################################################################################### Dim Shared G_IRQ_Calls(16) as Any Ptr '############################################################################################################### Declare Sub _irq0() Declare Sub _irq1() Declare Sub _irq2() Declare Sub _irq3() Declare Sub _irq4() Declare Sub _irq5() Declare Sub _irq6() Declare Sub _irq7() Declare Sub _irq8() Declare Sub _irq9() Declare Sub _irq10() Declare Sub _irq11() Declare Sub _irq12() Declare Sub _irq13() Declare Sub _irq14() Declare Sub _irq15() Declare Sub IRQ_Handler(V_Fault as ISR_Info_Type) '############################################################################################################### Private Function IRQ_SetCallback(V_IRQID as UByte, V_CallbackPtr as Any Ptr) as Integer If V_IRQID > 15 Then Return GURU_IRQ_IRQID_OutOfRange If G_IRQ_Calls(V_IRQID) <> 0 Then Return GURU_IRQ_IRQID_CallbackAlrightInstalled G_IRQ_Calls(V_IRQID) = V_CallbackPtr Return GURU_NoError End Function '-------------------------------------------------------------------------------------------------------------------- Private Function IRQ_UnSetCallback(V_IRQID as UByte) as Integer If V_IRQID > 15 Then Return GURU_IRQ_IRQID_OutOfRange If G_IRQ_Calls(V_IRQID) = 0 Then Return GURU_IRQ_IRQID_NoCallbackInstalled G_IRQ_Calls(V_IRQID) = 0 Return GURU_NoError End Function '############################################################################################################### Private Sub IRQ_Init() outb(&H20, &H11) outb(&HA0, &H11) outb(&H21, &H20) outb(&HA1, &H28) outb(&H21, &H04) outb(&HA1, &H02) outb(&H21, &H01) outb(&HA1, &H01) outb(&H21, &H0) outb(&HA1, &H0) Dim XSeg as UShort = &H08 Dim XFlag as UByte = &H8E IDT(32) = IDT_Create_New(32, @_irq0, XSeg, XFlag) IDT(33) = IDT_Create_New(33, @_irq1, XSeg, XFlag) IDT(34) = IDT_Create_New(34, @_irq2, XSeg, XFlag) IDT(35) = IDT_Create_New(35, @_irq3, XSeg, XFlag) IDT(36) = IDT_Create_New(36, @_irq4, XSeg, XFlag) IDT(37) = IDT_Create_New(37, @_irq5, XSeg, XFlag) IDT(38) = IDT_Create_New(38, @_irq6, XSeg, XFlag) IDT(39) = IDT_Create_New(39, @_irq7, XSeg, XFlag) IDT(40) = IDT_Create_New(40, @_irq8, XSeg, XFlag) IDT(41) = IDT_Create_New(41, @_irq9, XSeg, XFlag) IDT(42) = IDT_Create_New(42, @_irq10, XSeg, XFlag) IDT(43) = IDT_Create_New(43, @_irq11, XSeg, XFlag) IDT(44) = IDT_Create_New(44, @_irq12, XSeg, XFlag) IDT(45) = IDT_Create_New(45, @_irq13, XSeg, XFlag) IDT(46) = IDT_Create_New(46, @_irq14, XSeg, XFlag) IDT(47) = IDT_Create_New(47, @_irq15, XSeg, XFlag) Asm cli lidt [IDT_Selector] End Asm End Sub '############################################################################################################### Public Sub IRQ_Handler(V_Info as ISR_Info_Type) If G_IRQ_Calls(V_Info.V_int_no - 32) <> 0 Then Dim XHandler as Sub () XHandler = G_IRQ_Calls(V_Info.V_int_no - 32) XHandler() Else: Core_GURU_Error(V_Info.V_int_no, "IRQ_HANDLER", "IRQ-RAISED", "No function callback installed", 1) End If If V_Info.V_int_no >= 40 Then Outb(&HA0, &H20) Outb(&H20, &H20) End Sub