20 lines
		
	
	
		
			605 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			605 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| // doc : https://wiki.osdev.org/Interrupt_Descriptor_Table#IDTR
 | |
| struct idt_descriptor {
 | |
| 	uint16_t size;
 | |
| 	uint32_t offset;
 | |
| } __attribute__((packed));
 | |
| 
 | |
| struct idt_entry {
 | |
| 	uint16_t isr_low;   // The lower 16 bits of the ISR's address
 | |
| 	uint16_t kernel_cs; // The GDT segment selector that the CPU will load
 | |
| 	                    // into CS before calling the ISR
 | |
| 	uint8_t reserved;   // Set to zero
 | |
| 	uint8_t attributes; // Type and attributes; see the IDT page
 | |
| 	uint16_t isr_high;  // The higher 16 bits of the ISR's address
 | |
| } __attribute__((packed));
 | |
| 
 | |
| #define IDT_SIZE 256
 | |
| 
 | |
| void init_idt(void); |