[????] BUILD 0.1.1.??? DATE 9/0?/2011 AT ?:?? ??
==================================================== Mainly changed: Tasking + Implemented multitasking
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
Log created: 2011-09-08T11:08:21.957118500Z
|
||||
Executable: C:\PROGRA~1\oracle\Virtua~1\VirtualBox.exe
|
||||
Commandline: C:\PROGRA~1\oracle\Virtua~1\\virtualbox --startvm "lux Testbed" --dbg
|
||||
fatal error in recompiler cpu: triple fault
|
||||
@@ -0,0 +1,4 @@
|
||||
Log created: 2011-09-08T11:55:49.393922000Z
|
||||
Executable: C:\PROGRA~1\oracle\Virtua~1\VirtualBox.exe
|
||||
Commandline: C:\PROGRA~1\oracle\Virtua~1\\virtualbox --startvm "lux Testbed" --dbg
|
||||
fatal error in recompiler cpu: triple fault
|
||||
Binary file not shown.
@@ -173,7 +173,7 @@ void _CommandMemPrintMemmap()
|
||||
blocks = n - old;
|
||||
used = 0;
|
||||
for (; old < n; old++)
|
||||
used += (MemPhGetFrame(old) != 0);
|
||||
used += (MemPhGetBlock (old) != 0);
|
||||
|
||||
if (used <= blocks / 5) c = ' ';
|
||||
else if (used > 4 * blocks / 5) c = 219;
|
||||
|
||||
@@ -55,7 +55,7 @@ Point ConsoleGetCursor()
|
||||
return ConsoleCursor;
|
||||
}
|
||||
|
||||
extern void ConsoleSetCursor(Point p)
|
||||
void ConsoleSetCursor(Point p)
|
||||
{
|
||||
ConsoleCursor = p;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ void DriversInstall()
|
||||
DriversInstall_Clock();
|
||||
|
||||
// Install fdc
|
||||
IrqInstallHandler(6, FloppyIrqHandler);
|
||||
FloppyInitialize();
|
||||
Error ("Floppy", "Floppy driver is currently disabled.\n");
|
||||
//IrqInstallHandler(6, FloppyIrqHandler);
|
||||
//FloppyInitialize();
|
||||
}
|
||||
|
||||
@@ -180,13 +180,16 @@ void luxInitrdInstall (MultibootInfo* info)
|
||||
VfsInstallFs(&fs);
|
||||
|
||||
// Check for multiboot info flags to see if any modules are loaded
|
||||
if ((info->Flags & 8) == 0) return;
|
||||
if ((info->Flags & 8) == 0) {
|
||||
Error("Initrd", "No boot modules found!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Loop through each module and if it is an initrd image, mount it
|
||||
MultibootModule* modules = (MultibootModule*) info->ModulesAddress;
|
||||
|
||||
for (i = 0; i < info->ModulesCount; i++)
|
||||
if ((*(uint32*) modules[i].ModuleStart) == LUXMAGIC)
|
||||
if (*((uint32*) modules[i].ModuleStart) == LUXMAGIC)
|
||||
{
|
||||
// Mount the device
|
||||
Log("Initrd", "Found initrd image at 0x%x.\n", modules[i].ModuleStart);
|
||||
@@ -196,4 +199,7 @@ void luxInitrdInstall (MultibootInfo* info)
|
||||
mp->FsData[0] = modules[i].ModuleStart;
|
||||
mp->FsData[1] = modules[i].ModuleEnd;
|
||||
}
|
||||
else {
|
||||
Log("Initrd", "Found module @ 0x%x, but not initrd image.\n", modules[i].ModuleStart);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ void HalInitialize()
|
||||
KeyboardInstallB(); Log("HAL", "%#[2/2]\n", ColorLightGreen);
|
||||
|
||||
// Install mouse driver
|
||||
MouseInstall(); Log("HAL", "Installed mouse driver\n");
|
||||
//MouseInstall(); Log("HAL", "Installed mouse driver\n");
|
||||
|
||||
// Install VFS
|
||||
VfsInstall();
|
||||
|
||||
@@ -228,6 +228,10 @@ DirectoryEntry* VfsReadDirectory (FILE* handle, uint32 index)
|
||||
if (!handle) return NULL;
|
||||
MountPoint* mp = &(mpArray[handle->DeviceId]);
|
||||
|
||||
// Don't try to read files as directories
|
||||
if ((handle->Flags & 0x7) == FileFile) return NULL;
|
||||
|
||||
// Ask FS to make the read
|
||||
if (!fsArray[mp->FsId].ReadDirectory) return NULL;
|
||||
return fsArray[mp->FsId].ReadDirectory(mp, handle, index);
|
||||
}
|
||||
|
||||
+23
-22
@@ -33,8 +33,6 @@ enum PageFlags
|
||||
PageFrame = 0xFFFFF000
|
||||
};
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
Page Pages[1024];
|
||||
} PageTable;
|
||||
@@ -48,25 +46,28 @@ typedef struct {
|
||||
extern PageDirectory* CurrentDirectory;
|
||||
extern PageDirectory* KernelDirectory;
|
||||
|
||||
extern void PagingInitialize(uint32 SystemMemory);
|
||||
extern void PagingSwitchPageDirectory (PageDirectory* dir);
|
||||
extern Page* PagingGetPage(uint32 addr, uint8 make, PageDirectory* dir);
|
||||
|
||||
extern void PagingEnable ();
|
||||
extern void PagingDisable ();
|
||||
extern void PagingSwitchDirectory (PageDirectory* dir);
|
||||
extern void PagingFlushTlb ();
|
||||
extern void PagingInitialize (uint32* kernelEnd);
|
||||
extern void PagingMapPage (uint32 phys, uint32 virt, uint32 flags, PageDirectory* pd);
|
||||
extern void PagingUnmapPage (uint32 virt, PageDirectory* pd);
|
||||
extern uint32 PagingGetPhysical (uint32 virt, PageDirectory* pd);
|
||||
|
||||
/***************************************************
|
||||
* Physical memory manager *
|
||||
***************************************************/
|
||||
extern uint32 TotalFrames;
|
||||
extern uint32 TotalBlocks;
|
||||
extern uint32 TotalMemory;
|
||||
extern uint32 UsedFrames;
|
||||
extern uint32 UsedBlocks;
|
||||
|
||||
void MemPhInitialize(uint32 SystemMemoryKb);
|
||||
extern void MemPhSetFrame (uint32 frame, uint8 value);
|
||||
uint32 MemPhGetFrame (uint32 frame);
|
||||
uint32 MemPhFindFreeFrame();
|
||||
void MemPhAllocFrame(Page* page, uint8 isKernel, uint8 isWriteable);
|
||||
void MemPhFreeFrame(Page* page);
|
||||
void MemPhReserveFrames (uint32 address, uint32 length);
|
||||
extern void MemPhInitialize (uint32 SystemMemoryKb);
|
||||
extern void MemPhSetBlock (uint32 Block, uint8 value);
|
||||
extern uint32 MemPhGetBlock (uint32 Block);
|
||||
extern uint32 MemPhAllocateBlock ();
|
||||
extern void MemPhFreeBlock (uint32 addr);
|
||||
extern void MemPhReserveBlocks (uint32 address, uint32 length);
|
||||
|
||||
|
||||
/***************************************************
|
||||
@@ -82,12 +83,12 @@ typedef struct
|
||||
|
||||
extern MemHeap* KernelHeap;
|
||||
|
||||
extern uint32 MemHeapFindSmallestHole (uint32 size, uint8 page_align, MemHeap* heap);
|
||||
extern int32 MemHeapCompare (uint32 a, uint32 b);
|
||||
extern MemHeap* MemHeapCreate(uint32 start, uint32 end, uint32 max, uint8 flags);
|
||||
extern void MemHeapExpand(uint32 newsz, MemHeap* heap, PageDirectory* pd);
|
||||
extern uint32 MemHeapContract(uint32 newsz, MemHeap* heap, PageDirectory* pd);
|
||||
extern uint32 MemHeapAlloc (uint32 size, uint8 isPageAligned, MemHeap* heap, PageDirectory* pd);
|
||||
extern void MemHeapFree (uint32 address, MemHeap* heap, PageDirectory* pd);
|
||||
extern uint32 MemHeapFindSmallestHole (uint32 size, uint8 page_align, MemHeap* heap);
|
||||
extern int32 MemHeapCompare (uint32 a, uint32 b);
|
||||
extern MemHeap* MemHeapCreate (uint32 start, uint32 end, uint32 max, uint8 flags);
|
||||
extern uint32 MemHeapExpand (uint32 newsz, MemHeap* heap, PageDirectory* pd);
|
||||
extern uint32 MemHeapContract (uint32 newsz, MemHeap* heap, PageDirectory* pd);
|
||||
extern uint32 MemHeapAlloc (uint32 size, uint8 isPageAligned, MemHeap* heap, PageDirectory* pd);
|
||||
extern void MemHeapFree (uint32 address, MemHeap* heap, PageDirectory* pd);
|
||||
|
||||
#endif /* MEMORY_ADD_H_ */
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
// Memory manager
|
||||
#define KERNEL_HEAP_START 0xC0000000
|
||||
#define KERNEL_HEAP_INITIAL_SIZE 0x100000
|
||||
#define KERNEL_HEAP_END (KERNEL_HEAP_START + KERNEL_HEAP_INITIAL_SIZE)
|
||||
#define KERNEL_HEAP_END (KERNEL_HEAP_START + KERNEL_HEAP_INITIAL_SIZE)
|
||||
|
||||
|
||||
#endif /* SETTINGS_H_ */
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define OS_BUILD "0.1.0.601"
|
||||
#define OS_BUILD "0.1.0.629"
|
||||
|
||||
@@ -28,8 +28,7 @@ uint32 _malloc_init2 (uint32 size, uint8 page_aligned, uint32* phys)
|
||||
|
||||
if (phys)
|
||||
{
|
||||
Page *pg = PagingGetPage(ret, 0, KernelDirectory);
|
||||
*phys = (*pg & PageFrame) + (ret & 0xFFF);
|
||||
*phys = PagingGetPhysical(ret, KernelDirectory) + (ret & 0xFFF);
|
||||
|
||||
Log("Mem","%#Allocated %u bytes (%spage aligned) at address 0x%x (phys=%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret, *phys);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
*/
|
||||
|
||||
#include <memory-add.h>
|
||||
// MemoryGetFree(), MemoryGetTotal(), MemoryGet blah blah...
|
||||
|
||||
// Returns total physical memory in bytes
|
||||
uint32 MemoryGetTotal()
|
||||
@@ -17,13 +16,13 @@ uint32 MemoryGetTotal()
|
||||
// Returns total free physical memory in bytes
|
||||
uint32 MemoryGetFree()
|
||||
{
|
||||
return (TotalFrames - UsedFrames) * 0x4;
|
||||
return (TotalBlocks - UsedBlocks) * 0x4;
|
||||
}
|
||||
|
||||
// Total used physical memory in bytes
|
||||
uint32 MemoryGetUsed()
|
||||
{
|
||||
return UsedFrames * 0x4;
|
||||
return UsedBlocks * 0x4;
|
||||
}
|
||||
|
||||
// Same as above functions, but in frames
|
||||
@@ -34,15 +33,15 @@ uint32 MemoryGetFrameSize()
|
||||
|
||||
uint32 MemoryGetFramesTotal()
|
||||
{
|
||||
return TotalFrames;
|
||||
return TotalBlocks;
|
||||
}
|
||||
|
||||
uint32 MemoryGetFramesUsed()
|
||||
{
|
||||
return UsedFrames;
|
||||
return UsedBlocks;
|
||||
}
|
||||
|
||||
uint32 MemoryGetFramesFree()
|
||||
{
|
||||
return (TotalFrames - UsedFrames);
|
||||
}
|
||||
return (TotalBlocks - UsedBlocks);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include "../../drivers/cmos/cmos.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
uint32 mem_kernel_end = 0;
|
||||
uint8 mem_initialized = 0;
|
||||
|
||||
@@ -42,7 +41,7 @@ void _memory_reserve_system(MultibootInfo* info)
|
||||
while ((uint32)location < (info->MemoryMapAddress + info->MemoryMapLength))
|
||||
{
|
||||
if (location->Type > 1)
|
||||
MemPhReserveFrames((uint32)location->Address, (uint32)location->Length);
|
||||
MemPhReserveBlocks((uint32)location->Address, (uint32)location->Length);
|
||||
|
||||
location = (MultibootMemoryMapEntry*) ((uint32)location + location->Size + sizeof(uint32));
|
||||
}
|
||||
@@ -53,29 +52,35 @@ void _memory_reserve_system(MultibootInfo* info)
|
||||
Error("Mem", "%#Missing %#memory map%# info from bootloader.\n", ColorLightRed, ColorWhite, ColorLightRed);
|
||||
|
||||
// Standard memory hole at 15mb
|
||||
MemPhReserveFrames(0x00F00000, 0x00100000);
|
||||
MemPhReserveBlocks(0x00F00000, 0x00100000);
|
||||
}
|
||||
|
||||
// Standard reserved memory areas
|
||||
MemPhReserveFrames(0x0, 0x400 + 256); // Real mode IVT, BDA
|
||||
MemPhReserveFrames(0x1000, 0x2400); // DMA buffer
|
||||
MemPhReserveFrames(0x9FC00, 385*1024); // EBDA, Video memory, ROM area
|
||||
}
|
||||
|
||||
|
||||
void MemoryInitialize (MultibootInfo* info)
|
||||
{
|
||||
// Get total system memory
|
||||
uint32 totalSystemMemory = _memory_get_total_mem(info);
|
||||
|
||||
// Initialize physical & virtual memory managers
|
||||
uint32 end = mem_kernel_end + 0x80000;
|
||||
MemPhInitialize(totalSystemMemory);
|
||||
PagingInitialize(0x200000);
|
||||
PagingInitialize(&end);
|
||||
|
||||
// Reserve physical blocks
|
||||
_memory_reserve_system(info);
|
||||
|
||||
uint32 i;
|
||||
// Allocate some space for the kernel heap
|
||||
for (i = KERNEL_HEAP_START; i <= KERNEL_HEAP_END; i += 0x1000)
|
||||
PagingMapPage(MemPhAllocateBlock(), i, PageWriteable, KernelDirectory);
|
||||
|
||||
// Create the kernel heap
|
||||
KernelHeap = MemHeapCreate(KERNEL_HEAP_START, KERNEL_HEAP_START
|
||||
+ KERNEL_HEAP_INITIAL_SIZE, 0xCFFFF000, 3); // is kernel, writeable
|
||||
|
||||
Log("Mem", "Done initializing memory!");
|
||||
Log("Mem", "Done initializing memory!\n");
|
||||
|
||||
mem_initialized = 2;
|
||||
}
|
||||
@@ -84,5 +89,5 @@ void MemoryTempInitialize (uint32 kernel_end)
|
||||
{
|
||||
mem_initialized = 1;
|
||||
mem_kernel_end = kernel_end;
|
||||
Log("Mem", "Initialized temporary memory manager, allocating from %#0x%x.\n", kernel_end);
|
||||
Log("Mem", "Initialized temporary memory manager, allocating from %#0x%x.\n", ColorWhite, mem_kernel_end);
|
||||
}
|
||||
|
||||
+7
-33
@@ -26,29 +26,22 @@ start:
|
||||
|
||||
mov ecx, eax
|
||||
|
||||
; lgdt [trickgdt]
|
||||
; mov ax, 0x10;
|
||||
; mov ds, ax
|
||||
; mov es, ax
|
||||
; mov fs, ax
|
||||
; mov gs, ax
|
||||
; mov ss, ax
|
||||
|
||||
; jmp 0x08:HigherHalf ; NOTE: Must be absolute jump!
|
||||
|
||||
HigherHalf:
|
||||
|
||||
; Verify booted with multiboot compliant bootloader
|
||||
; setup initial stack
|
||||
mov esp, stack+STACKSIZE
|
||||
|
||||
; Verify booted with multiboot compliant bootloader
|
||||
cmp ecx, 0x2BADB002
|
||||
jne .bad
|
||||
|
||||
push esp
|
||||
push ebx
|
||||
|
||||
extern k_main
|
||||
call k_main
|
||||
|
||||
cli
|
||||
hlt
|
||||
|
||||
; Show error message, and halt system
|
||||
.bad:
|
||||
|
||||
@@ -72,27 +65,8 @@ HigherHalf:
|
||||
ErrorString db 0xA, "%#! Fatal error: Not booted with multiboot compliant bootloader (e.g. GRUB).", 0x0
|
||||
ErrorColor db 0x0C
|
||||
|
||||
|
||||
|
||||
; tells the assembler to include this data in the '.setup' section
|
||||
section .setup
|
||||
|
||||
trickgdt:
|
||||
dw gdt_end - gdt - 1 ; size of the GDT
|
||||
dd gdt ; linear address of GDT
|
||||
|
||||
gdt:
|
||||
dd 0, 0 ; null gate
|
||||
db 0xFF, 0xFF, 0, 0, 0, 10011010b, 11001111b, 0x40 ; code selector 0x08: base 0x40000000, limit 0xFFFFFFFF, type 0x9A, granularity 0xCF
|
||||
db 0xFF, 0xFF, 0, 0, 0, 10010010b, 11001111b, 0x40 ; data selector 0x10: base 0x40000000, limit 0xFFFFFFFF, type 0x92, granularity 0xCF
|
||||
|
||||
gdt_end:
|
||||
|
||||
|
||||
|
||||
|
||||
; stack
|
||||
section .bss
|
||||
align 32
|
||||
stack:
|
||||
resb STACKSIZE ; This reserves 64KBytes of memory here
|
||||
resb STACKSIZE ; This reserves memory for stack
|
||||
|
||||
@@ -6,9 +6,6 @@
|
||||
#define MEMHEAP_INDEX_SIZE 0x20000
|
||||
#define MEMHEAP_MINIM_SIZE 0x70000
|
||||
|
||||
#define FlagsKernel 1
|
||||
#define FlagsWriteable 2
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 Magic;
|
||||
@@ -98,30 +95,31 @@ MemHeap* MemHeapCreate(uint32 start, uint32 end, uint32 max, uint8 flags)
|
||||
}
|
||||
|
||||
|
||||
void MemHeapExpand(uint32 newsz, MemHeap* heap, PageDirectory* pd)
|
||||
uint32 MemHeapExpand(uint32 newsz, MemHeap* heap, PageDirectory* pd)
|
||||
{
|
||||
if (newsz <= heap->EndAddress - heap->StartAddress) return;
|
||||
if (newsz <= heap->EndAddress - heap->StartAddress) return heap->EndAddress - heap->StartAddress;
|
||||
|
||||
if (newsz & 0xfff) newsz = (newsz & 0xfffff000) + 0x1000;
|
||||
if (newsz + heap->StartAddress >= heap->MaxAddress) return;
|
||||
if (newsz + heap->StartAddress >= heap->MaxAddress) return heap->EndAddress - heap->StartAddress;
|
||||
|
||||
uint32 i;
|
||||
for (i = heap->EndAddress - heap->StartAddress; i < heap->StartAddress + newsz; i+=0x1000)
|
||||
MemPhAllocFrame(PagingGetPage(i, 1, pd), heap->Flags & FlagsKernel, heap->Flags & FlagsWriteable);
|
||||
for (i = heap->EndAddress; i < heap->StartAddress + newsz; i+=0x1000)
|
||||
PagingMapPage(MemPhAllocateBlock(), i, heap->Flags, pd);
|
||||
|
||||
heap->EndAddress = heap->StartAddress + newsz;
|
||||
return newsz;
|
||||
}
|
||||
|
||||
uint32 MemHeapContract(uint32 newsz, MemHeap* heap, PageDirectory* pd)
|
||||
{
|
||||
if (newsz >= heap->EndAddress - heap->StartAddress) return 0;
|
||||
if (newsz >= heap->EndAddress - heap->StartAddress) return heap->EndAddress - heap->StartAddress;
|
||||
|
||||
if (newsz & 0xfff) newsz = (newsz & 0xfffff000) + 0x1000; // page align
|
||||
newsz = Max(newsz, MEMHEAP_MINIM_SIZE);
|
||||
|
||||
uint32 i;
|
||||
for (i = heap->EndAddress - heap->StartAddress - 0x1000; i > newsz; i-=0x1000)
|
||||
MemPhFreeFrame(PagingGetPage(i, 0, pd));
|
||||
for (i = heap->EndAddress - 0x1000; i > heap->StartAddress + newsz; i-=0x1000)
|
||||
PagingUnmapPage(i, pd);
|
||||
|
||||
heap->EndAddress = heap->StartAddress + newsz;
|
||||
return newsz;
|
||||
|
||||
+98
-44
@@ -6,69 +6,123 @@
|
||||
*/
|
||||
#include <memory-add.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*******************************
|
||||
* Data *
|
||||
*******************************/
|
||||
PageDirectory* CurrentDirectory;
|
||||
PageDirectory* KernelDirectory;
|
||||
|
||||
/*******************************
|
||||
* Useful routines *
|
||||
*******************************/
|
||||
void PagingInitialize(uint32 kernel_used)
|
||||
void PagingEnable()
|
||||
{
|
||||
Log("Mem", "Virtual memory manager initialization started. End of kernel = 0x%x\n", kernel_used);
|
||||
PageDirectory* kernelPd = (PageDirectory*) kmalloc_a(sizeof(PageDirectory));
|
||||
memset(kernelPd, 0, sizeof(PageDirectory));
|
||||
|
||||
CurrentDirectory = kernelPd;
|
||||
KernelDirectory = kernelPd;
|
||||
|
||||
uint32 i;
|
||||
for (i = 0; i < kernel_used; i+=0x1000)
|
||||
MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 0, 0);
|
||||
|
||||
Log("Mem", "Identity mapped first 0x%x bytes.\n", kernel_used);
|
||||
|
||||
for (i = KERNEL_HEAP_START; i < KERNEL_HEAP_END; i+=0x1000)
|
||||
MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 1, 1);
|
||||
|
||||
Log("Mem", "Mapped kernel space.\n");
|
||||
|
||||
PagingSwitchPageDirectory (kernelPd);
|
||||
uint32 tmp;
|
||||
asm volatile ("mov %%cr0, %0" : "=r"(tmp));
|
||||
tmp |= 0x80000000;
|
||||
asm volatile ("mov %0, %%cr0" : : "r"(tmp));
|
||||
}
|
||||
|
||||
void PagingSwitchPageDirectory (PageDirectory* dir)
|
||||
void PagingDisable()
|
||||
{
|
||||
uint32 tmp;
|
||||
asm volatile ("mov %%cr0, %0" : "=r"(tmp));
|
||||
tmp &= 0x7FFFFFFF;
|
||||
asm volatile ("mov %0, %%cr0" : : "r"(tmp));
|
||||
}
|
||||
|
||||
void PagingSwitchDirectory(PageDirectory* dir)
|
||||
{
|
||||
CurrentDirectory = dir;
|
||||
asm volatile ("mov %0, %%cr3":: "r"(&dir->TablesPhysical));
|
||||
|
||||
uint32 cr0;
|
||||
asm volatile ("mov %%cr0, %0": "=r"(cr0));
|
||||
cr0 |= 0x80000000;
|
||||
asm volatile ("mov %0, %%cr0":: "r"(cr0));
|
||||
|
||||
Log("Mem", "Enabled paging.\n");
|
||||
asm volatile ("mov %0, %%cr3" : : "r"(dir->PhysicalAddr));
|
||||
}
|
||||
|
||||
Page* PagingGetPage(uint32 addr, uint8 make, PageDirectory* dir)
|
||||
void PagingFlushTlb ()
|
||||
{
|
||||
addr >>= 12;
|
||||
uint32 tmp;
|
||||
asm volatile ("mov %%cr3, %0" : "=r"(tmp));
|
||||
asm volatile ("mov %0, %%cr3" : : "r" (tmp));
|
||||
}
|
||||
|
||||
uint32 tableIndex = addr >> 10;
|
||||
void PagingInitialize(uint32* kernelEnd)
|
||||
{
|
||||
// Create the kernel page directory
|
||||
PageDirectory* kdir = kmalloc_a(sizeof(PageDirectory));
|
||||
memset(kdir, 0, sizeof(PageDirectory));
|
||||
|
||||
if (dir->Tables[tableIndex])
|
||||
return &dir->Tables[tableIndex]->Pages[addr&0x3ff];
|
||||
KernelDirectory = kdir;
|
||||
|
||||
else if (make)
|
||||
// Set up physical address of PDEs.
|
||||
kdir->PhysicalAddr = (uint32) kdir->TablesPhysical;
|
||||
|
||||
// Identity map the kernel
|
||||
uint32 i = 0;
|
||||
while (i <= *kernelEnd + 1024)
|
||||
{
|
||||
uint32 temp;
|
||||
dir->Tables[tableIndex] = (PageTable*)kmalloc_ap(sizeof(PageTable), &temp);
|
||||
memset (dir->Tables[tableIndex], 0, 0x1000);
|
||||
dir->TablesPhysical[tableIndex] = temp | 0x7;
|
||||
return &dir->Tables[tableIndex]->Pages[addr&0x3ff];
|
||||
PagingMapPage(i, i, PageWriteable, kdir);
|
||||
i += 0x1000;
|
||||
}
|
||||
|
||||
else return 0;
|
||||
// Reserve the identity mapped blocks
|
||||
MemPhReserveBlocks(0x0, *kernelEnd);
|
||||
|
||||
PagingSwitchDirectory(kdir);
|
||||
PagingEnable();
|
||||
}
|
||||
|
||||
void PagingMapPage (uint32 phys, uint32 virt, uint32 flags, PageDirectory* pd)
|
||||
{
|
||||
// Calculate pde and pte
|
||||
uint32 pde = virt >> 22;
|
||||
uint32 pte = (virt >> 12) & 0x3ff;
|
||||
|
||||
phys &= 0xFFFFF000; // Make sure address is page aligned
|
||||
flags &= 0xFFF; // Make sure flags don't overflow
|
||||
|
||||
// See if page table exists
|
||||
if (!pd->Tables[pde])
|
||||
{
|
||||
// No? allocate it
|
||||
uint32 ph;
|
||||
PageTable* pt = kmalloc_ap(sizeof(PageTable), &ph);
|
||||
memset(pt, 0, sizeof(PageTable));
|
||||
|
||||
pd->Tables[pde] = pt;
|
||||
pd->TablesPhysical[pde] = ph | 0x7;
|
||||
}
|
||||
|
||||
// Set up the page
|
||||
pd->Tables[pde]->Pages[pte] = phys | flags | 0x1; // Present, and flags
|
||||
|
||||
// If it is the current directory, flush the tlb to notice the change
|
||||
if (pd == CurrentDirectory) PagingFlushTlb();
|
||||
}
|
||||
|
||||
void PagingUnmapPage (uint32 virt, PageDirectory* pd)
|
||||
{
|
||||
// Calculate pde and pte
|
||||
uint32 pde = virt >> 22;
|
||||
uint32 pte = (virt >> 12) & 0x3ff;
|
||||
|
||||
if (!pd->Tables[pde] || !pd->Tables[pde]->Pages[pte]) return;
|
||||
|
||||
// Get physical address
|
||||
uint32 phys = pd->Tables[pde]->Pages[pte] & PageFrame;
|
||||
|
||||
// Free page
|
||||
pd->Tables[pde]->Pages[pte] = 0;
|
||||
MemPhFreeBlock(phys);
|
||||
|
||||
// If it is the current directory, flush the tlb to notice the change
|
||||
if (pd == CurrentDirectory) PagingFlushTlb();
|
||||
}
|
||||
|
||||
uint32 PagingGetPhysical (uint32 virt, PageDirectory* pd)
|
||||
{
|
||||
// Calculate pde and pte
|
||||
uint32 pde = virt >> 22;
|
||||
uint32 pte = (virt >> 12) & 0x3ff;
|
||||
|
||||
// Not mapped
|
||||
if (!pd->Tables[pde] || !pd->Tables[pde]->Pages[pte]) return NULL;
|
||||
|
||||
return (pd->Tables[pde]->Pages[pte] & PageFrame);
|
||||
}
|
||||
|
||||
+32
-46
@@ -6,103 +6,89 @@
|
||||
*/
|
||||
#include <memory-add.h>
|
||||
|
||||
uint32* FrameMap;
|
||||
uint32 TotalFrames;
|
||||
uint32* BlockMap;
|
||||
uint32 TotalBlocks;
|
||||
uint32 TotalMemory;
|
||||
uint32 UsedFrames;
|
||||
uint32 UsedBlocks;
|
||||
|
||||
inline void ConvertIndexToFrame (uint32 index, uint32* address, uint32* offset)
|
||||
inline void ConvertIndexToBlock (uint32 index, uint32* address, uint32* offset)
|
||||
{
|
||||
*address = (index >> 5);
|
||||
*offset = index & 0x1f;
|
||||
}
|
||||
|
||||
inline uint32 ConvertFrameToIndex (uint32 address, uint32 offset)
|
||||
inline uint32 ConvertBlockToIndex (uint32 address, uint32 offset)
|
||||
{
|
||||
return (address<<5) | offset;
|
||||
}
|
||||
|
||||
void MemPhSetFrame (uint32 frame, uint8 value)
|
||||
void MemPhSetBlock (uint32 Block, uint8 value)
|
||||
{
|
||||
uint32 addr, off;
|
||||
ConvertIndexToFrame(frame, &addr, &off);
|
||||
ConvertIndexToBlock(Block, &addr, &off);
|
||||
|
||||
if (value) {
|
||||
if ((FrameMap[addr] & (1<<off)) == 0) UsedFrames++;
|
||||
FrameMap[addr] |= 1<<off;
|
||||
if ((BlockMap[addr] & (1<<off)) == 0) UsedBlocks++;
|
||||
BlockMap[addr] |= 1<<off;
|
||||
}
|
||||
|
||||
else {
|
||||
if (FrameMap[addr] & (1<<off)) UsedFrames--;
|
||||
FrameMap[addr] &= ~(1<<off);
|
||||
if (BlockMap[addr] & (1<<off)) UsedBlocks--;
|
||||
BlockMap[addr] &= ~(1<<off);
|
||||
}
|
||||
}
|
||||
|
||||
uint32 MemPhGetFrame (uint32 frame)
|
||||
uint32 MemPhGetBlock (uint32 Block)
|
||||
{
|
||||
uint32 addr, off;
|
||||
ConvertIndexToFrame(frame, &addr, &off);
|
||||
ConvertIndexToBlock(Block, &addr, &off);
|
||||
|
||||
return FrameMap[addr] & (1<<off);
|
||||
return BlockMap[addr] & (1<<off);
|
||||
}
|
||||
|
||||
uint32 MemPhFindFreeFrame()
|
||||
uint32 MemPhAllocateBlock()
|
||||
{
|
||||
uint32 addr, pos;
|
||||
|
||||
for (addr = 0; addr < TotalFrames >> 5; addr++)
|
||||
if (FrameMap[addr] != 0xffffffff)
|
||||
for (addr = 0; addr < TotalBlocks >> 5; addr++)
|
||||
if (BlockMap[addr] != 0xffffffff)
|
||||
{
|
||||
for (pos = 0; (FrameMap[addr] & (1<<pos)) != 0; pos++) ;
|
||||
for (pos = 0; (BlockMap[addr] & (1<<pos)) != 0; pos++) ;
|
||||
|
||||
return ConvertFrameToIndex(addr, pos);
|
||||
uint32 index = ConvertBlockToIndex(addr, pos);
|
||||
MemPhSetBlock(index, 1);
|
||||
|
||||
// Return address
|
||||
return (index<<12);
|
||||
}
|
||||
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
void MemPhAllocFrame(Page* page, uint8 isKernel, uint8 isWriteable)
|
||||
void MemPhFreeBlock(uint32 addr)
|
||||
{
|
||||
if ((*page & PageFrame) != 0) return;
|
||||
uint32 Block = addr >> 12;
|
||||
if (!Block) return;
|
||||
|
||||
uint32 free = MemPhFindFreeFrame();
|
||||
if (free == 0xffffffff) {
|
||||
Panic("Mem", "%#Failed allocation free=0x%x page=0x%x\n", ColorRed, free, *page);
|
||||
return;
|
||||
}
|
||||
|
||||
MemPhSetFrame(free, 1);
|
||||
*page |= PagePresent;
|
||||
*page |= (isKernel) ? 0 : PageUser;
|
||||
*page |= (isWriteable) ? PageWriteable : 0;
|
||||
*page |= (free<<12) & PageFrame;
|
||||
}
|
||||
|
||||
void MemPhFreeFrame(Page* page)
|
||||
{
|
||||
uint32 frame = *page & PageFrame;
|
||||
if (!frame) return;
|
||||
|
||||
MemPhSetFrame(frame, 0);
|
||||
*page &= ~PageFrame;
|
||||
MemPhSetBlock(Block, 0);
|
||||
}
|
||||
|
||||
void MemPhInitialize(uint32 SystemMemoryKb)
|
||||
{
|
||||
TotalFrames = SystemMemoryKb >> 2;
|
||||
TotalBlocks = SystemMemoryKb >> 2;
|
||||
TotalMemory = SystemMemoryKb;
|
||||
|
||||
FrameMap = (uint32*) kmalloc(sizeof(uint32) * (1 + (TotalFrames>>5)));
|
||||
memset(FrameMap, 0, sizeof(uint32) * (1 + (TotalFrames>>5)));
|
||||
BlockMap = (uint32*) kmalloc(sizeof(uint32) * (1 + (TotalBlocks>>5)));
|
||||
memset(BlockMap, 0, sizeof(uint32) * (1 + (TotalBlocks>>5)));
|
||||
Log("Mem", "%#Started physical memory manager ok!, found %ukb\n", ColorLightGreen, SystemMemoryKb);
|
||||
}
|
||||
|
||||
void MemPhReserveFrames (uint32 address, uint32 length)
|
||||
void MemPhReserveBlocks (uint32 address, uint32 length)
|
||||
{
|
||||
address >>= 12;
|
||||
length = (length>>12) + ((length & 0xfff) > 0);
|
||||
uint32 end = address + length;
|
||||
|
||||
for (; address < end ; address++)
|
||||
MemPhSetFrame(address, 1);
|
||||
MemPhSetBlock(address, 1);
|
||||
}
|
||||
|
||||
+194
-206
@@ -1,206 +1,194 @@
|
||||
00000000000i[ ] Bochs x86 Emulator 2.4.6
|
||||
00000000000i[ ] Build from CVS snapshot, on February 22, 2011
|
||||
00000000000i[ ] Compiled at Aug 28 2011, 16:32:50
|
||||
00000000000i[ ] System configuration
|
||||
00000000000i[ ] processors: 1 (cores=1, HT threads=1)
|
||||
00000000000i[ ] A20 line support: yes
|
||||
00000000000i[ ] CPU configuration
|
||||
00000000000i[ ] level: 6
|
||||
00000000000i[ ] SMP support: yes, quantum=5
|
||||
00000000000i[ ] APIC support: yes
|
||||
00000000000i[ ] FPU support: yes
|
||||
00000000000i[ ] MMX support: yes
|
||||
00000000000i[ ] 3dnow! support: yes
|
||||
00000000000i[ ] SEP support: yes
|
||||
00000000000i[ ] SSE support: sse2
|
||||
00000000000i[ ] XSAVE support: no
|
||||
00000000000i[ ] AES support: no
|
||||
00000000000i[ ] MOVBE support: no
|
||||
00000000000i[ ] x86-64 support: yes
|
||||
00000000000i[ ] 1G paging support: no
|
||||
00000000000i[ ] VMX support: 1
|
||||
00000000000i[ ] Optimization configuration
|
||||
00000000000i[ ] RepeatSpeedups support: yes
|
||||
00000000000i[ ] Trace cache support: yes
|
||||
00000000000i[ ] Fast function calls: yes
|
||||
00000000000i[ ] Devices configuration
|
||||
00000000000i[ ] ACPI support: yes
|
||||
00000000000i[ ] NE2000 support: no
|
||||
00000000000i[ ] PCI support: yes, enabled=yes
|
||||
00000000000i[ ] SB16 support: yes
|
||||
00000000000i[ ] USB support: no
|
||||
00000000000i[ ] VGA extension support: vbe
|
||||
00000000000i[MEM0 ] allocated memory at 0xb4116008. after alignment, vector=0xb4117000
|
||||
00000000000i[MEM0 ] 32.00MB
|
||||
00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32
|
||||
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/local/share/bochs/BIOS-bochs-latest')
|
||||
00000000000i[MEM0 ] rom at 0xc0000/40448 ('/usr/local/share/bochs/VGABIOS-lgpl-latest')
|
||||
00000000000i[CMOS ] Using local time for initial clock
|
||||
00000000000i[CMOS ] Setting initial clock to: Mon Aug 29 10:21:59 2011 (time0=1314602519)
|
||||
00000000000i[DMA ] channel 4 used by cascade
|
||||
00000000000i[DMA ] channel 2 used by Floppy Drive
|
||||
00000000000i[FDD ] fd0: '../luxos.img' ro=0, h=2,t=80,spt=18
|
||||
00000000000i[PCI ] 440FX Host bridge present at device 0, function 0
|
||||
00000000000i[PCI ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
|
||||
00000000000i[VGA ] interval=50000
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000000a0000 - 0x00000000000bffff
|
||||
00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried
|
||||
00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000e0000000 - 0x00000000e0ffffff
|
||||
00000000000i[VGA ] VBE Bochs Display Extension Enabled
|
||||
00000000000i[ ] init_dev of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'speaker' plugin device by virtual method
|
||||
00000000000i[SPEAK] Failed to open /dev/console: Resource temporarily unavailable
|
||||
00000000000i[SPEAK] Deactivating beep on console
|
||||
00000000000i[ ] init_dev of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'iodebug' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[PCI ] PIIX3 PCI IDE controller present at device 1, function 1
|
||||
00000000000i[ ] init_dev of 'acpi' plugin device by virtual method
|
||||
00000000000i[PCI ] ACPI Controller present at device 1, function 3
|
||||
00000000000i[ ] init_dev of 'ioapic' plugin device by virtual method
|
||||
00000000000i[IOAP ] initializing I/O APIC
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000fec00000 - 0x00000000fec00fff
|
||||
00000000000i[ ] init_dev of 'keyboard' plugin device by virtual method
|
||||
00000000000i[KBD ] will paste characters every 1000 keyboard ticks
|
||||
00000000000i[ ] init_dev of 'harddrv' plugin device by virtual method
|
||||
00000000000i[HD ] Using boot sequence floppy, none, none
|
||||
00000000000i[HD ] Floppy boot signature check is enabled
|
||||
00000000000i[ ] init_dev of 'serial' plugin device by virtual method
|
||||
00000000000i[SER ] com1 at 0x03f8 irq 4
|
||||
00000000000i[ ] init_dev of 'parallel' plugin device by virtual method
|
||||
00000000000i[PAR ] parallel port 1 at 0x0378 irq 7
|
||||
00000000000i[ ] register state of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'speaker' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'iodebug' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'acpi' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'ioapic' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'keyboard' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'harddrv' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'serial' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'parallel' plugin device by virtual method
|
||||
00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called
|
||||
00000000000i[CPU0 ] cpu hardware reset
|
||||
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000
|
||||
00000000000i[CPU0 ] CPU[0] is the bootstrap processor
|
||||
00000000000i[CPU0 ] CPUID[0x00000000]: 00000003 68747541 444d4163 69746e65
|
||||
00000000000i[CPU0 ] CPUID[0x00000001]: 00000f23 00000800 00002020 07cbfbff
|
||||
00000000000i[CPU0 ] CPUID[0x00000002]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000007]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 68747541 444d4163 69746e65
|
||||
00000000000i[CPU0 ] CPUID[0x80000001]: 00000f23 00000000 00000001 ebd3fbff
|
||||
00000000000i[CPU0 ] CPUID[0x80000002]: 20444d41 6c687441 74286e6f 7020296d
|
||||
00000000000i[CPU0 ] CPUID[0x80000003]: 65636f72 726f7373 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000004]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140
|
||||
00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
|
||||
00000000000i[ ] reset of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'speaker' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'iodebug' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'acpi' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'ioapic' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'keyboard' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'harddrv' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'serial' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'parallel' plugin device by virtual method
|
||||
00000000000i[XGUI ] [x] Mouse off
|
||||
00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $
|
||||
00000318072i[KBD ] reset-disable command received
|
||||
00000444792i[VBIOS] VGABios $Id: vgabios.c,v 1.69 2009/04/07 18:18:20 vruppert Exp $
|
||||
00000444863i[VGA ] VBE known Display Interface b0c0
|
||||
00000444895i[VGA ] VBE known Display Interface b0c5
|
||||
00000447820i[VBIOS] VBE Bios $Id: vbe.c,v 1.62 2009/01/25 15:46:25 vruppert Exp $
|
||||
00000600000i[XGUI ] charmap update. Font Height is 16
|
||||
00000760509i[BIOS ] Starting rombios32
|
||||
00000761006i[BIOS ] Shutdown flag 0
|
||||
00000761687i[BIOS ] ram_size=0x02000000
|
||||
00000762165i[BIOS ] ram_end=32MB
|
||||
00000802749i[BIOS ] Found 1 cpu(s)
|
||||
00000821736i[BIOS ] bios_table_addr: 0x000fb928 end=0x000fcc00
|
||||
00000821839i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001149536i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001477464i[P2I ] PCI IRQ routing: PIRQA# set to 0x0b
|
||||
00001477485i[P2I ] PCI IRQ routing: PIRQB# set to 0x09
|
||||
00001477506i[P2I ] PCI IRQ routing: PIRQC# set to 0x0b
|
||||
00001477527i[P2I ] PCI IRQ routing: PIRQD# set to 0x09
|
||||
00001477537i[P2I ] write: ELCR2 = 0x0a
|
||||
00001478422i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
|
||||
00001486380i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
|
||||
00001488942i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
|
||||
00001491343i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
|
||||
00001491573i[PIDE ] new BM-DMA address: 0xc000
|
||||
00001492277i[BIOS ] region 4: 0x0000c000
|
||||
00001494587i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
|
||||
00001494825i[ACPI ] new irq line = 11
|
||||
00001494839i[ACPI ] new irq line = 9
|
||||
00001494869i[ACPI ] new PM base address: 0xb000
|
||||
00001494883i[ACPI ] new SM base address: 0xb100
|
||||
00001494911i[PCI ] setting SMRAM control register to 0x4a
|
||||
00001659005i[CPU0 ] Enter to System Management Mode
|
||||
00001659005i[CPU0 ] enter_system_management_mode: temporary disable VMX while in SMM mode
|
||||
00001659015i[CPU0 ] RSM: Resuming from System Management Mode
|
||||
00001823035i[PCI ] setting SMRAM control register to 0x0a
|
||||
00001832206i[BIOS ] MP table addr=0x000fba00 MPC table addr=0x000fb930 size=0xd0
|
||||
00001834265i[BIOS ] SMBIOS table addr=0x000fba10
|
||||
00001836653i[BIOS ] ACPI tables: RSDP addr=0x000fbb30 ACPI DATA addr=0x01ff0000 size=0x988
|
||||
00001839891i[BIOS ] Firmware waking vector 0x1ff00cc
|
||||
00001851004i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001851848i[BIOS ] bios_table_cur_addr: 0x000fbb54
|
||||
00014041552i[BIOS ] Booting from 0000:7c00
|
||||
00023137422i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80
|
||||
00023142203i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80
|
||||
00023146854i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported!
|
||||
00037427421i[CPU0 ] [37427421] Stopped on MAGIC BREAKPOINT
|
||||
00037475097i[KBD ] setting typematic info
|
||||
00037475122i[KBD ] setting delay to 500 mS (unused)
|
||||
00037475122i[KBD ] setting repeat rate to 10.9 cps (unused)
|
||||
00037475183i[KBD ] Switched to scancode set 2
|
||||
00037475271i[KBD ] keyboard: scan convert turned off
|
||||
00037475895i[KBD ] keyboard: scan convert turned off
|
||||
00037491918i[FDD ] controller reset in software
|
||||
00039078683i[FDD ] io_write: config control register: 0x00
|
||||
00055400059i[CPU0 ] [55400059] Stopped on MAGIC BREAKPOINT
|
||||
00165600000i[ ] dbg: Quit
|
||||
00165600000i[CPU0 ] CPU is in protected mode (active)
|
||||
00165600000i[CPU0 ] CS.d_b = 32 bit
|
||||
00165600000i[CPU0 ] SS.d_b = 32 bit
|
||||
00165600000i[CPU0 ] EFER = 0x00000000
|
||||
00165600000i[CPU0 ] | RAX=00000000000000ff RBX=000000000010d78c
|
||||
00165600000i[CPU0 ] | RCX=00000000000003d4 RDX=000000000010d6ca
|
||||
00165600000i[CPU0 ] | RSP=000000000010d68c RBP=000000000010d6a4
|
||||
00165600000i[CPU0 ] | RSI=000000000010d6ca RDI=0000000000000002
|
||||
00165600000i[CPU0 ] | R8=0000000000000000 R9=0000000000000000
|
||||
00165600000i[CPU0 ] | R10=0000000000000000 R11=0000000000000000
|
||||
00165600000i[CPU0 ] | R12=0000000000000000 R13=0000000000000000
|
||||
00165600000i[CPU0 ] | R14=0000000000000000 R15=0000000000000000
|
||||
00165600000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf
|
||||
00165600000i[CPU0 ] | SEG selector base limit G D
|
||||
00165600000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D
|
||||
00165600000i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
00165600000i[CPU0 ] | MSR_FS_BASE:0000000000000000
|
||||
00165600000i[CPU0 ] | MSR_GS_BASE:0000000000000000
|
||||
00165600000i[CPU0 ] | RIP=0000000000105eb4 (0000000000105eb4)
|
||||
00165600000i[CPU0 ] | CR0=0xe0000011 CR2=0x0000000000000000
|
||||
00165600000i[CPU0 ] | CR3=0x00110000 CR4=0x00000000
|
||||
00165600000i[CMOS ] Last time is 1314602560 (Mon Aug 29 10:22:40 2011)
|
||||
00165600000i[XGUI ] Exit
|
||||
00165600000i[CTRL ] quit_sim called with exit code 0
|
||||
00000000000i[ ] Bochs x86 Emulator 2.4.6
|
||||
00000000000i[ ] Build from CVS snapshot, on February 22, 2011
|
||||
00000000000i[ ] Compiled at Feb 22 2011, 19:57:47
|
||||
00000000000i[ ] System configuration
|
||||
00000000000i[ ] processors: 1 (cores=1, HT threads=1)
|
||||
00000000000i[ ] A20 line support: yes
|
||||
00000000000i[ ] CPU configuration
|
||||
00000000000i[ ] level: 6
|
||||
00000000000i[ ] SMP support: no
|
||||
00000000000i[ ] APIC support: yes
|
||||
00000000000i[ ] FPU support: yes
|
||||
00000000000i[ ] MMX support: yes
|
||||
00000000000i[ ] 3dnow! support: no
|
||||
00000000000i[ ] SEP support: yes
|
||||
00000000000i[ ] SSE support: sse2
|
||||
00000000000i[ ] XSAVE support: no
|
||||
00000000000i[ ] AES support: no
|
||||
00000000000i[ ] MOVBE support: no
|
||||
00000000000i[ ] x86-64 support: yes
|
||||
00000000000i[ ] 1G paging support: no
|
||||
00000000000i[ ] VMX support: no
|
||||
00000000000i[ ] Optimization configuration
|
||||
00000000000i[ ] RepeatSpeedups support: yes
|
||||
00000000000i[ ] Trace cache support: yes
|
||||
00000000000i[ ] Fast function calls: yes
|
||||
00000000000i[ ] Devices configuration
|
||||
00000000000i[ ] ACPI support: yes
|
||||
00000000000i[ ] NE2000 support: yes
|
||||
00000000000i[ ] PCI support: yes, enabled=yes
|
||||
00000000000i[ ] SB16 support: yes
|
||||
00000000000i[ ] USB support: yes
|
||||
00000000000i[ ] VGA extension support: vbe cirrus
|
||||
00000000000i[MEM0 ] allocated memory at 028A0020. after alignment, vector=028A1000
|
||||
00000000000i[MEM0 ] 32.00MB
|
||||
00000000000i[MEM0 ] mem block size = 0x00100000, blocks=32
|
||||
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('C:\Program Files\Bochs-2.4.6\BIOS-bochs-latest')
|
||||
00000000000i[MEM0 ] rom at 0xc0000/40448 ('C:\Program Files\Bochs-2.4.6\VGABIOS-lgpl-latest')
|
||||
00000000000i[CMOS ] Using local time for initial clock
|
||||
00000000000i[CMOS ] Setting initial clock to: Thu Sep 08 15:41:40 2011 (time0=1315485700)
|
||||
00000000000i[DMA ] channel 4 used by cascade
|
||||
00000000000i[DMA ] channel 2 used by Floppy Drive
|
||||
00000000000i[FDD ] fd0: 'a:' ro=0, h=2,t=80,spt=18
|
||||
00000000000i[PCI ] 440FX Host bridge present at device 0, function 0
|
||||
00000000000i[PCI ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000000a0000 - 0x00000000000bffff
|
||||
00000000000i[WGUI ] Desktop Window dimensions: 1366 x 768
|
||||
00000000000i[WGUI ] Number of Mouse Buttons = 5
|
||||
00000000000i[WGUI ] IME disabled
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000e0000000 - 0x00000000e0ffffff
|
||||
00000000000i[CLVGA] VBE Bochs Display Extension Enabled
|
||||
00000000000i[CLVGA] interval=50000
|
||||
00000000000i[ ] init_dev of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'speaker' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] init_dev of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[PCI ] PIIX3 PCI IDE controller present at device 1, function 1
|
||||
00000000000i[ ] init_dev of 'acpi' plugin device by virtual method
|
||||
00000000000i[PCI ] ACPI Controller present at device 1, function 3
|
||||
00000000000i[ ] init_dev of 'ioapic' plugin device by virtual method
|
||||
00000000000i[IOAP ] initializing I/O APIC
|
||||
00000000000i[MEM0 ] Register memory access handlers: 0x00000000fec00000 - 0x00000000fec00fff
|
||||
00000000000i[ ] init_dev of 'keyboard' plugin device by virtual method
|
||||
00000000000i[KBD ] will paste characters every 1000 keyboard ticks
|
||||
00000000000i[ ] init_dev of 'harddrv' plugin device by virtual method
|
||||
00000000000i[HD ] Using boot sequence floppy, none, none
|
||||
00000000000i[HD ] Floppy boot signature check is enabled
|
||||
00000000000i[ ] init_dev of 'serial' plugin device by virtual method
|
||||
00000000000i[SER ] com1 at 0x03f8 irq 4
|
||||
00000000000i[ ] init_dev of 'parallel' plugin device by virtual method
|
||||
00000000000i[PAR ] parallel port 1 at 0x0378 irq 7
|
||||
00000000000i[ ] register state of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'speaker' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'acpi' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'ioapic' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'keyboard' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'harddrv' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'serial' plugin device by virtual method
|
||||
00000000000i[ ] register state of 'parallel' plugin device by virtual method
|
||||
00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called
|
||||
00000000000i[CPU0 ] cpu hardware reset
|
||||
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000
|
||||
00000000000i[CPU0 ] CPUID[0x00000000]: 00000003 756e6547 6c65746e 49656e69
|
||||
00000000000i[CPU0 ] CPUID[0x00000001]: 00000f23 00000800 00002000 07cbfbff
|
||||
00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x00000007]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000001 2a100800
|
||||
00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020
|
||||
00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75
|
||||
00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020
|
||||
00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
|
||||
00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
|
||||
00000000000i[ ] reset of 'unmapped' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'biosdev' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'speaker' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'extfpuirq' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'gameport' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'pci_ide' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'acpi' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'ioapic' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'keyboard' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'harddrv' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'serial' plugin device by virtual method
|
||||
00000000000i[ ] reset of 'parallel' plugin device by virtual method
|
||||
00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $
|
||||
00000200000i[WGUI ] dimension update x=720 y=400 fontheight=16 fontwidth=9 bpp=8
|
||||
00000318042i[KBD ] reset-disable command received
|
||||
00000444800i[VBIOS] VGABios $Id: vgabios.c,v 1.69 2009/04/07 18:18:20 vruppert Exp $
|
||||
|
||||
00000444871i[CLVGA] VBE known Display Interface b0c0
|
||||
00000444903i[CLVGA] VBE known Display Interface b0c5
|
||||
00000447828i[VBIOS] VBE Bios $Id: vbe.c,v 1.62 2009/01/25 15:46:25 vruppert Exp $
|
||||
00000760517i[BIOS ] Starting rombios32
|
||||
00000761014i[BIOS ] Shutdown flag 0
|
||||
00000761695i[BIOS ] ram_size=0x02000000
|
||||
00000762173i[BIOS ] ram_end=32MB
|
||||
00000802745i[BIOS ] Found 1 cpu(s)
|
||||
00000821732i[BIOS ] bios_table_addr: 0x000fb928 end=0x000fcc00
|
||||
00000821835i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001149532i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001477460i[P2I ] PCI IRQ routing: PIRQA# set to 0x0b
|
||||
00001477481i[P2I ] PCI IRQ routing: PIRQB# set to 0x09
|
||||
00001477502i[P2I ] PCI IRQ routing: PIRQC# set to 0x0b
|
||||
00001477523i[P2I ] PCI IRQ routing: PIRQD# set to 0x09
|
||||
00001477533i[P2I ] write: ELCR2 = 0x0a
|
||||
00001478418i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
|
||||
00001486376i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
|
||||
00001488938i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
|
||||
00001491339i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
|
||||
00001491569i[PIDE ] new BM-DMA address: 0xc000
|
||||
00001492273i[BIOS ] region 4: 0x0000c000
|
||||
00001494583i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
|
||||
00001494821i[ACPI ] new irq line = 11
|
||||
00001494835i[ACPI ] new irq line = 9
|
||||
00001494865i[ACPI ] new PM base address: 0xb000
|
||||
00001494879i[ACPI ] new SM base address: 0xb100
|
||||
00001494907i[PCI ] setting SMRAM control register to 0x4a
|
||||
00001659001i[CPU0 ] Enter to System Management Mode
|
||||
00001659011i[CPU0 ] RSM: Resuming from System Management Mode
|
||||
00001823031i[PCI ] setting SMRAM control register to 0x0a
|
||||
00001832202i[BIOS ] MP table addr=0x000fba00 MPC table addr=0x000fb930 size=0xd0
|
||||
00001834261i[BIOS ] SMBIOS table addr=0x000fba10
|
||||
00001836649i[BIOS ] ACPI tables: RSDP addr=0x000fbb30 ACPI DATA addr=0x01ff0000 size=0x988
|
||||
00001839887i[BIOS ] Firmware waking vector 0x1ff00cc
|
||||
00001851000i[PCI ] 440FX PMC write to PAM register 59 (TLB Flush)
|
||||
00001851844i[BIOS ] bios_table_cur_addr: 0x000fbb54
|
||||
00014041548i[BIOS ] Booting from 0000:7c00
|
||||
00023137418i[BIOS ] int13_harddisk: function 41, unmapped device for ELDL=80
|
||||
00023142199i[BIOS ] int13_harddisk: function 08, unmapped device for ELDL=80
|
||||
00023146850i[BIOS ] *** int 15h function AX=00c0, BX=0000 not yet supported!
|
||||
00043965427i[KBD ] setting typematic info
|
||||
00043965445i[KBD ] setting delay to 500 mS (unused)
|
||||
00043965445i[KBD ] setting repeat rate to 10.9 cps (unused)
|
||||
00043965488i[KBD ] Switched to scancode set 2
|
||||
00043965551i[KBD ] keyboard: scan convert turned off
|
||||
01748376000p[WGUI ] >>PANIC<< POWER button turned off.
|
||||
01748376000i[CPU0 ] CPU is in protected mode (active)
|
||||
01748376000i[CPU0 ] CS.d_b = 32 bit
|
||||
01748376000i[CPU0 ] SS.d_b = 32 bit
|
||||
01748376000i[CPU0 ] EFER = 0x00000000
|
||||
01748376000i[CPU0 ] | RAX=00000000001108ff RBX=0000000000000066
|
||||
01748376000i[CPU0 ] | RCX=00000000000003d4 RDX=0000000000000308
|
||||
01748376000i[CPU0 ] | RSP=00000000001107c8 RBP=0000000000000018
|
||||
01748376000i[CPU0 ] | RSI=0000000000110806 RDI=0000000000000002
|
||||
01748376000i[CPU0 ] | R8=0000000000000000 R9=0000000000000000
|
||||
01748376000i[CPU0 ] | R10=0000000000000000 R11=0000000000000000
|
||||
01748376000i[CPU0 ] | R12=0000000000000000 R13=0000000000000000
|
||||
01748376000i[CPU0 ] | R14=0000000000000000 R15=0000000000000000
|
||||
01748376000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf
|
||||
01748376000i[CPU0 ] | SEG selector base limit G D
|
||||
01748376000i[CPU0 ] | SEG sltr(index|ti|rpl) base limit G D
|
||||
01748376000i[CPU0 ] | CS:0008( 0001| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | DS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | SS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | ES:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | FS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | GS:0010( 0002| 0| 0) 00000000 ffffffff 1 1
|
||||
01748376000i[CPU0 ] | MSR_FS_BASE:0000000000000000
|
||||
01748376000i[CPU0 ] | MSR_GS_BASE:0000000000000000
|
||||
01748376000i[CPU0 ] | RIP=0000000000108a0a (0000000000108a0a)
|
||||
01748376000i[CPU0 ] | CR0=0xe0000011 CR2=0x0000000000000000
|
||||
01748376000i[CPU0 ] | CR3=0x0011a000 CR4=0x00000000
|
||||
01748376000i[CPU0 ] 0x0000000000108a0a>> mov al, byte ptr ds:0x10c9dd : A0DDC91000
|
||||
01748376000i[CMOS ] Last time is 1315486137 (Thu Sep 08 15:48:57 2011)
|
||||
01748376000i[ ] restoring default signal behavior
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
+13
@@ -1,3 +1,16 @@
|
||||
[????] BUILD 0.1.1.??? DATE 9/0?/2011 AT ?:?? ??
|
||||
====================================================
|
||||
Mainly changed: Tasking
|
||||
+ Implemented multitasking
|
||||
|
||||
[GOOD] BUILD 0.1.0.601 DATE 9/06/2011 AT 5:20 PM
|
||||
====================================================
|
||||
Mainly changed: bugfixes
|
||||
+ Added feature: shell automatic completion
|
||||
+ Fixed 'pink text' bug
|
||||
+ Fixed 'dir' bug where it tries to read files as directories
|
||||
? TODO: Fix Vfs bug which allows files to be read as directories
|
||||
|
||||
[GOOD] BUILD 0.1.0.590 DATE 9/05/2011 AT 2:40 PM
|
||||
====================================================
|
||||
Mainly changed: FS.Initrd
|
||||
|
||||
BIN
Binary file not shown.
@@ -10,15 +10,6 @@ SECTIONS
|
||||
{
|
||||
*(.__mbHeader)
|
||||
}
|
||||
|
||||
.setup :
|
||||
{
|
||||
*(.setup)
|
||||
}
|
||||
|
||||
/* . += 0xC0000000; */
|
||||
|
||||
|
||||
|
||||
.text : /* AT(ADDR(.text) - 0xC0000000) */
|
||||
{
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
601
|
||||
629
|
||||
|
||||
Reference in New Issue
Block a user