matos/arch/x86/exception.h

48 lines
1.4 KiB
C

#pragma once
#include "cpu_context.h"
#include "interrupt.h"
#include "stdarg.h"
#define EXCEPTION_INTERRUPT_BASE_ADDRESS 0
// list and description https://wiki.osdev.org/Exceptions
#define EXCEPTION_DIVIDE_ZERO 0
#define EXCEPTION_DEBUG 1
#define EXCEPTION_NMI 2
#define EXCEPTION_BREAKPOINT 3
#define EXCEPTION_OVERFLOW 4
#define EXCEPTION_BOUND_RANGE_EXCEEDED 5
#define EXCEPTION_INVALID_OPCODE 6
#define EXCEPTION_DEVICE_NOT_AVAILABLE 7
#define EXCEPTION_DOUBLE_FAULT 8
#define EXCEPTION_COPRO_OVERRUN 9
#define EXCEPTION_INVALID_TSS 10
#define EXCEPTION_SEGMENT_NOT_PRESENT 11
#define EXCEPTION_STACK_SEGMENT_FAULT 12
#define EXCEPTION_GENERAL_PROTECTION_FAULT 13
#define EXCEPTION_PAGE_FAULT 14
#define EXCEPTION_RESERVED_1 15
#define EXCEPTION_X87_FP_EXCEPTION 16
#define EXCEPTION_ALIGNMENT_CHECK 17
#define EXCEPTION_MACHINE_CHECK 18
#define EXCEPTION_SIMD_FP 19
#define EXCEPTION_VIRTUALIZATION 20
#define EXCEPTION_RESERVED_2 21
#define EXCEPTION_RESERVED_3 22
#define EXCEPTION_RESERVED_4 23
#define EXCEPTION_RESERVED_5 24
#define EXCEPTION_RESERVED_6 25
#define EXCEPTION_RESERVED_7 26
#define EXCEPTION_RESERVED_8 27
#define EXCEPTION_RESERVED_9 28
#define EXCEPTION_RESERVED_10 29
#define EXCEPTION_SECURITY 30
#define EXCEPTION_RESERVED_11 31
#define EXCEPTION_NUM 0x20
typedef void (*exception_handler)(struct cpu_state *frame, ulong intr_number);
int exceptionSetRoutine(int exception, exception_handler handler);
int exceptionSetup();