diff --git a/k/isr.S b/k/isr.S index 09ff49c..8a32164 100644 --- a/k/isr.S +++ b/k/isr.S @@ -3,127 +3,44 @@ isr: pushal pushl %esp - add $32, (%esp) + addl $32, (%esp) call interrupt_handler add $4, %esp popal add $8, %esp iret -.global isr_divide -isr_divide: - pushl $0 // error code padding - pushl $0 // int vector - jmp isr +#define isr_callback_error(NAME, VECTOR)\ + .global NAME; \ + NAME: \ + pushl $VECTOR; \ + jmp isr -.global isr_debug -isr_debug: - pushl $0 // error code padding - pushl $1 // int vector - jmp isr +#define isr_callback_no_error(NAME, VECTOR)\ + .global NAME ; \ + NAME: \ + pushl $0; \ + pushl $VECTOR; \ + jmp isr -.global isr_nmi -isr_nmi: - pushl $0 // error code padding - pushl $2 // int vector - jmp isr - -.global isr_breakpoint -isr_breakpoint: - pushl $0 // error code padding - pushl $3 // int vector - jmp isr - -.global isr_overflow -isr_overflow: - pushl $0 // error code padding - pushl $4 // int vector - jmp isr - -.global isr_bound_range_exceeded -isr_bound_range_exceeded: - pushl $0 // error code padding - pushl $5 // int vector - jmp isr - -.global isr_invalid_opcode -isr_invalid_opcode: - pushl $0 // error code padding - pushl $6 // int vector - jmp isr - -.global isr_device_not_available -isr_device_not_available: - pushl $0 // error code padding - pushl $7 // int vector - jmp isr - -.global isr_double_fault -isr_double_fault: - pushl $8 // int vector - jmp isr - -.global isr_coprocessor_segment_overrun -isr_coprocessor_segment_overrun: - pushl $0 // error code padding - pushl $9 // int vector - jmp isr - -.global isr_invalid_tss -isr_invalid_tss: - pushl $10 // int vector - jmp isr - -.global isr_segment_not_present -isr_segment_not_present: - pushl $11 // int vector - jmp isr - -.global isr_stack_segment_fault -isr_stack_segment_fault: - pushl $12 // int vector - jmp isr - -.global isr_general_protection -isr_general_protection: - pushl $13 // int vector - jmp isr - -.global isr_page_fault -isr_page_fault: - pushl $14 // int vector - jmp isr - -.global isr_fpu_floating_point_error -isr_fpu_floating_point_error: - pushl $0 // error code padding - pushl $16 // int vector - jmp isr - -.global isr_alignment_check -isr_alignment_check: - pushl $17 // int vector - jmp isr - -.global isr_machine_check -isr_machine_check: - pushl $0 // error code padding - pushl $18 // int vector - jmp isr - -.global isr_simd_floating_point_exception -isr_simd_floating_point_exception: - pushl $0 // error code padding - pushl $19 // int vector - jmp isr - -.global isr_virtualization_exception -isr_virtualization_exception: - pushl $0 // error code padding - pushl $20 // int vector - jmp isr - -.global isr_control_protection_exception -isr_control_protection_exception: - pushl $21 // int vector - jmp isr +isr_callback_no_error(isr_divide, 0) +isr_callback_no_error(isr_debug, 1) +isr_callback_no_error(isr_nmi, 2) +isr_callback_no_error(isr_breakpoint, 3) +isr_callback_no_error(isr_overflow, 4) +isr_callback_no_error(isr_bound_range_exceeded, 5) +isr_callback_no_error(isr_invalid_opcode, 6) +isr_callback_no_error(isr_device_not_available, 7) +isr_callback_no_error(isr_double_fault, 8) +isr_callback_no_error(isr_coprocessor_segment_overrun, 9) +isr_callback_error(isr_invalid_tss, 10) +isr_callback_error(isr_segment_not_present, 11) +isr_callback_error(isr_stack_segment_fault, 12) +isr_callback_error(isr_general_protection, 13) +isr_callback_error(isr_page_fault, 14) +isr_callback_no_error(isr_fpu_floating_point_error, 16) +isr_callback_error(isr_alignment_check, 17) +isr_callback_no_error(isr_machine_check, 18) +isr_callback_no_error(isr_simd_floating_point_exception, 19) +isr_callback_no_error(isr_virtualization_exception, 20) +isr_callback_error(isr_control_protection_exception, 21)