aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-07 19:03:47 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-07 19:03:47 -0500
commit0dc446980d8ede518a356ab2c2f165cb08ce444a (patch)
treed9fc8938c1d930f8ece0dd5746601eca5b3089bc /kernel
parent2be70c3b7c3cb806614318858090c039bdfd4fc5 (diff)
downloadkappa-0dc446980d8ede518a356ab2c2f165cb08ce444a.zip
kappa-0dc446980d8ede518a356ab2c2f165cb08ce444a.tar.gz
kappa-0dc446980d8ede518a356ab2c2f165cb08ce444a.tar.bz2
kappa-0dc446980d8ede518a356ab2c2f165cb08ce444a.tar.xz
implement text in graphics mode
Diffstat (limited to 'kernel')
-rw-r--r--kernel/irq.c1
-rw-r--r--kernel/isr.c3
-rw-r--r--kernel/main.c38
3 files changed, 30 insertions, 12 deletions
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)
{