mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-03-14 03:55:06 +00:00
Add total memory report to MemBIOSRep
This commit is contained in:
parent
32363328e9
commit
b09ee0e580
8 changed files with 1854 additions and 1860 deletions
Binary file not shown.
Binary file not shown.
BIN
src/Kernel.BIN.C
BIN
src/Kernel.BIN.C
Binary file not shown.
|
@ -212,7 +212,6 @@ GET_IP: POP BX
|
||||||
BTS U32 [SYS_RUN_LEVEL], RLf_VESA
|
BTS U32 [SYS_RUN_LEVEL], RLf_VESA
|
||||||
@@10:
|
@@10:
|
||||||
|
|
||||||
//Get mem maps.
|
|
||||||
//Get E801 memory map.
|
//Get E801 memory map.
|
||||||
//Output: AX = Memory between 1MiB and 16MiB in KiB (max 0x3C00 == 15 MiB)
|
//Output: AX = Memory between 1MiB and 16MiB in KiB (max 0x3C00 == 15 MiB)
|
||||||
// BX = Memory after 16MiB until first memory hole in 64KiB blocks.
|
// BX = Memory after 16MiB until first memory hole in 64KiB blocks.
|
||||||
|
@ -226,11 +225,12 @@ GET_IP: POP BX
|
||||||
@@12: MOV U16 [MEM_E801], AX
|
@@12: MOV U16 [MEM_E801], AX
|
||||||
MOV U16 [MEM_E801+2], BX
|
MOV U16 [MEM_E801+2], BX
|
||||||
|
|
||||||
MOV CX,MEM_E820_ENTRIES_NUM - 1 //Leave one to terminate
|
//Get E820 memory map.
|
||||||
XOR EBX ,EBX
|
MOV CX , MEM_E820_ENTRIES_NUM - 1 //Leave one to terminate
|
||||||
MOV AX, DS
|
XOR EBX, EBX
|
||||||
MOV ES, AX
|
PUSH DS
|
||||||
MOV DI, MEM_E820
|
POP ES
|
||||||
|
MOV DI , MEM_E820
|
||||||
@@15: PUSH CX
|
@@15: PUSH CX
|
||||||
MOV EAX, 0xE820
|
MOV EAX, 0xE820
|
||||||
MOV ECX, sizeof(CMemE820)
|
MOV ECX, sizeof(CMemE820)
|
||||||
|
@ -239,37 +239,37 @@ GET_IP: POP BX
|
||||||
JC @@20
|
JC @@20
|
||||||
CMP EAX, 'PAMS'
|
CMP EAX, 'PAMS'
|
||||||
JNE @@20
|
JNE @@20
|
||||||
TEST EBX,EBX
|
TEST EBX, EBX
|
||||||
JZ @@20
|
JZ @@20
|
||||||
ADD DI, sizeof(CMemE820)
|
ADD DI , sizeof(CMemE820)
|
||||||
POP CX
|
POP CX
|
||||||
LOOP @@15
|
LOOP @@15
|
||||||
SUB SP, 2
|
SUB SP , 2
|
||||||
@@20: ADD SP, 2
|
@@20: ADD SP , 2 //if called failed we want to nullify the PUSHed CX value.
|
||||||
|
|
||||||
//Find how much space to map, start with E801 limit.
|
//Find how much space to map, start with E801 limit.
|
||||||
XOR EAX,EAX
|
XOR EAX,EAX
|
||||||
MOV AX,[MEM_E801+2]
|
MOV AX, [MEM_E801+2]
|
||||||
SHL EAX,16
|
SHL EAX,16
|
||||||
ADD EAX,SYS_16MEG_AREA_LIMIT
|
ADD EAX,SYS_16MEG_AREA_LIMIT
|
||||||
XOR EDX,EDX
|
XOR EDX,EDX
|
||||||
|
|
||||||
//Find max of E820 to set mapped space.
|
//Find max of E820 to set mapped space.
|
||||||
MOV SI,MEM_E820
|
MOV SI , MEM_E820
|
||||||
@@25: MOV CL,CMemE820.type[SI]
|
@@25: MOV CL , CMemE820.type[SI]
|
||||||
TEST CL,CL
|
TEST CL , CL
|
||||||
JZ @@35
|
JZ @@35
|
||||||
MOV EBX,CMemE820.base[SI]
|
MOV EBX, CMemE820.base [SI]
|
||||||
MOV ECX,CMemE820.base+4[SI]
|
MOV ECX, CMemE820.base+4[SI]
|
||||||
ADD EBX,CMemE820.len[SI]
|
ADD EBX, CMemE820.len [SI]
|
||||||
ADC ECX,CMemE820.len+4[SI]
|
ADC ECX, CMemE820.len+4 [SI]
|
||||||
SUB EBX,EAX
|
SUB EBX, EAX
|
||||||
SBB ECX,EDX
|
SBB ECX, EDX
|
||||||
JC @@30
|
JC @@30
|
||||||
MOV EAX,CMemE820.base[SI]
|
MOV EAX, CMemE820.base[SI]
|
||||||
MOV EDX,CMemE820.base+4[SI]
|
MOV EDX, CMemE820.base+4[SI]
|
||||||
ADD EAX,CMemE820.len[SI]
|
ADD EAX, CMemE820.len[SI]
|
||||||
ADC EDX,CMemE820.len+4[SI]
|
ADC EDX, CMemE820.len+4[SI]
|
||||||
@@30: ADD SI,sizeof(CMemE820)
|
@@30: ADD SI,sizeof(CMemE820)
|
||||||
JMP @@25
|
JMP @@25
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -334,29 +334,44 @@ public class CMathODE
|
||||||
|
|
||||||
#define MP_PROCESSORS_NUM 128
|
#define MP_PROCESSORS_NUM 128
|
||||||
|
|
||||||
#define SYS_START_CR0 0x0031
|
//Control register flag bits
|
||||||
|
#define CR0f_MP 1 //Monitor coprocessor
|
||||||
|
#define CR0f_EM 2 //Emulation of coprocessor
|
||||||
|
#define CR0f_TS 3 //Task switched, some irrelevant x87 task management stuff
|
||||||
|
#define CR0f_NE 5 //Numeric error
|
||||||
|
#define CR0f_PG 31//Enable paging
|
||||||
|
|
||||||
#define RFLAGf_CARRY 0
|
#define CR4f_PAE 5 //Physical Address Extension, required by long mode
|
||||||
#define RFLAGf_PARITY 2
|
#define CR4f_PGE 7 //Page-Global Enable
|
||||||
#define RFLAGf_AUX_CARRY 4
|
#define CR4f_OSFXSR 9 //FXSAVE/FXRSTOR support enabled
|
||||||
#define RFLAGf_ZERO 6
|
|
||||||
#define RFLAGf_SIGN 7
|
|
||||||
#define RFLAGf_TRAP 8 //Single Step
|
|
||||||
#define RFLAGf_INT 9
|
|
||||||
#define RFLAGf_DIR 10
|
|
||||||
#define RFLAGf_OVERFLOW 11
|
|
||||||
#define RFLAGf_IOPL0 12 // I/O Privilege Level
|
|
||||||
#define RFLAGf_IOPL1 13
|
|
||||||
#define RFLAGf_NESTED_TASK 14
|
|
||||||
#define RFLAGf_RESUME 16
|
|
||||||
#define RFLAGf_V8086 17
|
|
||||||
#define RFLAGf_ALIGN_CHECK 18
|
|
||||||
#define RFLAGf_VINT 19 //Virtual Interrupt
|
|
||||||
#define RFLAGf_VINT_PENDING 20
|
|
||||||
#define RFLAGf_ID 21
|
|
||||||
|
|
||||||
#define RFLAGG_START 0x0000
|
#define CR4F_PAE (1<<CR4f_PAE)
|
||||||
#define RFLAGG_NORMAL (1<<RFLAGf_INT)
|
#define CR4F_PGE (1<<CR4f_PGE)
|
||||||
|
#define CR4F_OSFXSR (1<<CR4f_OSFXSR)
|
||||||
|
|
||||||
|
#define SYS_START_CR0 0x0031
|
||||||
|
|
||||||
|
#define RFLAGf_CARRY 0
|
||||||
|
#define RFLAGf_PARITY 2
|
||||||
|
#define RFLAGf_AUX_CARRY 4
|
||||||
|
#define RFLAGf_ZERO 6
|
||||||
|
#define RFLAGf_SIGN 7
|
||||||
|
#define RFLAGf_TRAP 8 //Single Step
|
||||||
|
#define RFLAGf_INT 9
|
||||||
|
#define RFLAGf_DIR 10
|
||||||
|
#define RFLAGf_OVERFLOW 11
|
||||||
|
#define RFLAGf_IOPL0 12 // I/O Privilege Level
|
||||||
|
#define RFLAGf_IOPL1 13
|
||||||
|
#define RFLAGf_NESTED_TASK 14
|
||||||
|
#define RFLAGf_RESUME 16
|
||||||
|
#define RFLAGf_V8086 17
|
||||||
|
#define RFLAGf_ALIGN_CHECK 18
|
||||||
|
#define RFLAGf_VINT 19 //Virtual Interrupt
|
||||||
|
#define RFLAGf_VINT_PENDING 20
|
||||||
|
#define RFLAGf_ID 21
|
||||||
|
|
||||||
|
#define RFLAGG_START 0x0000
|
||||||
|
#define RFLAGG_NORMAL (1<<RFLAGf_INT)
|
||||||
|
|
||||||
//Global Descriptor Table
|
//Global Descriptor Table
|
||||||
class CGDTEntry
|
class CGDTEntry
|
||||||
|
@ -385,13 +400,13 @@ class CSysLimitBase
|
||||||
};
|
};
|
||||||
|
|
||||||
#help_index "Memory/Info"
|
#help_index "Memory/Info"
|
||||||
#define MEM_E820_ENTRIES_NUM 48
|
#define MEM_E820_ENTRIES_NUM 24
|
||||||
#define MEM_E820t_USABLE 1
|
#define MEM_E820t_USABLE 1
|
||||||
#define MEM_E820t_RESERVED 2
|
#define MEM_E820t_RESERVED 2
|
||||||
#define MEM_E820t_ACPI 3
|
#define MEM_E820t_ACPI 3
|
||||||
#define MEM_E820t_ACPI_NVS 4
|
#define MEM_E820t_ACPI_NVS 4
|
||||||
#define MEM_E820t_BAD_MEM 5
|
#define MEM_E820t_BAD_MEM 5
|
||||||
#define MEM_E820t_PERM_MEM 7
|
#define MEM_E820t_PERM_MEM 7
|
||||||
|
|
||||||
class CMemE820
|
class CMemE820
|
||||||
{
|
{
|
||||||
|
@ -584,20 +599,6 @@ class CKernel
|
||||||
#define RLF_ONCE_USER (1<<RLf_ONCE_USER)
|
#define RLF_ONCE_USER (1<<RLf_ONCE_USER)
|
||||||
|
|
||||||
#help_index "Processor"
|
#help_index "Processor"
|
||||||
//Control register flag bits
|
|
||||||
#define CR0f_MP 1 //Monitor coprocessor
|
|
||||||
#define CR0f_EM 2 //Emulation of coprocessor
|
|
||||||
#define CR0f_TS 3 //Task switched, some irrelevant x87 task management stuff
|
|
||||||
#define CR0f_NE 5 //Numeric error
|
|
||||||
#define CR0f_PG 31//Enable paging
|
|
||||||
|
|
||||||
#define CR4f_PAE 5 //Physical Address Extension, required by long mode
|
|
||||||
#define CR4f_PGE 7 //Page-Global Enable
|
|
||||||
#define CR4f_OSFXSR 9 //FXSAVE/FXRSTOR support enabled
|
|
||||||
|
|
||||||
#define CR4F_PAE (1<<CR4f_PAE)
|
|
||||||
#define CR4F_PGE (1<<CR4f_PGE)
|
|
||||||
#define CR4F_OSFXSR (1<<CR4f_OSFXSR)
|
|
||||||
|
|
||||||
//Model specific regs.
|
//Model specific regs.
|
||||||
#define IA32F_SCE 0x001
|
#define IA32F_SCE 0x001
|
||||||
|
@ -1593,7 +1594,7 @@ class CWinMgrTimingGlobals
|
||||||
};
|
};
|
||||||
|
|
||||||
#define WINMGR_FPS (30000.0/1001)
|
#define WINMGR_FPS (30000.0/1001)
|
||||||
#define WINMGR_PERIOD (1001/30000.0)
|
#define WINMGR_PERIOD (1001/30000.0)
|
||||||
|
|
||||||
public class CWinMgrGlobals
|
public class CWinMgrGlobals
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
|
@ -225,10 +225,10 @@ public U0 MemBIOSRep()
|
||||||
CMemRange *tmpmr;
|
CMemRange *tmpmr;
|
||||||
|
|
||||||
"$$PURPLE$$Standard Addresses$$FG$$\n"
|
"$$PURPLE$$Standard Addresses$$FG$$\n"
|
||||||
"FEE00000-FEE00FFF See $$LK,\"APIC\",A=\"MN:LAPIC_BASE\"$$\n\n"
|
"FEE00000-FEE00FFF See $LK,"APIC",A="MN:LAPIC_BASE"$\n\n"
|
||||||
|
|
||||||
"$$PURPLE$$VBE Linear Framebuffer$$FG$$\n"
|
"$$PURPLE$$VBE Linear Framebuffer$$FG$$\n"
|
||||||
"%08X-%08X See $$LK,\"VBE Mode\",A=\"FF:::/Kernel/KernelA.HH,framebuffer\"$$\n", text.fb_alias,
|
"%08X-%08X See $LK,"VBE Mode",A="FF:::/Kernel/KernelA.HH,framebuffer"$\n", text.fb_alias,
|
||||||
text.fb_alias(U8 *) + text.buffer_size - 1;
|
text.fb_alias(U8 *) + text.buffer_size - 1;
|
||||||
"\n$$PURPLE$$32 Bit Device Mem$$FG$$\n";
|
"\n$$PURPLE$$32 Bit Device Mem$$FG$$\n";
|
||||||
while (LBts(&sys_semas[SEMA_DEV_MEM],0))
|
while (LBts(&sys_semas[SEMA_DEV_MEM],0))
|
||||||
|
@ -242,7 +242,7 @@ public U0 MemBIOSRep()
|
||||||
LBtr(&sys_semas[SEMA_DEV_MEM],0);
|
LBtr(&sys_semas[SEMA_DEV_MEM],0);
|
||||||
|
|
||||||
"\n$$PURPLE$$BIOS Memory Report 15:E801$$FG$$\n"
|
"\n$$PURPLE$$BIOS Memory Report 15:E801$$FG$$\n"
|
||||||
"0000000000000000-%016X\n", 0x100000 + m01[0] * 1024 - 1;
|
"0000000000000000-%016X\n", 0x100000 + m01[0] * 1024 - 1;
|
||||||
"0000000001000000-%016X\n", SYS_16MEG_AREA_LIMIT + m01[1] * 64 * 1024 - 1;
|
"0000000001000000-%016X\n", SYS_16MEG_AREA_LIMIT + m01[1] * 64 * 1024 - 1;
|
||||||
|
|
||||||
if (m20->type)
|
if (m20->type)
|
||||||
|
@ -273,6 +273,11 @@ public U0 MemBIOSRep()
|
||||||
m20++;
|
m20++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"\n$$PURPLE$$BIOS Total Memory Report$$FG$$: ";
|
||||||
|
if (MemBIOSTotal < 1024 * 1024 * 1024)
|
||||||
|
"%03d MiB\n", MemBIOSTotal / 1024 / 1024;
|
||||||
|
else
|
||||||
|
"%04d GiB\n", MemBIOSTotal / 1024 / 1024 / 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
public U0 MemPageRep()
|
public U0 MemPageRep()
|
||||||
|
|
Loading…
Reference in a new issue