Renaming/Moving stuff into a different file structure

This commit is contained in:
2021-11-16 13:57:15 +01:00
parent 32909aaed9
commit 3a87b74224
28 changed files with 66 additions and 62 deletions

149
src/kernel/idt/idt.cpp Normal file
View File

@ -0,0 +1,149 @@
#include "idt.h"
//#include "scancodes/set1.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) {
kterm_writestring("received interrupt!\n");
printf("(IRS) Interrupt number: %d \n", regs.int_no);
if( regs.int_no == 13){
printf(" Error code: %d \n", regs.err_code);
}
}
void irq_handler (registers regs) {
if ( regs.int_no != 0) {
kterm_writestring("received interrupt!\n");
printf("(IRQ) Interrupt number: %d \n", regs.int_no);
}
if ( regs.int_no == 1 ){
// Keyboard interrupt !!
int scan;
/*register*/int i;
// Read scancode
scan = inb(0x60);
// Send ack message!
i = inb(0x61);
outb(0x61, i|0x80);
outb(0x61, i);
kterm_writestring("A key was pressed/released\n");
printf( "Scancode: %x\n", scan);
}
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;
// 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);
// pic IRQ Table
set_id_entry(32, (uint32_t)irq0, 0x08, 0x8E);
set_id_entry(33, (uint32_t)irq1, 0x08, 0x8E);
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);
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
src/kernel/idt/idt.h Normal file
View File

@ -0,0 +1,77 @@
#pragma once
#include "stdint.h"
#include "stddef.h"
#include "../vga/colors.h"
#include "../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
src/kernel/idt/idt.s Normal file
View File

@ -0,0 +1,6 @@
.globl idt_flush
idt_flush:
mov 4(%esp), %eax
lidt (%eax)
ret

View 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