Cpuid and speed *ahem* and cosmetic
This commit is contained in:
parent
e176990138
commit
c2b544368a
11
Makefile
11
Makefile
|
@ -43,7 +43,8 @@ CWARNS=-Wall -Wextra -Wno-unused-parameter -Wno-implicit-fallthrough -Werror=imp
|
||||||
CINCLUDES=-Iinclude
|
CINCLUDES=-Iinclude
|
||||||
CFLAGS1=-nostdlib -ffreestanding -mcmodel=large -std=gnu11
|
CFLAGS1=-nostdlib -ffreestanding -mcmodel=large -std=gnu11
|
||||||
CFLAGS2= -c -mno-red-zone -mno-mmx -mno-sse -mno-sse2
|
CFLAGS2= -c -mno-red-zone -mno-mmx -mno-sse -mno-sse2
|
||||||
CFLAGS=$(CFLAGS1) $(CFLAGS2)
|
CFLAGS= $(CFLAGS1) $(CFLAGS2)
|
||||||
|
CFLAGS_MATHS= $(CFLAGS1) -c -mno-red-zone -mno-mmx -mno-sse2
|
||||||
|
|
||||||
ifeq ($(mode), release)
|
ifeq ($(mode), release)
|
||||||
CFLAGS += -D_NO_DEBUG
|
CFLAGS += -D_NO_DEBUG
|
||||||
|
@ -53,7 +54,11 @@ ifeq ($(mode), debug)
|
||||||
CFLAGS += -g
|
CFLAGS += -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) -D_OSK_SOURCE -D_KALEID_KERNEL -fstack-protector-all
|
KCC=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS) $(CINCLUDES) \
|
||||||
|
-D_OSK_SOURCE -D_KALEID_KERNEL -fstack-protector-all
|
||||||
|
|
||||||
|
KCC_MATHS=$(CCNAME) $(COPTIM) $(CWARNS) $(CFLAGS_MATHS) $(CINCLUDES) \
|
||||||
|
-D_OSK_SOURCE -D_KALEID_KERNEL -fstack-protector-all
|
||||||
|
|
||||||
# Folders
|
# Folders
|
||||||
MBRDIR=boot/grub
|
MBRDIR=boot/grub
|
||||||
|
@ -185,7 +190,7 @@ $(KOBJDIR)/kernel/ke/cpuid.o: $(KALEIDDIR)/kernel/ke/cpuid.c \
|
||||||
$(KALEIDDIR)/kernel/ke/cpuf.asm | $(KOBJDIR)
|
$(KALEIDDIR)/kernel/ke/cpuf.asm | $(KOBJDIR)
|
||||||
@mkdir -p $(shell dirname $@)
|
@mkdir -p $(shell dirname $@)
|
||||||
@$(ASM) $(ASMFLAGS) $(KALEIDDIR)/kernel/ke/cpuf.asm -o $@.1
|
@$(ASM) $(ASMFLAGS) $(KALEIDDIR)/kernel/ke/cpuf.asm -o $@.1
|
||||||
@$(KCC) $< -o $@.2
|
@$(KCC_MATHS) $< -o $@.2
|
||||||
@$(LD) $(LDFLAGS) -r $@.1 $@.2 -o $@
|
@$(LD) $(LDFLAGS) -r $@.1 $@.2 -o $@
|
||||||
@rm -f $@.1 $@.2
|
@rm -f $@.1 $@.2
|
||||||
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
|
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
|
||||||
|
|
|
@ -130,6 +130,12 @@ static inline ushort IoReadDWordFromPort(ushort port) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline ulong KeReadStsc(void) {
|
||||||
|
int eax, edx;
|
||||||
|
asm volatile ("rdtsc":"=a"(eax),"=d"(edx));
|
||||||
|
return ((ulong)edx << 32) + eax;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------//
|
//------------------------------------------//
|
||||||
// Misc. I/O //
|
// Misc. I/O //
|
||||||
//------------------------------------------//
|
//------------------------------------------//
|
||||||
|
|
|
@ -100,9 +100,9 @@ enum {
|
||||||
// Issue a single request to CPUID. Fits 'intel features', for instance
|
// Issue a single request to CPUID. Fits 'intel features', for instance
|
||||||
// note that even if only "eax" and "edx" are of interest, other registers
|
// note that even if only "eax" and "edx" are of interest, other registers
|
||||||
// will be modified by the operation, so we need to tell the compiler about it.
|
// will be modified by the operation, so we need to tell the compiler about it.
|
||||||
static inline void CpuCpuid(int code, uint *a, uint *d)
|
static inline void CpuCpuid(int code, uint *eax, uint *edx)
|
||||||
{
|
{
|
||||||
asm volatile("cpuid":"=a"(*a),"=d"(*d):"a"(code):"ecx","ebx");
|
asm volatile("cpuid":"=a"(*eax),"=d"(*edx):"a"(code):"ecx","ebx");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue a complete request, storing general registers output as a string
|
// Issue a complete request, storing general registers output as a string
|
||||||
|
@ -113,7 +113,9 @@ static inline int CpuCpuidString(int code, uint where[4])
|
||||||
return (int)where[0];
|
return (int)where[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
void CpuGetInfos(void);
|
void KeGetCpuInfos(void);
|
||||||
|
double KeGetCpuSpeed(void);
|
||||||
|
extern void KeActivateSSE(void);
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@ noreturn void BtStartKern(multiboot_info_t *mbInfo, uint mbMagic, void *codeSeg)
|
||||||
// Interrupts launching
|
// Interrupts launching
|
||||||
KeSetupIDT();
|
KeSetupIDT();
|
||||||
KeEnableIRQs();
|
KeEnableIRQs();
|
||||||
CpuGetInfos();
|
KeGetCpuInfos();
|
||||||
MmInitGdt();
|
MmInitGdt();
|
||||||
|
|
||||||
// Start drivers
|
// Start drivers
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
[BITS 64]
|
[BITS 64]
|
||||||
|
|
||||||
global divideByZero
|
global divideByZero
|
||||||
|
global KeActivateSSE
|
||||||
|
|
||||||
%include "kaleid/kernel/ke/cpuf.inc"
|
%include "kaleid/kernel/ke/cpuf.inc"
|
||||||
|
|
||||||
|
@ -34,4 +35,17 @@ global divideByZero
|
||||||
divideByZero:
|
divideByZero:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; Activating SSE
|
||||||
|
;;
|
||||||
|
KeActivateSSE:
|
||||||
|
push rax
|
||||||
|
mov rax, cr0
|
||||||
|
and ax, 0xFFFB ;clear coprocessor emulation CR0.EM
|
||||||
|
or ax, 0x2 ;set coprocessor monitoring CR0.MP
|
||||||
|
mov cr0, rax
|
||||||
|
mov rax, cr4
|
||||||
|
or ax, 3 << 9 ;set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
|
||||||
|
mov cr4, rax
|
||||||
|
pop rax
|
||||||
|
ret
|
||||||
|
|
|
@ -25,19 +25,48 @@
|
||||||
#include <ke/cpuid.h>
|
#include <ke/cpuid.h>
|
||||||
#include <io/vga.h>
|
#include <io/vga.h>
|
||||||
|
|
||||||
void CpuGetInfos(void)
|
void KeGetCpuInfos(void)
|
||||||
{
|
{
|
||||||
uint CpuVendorString[5] = {0};
|
uint CpuVendorString[5] = {0};
|
||||||
extern CpuInfo_t CpuInfo;
|
extern CpuInfo_t CpuInfo;
|
||||||
|
uint eax = 0;
|
||||||
|
|
||||||
CpuCpuidString(0, CpuVendorString);
|
CpuCpuidString(0, CpuVendorString);
|
||||||
|
|
||||||
memmove(CpuInfo.vendorStr, (char *)&CpuVendorString[1], 12*sizeof(char));
|
memmove(CpuInfo.vendorStr, (char *)&CpuVendorString[1], 12*sizeof(char));
|
||||||
|
|
||||||
KernLog("\tCPU %s detected\n", CpuInfo.vendorStr);
|
CpuCpuid(1, &eax, &CpuInfo.featureFlag);
|
||||||
|
|
||||||
|
if (CpuInfo.featureFlag & FEAT_EDX_SSE) {
|
||||||
|
KeActivateSSE();
|
||||||
|
}
|
||||||
|
|
||||||
|
DebugLog("\tCPU %s detected with features %#x and ?? speed %#d Hz ??\n",
|
||||||
|
CpuInfo.vendorStr,
|
||||||
|
CpuInfo.featureFlag,
|
||||||
|
(long)KeGetCpuSpeed()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
double KeGetCpuSpeed(void)
|
||||||
|
{
|
||||||
|
ulong flags = KePauseIRQs();
|
||||||
|
|
||||||
|
IoWriteByteOnPort(0x43,0x34); // set PIT channel 0 to single-shot mode
|
||||||
|
IoWriteByteOnPort(0x40,0);
|
||||||
|
IoWriteByteOnPort(0x40,0); // program the counter will be
|
||||||
|
// 0x10000 - n after n ticks
|
||||||
|
long stsc = KeReadStsc();
|
||||||
|
for (int i=0x9000;i>0;i--);
|
||||||
|
long etsc= KeReadStsc();
|
||||||
|
IoWriteByteOnPort(0x43,0x04);
|
||||||
|
char lo=IoReadByteFromPort(0x40);
|
||||||
|
char hi=IoReadByteFromPort(0x40);
|
||||||
|
KeRestoreIRQs(flags);
|
||||||
|
|
||||||
|
ulong ticks = (0x10000 - (hi*256+lo));
|
||||||
|
return (etsc-stsc)*1193180.0 / ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -183,7 +183,8 @@ void KeSetupIDT(void)
|
||||||
|
|
||||||
// Load IDT
|
// Load IDT
|
||||||
KeLoadIDT();
|
KeLoadIDT();
|
||||||
DebugLog("\tInterrupt table initialized at %p\n", _KeIdtPtr.base);
|
//DebugLog("\tInterrupt table initialized at %p\n", _KeIdtPtr.base);
|
||||||
|
KernLog("\tInterrupts activated\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -108,8 +108,8 @@ void MmInitPaging(void)
|
||||||
MmPML4[0] = (ulong)(&MmPDP[0])| MF_PRESENT | MF_READWRITE;
|
MmPML4[0] = (ulong)(&MmPDP[0])| MF_PRESENT | MF_READWRITE;
|
||||||
|
|
||||||
MmLoadPML4((void *)MmPML4);
|
MmLoadPML4((void *)MmPML4);
|
||||||
DebugLog("\tPaging tables initialized at %p, %p\n", &MmPD, &MmPT);
|
//DebugLog("\tPaging tables initialized at %p, %p\n", &MmPD, &MmPT);
|
||||||
DebugLog("\tStack Guards at %p, %p\n", MmStackGuards[0], MmStackGuards[1]);
|
//DebugLog("\tStack Guards at %p, %p\n", MmStackGuards[0], MmStackGuards[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -54,85 +54,206 @@ error_t CmdMemUsage(int argc, char **argv, char *cmdline)
|
||||||
|
|
||||||
KernLog("Kernel image\n");
|
KernLog("Kernel image\n");
|
||||||
|
|
||||||
KernLog("\tstarts at:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cstarts at:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
BtLoaderInfo.kernelAddr,
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
(size_t)BtLoaderInfo.kernelAddr,
|
||||||
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelAddr),
|
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelAddr),
|
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelAddr),
|
||||||
_ADDR_TO_B((size_t)BtLoaderInfo.kernelAddr));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B((size_t)BtLoaderInfo.kernelAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tends at:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cends at:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
(size_t)BtLoaderInfo.kernelEndAddr,
|
(size_t)BtLoaderInfo.kernelEndAddr,
|
||||||
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelEndAddr),
|
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelEndAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelEndAddr),
|
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelEndAddr),
|
||||||
_ADDR_TO_B((size_t)BtLoaderInfo.kernelEndAddr));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B((size_t)BtLoaderInfo.kernelEndAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tsize:\t\t\t%4luMB + %4luKB + %4luB (%p)\n",
|
KernLog("\t%Csize:\t\t\t%C%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C (%p)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_MB(img_diff),
|
_ADDR_TO_MB(img_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(img_diff),
|
_ADDR_TO_KB(img_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_B(img_diff),
|
_ADDR_TO_B(img_diff),
|
||||||
img_diff);
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
img_diff
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
KernLog("Kernel stack\n");
|
KernLog("Kernel stack\n");
|
||||||
|
|
||||||
KernLog("\tstarts at:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cstarts at:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
BtLoaderInfo.stackEndAddr,
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
(size_t)BtLoaderInfo.stackEndAddr,
|
||||||
_ADDR_TO_MB((size_t)BtLoaderInfo.stackEndAddr),
|
_ADDR_TO_MB((size_t)BtLoaderInfo.stackEndAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB((size_t)BtLoaderInfo.stackEndAddr),
|
_ADDR_TO_KB((size_t)BtLoaderInfo.stackEndAddr),
|
||||||
_ADDR_TO_B((size_t)BtLoaderInfo.stackEndAddr));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
KernLog("\tcurrently at:\t%p (%4luMB + %4luKB + %4luB)\n",
|
_ADDR_TO_B((size_t)BtLoaderInfo.stackEndAddr),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
|
KernLog("\t%Ccurrently at:\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
(size_t)&var,
|
(size_t)&var,
|
||||||
_ADDR_TO_MB((size_t)&var),
|
_ADDR_TO_MB((size_t)&var),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB((size_t)&var),
|
_ADDR_TO_KB((size_t)&var),
|
||||||
_ADDR_TO_B((size_t)&var));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B((size_t)&var),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tmin address:\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cmin address:\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
(size_t)BtLoaderInfo.kernelEndAddr+16,
|
(size_t)BtLoaderInfo.kernelEndAddr+16,
|
||||||
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelEndAddr+16),
|
_ADDR_TO_MB((size_t)BtLoaderInfo.kernelEndAddr+16),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelEndAddr+16),
|
_ADDR_TO_KB((size_t)BtLoaderInfo.kernelEndAddr+16),
|
||||||
_ADDR_TO_B((size_t)BtLoaderInfo.kernelEndAddr+16));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B((size_t)BtLoaderInfo.kernelEndAddr+16),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tsize (cur):\t\t%4luMB + %4luKB + %4luB (%p)\n",
|
|
||||||
|
KernLog("\t%Csize (cur):\t%C%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C (%p)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_MB(stack_cur),
|
_ADDR_TO_MB(stack_cur),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(stack_cur),
|
_ADDR_TO_KB(stack_cur),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_B(stack_cur),
|
_ADDR_TO_B(stack_cur),
|
||||||
stack_cur);
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
stack_cur
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tsize (max):\t\t%4luMB + %4luKB + %4luB (%p)\n",
|
KernLog("\t%Csize (max):\t%C%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C (%p)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_MB(stack_diff),
|
_ADDR_TO_MB(stack_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(stack_diff),
|
_ADDR_TO_KB(stack_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_B(stack_diff),
|
_ADDR_TO_B(stack_diff),
|
||||||
stack_diff);
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
stack_diff
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("Kernel heap\n");
|
KernLog("Kernel heap\n");
|
||||||
|
|
||||||
KernLog("\tstarts at:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cstarts at:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
heap_start, _ADDR_TO_MB(heap_start),
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
heap_start,
|
||||||
|
_ADDR_TO_MB(heap_start),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(heap_start),
|
_ADDR_TO_KB(heap_start),
|
||||||
_ADDR_TO_B(heap_start));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B(heap_start),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tends at:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cends at:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
heap_end, _ADDR_TO_MB(heap_end),
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
heap_end,
|
||||||
|
_ADDR_TO_MB(heap_end),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(heap_end),
|
_ADDR_TO_KB(heap_end),
|
||||||
_ADDR_TO_B(heap_end));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B(heap_end),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tmax addr:\t\t%p (%4luMB + %4luKB + %4luB)\n",
|
KernLog("\t%Cmax addr:\t\t%C%p (%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
heap_start + heap_max,
|
heap_start + heap_max,
|
||||||
_ADDR_TO_MB(heap_start + heap_max),
|
_ADDR_TO_MB(heap_start + heap_max),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(heap_start + heap_max),
|
_ADDR_TO_KB(heap_start + heap_max),
|
||||||
_ADDR_TO_B(heap_start + heap_max));
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
_ADDR_TO_B(heap_start + heap_max),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tsize (cur):\t\t%4luMB + %4luKB + %4luB (%p)\n",
|
KernLog("\t%Csize (cur):\t%C%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C (%p)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_MB(heap_diff),
|
_ADDR_TO_MB(heap_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(heap_diff),
|
_ADDR_TO_KB(heap_diff),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_B(heap_diff),
|
_ADDR_TO_B(heap_diff),
|
||||||
heap_diff);
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
heap_diff
|
||||||
|
);
|
||||||
|
|
||||||
KernLog("\tsize (max):\t\t%4luMB + %4luKB + %4luB (%p)\n",
|
KernLog("\t%Csize (max):\t%C%4lu%CMB%C + %4lu%CKB%C + %4lu%CB%C (%p)\n",
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_MB(heap_max),
|
_ADDR_TO_MB(heap_max),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_KB(heap_max),
|
_ADDR_TO_KB(heap_max),
|
||||||
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
_ADDR_TO_B(heap_max),
|
_ADDR_TO_B(heap_max),
|
||||||
heap_max);
|
VGA_COLOR_DARK_GREY,
|
||||||
|
shcol,
|
||||||
|
heap_max
|
||||||
|
);
|
||||||
|
|
||||||
return EOK;
|
return EOK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,11 @@ error_t CmdColor(int argc, char **argv, char *cmdline)
|
||||||
return EOK;
|
return EOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_t CmdCpuid(int argc, char **argv, char *cmdline)
|
||||||
|
{
|
||||||
|
return EOK;
|
||||||
|
}
|
||||||
|
|
||||||
error_t CmdDate(int argc, char **argv, char *cmdline)
|
error_t CmdDate(int argc, char **argv, char *cmdline)
|
||||||
{
|
{
|
||||||
KernLog("%.10s\n", KeFormatCurTime());
|
KernLog("%.10s\n", KeFormatCurTime());
|
||||||
|
@ -228,13 +233,13 @@ error_t CmdVersion(int argc, char **argv, char *cmdline)
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|
||||||
Command_t cmdtable[] =
|
Command_t cmdtable[] =
|
||||||
{
|
{
|
||||||
{ "args", CmdArgs, "Print command line" },
|
{ "args", CmdArgs, "Print command line" },
|
||||||
{ "beep", CmdBeep, "Make a beep" },
|
{ "beep", CmdBeep, "Make a beep" },
|
||||||
{ "cls", CmdClear, "Clears standard output" },
|
{ "cls", CmdClear, "Clears standard output" },
|
||||||
{ "color", CmdColor, "Change shell text color" },
|
{ "color", CmdColor, "Change shell text color" },
|
||||||
|
{ "cpuid", CmdCpuid, "Request a cpuid info." },
|
||||||
{ "date", CmdDate, "Print date" },
|
{ "date", CmdDate, "Print date" },
|
||||||
{ "die", CmdDie, "Die painfully" },
|
{ "die", CmdDie, "Die painfully" },
|
||||||
{ "help", CmdHelp, "Show this message" },
|
{ "help", CmdHelp, "Show this message" },
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <io/keyb.h>
|
#include <io/keyb.h>
|
||||||
#include <io/vga.h>
|
#include <io/vga.h>
|
||||||
#include <po/shtdwn.h>
|
#include <po/shtdwn.h>
|
||||||
|
#include <ke/cpuid.h>
|
||||||
|
|
||||||
void IoScrollDown(void);
|
void IoScrollDown(void);
|
||||||
void IoScrollUp(void);
|
void IoScrollUp(void);
|
||||||
|
|
Loading…
Reference in New Issue