//MM_SetFlags( i * 0x1000, MM_PFLAG_RO, MM_PFLAG_RO ); // Set Read Only
}
MM_Map( 0, 0 ); // IVT / BDA
- for(i=0x70;i<0x80;i++) {
+ for(i=0x10;i<0x9F;i++) {
MM_Map( i * 0x1000, i * 0x1000 ); MM_DerefPhys( i * 0x1000 );
}
MM_Map( 0x9F000, 0x9F000 ); // Stack / EBDA
{
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( bmp & (1 << j) ) {
- base = 0;
+ for( j = 0; j < 32; j++ ) {
+ if( State->Internal->AllocatedPages[i].Bitmap & (1 << j) ) {
+ base = j;
rem = nBlocks;
}
else {
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 );
}
}
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;