完善一些cpos私有api
This commit is contained in:
parent
1327ae7724
commit
55379d0c6d
30
apps/include/cpos.h
Normal file
30
apps/include/cpos.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef CRASHPOWEROS_CPOS_H
|
||||
#define CRASHPOWEROS_CPOS_H
|
||||
|
||||
struct sysinfo{
|
||||
char* osname;
|
||||
char* kenlname;
|
||||
char* cpu_vendor;
|
||||
char* cpu_name;
|
||||
unsigned int phy_mem_size;
|
||||
unsigned int pci_device;
|
||||
unsigned int frame_width;
|
||||
unsigned int frame_height;
|
||||
};
|
||||
|
||||
#include "syscall.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
static inline struct sysinfo* get_sysinfo(){
|
||||
return syscall_sysinfo();
|
||||
}
|
||||
|
||||
static inline void free_info(struct sysinfo *info){
|
||||
free(info->kenlname);
|
||||
free(info->osname);
|
||||
free(info->cpu_name);
|
||||
free(info->cpu_vendor);
|
||||
free(info);
|
||||
}
|
||||
|
||||
#endif
|
@ -12,6 +12,7 @@
|
||||
#define SYSCALL_VFS_FILESIZE 9
|
||||
#define SYSCALL_VFS_READFILE 10
|
||||
#define SYSCALL_VFS_WRITEFILE 11
|
||||
#define SYSCALL_SYSINFO 12
|
||||
|
||||
#include "ctype.h"
|
||||
|
||||
@ -26,5 +27,6 @@ void syscall_get_cd(char *buffer);
|
||||
int syscall_vfs_filesize(char* filename);
|
||||
void syscall_vfs_readfile(char* filename,char* buffer);
|
||||
void syscall_vfs_writefile(char* filename,char* buffer,unsigned int size);
|
||||
void* syscall_sysinfo();
|
||||
|
||||
#endif
|
||||
|
@ -81,3 +81,9 @@ void syscall_vfs_writefile(char* filename,char* buffer,unsigned int size){
|
||||
register uint32_t edx asm("edx") = __arg3;
|
||||
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_VFS_FILESIZE), "r"(ebx), "r"(ecx), "r"(edx) : "memory", "cc");
|
||||
}
|
||||
|
||||
void* syscall_sysinfo(){
|
||||
uint32_t rets;
|
||||
asm volatile("int $31\n\t" : "=a"(rets) : "0"(SYSCALL_SYSINFO) : "memory", "cc");
|
||||
return rets;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
OBJS_PACK = out/shell.obj
|
||||
OBJS_PACK = out/shell.obj out/neofetch.obj
|
||||
include ../def.mk
|
||||
|
||||
default: $(OBJS_PACK)
|
||||
|
44
apps/shell/neofetch.c
Normal file
44
apps/shell/neofetch.c
Normal file
@ -0,0 +1,44 @@
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "../include/cpos.h"
|
||||
|
||||
void print_info(){
|
||||
|
||||
struct sysinfo *info = get_sysinfo();
|
||||
|
||||
printf(" .:=*#&&@@@@@@&&#+=:. \n"
|
||||
" -+&@@@@@@@@@@@@@@@@@@@- ----------. -----------------\n"
|
||||
" -*@@@@@@@@@@@@@@@@@@@@&=.-&@@@@@@@@@@+ OSName: %s\n"
|
||||
" =&@@@@@@@@@@@@@@@@@@@@@=.-&@@@@@@@@@@@@+ Kernel: %s\n"
|
||||
" -&@@@@@@@@@@@@@@@@@@@@@=.-&@@@@@@@@@@@@@@+ CPU Vendor: %s\n"
|
||||
" *@@@@@@@@@@@@@@@@@@@@@=.-&@@@@@@@@@@@@@@@@+ CPU: %s\n"
|
||||
" .&@@@@@@@@@@@@@@@&*=-:: :#@@@@@@@@@@@@@@@@@@= Memory: %dMB\n"
|
||||
" &@@@@@@@@@@@@@&=. #@@@@@@@@@@@@@@@@@#:.= Console: CPOS_USER_SHELL\n"
|
||||
" *@@@@@@@@@@@@@- #@@@@@@@@@@@@@@@#:.=@@+ PCI Device: %d\n"
|
||||
":@@@@@@@@@@@@&. #@@@@@@@@@@@@@#: =@@@@@. Resolution: %d x %d\n"
|
||||
"#@@@@@@@@@@@@. #@@@@@@@@@@@#: =@@@@@@@+\n"
|
||||
"@@@@@@@@@@@@+ *&&&&&&&&&#- =@@@@@@@@@&\n"
|
||||
"@@@@@@@@@@@@- :@@@@@@@@@@@@\n"
|
||||
"@@@@@@@@@@@@+ #@@@@@@@@@@@&\n"
|
||||
"*@@@@@@@@@@@@. :@@@@@@@@@@@@+\n"
|
||||
":@@@@@@@@@@@@&. :@@@@@@@@@@@@@.\n"
|
||||
" *@@@@@@@@@@@@@= =@@@@@@@@@@@@@+ \n"
|
||||
" #@@@@@@@@@@@@@&+: :+@@@@@@@@@@@@@@# \n"
|
||||
" #@@@@@@@@@@@@@@@&*+=----=+#&@@@@@@@@@@@@@@@* \n"
|
||||
" +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+ \n"
|
||||
" :&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#: \n"
|
||||
" -#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#- \n"
|
||||
" :*@@@@@@@@@@@@@@@@@@@@@@@@@@@&+: \n"
|
||||
" :+#@@@@@@@@@@@@@@@@@@@@#+: \n"
|
||||
" :=+*#&@@@@@@&#*+-: \n",
|
||||
info->osname,
|
||||
info->kenlname,
|
||||
info->cpu_vendor,
|
||||
info->cpu_name,
|
||||
info->phy_mem_size,
|
||||
info->pci_device,
|
||||
info->frame_width,
|
||||
info->frame_height);
|
||||
|
||||
free_info(info);
|
||||
}
|
@ -1,11 +1,15 @@
|
||||
#include <stdio.h>
|
||||
#include "../include/syscall.h"
|
||||
#include "../include/string.h"
|
||||
#include "../include/math.h"
|
||||
#include "../include/cpos.h"
|
||||
|
||||
extern void print_info();
|
||||
|
||||
static int gets(char *buf) {
|
||||
|
||||
static int gets(char *buf, int buf_size) {
|
||||
int index = 0;
|
||||
char c;
|
||||
|
||||
while ((c = syscall_getch()) != '\n') {
|
||||
if (c == '\b') {
|
||||
if (index > 0) {
|
||||
@ -51,24 +55,24 @@ int main(){
|
||||
int argc = -1;
|
||||
char *buffer[255];
|
||||
|
||||
double x = sin(12);
|
||||
printf("%08f",x);
|
||||
|
||||
while (1){
|
||||
syscall_get_cd(buffer);
|
||||
printf("%s$ ",buffer);
|
||||
if (gets(com, 100) <= 0) continue;
|
||||
printf("\03343cd80;default@localhost: \0334169E1;%s\\\033c6c6c6;$ ",buffer);
|
||||
|
||||
if (gets(com) <= 0) continue;
|
||||
|
||||
argc = cmd_parse(com, argv, ' ');
|
||||
|
||||
|
||||
|
||||
if (argc == -1) {
|
||||
printf("[Shell]: Error: out of arguments buffer\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcmp("version", argv[0]))
|
||||
printf("CoolPotOS for x86 [v0.3.1]\n");
|
||||
else if (!strcmp("help", argv[0]) || !strcmp("?", argv[0]) || !strcmp("h", argv[0])) {
|
||||
if (!strcmp("version", argv[0])){
|
||||
print_info();
|
||||
}else if (!strcmp("help", argv[0]) || !strcmp("?", argv[0]) || !strcmp("h", argv[0])) {
|
||||
printf("-=[CoolPotShell Helper]=-\n");
|
||||
printf("help ? h Print shell help info.\n");
|
||||
printf("version Print os version.\n");
|
||||
@ -87,5 +91,4 @@ int main(){
|
||||
printf("exec <path> Execute a application.\n");
|
||||
} else printf("\033ff3030;[Shell]: Unknown command '%s'.\033c6c6c6;\n", argv[0]);
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -42,6 +42,14 @@ static void get_cpu_address_sizes(cpu_t *c) {
|
||||
c->phys_bits = eax & 0xff;
|
||||
}
|
||||
|
||||
cpu_t * get_cpuid(){
|
||||
cpu_t *c = (cpu_t *) kmalloc(sizeof(cpu_t));
|
||||
get_vendor_name(c);
|
||||
get_model_name(c);
|
||||
get_cpu_address_sizes(c);
|
||||
return c;
|
||||
}
|
||||
|
||||
void print_cpu_id() {
|
||||
cpu_t *c = (cpu_t *) kmalloc(sizeof(cpu_t));
|
||||
get_vendor_name(c);
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "../include/printf.h"
|
||||
|
||||
unsigned int PCI_ADDR_BASE;
|
||||
unsigned int PCI_NUM = 0;
|
||||
|
||||
uint8_t pci_get_drive_irq(uint8_t bus, uint8_t slot, uint8_t func) {
|
||||
return (uint8_t)read_pci(bus, slot, func, 0x3c);
|
||||
@ -104,7 +105,6 @@ void pci_config(unsigned int bus, unsigned int f, unsigned int equipment, unsign
|
||||
}
|
||||
|
||||
void init_pci(){
|
||||
int PCI_NUM = 0;
|
||||
|
||||
PCI_ADDR_BASE = kmalloc(1 * 1024 * 1024);
|
||||
unsigned int i, BUS, Equipment, F, ADDER, *i1;
|
||||
|
@ -18,7 +18,6 @@ uint32_t *char_buffer;
|
||||
extern uint8_t ascfont[];
|
||||
extern uint8_t plfont[];
|
||||
extern uint8_t bafont[];
|
||||
extern uint8_t logo_bmp[];
|
||||
|
||||
bool vbe_status = false;
|
||||
|
||||
@ -182,10 +181,5 @@ void initVBE(multiboot_t *info) {
|
||||
c_width = width / 9;
|
||||
c_height = height / 16;
|
||||
|
||||
logkf("SCREEN BASS: %08x\n",screen);
|
||||
|
||||
vbe_clear();
|
||||
|
||||
Bmp *bmp = (Bmp*) &logo_bmp;
|
||||
//display(bmp,0,0,false);
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ typedef struct {
|
||||
uint8_t read_cmos(uint8_t p);
|
||||
char *get_date_time();
|
||||
void print_cpu_id();
|
||||
cpu_t * get_cpuid();
|
||||
|
||||
uint32_t get_hour();
|
||||
uint32_t get_min();
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#define OS_NAME "CoolPotOS"
|
||||
#define OS_VERSION "v0.3.1"
|
||||
#define KERNEL_NAME "CP_Kernel-i386-0.3.1"
|
||||
|
||||
// b 0x211972
|
||||
// b 0x20d0a6
|
||||
|
@ -16,6 +16,7 @@
|
||||
#define SYSCALL_VFS_FILESIZE 9
|
||||
#define SYSCALL_VFS_READFILE 10
|
||||
#define SYSCALL_VFS_WRITEFILE 11
|
||||
#define SYSCALL_SYSINFO 12
|
||||
|
||||
void syscall_install();
|
||||
|
||||
|
@ -29,6 +29,8 @@ extern vdisk vdisk_ctl[10];
|
||||
extern bool hasFS;
|
||||
uint32_t placement_address = (uint32_t) & end;
|
||||
|
||||
uint32_t phy_mem_size;
|
||||
|
||||
void reset_kernel(){
|
||||
printf("Restart %s for x86...\n",OS_NAME);
|
||||
kill_all_task();
|
||||
@ -74,6 +76,8 @@ void kernel_main(multiboot_t *multiboot) {
|
||||
while (1) io_hlt();
|
||||
}
|
||||
|
||||
phy_mem_size = (multiboot->mem_upper + multiboot->mem_lower) / 1024;
|
||||
|
||||
initVBE(multiboot);
|
||||
|
||||
char* cmdline = multiboot->cmdline;
|
||||
@ -81,7 +85,7 @@ void kernel_main(multiboot_t *multiboot) {
|
||||
printf("Multiboot command line: %s\n",cmdline);
|
||||
}
|
||||
|
||||
printf("CPOS_Kernel %s (GRUB Multiboot) on an i386.\n",OS_VERSION);
|
||||
printf("%s OS Version: %s (GRUB Multiboot) on an i386.\n",KERNEL_NAME,OS_VERSION);
|
||||
printf("Memory Size: %dMB\n",(multiboot->mem_upper + multiboot->mem_lower) / 1024 + 1);
|
||||
gdt_install();
|
||||
idt_install();
|
||||
|
@ -8,6 +8,10 @@
|
||||
#include "../include/heap.h"
|
||||
#include "../include/keyboard.h"
|
||||
#include "../include/vfs.h"
|
||||
#include "../include/cmos.h"
|
||||
|
||||
extern uint32_t phy_mem_size;
|
||||
extern unsigned int PCI_NUM;
|
||||
|
||||
static void syscall_puchar(uint32_t ebx,uint32_t ecx,uint32_t edx,uint32_t esi,uint32_t edi){
|
||||
printf("%c",ebx);
|
||||
@ -60,6 +64,44 @@ static void syscall_vfs_writefile(uint32_t ebx,uint32_t ecx,uint32_t edx,uint32_
|
||||
vfs_writefile(ebx,ecx,edx);
|
||||
}
|
||||
|
||||
struct sysinfo{
|
||||
char* osname;
|
||||
char* kenlname;
|
||||
char* cpu_vendor;
|
||||
char* cpu_name;
|
||||
unsigned int phy_mem_size;
|
||||
unsigned int pci_device;
|
||||
unsigned int frame_width;
|
||||
unsigned int frame_height;
|
||||
};
|
||||
|
||||
static void* syscall_sysinfo(uint32_t ebx,uint32_t ecx,uint32_t edx,uint32_t esi,uint32_t edi){
|
||||
struct sysinfo *info = (struct sysinfo *) user_alloc(get_current(), sizeof(struct sysinfo));
|
||||
cpu_t *cpu = get_cpuid();
|
||||
char *os_name = user_alloc(get_current(), strlen(OS_NAME));
|
||||
char *kernel = user_alloc(get_current(), strlen(OS_NAME));
|
||||
char *cpu_vendor = user_alloc(get_current(), strlen(cpu->vendor));
|
||||
char *cpu_name = user_alloc(get_current(), strlen(cpu->model_name));
|
||||
|
||||
memcpy(os_name,OS_NAME, 40);
|
||||
memcpy(kernel,KERNEL_NAME, 40);
|
||||
memcpy(cpu_vendor,cpu->vendor, strlen(cpu->vendor));
|
||||
memcpy(cpu_name,cpu->model_name, strlen(cpu->model_name));
|
||||
|
||||
extern uint32_t width,height; //vbe.c
|
||||
|
||||
info->osname = os_name;
|
||||
info->kenlname = kernel;
|
||||
info->cpu_vendor = cpu_vendor;
|
||||
info->cpu_name = cpu_name;
|
||||
info->phy_mem_size = phy_mem_size;
|
||||
info->pci_device = PCI_NUM;
|
||||
info->frame_width = width;
|
||||
info->frame_height = height;
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
void *sycall_handlers[MAX_SYSCALLS] = {
|
||||
[SYSCALL_PUTC] = syscall_puchar,
|
||||
[SYSCALL_PRINT] = syscall_print,
|
||||
@ -72,6 +114,7 @@ void *sycall_handlers[MAX_SYSCALLS] = {
|
||||
[SYSCALL_VFS_FILESIZE] = syscall_vfs_filesize,
|
||||
[SYSCALL_VFS_READFILE] = syscall_vfs_readfile,
|
||||
[SYSCALL_VFS_WRITEFILE] = syscall_vfs_writefile,
|
||||
[SYSCALL_SYSINFO] = syscall_sysinfo,
|
||||
};
|
||||
|
||||
typedef size_t (*syscall_t)(size_t, size_t, size_t, size_t, size_t);
|
||||
|
@ -212,7 +212,7 @@ int32_t user_process(char *path, char *name){ // 用户进程创建
|
||||
page_directory_t *page = clone_directory(kernel_directory);
|
||||
new_task->pgd_dir = page;
|
||||
new_task->mem_size = 0;
|
||||
new_task->program_break = USER_START;
|
||||
new_task->program_break = USER_START + 0xf0000;
|
||||
new_task->program_break_end = USER_HEAP_END;
|
||||
new_task->name = name;
|
||||
new_task->isUser = 1;
|
||||
|
147465
src/util/logo.c
147465
src/util/logo.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user