summaryrefslogtreecommitdiff
path: root/asm/int.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/int.s')
-rw-r--r--asm/int.s174
1 files changed, 0 insertions, 174 deletions
diff --git a/asm/int.s b/asm/int.s
deleted file mode 100644
index 566b646..0000000
--- a/asm/int.s
+++ /dev/null
@@ -1,174 +0,0 @@
-.global int0
-.global int1
-.global int2
-.global int3
-.global int4
-.global int5
-.global int6
-.global int7
-
-.global int8
-.global int9
-.global int10
-.global int11
-.global int12
-.global int13
-.global int14
-.global int15
-
-.global int128
-.global int129
-.global int255
-
-.global exc0
-.global exc1
-.global exc2
-.global exc3
-.global exc4
-.global exc5
-.global exc6
-.global exc7
-.global exc8
-.global exc9
-.global exc10
-.global exc11
-.global exc12
-.global exc13
-.global exc14
-.global exc15
-.global exc16
-.global exc17
-.global exc18
-
-// nothing to ack
-.macro ack0
-.endm
-
-// ack master
-.macro ack1
- push %eax // persist
- mov $0x20,%al
- out %al,$0x20
- pop %eax // load original
-.endm
-
-// ack master and servant
-.macro ack2
- push %eax // persist
- mov $0x20,%al
- out %al,$0xa0 // slave
- out %al,$0x20 // master
- pop %eax // load original
-.endm
-
-.macro intx ack num func
-
- /*
- Once we arrived here the stack already contains 3x 32bit values,
- which will be poped by 'iret'
-
- - eflags
- - return code segment selector
- - return instruction pointer
-
- There are two possiblities concerning our stack position:
-
- a) if the interrupt occured while kernel code was executed we are
- on the same stack and have no clue about the stack alignment
-
- b) if the interrupt occured while user code was executed the
- configured tss.esp0 was used, in this case we are at the start
- of the esp0 stack.
- */
-
- \ack //acknowledge interrupt
- //also remember that we will get new interrupts only
- //after iret or reenabling themn explicitly!
-
- push $0x666 //make room for potential C functions 'return value'.
- //we use eax already for esp (so we can context switch)
-
- push $0x0 //indicate if we want to return the value in ebx 0x0=NO
-
- pusha //Push all standard registers 8 regs x 4bytes/32bit
- push %ds //Push data segment
- push %es //etc...
- push %fs
- push %gs
-
- mov %esp,%eax // remember THIS stack position
-
- and $-16,%esp // padding to align stack on 16byte boundary before CALL
- sub $8,%esp // ...
-
- push \num // pass in this interrupt number
- push %eax // pass in original %esp (saved just few lines before)
- call \func
- mov %eax,%esp // use the %esp we got from c function
-
- pop %gs // pop everything back...
- pop %fs // ...
- pop %es
- pop %ds
- popa
-
- cmp $0x0,(%esp)
- je skip\num
- pop %ebx
- pop %ebx
- jmp ret\num
- skip\num:
- add $8,%esp // potentially set return value to eax to return to the caller
- ret\num:
-
- iret // pops the return instruction pointer, return code segment selector, and EFLAGS image from the stack
-
-.endm
-
-.macro excx func
- call \func
- jmp .
-.endm
-
-int0: intx ack1 $0 interrupt_handler
-int1: intx ack1 $1 interrupt_handler
-int2: intx ack1 $2 interrupt_handler
-int3: intx ack1 $3 interrupt_handler
-int4: intx ack1 $4 interrupt_handler
-int5: intx ack1 $5 interrupt_handler
-int6: intx ack1 $6 interrupt_handler
-int7: intx ack1 $7 interrupt_handler
-
-int8: intx ack2 $8 interrupt_handler
-int9: intx ack2 $9 interrupt_handler
-int10: intx ack2 $10 interrupt_handler
-int11: intx ack2 $11 interrupt_handler
-int12: intx ack2 $12 interrupt_handler
-int13: intx ack2 $13 interrupt_handler
-int14: intx ack2 $14 interrupt_handler
-int15: intx ack2 $15 interrupt_handler
-
-int128: intx ack0 $128 interrupt_handler
-int129: intx ack0 $129 interrupt_handler
-
-int255: intx ack0 $255 interrupt_handler
-
-exc0: excx exception_handle_0
-exc1: excx exception_handle_1
-exc2: excx exception_handle_2
-exc3: excx exception_handle_3
-exc4: excx exception_handle_4
-exc5: excx exception_handle_5
-exc6: excx exception_handle_6
-exc7: excx exception_handle_7
-exc8: excx exception_handle_8
-exc9: excx exception_handle_9
-exc10: excx exception_handle_10
-exc11: excx exception_handle_11
-exc12: excx exception_handle_12
-exc13: excx exception_handle_13
-exc14: excx exception_handle_14
-exc15: excx exception_handle_15
-exc16: excx exception_handle_16
-exc17: excx exception_handle_17
-exc18: excx exception_handle_18