# HG changeset patch # User John Tsiombikas # Date 1298011352 -7200 # Node ID b11a86695493538e9706af9520ad520c81224a42 # Parent af6f4adc43d65f429b8a9119a6c161de60476796 interrupt handling diff -r af6f4adc43d6 -r b11a86695493 Makefile --- a/Makefile Wed Feb 16 08:01:19 2011 +0200 +++ b/Makefile Fri Feb 18 08:42:32 2011 +0200 @@ -1,6 +1,6 @@ # collect all of our C and assembly source files -csrc = $(wildcard src/*.c) $(wildcard src/klibc/*.c) -asmsrc = $(wildcard src/*.S) $(wildcard src/klibc/*.S) +csrc = $(wildcard src/boot/*.c) $(wildcard src/*.c) $(wildcard src/klibc/*.c) +asmsrc = $(wildcard src/boot/*.S) $(wildcard src/*.S) $(wildcard src/klibc/*.S) dep = $(asmsrc:.S=.d) $(csrc:.c=.d) # each source file will generate one object file @@ -19,7 +19,7 @@ # we need to specify where to assume the text section (code) is going # in memory, as well as the kernel entry point (kentry). $(bin): $(obj) - ld -melf_i386 -o $@ -Ttext 0x100000 -e kentry $(obj) + ld -melf_i386 -o $@ -Ttext 0x100000 -e kentry $(obj) -Map link.map -include $(dep) diff -r af6f4adc43d6 -r b11a86695493 src/asmops.h --- a/src/asmops.h Wed Feb 16 08:01:19 2011 +0200 +++ b/src/asmops.h Fri Feb 18 08:42:32 2011 +0200 @@ -1,13 +1,17 @@ #ifndef ASMOPS_H_ #define ASMOPS_H_ +#define enable_intr() asm volatile("sti") +#define disable_intr() asm volatile("cli") +#define halt_cpu() asm volatile("hlt") + #define inb(dest, port) asm volatile( \ "inb %1, %0\n\t" \ : "=a" ((unsigned char)(dest)) \ : "dN" ((unsigned short)(port))) -#define ins(dest, port) asm volatile( \ - "ins %1, %0\n\t" \ +#define inw(dest, port) asm volatile( \ + "inw %1, %0\n\t" \ : "=a" ((unsigned short)(dest)) \ : "dN" ((unsigned short)(port))) @@ -20,8 +24,8 @@ "outb %0, %1\n\t" \ :: "a" ((unsigned char)(src)), "dN" ((unsigned short)(port))) -#define outs(src, port) asm volatile( \ - "outs %0, %1\n\t" \ +#define outw(src, port) asm volatile( \ + "outw %0, %1\n\t" \ :: "a" ((unsigned short)(src)), "dN" ((unsigned short)(port))) #define outl(src, port) asm volatile( \ diff -r af6f4adc43d6 -r b11a86695493 src/boot/mboot.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/boot/mboot.S Fri Feb 18 08:42:32 2011 +0200 @@ -0,0 +1,28 @@ +#define MAGIC 0x1badb002 +#define FLAGS 0 +#define STACK_SIZE 0x4000 + + .text + .align 4 + + /* multiboot header */ + .long MAGIC + .long FLAGS + .long -(MAGIC + FLAGS) /* checksum */ + .fill 5, 4, 0 /* fill out the rest with zeroes */ + + .globl kentry +kentry: + /* setup a temporary kernel stack */ + movl $(stack + STACK_SIZE), %esp + /* reset eflags register */ + pushl $0 + popf + /* call the kernel main function */ + call kmain + /* we dropped out of main, halt the CPU */ + cli + hlt + + /* space for the temporary kernel stack */ + .comm stack, STACK_SIZE diff -r af6f4adc43d6 -r b11a86695493 src/main.c --- a/src/main.c Wed Feb 16 08:01:19 2011 +0200 +++ b/src/main.c Fri Feb 18 08:42:32 2011 +0200 @@ -3,6 +3,7 @@ #include "term.h" #include #include "segm.h" +#include "intr.h" /* special keys */ enum { @@ -38,6 +39,7 @@ puts("kernel starting up"); init_segm(); + init_intr(); set_text_color(YELLOW); puts(""); diff -r af6f4adc43d6 -r b11a86695493 src/mboot.S --- a/src/mboot.S Wed Feb 16 08:01:19 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#define MAGIC 0x1badb002 -#define FLAGS 0 -#define STACK_SIZE 0x4000 - - .text - .align 4 - - /* multiboot header */ - .long MAGIC - .long FLAGS - .long -(MAGIC + FLAGS) /* checksum */ - .fill 5, 4, 0 /* fill out the rest with zeroes */ - - .globl kentry -kentry: - /* setup a temporary kernel stack */ - movl $(stack + STACK_SIZE), %esp - /* reset eflags register */ - pushl $0 - popf - /* call the kernel main function */ - call kmain - /* we dropped out of main, halt the CPU */ - cli - hlt - - /* space for the temporary kernel stack */ - .comm stack, STACK_SIZE diff -r af6f4adc43d6 -r b11a86695493 src/segm.c --- a/src/segm.c Wed Feb 16 08:01:19 2011 +0200 +++ b/src/segm.c Fri Feb 18 08:42:32 2011 +0200 @@ -1,5 +1,6 @@ #include #include "segm.h" +#include "desc.h" /* bits for the 3rd 16bt part of the descriptor */ #define BIT_ACCESSED (1 << 8) @@ -26,7 +27,7 @@ /* our global descriptor table */ -static desc_t gdt[4]; +static desc_t gdt[3]; void init_segm(void) diff -r af6f4adc43d6 -r b11a86695493 src/segm.h --- a/src/segm.h Wed Feb 16 08:01:19 2011 +0200 +++ b/src/segm.h Fri Feb 18 08:42:32 2011 +0200 @@ -4,10 +4,6 @@ #define SEGM_KCODE 1 #define SEGM_KDATA 2 -typedef struct { - uint16_t d[4]; -} desc_t; - void init_segm(void); uint16_t selector(int idx, int rpl);