fb:porticula NoPaste
core_gdt.bi
Uploader: | ThePuppetMaster |
Datum/Zeit: | 26.08.2008 22:09:04 |
'###############################################################################################################
'###############################################################################################################
'### F B - C O R E
'###############################################################################################################
'###############################################################################################################
'### Version: 1.00.0
'### Revision: 0
'###############################################################################################################
'### (c) 2008 By.: /_\ DeltaLab's Germany [experimental computing]
'### Author: Martin Wiemann
'### Date of Idea: 2008.08.16 - 17:55:38
'###############################################################################################################
'### Copy('s) of this code or a part of this IS allowed!!!
'###############################################################################################################
'###############################################################################################################
Type Selector_Type Field = 1
V_Limit as UShort
V_BaseAdr as UInteger
End Type
'--------------------------------------------------------------------------------------------------------------------
Dim Shared GDT_Selector as Selector_Type
'###############################################################################################################
Type GDT_Segment_Type Field = 1
V_SegSize as UShort
V_SegAdr0 as UShort
V_SegAdr1 as UByte
V_TypeAccess as UByte
V_AddInfo as UByte
V_SegAdr2 as UByte
End Type
'--------------------------------------------------------------------------------------------------------------------
Type GDT_Type Field = 1
V_Null as GDT_Segment_Type
V_Code as GDT_Segment_Type
V_Data as GDT_Segment_Type
End Type
'--------------------------------------------------------------------------------------------------------------------
Dim Shared GDT as GDT_Type
'###############################################################################################################
Private Sub GDT_Init()
With GDT.V_Null
.V_SegSize = &H0
.V_SegAdr0 = &H0
.V_SegAdr1 = &H0
.V_TypeAccess = &H0
.V_AddInfo = &H0
.V_SegAdr2 = &H0
End With
With GDT.V_Code
.V_SegSize = &HFFFF
.V_SegAdr0 = &H0
.V_SegAdr1 = &H0
.V_TypeAccess = &H9A
.V_AddInfo = &HCF
.V_SegAdr2 = &H0
End With
With GDT.V_Data
.V_SegSize = &HFFFF
.V_SegAdr0 = &H0
.V_SegAdr1 = &H0
.V_TypeAccess = &H92
.V_AddInfo = &HCF
.V_SegAdr2 = &H0
End With
GDT_Selector.V_Limit = SizeOf(GDT_Type) - 1
GDT_Selector.V_BaseAdr = Cast(UInteger, @GDT)
Asm
cli
lgdt [GDT_Selector]
mov ax, &H10
mov ss, ax
End Asm
End Sub