#ifndef __SYSTEM_H #define __SYSTEM_H // Data type declarations typedef unsigned char byte; typedef unsigned short word; typedef unsigned int dword; /* This defines what the stack looks like after an ISR was running */ typedef struct { unsigned int gs, fs, es, ds; /* pushed the segs last */ unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; /* pushed by 'pusha' */ unsigned int int_no, err_code; /* our 'push byte #' and ecodes do this */ unsigned int eip, cs, eflags, useresp, ss; /* pushed by the processor automatically */ } regs; byte *TextVideoRam; int cursor_x, cursor_y; int current_mode_width; int current_mode_height; // System functions declaration void system_init(); void *memcpy(void *dest, const void *src, int count); void *memset(void *dest, char val, int count); unsigned short *memsetw(unsigned short *dest, unsigned short val, int count); int strlen (const char *str); byte inportb (word _port); byte inb (word _port); void outportb (word _port, byte _data); void outb (word _port, byte _data) ; // GDT, IDT, ISRs, IRQ functions declarations void gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran); void gdt_install(); void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags); void idt_install(); void isrs_install(); void irq_install_handler(int irq, void (*handler)(regs *r)); void irq_uninstall_handler(int irq); void irq_install(); // Initialize system void *memcpy(void *dest, const void *src, int count) { const char *sp = (const char *)src; char *dp = (char *)dest; for(; count != 0; count--) *dp++ = *sp++; return dest; } void *memset(void *dest, char val, int count) { char *temp = (char *)dest; for( ; count != 0; count--) *temp++ = val; return dest; } unsigned short *memsetw(unsigned short *dest, unsigned short val, int count) { unsigned short *temp = (unsigned short *)dest; for( ; count != 0; count--) *temp++ = val; return dest; } // strlen -- Get lenght of str int strlen (const char *str) { int i; for (i = 0; str[i]!=0; i++) {} return i; } byte inportb (word _port) { byte rv; __asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port)); return rv; } byte inb (word _port) { byte rv; __asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port)); return rv; } void outportb (word _port, byte _data) { __asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data)); } void outb (word _port, byte _data) { __asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data)); } #endif