git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Fixed VM8086/Vesa memory allocation bug
[tpg/acess2.git]
/
Kernel
/
arch
/
x86
/
vm8086.c
diff --git
a/Kernel/arch/x86/vm8086.c
b/Kernel/arch/x86/vm8086.c
index
c837475
..
6853cbf
100644
(file)
--- a/
Kernel/arch/x86/vm8086.c
+++ b/
Kernel/arch/x86/vm8086.c
@@
-294,23
+294,25
@@
void *VM8086_Allocate(tVM8086 *State, int Size, Uint16 *Segment, Uint16 *Offset)
{
int i, j, base = 0;
int nBlocks, rem;
- Uint32 bmp;
Size = (Size + 127) & ~127;
- nBlocks = Size
>> 7
;
+ nBlocks = Size
/ 128
;
if(Size > 4096) return NULL;
for( i = 0; i < VM8086_PAGES_PER_INST; i++ )
{
if( State->Internal->AllocatedPages[i].VirtBase == 0 ) continue;
- bmp = State->Internal->AllocatedPages[i].Bitmap;
+
+
+ //Log_Debug("VM8086", "AllocatedPages[%i].Bitmap = 0b%b", i, State->Internal->AllocatedPages[i].Bitmap);
+
rem = nBlocks;
base = 0;
// Scan the bitmap for a free block
- for( j = 0; j < 32
-nBlocks
; j++ ) {
- if(
bm
p & (1 << j) ) {
- base =
0
;
+ for( j = 0; j < 32; j++ ) {
+ if(
State->Internal->AllocatedPages[i].Bitma
p & (1 << j) ) {
+ base =
j
;
rem = nBlocks;
}
else {
@@
-321,6
+323,7
@@
void *VM8086_Allocate(tVM8086 *State, int Size, Uint16 *Segment, Uint16 *Offset)
State->Internal->AllocatedPages[i].Bitmap |= 1 << (base + j);
*Segment = State->Internal->AllocatedPages[i].PhysAddr / 16 + base * 8;
*Offset = 0;
+ //Log_Debug("VM8086", "Allocated at #%i,%04x", i, base*128);
return (void*)( State->Internal->AllocatedPages[i].VirtBase + base * 128 );
}
}
@@
-344,6
+347,7
@@
void *VM8086_Allocate(tVM8086 *State, int Size, Uint16 *Segment, Uint16 *Offset)
for( j = 0; j < nBlocks; j++ )
State->Internal->AllocatedPages[i].Bitmap |= 1 << j;
+ //Log_Debug("VM8086", "AllocatedPages[%i].Bitmap = 0b%b", i, State->Internal->AllocatedPages[i].Bitmap);
*Segment = State->Internal->AllocatedPages[i].PhysAddr / 16;
*Offset = 0;
return (void*) State->Internal->AllocatedPages[i].VirtBase;
UCC
git Repository :: git.ucc.asn.au