From 0dc446980d8ede518a356ab2c2f165cb08ce444a Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sat, 7 Feb 2015 19:03:47 -0500 Subject: implement text in graphics mode --- kernel/irq.c | 1 - kernel/isr.c | 3 +-- kernel/main.c | 38 +++++++++++++++++++++++++++++--------- 3 files changed, 30 insertions(+), 12 deletions(-) (limited to 'kernel') diff --git a/kernel/irq.c b/kernel/irq.c index d98ecda..aa726d9 100644 --- a/kernel/irq.c +++ b/kernel/irq.c @@ -26,7 +26,6 @@ void irq_remap(void) void irq_init(void) { irq_remap(); - printf("IRQ handlers installed.\n"); idt_set_gate(32, (uint32_t)_irq0, 0x08, 0x8E); idt_set_gate(33, (uint32_t)_irq1, 0x08, 0x8E); idt_set_gate(34, (uint32_t)_irq2, 0x08, 0x8E); diff --git a/kernel/isr.c b/kernel/isr.c index cb59603..569ecd0 100644 --- a/kernel/isr.c +++ b/kernel/isr.c @@ -19,13 +19,12 @@ void isr_handler(struct regs_t regs) } else { - printf("WARNING: unhandled ISR!\n"); + printf("WARNING: unhandled ISR 0x%x!\n", regs.int_no); } } void isr_init(void) { - printf("ISR handlers installed.\n"); idt_set_gate(0, (uint32_t)_isr0, 0x08, 0x8E); idt_set_gate(1, (uint32_t)_isr1, 0x08, 0x8E); idt_set_gate(2, (uint32_t)_isr2, 0x08, 0x8E); diff --git a/kernel/main.c b/kernel/main.c index 6cad670..e4cf47d 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -20,11 +20,22 @@ void main(struct multiboot_info_t *hdr, uint32_t magic) printf("Testing early I/O\n"); printf("GFX init\n"); - int gfx_status = gfx_init((struct vbe_info_t*)hdr->vbe_mode_info); + bool gfx_status = gfx_init((struct vbe_info_t*)hdr->vbe_mode_info); + + puts("test123\n"); + putchar('1'); + putchar('2'); + putchar('\n'); + putchar('1'); + putchar('2'); + gfx_drawchar(0, 12, 'a', 0xffffff, 0); /* if graphical initialization fails, fall back to text mode */ if(!gfx_status) + { tty_init(); + printf("Graphics init failed, fell back to text mode.\n"); + } if(magic != 0x2BADB002) { @@ -45,21 +56,30 @@ void main(struct multiboot_info_t *hdr, uint32_t magic) asm("sti"); - printf("Boot finished.\n"); + //printf("Boot finished.\n"); - printf("Testing RNG...\n"); + //printf("Testing RNG...\n"); srand(*current_tick); - for(int i=0;i>=0;++i) + if(gfx_status) { - int rx = rand() % *gfx_width; - int ry = rand() % *gfx_height; + /* + for(int i=0;i<100000;++i) + { + int rx = rand() % *gfx_width; + int ry = rand() % *gfx_height; - gfx_drawpixel(rx, ry, rand() % 0xFFFFFF); + gfx_drawpixel(rx, ry, rand() % 0xFFFFFF); + } + int start = *current_tick; + for(int i=0;i<1000;++i) + gfx_clear(0xff00ff); + int end = *current_tick; + printf("ticks for 1000 fills: %x\n", end-start); + */ } - gfx_clear(0xffffff); - printf("Testing keyboard LED's...\n"); + // printf("Testing keyboard LED's...\n"); while(1) { -- cgit v1.1