Mercurial > lcfOS
diff cos/include/kernel.h @ 9:92ace1ca50a8
64 bits kernel without interrupts but with printf in C
author | windel |
---|---|
date | Sun, 13 Nov 2011 12:47:47 +0100 |
parents | |
children | fcdae30b2782 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cos/include/kernel.h Sun Nov 13 12:47:47 2011 +0100 @@ -0,0 +1,107 @@ +#ifndef KERNEL_H +#define KERNEL_H + +// Include common functions, available to all! +#define NULL ((void*)0) + +// Type defs: +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +typedef unsigned short ushort_t; +typedef unsigned char uchar_t; +typedef unsigned int uint_t; +typedef unsigned long ulong_t; +typedef unsigned long long ulonglong_t; +typedef unsigned long off_t; +typedef unsigned long size_t; + +void printf(const char* fmt, ... ); +void memset(void* ptr, uint32_t value, uint32_t num); +void memcpy(void* dst, void* src, uint32_t num); + +// memory alloc functions: +void* malloc(size_t size); +void free(void* ptr); + +void clear_screen(); +void init_screen(); +void print_string(const char *); + +// For IO ports: +unsigned char inb(unsigned short); +void outb(unsigned short, unsigned char); + +void setupIDT(void); +void PICremap(void); +// Assembler util functions: +void enableinterrupts(void); +void callint49(void); +void doCPUID(int eax, int *ebx, int *ecx, int *edx); + +// Keyboard driver: +void keyboardDriverUpdate(unsigned char scancode); +void timerDriverUpdate(void); + +// Memory functions: +void mappage(uint32_t address); + +int querymode(void); +int getcs(void); +void loadPageTable(void* tableAddress); +void enablePaging(void); + +struct multiboot_aout_symbol_table { + uint32_t tabsize; + uint32_t strsize, addr, reserved; +}; + +struct multiboot_info { + uint32_t flags; // Multiboot flags / version + uint32_t mem_lower; // available memory from BIOS + uint32_t mem_upper; + uint32_t boot_device; + uint32_t cmdline; // COmmand line + uint32_t mods_count; + uint32_t mods_addr; + union { + struct multiboot_aout_symbol_table aout_sym; + } u; + + uint32_t mmap_length; + uint32_t mmap_addr; +}; + +struct memory_map { + uint32_t size; + uint32_t baselow, basehigh; + uint32_t lenlow, lenhigh; + uint32_t type; +}; + +typedef struct { + char name[32]; // Name of the console + unsigned char screendata[80*25]; // All chars in the console! +} console_t; + +typedef struct { + uint32_t esp; + uint32_t ss; + uint32_t kstack; + uint32_t ustack; + uint32_t cr3; + + uint32_t number; + uint32_t parent; + uint32_t owner; + uint32_t groups; + uint32_t timetorun; + uint32_t sleep; + uint32_t priority; + uint32_t filehandle; + char naam[32]; + + console_t *console; +} programma_t; + +#endif +