Updating folders name's (1)
This should help merging into dev branch
This commit is contained in:
		
							
								
								
									
										326
									
								
								source/kernel/interrupts/idt/idt.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										326
									
								
								source/kernel/interrupts/idt/idt.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,326 @@
 | 
			
		||||
#include "idt.h"
 | 
			
		||||
#include "../../drivers/pit/pit.h"
 | 
			
		||||
#include "../../keyboard/keyboard.h"
 | 
			
		||||
 | 
			
		||||
IDT_entry idt_table[256];
 | 
			
		||||
IDT_ptr idt_ptr;
 | 
			
		||||
 | 
			
		||||
void set_id_entry (uint8_t num , uint32_t base, uint16_t sel,  uint8_t flags){
 | 
			
		||||
    idt_table[num].offset_1 = base & 0xFFFF;
 | 
			
		||||
    idt_table[num].selector = sel;
 | 
			
		||||
    idt_table[num].zero = 0;
 | 
			
		||||
    idt_table[num].type_attr = flags;
 | 
			
		||||
    idt_table[num].offset_2 = (base >> 16) & 0xFFFF;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void irs_handler (registers regs) {
 | 
			
		||||
     
 | 
			
		||||
        //printf("(IRS) Interrupt number: %d \r", regs.int_no);
 | 
			
		||||
        switch (regs.int_no)
 | 
			
		||||
        {
 | 
			
		||||
        case 0:
 | 
			
		||||
            // Divide Error #DE
 | 
			
		||||
            printf("#DE\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 1:
 | 
			
		||||
            // Debug Exception #DB
 | 
			
		||||
            printf("#DB\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
        case 2:
 | 
			
		||||
            // NMI Interrupt 
 | 
			
		||||
            printf("#NMI\n");
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 3:
 | 
			
		||||
            // Breakpoint Exception #BP
 | 
			
		||||
            printf("#BP\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 4:
 | 
			
		||||
            // Overflow Exception #OF
 | 
			
		||||
            printf("#OF\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 5:
 | 
			
		||||
            // BOUND Range Exceeded Exception #BR
 | 
			
		||||
            printf("#BR\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 6:
 | 
			
		||||
            // Invalid OpCode Exception #UD 
 | 
			
		||||
            printf("#UD\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 7:
 | 
			
		||||
            // Device Not Available Exception  #NM
 | 
			
		||||
            printf("#NM\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 8:
 | 
			
		||||
            // Double Fault Exception #DF
 | 
			
		||||
            printf("#DF\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
        case 9:
 | 
			
		||||
            // Coprocessor Segment Overrun
 | 
			
		||||
            printf("Coprocessor Segment overrun!\n");
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 10:
 | 
			
		||||
            // Invalid TSS Exception #TS
 | 
			
		||||
            printf("#TS\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
        case 11:
 | 
			
		||||
            // Segment Not Present #NP
 | 
			
		||||
            printf("#NP\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 12:
 | 
			
		||||
            // Stack Fault Exception #SS
 | 
			
		||||
            printf("#SS\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 13:
 | 
			
		||||
            // General Protection Exception #GP
 | 
			
		||||
            printf("#GP\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 14:
 | 
			
		||||
            // Page Fault Exception #PF
 | 
			
		||||
            printf("#PF\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 16:
 | 
			
		||||
            // x87 FPU Floating-point Error #MF
 | 
			
		||||
            printf("#MF\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp);
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 17:
 | 
			
		||||
            // Alignment Check Exception #AC
 | 
			
		||||
            printf("#AC\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp); 
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 18:
 | 
			
		||||
            // Machine-Check Exception #MC
 | 
			
		||||
            printf("#MC\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp); 
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 19:
 | 
			
		||||
            // SIMD Floating-point Exception #XM
 | 
			
		||||
            printf("#XM\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp); 
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 20:
 | 
			
		||||
             // Virtualization Exception #VE
 | 
			
		||||
            printf("#VE\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp); 
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
        case 21:
 | 
			
		||||
             // Control Protection Exception #CP
 | 
			
		||||
            printf("#CP\n");
 | 
			
		||||
            printf("EIP: 0x%x\n", regs.eip);
 | 
			
		||||
            printf("EAX: 0x%x\n", regs.eax);
 | 
			
		||||
            printf("EBP: 0x%x\n", regs.ebp); 
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            // PANIC!!!
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
        
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void irq_handler (registers regs) {
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    switch (regs.int_no) {
 | 
			
		||||
    case 0:
 | 
			
		||||
            pit_tick++;
 | 
			
		||||
        break;
 | 
			
		||||
    case 1:
 | 
			
		||||
        // Keyboard interrupt !!
 | 
			
		||||
 | 
			
		||||
        int scan;
 | 
			
		||||
        int i;/*register*/
 | 
			
		||||
 | 
			
		||||
        // Read scancode 
 | 
			
		||||
        scan = inb(0x60);
 | 
			
		||||
        
 | 
			
		||||
        // Send ack message!
 | 
			
		||||
        i = inb(0x61);
 | 
			
		||||
        outb(0x61, i|0x80);
 | 
			
		||||
        outb(0x61, i);
 | 
			
		||||
 | 
			
		||||
        // NOTE: check for special scan codes 
 | 
			
		||||
        // e.g. modifiers etc..
 | 
			
		||||
        if( scan < 0x37){
 | 
			
		||||
            //printf("Read from IO: 0x%x\n", scan);
 | 
			
		||||
            keyPress.ScanCode = scan ;
 | 
			
		||||
            //printf( "[From Interrupt] Scancode: %x\n", keyPress.ScanCode);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        break;    
 | 
			
		||||
    case 12:
 | 
			
		||||
        // PS2 Mouse interrupt 
 | 
			
		||||
        printf("Mouse event triggered!");
 | 
			
		||||
        //int event = inb(0x60);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
        printf("Interrupt happened!");
 | 
			
		||||
        printf("Received INT: 0x%x\n", regs.int_no);
 | 
			
		||||
        break;
 | 
			
		||||
    }        
 | 
			
		||||
 | 
			
		||||
    outb(0x20, 0x20); // send end of interrupt to master
 | 
			
		||||
 | 
			
		||||
    if ( regs.int_no > 8 && regs.int_no <= 15) {
 | 
			
		||||
        outb(0xA0, 0x20); // send end of interrupt to slave 
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    if( regs.int_no == 13){
 | 
			
		||||
        printf(" Error code: %d \n", regs.err_code);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void init_idt(){
 | 
			
		||||
    // Initialise the IDT pointer
 | 
			
		||||
    idt_ptr.length = sizeof(IDT_entry) * 255;
 | 
			
		||||
    idt_ptr.base = (uint32_t)&idt_table;
 | 
			
		||||
 | 
			
		||||
#ifdef __VERBOSE__
 | 
			
		||||
    printf("Init IDT\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // TODO: Set everything to zero first
 | 
			
		||||
 | 
			
		||||
    set_id_entry(0,  (uint32_t) irs0 , 0x08, 0x8F);
 | 
			
		||||
    set_id_entry(1,  (uint32_t) irs1 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(2,  (uint32_t) irs2 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(3,  (uint32_t) irs3 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(4,  (uint32_t) irs4 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(5,  (uint32_t) irs5 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(6,  (uint32_t) irs6 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(7,  (uint32_t) irs7 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(8,  (uint32_t) irs8 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(9,  (uint32_t) irs9 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(10, (uint32_t) irs10 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(11, (uint32_t) irs11 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(12, (uint32_t) irs12 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(13, (uint32_t) irs13 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(14, (uint32_t) irs14 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(15, (uint32_t) irs15 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(16, (uint32_t) irs16 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(17, (uint32_t) irs17 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(18, (uint32_t) irs18 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(19, (uint32_t) irs19 , 0x08, 0x8E); 
 | 
			
		||||
    set_id_entry(20, (uint32_t) irs20 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(21, (uint32_t) irs21 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(22, (uint32_t) irs22 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(23, (uint32_t) irs23 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(24, (uint32_t) irs24 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(25, (uint32_t) irs25 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(26, (uint32_t) irs26 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(27, (uint32_t) irs27 , 0x08, 0x8E); 
 | 
			
		||||
    set_id_entry(28, (uint32_t) irs28 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(29, (uint32_t) irs29 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(30, (uint32_t) irs30 , 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(31, (uint32_t) irs31 , 0x08, 0x8E);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //print_serial("Remapping PIC\n");
 | 
			
		||||
    PIC_remap(0x20, 0x28);
 | 
			
		||||
 | 
			
		||||
    // clear mask for IRQ 12
 | 
			
		||||
    uint8_t value = inb(0x21) & ~(1<< 12);
 | 
			
		||||
    outb(0x21, value);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // pic IRQ Table
 | 
			
		||||
    set_id_entry(32, (uint32_t)irq0, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(33, (uint32_t)irq1, 0x08, 0x8E); // PS2 Keyboard
 | 
			
		||||
    set_id_entry(34, (uint32_t)irq2, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(35, (uint32_t)irq3, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(36, (uint32_t)irq4, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(37, (uint32_t)irq5, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(38, (uint32_t)irq6, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(39, (uint32_t)irq7, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(40, (uint32_t)irq8, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(41, (uint32_t)irq9, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(42, (uint32_t)irq10, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(43, (uint32_t)irq11, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(44, (uint32_t)irq12, 0x08, 0x8E); // PS2 Mouse
 | 
			
		||||
    set_id_entry(45, (uint32_t)irq13, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(46, (uint32_t)irq14, 0x08, 0x8E);
 | 
			
		||||
    set_id_entry(47, (uint32_t)irq15, 0x08, 0x8E);
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    idt_flush((uint32_t)&idt_ptr);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										77
									
								
								source/kernel/interrupts/idt/idt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								source/kernel/interrupts/idt/idt.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "stdint.h"
 | 
			
		||||
#include "stddef.h"
 | 
			
		||||
#include "../../drivers/VGA/colors.h"
 | 
			
		||||
#include "../../drivers/pic/pic.h"
 | 
			
		||||
 | 
			
		||||
#include "../../tty/kterm.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
    struct __attribute__((__packed__)) IDT_entry {
 | 
			
		||||
        uint16_t offset_1;
 | 
			
		||||
        uint16_t selector;
 | 
			
		||||
        uint8_t zero;
 | 
			
		||||
        uint8_t type_attr;
 | 
			
		||||
        uint16_t offset_2;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct __attribute__((__packed__)) IDT_ptr {
 | 
			
		||||
        unsigned short length;
 | 
			
		||||
        unsigned long base;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct registers {
 | 
			
		||||
        uint32_t ds;                  // Data segment selector
 | 
			
		||||
        uint32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
 | 
			
		||||
        uint32_t int_no, err_code;    // Interrupt number and error code (if applicable)
 | 
			
		||||
        uint32_t eip, cs, eflags, useresp, ss; 
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    extern void idt_flush(uint32_t); 
 | 
			
		||||
    void set_id_entry (uint8_t num , uint32_t base, uint16_t sel,  uint8_t flags);
 | 
			
		||||
    void init_idt();
 | 
			
		||||
 | 
			
		||||
    void irq_handler (registers regs);
 | 
			
		||||
 | 
			
		||||
    void irs_handler (registers regs);
 | 
			
		||||
 | 
			
		||||
    extern void irs0 ();
 | 
			
		||||
    extern void irs1 ();
 | 
			
		||||
    extern void irs2 ();
 | 
			
		||||
    extern void irs3 ();
 | 
			
		||||
    extern void irs4 ();
 | 
			
		||||
    extern void irs5 ();
 | 
			
		||||
    extern void irs6 ();
 | 
			
		||||
    extern void irs7 ();
 | 
			
		||||
    extern void irs8 ();
 | 
			
		||||
    extern void irs9 ();
 | 
			
		||||
    extern void irs10 ();
 | 
			
		||||
    extern void irs11 ();
 | 
			
		||||
    extern void irs12 ();
 | 
			
		||||
    extern void irs13 ();
 | 
			
		||||
    extern void irs14 ();
 | 
			
		||||
    extern void irs15 ();
 | 
			
		||||
    extern void irs16 ();
 | 
			
		||||
    extern void irs17 ();
 | 
			
		||||
    extern void irs18 ();
 | 
			
		||||
    extern void irs19 ();
 | 
			
		||||
    extern void irs20 ();
 | 
			
		||||
    extern void irs21 ();
 | 
			
		||||
    extern void irs22 ();
 | 
			
		||||
    extern void irs23 ();
 | 
			
		||||
    extern void irs24 ();
 | 
			
		||||
    extern void irs25 ();
 | 
			
		||||
    extern void irs26 ();
 | 
			
		||||
    extern void irs27 ();
 | 
			
		||||
    extern void irs28 ();
 | 
			
		||||
    extern void irs29 ();
 | 
			
		||||
    extern void irs30 ();
 | 
			
		||||
    extern void irs31 ();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								source/kernel/interrupts/idt/idt.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								source/kernel/interrupts/idt/idt.s
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
 | 
			
		||||
.globl idt_flush
 | 
			
		||||
idt_flush:
 | 
			
		||||
	mov 4(%esp), %eax
 | 
			
		||||
	lidt (%eax)
 | 
			
		||||
	ret
 | 
			
		||||
							
								
								
									
										184
									
								
								source/kernel/interrupts/idt/scancodes/set1.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								source/kernel/interrupts/idt/scancodes/set1.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,184 @@
 | 
			
		||||
#pragma once 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ScanCode set 1 
 | 
			
		||||
int ScanCodeToKeyCode [0xD8];
 | 
			
		||||
 | 
			
		||||
/* key pressed scancode */ 
 | 
			
		||||
ScanCodeToKeyCode[0x01] = 4017;   // escape pressed
 | 
			
		||||
ScanCodeToKeyCode[0x02] = 4018;   // 1 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x03] = 4019;   // 2 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x04] = 4020;   // 3 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x05] =""   // 4 pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x06] =""   // 5 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x07] =""   // 6 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x08] =""   // 7 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x09] =""   // 8 pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x0A] =""   // 9 pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x0B] =""   // 0 (zero) pressed
 | 
			
		||||
ScanCodeToKeyCode[0x0C] =""   // - pressed
 | 
			
		||||
ScanCodeToKeyCode[0x0D] =""   // = pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x0E] =""   // backspace pressed
 | 
			
		||||
ScanCodeToKeyCode[0x0F] =""   // tab pressed
 | 
			
		||||
ScanCodeToKeyCode[0x10] =""  	// Q pressed
 | 
			
		||||
ScanCodeToKeyCode[0x11] =""   // W pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x12] ="" 	// E pressed
 | 
			
		||||
ScanCodeToKeyCode[0x13] ="" 	// R pressed
 | 
			
		||||
ScanCodeToKeyCode[0x14] ="" 	// T pressed
 | 
			
		||||
ScanCodeToKeyCode[0x15] ="" 	// Y pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x16] ="" 	// U pressed
 | 
			
		||||
ScanCodeToKeyCode[0x17] ="" 	// I pressed
 | 
			
		||||
ScanCodeToKeyCode[0x18] ="" 	// O pressed
 | 
			
		||||
ScanCodeToKeyCode[0x19] ="" 	// P pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x1A] =""   // [ pressed
 | 
			
		||||
ScanCodeToKeyCode[0x1B] =""   // ] pressed
 | 
			
		||||
ScanCodeToKeyCode[0x1C] =""   // enter pressed
 | 
			
		||||
ScanCodeToKeyCode[0x1D] =""   // left control pressed
 | 
			
		||||
ScanCodeToKeyCode[0x1E] ="" 	// A pressed
 | 
			
		||||
ScanCodeToKeyCode[0x1F] ="" 	// S pressed
 | 
			
		||||
ScanCodeToKeyCode[0x20] ="" 	// D pressed
 | 
			
		||||
ScanCodeToKeyCode[0x21] ="" 	// F pressed
 | 
			
		||||
ScanCodeToKeyCode[0x22] ="" 	// G pressed
 | 
			
		||||
ScanCodeToKeyCode[0x23] ="" 	// H pressed
 | 
			
		||||
ScanCodeToKeyCode[0x24] ="" 	// J pressed
 | 
			
		||||
ScanCodeToKeyCode[0x25] ="" 	// K pressed
 | 
			
		||||
ScanCodeToKeyCode[0x26] ="" 	// L pressed
 | 
			
		||||
ScanCodeToKeyCode[0x27] =""   //  ; pressed
 | 
			
		||||
ScanCodeToKeyCode[0x28] =""   // ' (single quote) pressed
 | 
			
		||||
ScanCodeToKeyCode[0x29] =""   // ` (back tick) pressed
 | 
			
		||||
ScanCodeToKeyCode[0x2A] =""   // left shift pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x2B] =""   // \ pressed
 | 
			
		||||
ScanCodeToKeyCode[0x2C] ="" 	// Z pressed
 | 
			
		||||
ScanCodeToKeyCode[0x2D] ="" 	// X pressed
 | 
			
		||||
ScanCodeToKeyCode[0x2E] ="" 	// C pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x2F] ="" 	// V pressed
 | 
			
		||||
ScanCodeToKeyCode[0x30] ="" 	// B pressed
 | 
			
		||||
ScanCodeToKeyCode[0x31] ="" 	// N pressed
 | 
			
		||||
ScanCodeToKeyCode[0x32] ="" 	// M pressed
 | 
			
		||||
ScanCodeToKeyCode[0x33] =""   // , pressed
 | 
			
		||||
ScanCodeToKeyCode[0x34] =""   // . pressed
 | 
			
		||||
ScanCodeToKeyCode[0x35] =""   // / pressed
 | 
			
		||||
ScanCodeToKeyCode[0x36] =""   // right shift pressed
 | 
			
		||||
ScanCodeToKeyCode[0x37] =""   // (keypad) * pressed
 | 
			
		||||
ScanCodeToKeyCode[0x38] =""   // left alt pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x39] =""   // space pressed	
 | 
			
		||||
ScanCodeToKeyCode[0x3A] =""   // CapsLock pressed
 | 
			
		||||
ScanCodeToKeyCode[0x3B] =""   // F1 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x3C] =""   // F2 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x3D] =""   // F3 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x3E] ="" 	// F4 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x3F] ="" 	// F5 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x40] ="" 	// F6 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x41] ="" 	// F7 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x42] ="" 	// F8 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x43] ="" 	// F9 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x44] ="" 	// F10 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x45] ="" 	// NumberLock pressed
 | 
			
		||||
ScanCodeToKeyCode[0x46] ="" 	// ScrollLock pressed
 | 
			
		||||
ScanCodeToKeyCode[0x47] ="" 	// (keypad) 7 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x48] ="" 	// (keypad) 8 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x49] ="" 	// (keypad) 9 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4A] ="" 	// (keypad) - pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4B] ="" 	// (keypad) 4 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4C] ="" 	// (keypad) 5 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4D] ="" 	// (keypad) 6 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4E] ="" 	// (keypad) + pressed
 | 
			
		||||
ScanCodeToKeyCode[0x4F] ="" 	// (keypad) 1 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x50] ="" 	// (keypad) 2 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x51] ="" 	// (keypad) 3 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x52] ="" 	// (keypad) 0 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x53] ="" 	// (keypad) . pressed
 | 
			
		||||
ScanCodeToKeyCode[0x57] ="" 	// F11 pressed
 | 
			
		||||
ScanCodeToKeyCode[0x58] ="" 	// F12 pressed						
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* key released scanCode.""*/
 | 
			
		||||
ScanCodeToKeyCode[0x81] ="" 	// escape released
 | 
			
		||||
ScanCodeToKeyCode[0x82] ="" 	// 1 released
 | 
			
		||||
ScanCodeToKeyCode[0x83] ="" 	// 2 released
 | 
			
		||||
ScanCodeToKeyCode[0x84] ="" 	// 3 released
 | 
			
		||||
ScanCodeToKeyCode[0x85] ="" 	// 4 released
 | 
			
		||||
ScanCodeToKeyCode[0x86] ="" 	// 5 released
 | 
			
		||||
ScanCodeToKeyCode[0x87] ="" 	// 6 released
 | 
			
		||||
ScanCodeToKeyCode[0x88] ="" 	// 7 released
 | 
			
		||||
ScanCodeToKeyCode[0x89] ="" 	// 8 released
 | 
			
		||||
ScanCodeToKeyCode[0x8A] ="" 	// 9 released
 | 
			
		||||
ScanCodeToKeyCode[0x8B] ="" 	// 0 (zero) released
 | 
			
		||||
ScanCodeToKeyCode[0x8C] ="" 	// - released
 | 
			
		||||
ScanCodeToKeyCode[0x8D] ="" 	// = released
 | 
			
		||||
ScanCodeToKeyCode[0x8E] ="" 	// backspace released
 | 
			
		||||
ScanCodeToKeyCode[0x8F] ="" 	// tab released
 | 
			
		||||
ScanCodeToKeyCode[0x90] ="" 	// Q released
 | 
			
		||||
ScanCodeToKeyCode[0x91] ="" 	// W released
 | 
			
		||||
ScanCodeToKeyCode[0x92] ="" 	// E released
 | 
			
		||||
ScanCodeToKeyCode[0x93] ="" 	// R released
 | 
			
		||||
ScanCodeToKeyCode[0x94] ="" 	// T released
 | 
			
		||||
ScanCodeToKeyCode[0x95] ="" 	// Y released	
 | 
			
		||||
ScanCodeToKeyCode[0x96] ="" 	// U released
 | 
			
		||||
ScanCodeToKeyCode[0x97] ="" 	// I released
 | 
			
		||||
ScanCodeToKeyCode[0x98] ="" 	// O released	
 | 
			
		||||
ScanCodeToKeyCode[0x99] ="" 	// P released
 | 
			
		||||
ScanCodeToKeyCode[0x9A] ="" 	// [ released	
 | 
			
		||||
ScanCodeToKeyCode[0x9B] ="" 	// ] released
 | 
			
		||||
ScanCodeToKeyCode[0x9C] ="" 	// enter released
 | 
			
		||||
ScanCodeToKeyCode[0x9D] ="" 	// left control released
 | 
			
		||||
ScanCodeToKeyCode[0x9E] ="" 	// A released
 | 
			
		||||
ScanCodeToKeyCode[0x9F] ="" 	// S released
 | 
			
		||||
ScanCodeToKeyCode[0xA0] ="" 	// D released
 | 
			
		||||
ScanCodeToKeyCode[0xA1] ="" 	// F released
 | 
			
		||||
ScanCodeToKeyCode[0xA2] ="" 	// G released
 | 
			
		||||
ScanCodeToKeyCode[0xA3] ="" 	// H released
 | 
			
		||||
ScanCodeToKeyCode[0xA4] ="" 	// J released
 | 
			
		||||
ScanCodeToKeyCode[0xA5] ="" 	// K released
 | 
			
		||||
ScanCodeToKeyCode[0xA6] ="" 	// L released
 | 
			
		||||
ScanCodeToKeyCode[0xA7] ="" 	//  ; released
 | 
			
		||||
ScanCodeToKeyCode[0xA8] ="" 	// ' (single quote) released
 | 
			
		||||
ScanCodeToKeyCode[0xA9] ="" 	// ` (back tick) released
 | 
			
		||||
ScanCodeToKeyCode[0xAA] ="" 	// left shift released
 | 
			
		||||
ScanCodeToKeyCode[0xAB] ="" 	// \ released
 | 
			
		||||
ScanCodeToKeyCode[0xAC] ="" 	// Z released	
 | 
			
		||||
ScanCodeToKeyCode[0xAD] ="" 	// X released	
 | 
			
		||||
ScanCodeToKeyCode[0xAE] ="" 	// C released	
 | 
			
		||||
ScanCodeToKeyCode[0xAF] ="" 	// V released
 | 
			
		||||
ScanCodeToKeyCode[0xB0] ="" 	// B released	
 | 
			
		||||
ScanCodeToKeyCode[0xB1] ="" 	// N released	
 | 
			
		||||
ScanCodeToKeyCode[0xB2] ="" 	// M released	
 | 
			
		||||
ScanCodeToKeyCode[0xB3] ="" 	// , released
 | 
			
		||||
ScanCodeToKeyCode[0xB4] ="" 	// . released	
 | 
			
		||||
ScanCodeToKeyCode[0xB5] ="" 	// / released	
 | 
			
		||||
ScanCodeToKeyCode[0xB6] ="" 	// right shift released
 | 
			
		||||
ScanCodeToKeyCode[0xB7] ="" 	// (keypad) * released
 | 
			
		||||
ScanCodeToKeyCode[0xB8] ="" 	// left alt released	
 | 
			
		||||
ScanCodeToKeyCode[0xB9] ="" 	// space released	
 | 
			
		||||
ScanCodeToKeyCode[0xBA] ="" 	// CapsLock released	
 | 
			
		||||
ScanCodeToKeyCode[0xBB] ="" 	// F1 released
 | 
			
		||||
ScanCodeToKeyCode[0xBC] ="" 	// F2 released	
 | 
			
		||||
ScanCodeToKeyCode[0xBD] ="" 	// F3 released	
 | 
			
		||||
ScanCodeToKeyCode[0xBE] ="" 	// F4 released	
 | 
			
		||||
ScanCodeToKeyCode[0xBF] ="" 	// F5 released
 | 
			
		||||
ScanCodeToKeyCode[0xC0] ="" 	// F6 released	
 | 
			
		||||
ScanCodeToKeyCode[0xC1] ="" 	// F7 released	
 | 
			
		||||
ScanCodeToKeyCode[0xC2] ="" 	// F8 released	
 | 
			
		||||
ScanCodeToKeyCode[0xC3] ="" 	// F9 released
 | 
			
		||||
ScanCodeToKeyCode[0xC4] ="" 	// F10 released
 | 
			
		||||
ScanCodeToKeyCode[0xC5] ="" 	// NumberLock released
 | 
			
		||||
ScanCodeToKeyCode[0xC6] ="" 	// ScrollLock released
 | 
			
		||||
ScanCodeToKeyCode[0xC7] ="" 	// (keypad) 7 released
 | 
			
		||||
ScanCodeToKeyCode[0xC8] ="" 	// (keypad) 8 released	
 | 
			
		||||
ScanCodeToKeyCode[0xC9] ="" 	// (keypad) 9 released	
 | 
			
		||||
ScanCodeToKeyCode[0xCA] ="" 	// (keypad) - released	
 | 
			
		||||
ScanCodeToKeyCode[0xCB] ="" 	// (keypad) 4 released
 | 
			
		||||
ScanCodeToKeyCode[0xCC] ="" 	// (keypad) 5 released	
 | 
			
		||||
ScanCodeToKeyCode[0xCD] ="" 	// (keypad) 6 released	
 | 
			
		||||
ScanCodeToKeyCode[0xCE] ="" 	// (keypad) + released	
 | 
			
		||||
ScanCodeToKeyCode[0xCF] ="" 	// (keypad) 1 released
 | 
			
		||||
ScanCodeToKeyCode[0xD0] ="" 	// (keypad) 2 released	
 | 
			
		||||
ScanCodeToKeyCode[0xD1] ="" 	// (keypad) 3 released	
 | 
			
		||||
ScanCodeToKeyCode[0xD2] ="" 	// (keypad) 0 released	
 | 
			
		||||
ScanCodeToKeyCode[0xD3] ="" 	// (keypad) . released
 | 
			
		||||
ScanCodeToKeyCode[0xD7] ="" 	// F11 released
 | 
			
		||||
ScanCodeToKeyCode[0xD8] ="" 	// F12 released					
 | 
			
		||||
		Reference in New Issue
	
	Block a user