src folder -> source folder; makes merging with dev a bit easier.
This commit is contained in:
326
source/kernel/idt/idt.cpp
Normal file
326
source/kernel/idt/idt.cpp
Normal file
@ -0,0 +1,326 @@
|
||||
#include "idt.h"
|
||||
#include "../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/idt/idt.h
Normal file
77
source/kernel/idt/idt.h
Normal file
@ -0,0 +1,77 @@
|
||||
#pragma once
|
||||
|
||||
#include "stdint.h"
|
||||
#include "stddef.h"
|
||||
#include "../drivers/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
source/kernel/idt/idt.s
Normal file
6
source/kernel/idt/idt.s
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
.globl idt_flush
|
||||
idt_flush:
|
||||
mov 4(%esp), %eax
|
||||
lidt (%eax)
|
||||
ret
|
184
source/kernel/idt/scancodes/set1.h
Normal file
184
source/kernel/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