hackthelobby/libcaca/kernel/boot/interruptions.c

183 lines
2.4 KiB
C

/*
* libcaca Colour ASCII-Art library
* Copyright (c) 2006 Sam Hocevar <sam@hocevar.net>
* 2009 Jean-Yves Lamoureux <jylam@lnxscene.org>
* All Rights Reserved
*
* This library is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What the Fuck You Want
* to Public License, Version 2, as published by Sam Hocevar. See
* http://www.wtfpl.net/ for more details.
*/
#include "kernel.h"
#include "klibc.h"
#include "drivers/timer.h"
void idt_default_int(void)
{
print("!! Unknown interrupt\n");
}
void idt_int0(void)
{
print("!! Divide by 0\n ");
}
void idt_int1(void)
{
print("!! Debug exception ");
}
void idt_int2(void)
{
print("!! NMI ");
}
void idt_int3(void)
{
print("!! Breakpoint ");
}
void idt_int4(void)
{
print("!! Overflow ");
}
void idt_int5(void)
{
print("!! BoundCheck ");
}
void idt_int6(void)
{
print("!! Invalid Opcode ");
}
void idt_int7(void)
{
print("!! Coprocessor not available ");
}
void idt_int8(void)
{
print("!! Double Fault ");
}
void idt_int9(void)
{
print("!! Coprocessor segment overrun ");
}
void idt_int10(void)
{
print("!! Invalid TSS ");
}
void idt_int11(void)
{
print("!! Segment not present ");
}
void idt_int12(void)
{
print("!! Stack exception ");
}
void idt_int13(void)
{
print("!! General protection exception ");
}
void idt_int14(void)
{
print("!! Page fault ");
}
void idt_int15(void)
{
print("!! Intel reserved int ");
}
void idt_int16(void)
{
print("!! Coprocessor error ");
}
void idt_int17(void)
{
print("!! Intel reserved (2) ");
}
void idt_int18(void)
{
print("i18 ");
}
/* Used by Channel0 timer */
void idt_irq0(void)
{
ticks++;
}
void idt_irq2(void)
{
print("IRQ 2");
}
void idt_irq3(void)
{
print("IRQ 3");
}
void idt_irq4(void)
{
print("IRQ 4");
}
void idt_irq5(void)
{
print("IRQ 5");
}
void idt_irq6(void)
{
print("IRQ 6");
}
void idt_irq7(void)
{
print("IRQ 7");
}
void idt_irq8(void)
{
print("IRQ 8");
}
extern unsigned char kbdmap[];
/* Keyboard irq is 1 */
void kbd_int(void)
{
unsigned char i;
do
{
i = inb(0x64);
}
while ((i & 0x01) == 0);
i = inb(0x60);
i--;
if (i < 0x80)
{
putcar(kbdmap[i * 4]);
}
}