#ifndef INTERRUPTS_PRIVATE_H #define INTERRUPTS_PRIVATE_H #include <stdint.h> typedef struct InterruptDescriptor32 { uint16_t offsetLow; uint16_t segment; uint8_t reserved; uint8_t type; uint16_t offsetHigh; } __attribute__((packed)) IdtEntry; typedef struct { uint16_t limit; uint32_t base; } __attribute__((packed)) InterruptTablePointer; typedef struct { uint16_t limit; uint16_t baseLow; uint8_t baseMid; uint8_t access; uint8_t granularity; uint8_t baseHigh; } __attribute__((packed)) GDTEntry; typedef struct { uint32_t previous; uint32_t esp0; uint32_t ss0; uint32_t esp1; uint32_t ss1; uint32_t esp2; uint32_t ss2; uint32_t cr3; uint32_t eip; uint32_t eflags; uint32_t eax; uint32_t ecx; uint32_t edx; uint32_t ebx; uint32_t esp; uint32_t ebp; uint32_t esi; uint32_t edi; uint32_t es; uint32_t cs; uint32_t ss; uint32_t ds; uint32_t fs; uint32_t gs; uint32_t ldt; uint16_t trap; uint16_t iomap; } __attribute__((packed)) TSS; // sorry #define TIMES(x) \ x(0); \ x(1); \ x(2); \ x(3); \ x(4); \ x(5); \ x(6); \ x(7); \ x(8); \ x(9); \ x(10); \ x(11); \ x(12); \ x(13); \ x(14); \ x(15); \ x(16); \ x(17); \ x(18); \ x(19); \ x(20); \ x(21); \ x(22); \ x(23); \ x(24); \ x(25); \ x(26); \ x(27); \ x(28); \ x(29); \ x(30); \ x(31); \ x(32); \ x(33); \ x(34); \ x(35); \ x(36); \ x(37); \ x(38); \ x(39); \ x(40); \ x(41); \ x(42); \ x(43); \ x(44); \ x(45); \ x(46); \ x(47); \ x(48); \ x(49); \ x(50); \ x(51); \ x(52); \ x(53); \ x(54); \ x(55); \ x(56); \ x(57); \ x(58); \ x(59); \ x(60); \ x(61); \ x(62); \ x(63); \ x(64); \ x(65); \ x(66); \ x(67); \ x(68); \ x(69); \ x(70); \ x(71); \ x(72); \ x(73); \ x(74); \ x(75); \ x(76); \ x(77); \ x(78); \ x(79); \ x(80); \ x(81); \ x(82); \ x(83); \ x(84); \ x(85); \ x(86); \ x(87); \ x(88); \ x(89); \ x(90); \ x(91); \ x(92); \ x(93); \ x(94); \ x(95); \ x(96); \ x(97); \ x(98); \ x(99); \ x(100); \ x(101); \ x(102); \ x(103); \ x(104); \ x(105); \ x(106); \ x(107); \ x(108); \ x(109); \ x(110); \ x(111); \ x(112); \ x(113); \ x(114); \ x(115); \ x(116); \ x(117); \ x(118); \ x(119); \ x(120); \ x(121); \ x(122); \ x(123); \ x(124); \ x(125); \ x(126); \ x(127); \ x(128); \ x(129); \ x(130); \ x(131); \ x(132); \ x(133); \ x(134); \ x(135); \ x(136); \ x(137); \ x(138); \ x(139); \ x(140); \ x(141); \ x(142); \ x(143); \ x(144); \ x(145); \ x(146); \ x(147); \ x(148); \ x(149); \ x(150); \ x(151); \ x(152); \ x(153); \ x(154); \ x(155); \ x(156); \ x(157); \ x(158); \ x(159); \ x(160); \ x(161); \ x(162); \ x(163); \ x(164); \ x(165); \ x(166); \ x(167); \ x(168); \ x(169); \ x(170); \ x(171); \ x(172); \ x(173); \ x(174); \ x(175); \ x(176); \ x(177); \ x(178); \ x(179); \ x(180); \ x(181); \ x(182); \ x(183); \ x(184); \ x(185); \ x(186); \ x(187); \ x(188); \ x(189); \ x(190); \ x(191); \ x(192); \ x(193); \ x(194); \ x(195); \ x(196); \ x(197); \ x(198); \ x(199); \ x(200); \ x(201); \ x(202); \ x(203); \ x(204); \ x(205); \ x(206); \ x(207); \ x(208); \ x(209); \ x(210); \ x(211); \ x(212); \ x(213); \ x(214); \ x(215); \ x(216); \ x(217); \ x(218); \ x(219); \ x(220); \ x(221); \ x(222); \ x(223); \ x(224); \ x(225); \ x(226); \ x(227); \ x(228); \ x(229); \ x(230); \ x(231); \ x(232); \ x(233); \ x(234); \ x(235); \ x(236); \ x(237); \ x(238); \ x(239); \ x(240); \ x(241); \ x(242); \ x(243); \ x(244); \ x(245); \ x(246); \ x(247); \ x(248); \ x(249); \ x(250); \ x(251); \ x(252); \ x(253); \ x(254); \ x(255); #define defineExtern(i) extern void *idtHandler##i; TIMES(defineExtern) #endif