fb:porticula NoPaste
core_memman.bi
Uploader: | ThePuppetMaster |
Datum/Zeit: | 26.08.2008 22:12:42 |
'###############################################################################################################
'###############################################################################################################
'### 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!!!
'###############################################################################################################
'###############################################################################################################
Dim Shared G_Mem_Init as UByte = 0
Dim Shared G_Mem_FirstPtr as UInteger = 0
Dim Shared G_Mem_FirstMemMapPtr as UInteger = 0
Dim Shared G_Mem_FreeBackSizeKB as UInteger = 0
Dim Shared G_Mem_PageSizeKB as UInteger = 0
Dim Shared G_Mem_PageCount as UInteger = 0
Dim Shared G_Mem_PageInUse as UInteger = 0
Dim Shared G_Mem_MemMap as UByte Ptr = 0
'###############################################################################################################
Private Function MEM_Init() as Integer
If G_Mem_Init <> 0 Then Return GURU_MemMan_Already_Init
G_Mem_FirstPtr = 2 * 1024 * 1024
G_Mem_FirstMemMapPtr = G_Mem_FirstMemMapPtr + 1024 * 1024
G_Mem_PageSizeKB = 4000
G_Mem_FreeBackSizeKB = 1000
G_Mem_PageCount = (Core_MBS.V_Memsize_High - G_Mem_FreeBackSizeKB) \ (G_Mem_PageSizeKB * 8)
G_Mem_MemMap = Cast(UByte Ptr, G_Mem_FirstPtr)
G_Mem_PageInUse = 0
Return GURU_NoError
End Function
'###############################################################################################################
Private Function MEM_Page_FreeGet(ByRef V_PageID as UInteger, ByRef V_PageSizeKB as UInteger) as Integer
V_PageID = 0
Dim TPtr as UByte Ptr = G_Mem_MemMap
For X as UInteger = 0 to G_Mem_PageCount - 1
If *TPtr <> 255 Then
Dim V as UInteger = *TPtr
For Y as UInteger = 0 to 7
If (V and 1) = 0 Then
*TPtr = *TPtr And Not Y
G_Mem_PageInUse += 1
V_PageID = X * Y
V_PageSizeKB = G_Mem_PageSizeKB
Return GURU_NoError
End If
V = V SHR 1
Next
Return GURU_MEMMAN_MemoryPageAllocError
End If
TPtr += 1
Next
Return GURU_MEMMAN_NoFreeMemoryFound
End Function
'====================================================================================================================
Private Function MEM_Page_FreeSet(ByVal V_PageID as UInteger) as Integer
Dim VB as UInteger = V_PageID Mod 8
Dim V as UInteger = V_PageID \ 8
If V >= G_Mem_PageCount Then Return GURU_MEMMAN_MemoryPageIDOutOfRange
Dim TPtr as UByte Ptr = G_Mem_MemMap + V
If (*TPtr And VB) <> 0 Then Return GURU_MEMMAN_MemoryPageAlreadyFree
If G_Mem_PageInUse = 0 Then Return GURU_MemMan_MemoryPageUseCountError
G_Mem_PageInUse -= 1
*TPtr = *TPtr Or VB
Return GURU_NoError
End Function
'====================================================================================================================
Private Function MEM_Page_MapShot(V_MemPtr as Any Ptr) as Integer
'Eine Copy (Screenshot) der Speicherauslastung (MemoyMap) erstellen
Return GURU_NoError
End Function