Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

core_irq.bi

Uploader:MitgliedThePuppetMaster
Datum/Zeit:26.08.2008 22:11:40

'###############################################################################################################
'###############################################################################################################
'###   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