os

Toy OS
git clone git://git.christosmarg.xyz
Log | Files | Refs | README | LICENSE

int.asm (3303B)


      1 ; Defined in `idt.h`.
      2 [extern int_handler]
      3 
      4 ; Exceptions
      5 global ex0
      6 global ex1
      7 global ex2
      8 global ex3
      9 global ex4
     10 global ex5
     11 global ex6
     12 global ex7
     13 global ex8
     14 global ex9
     15 global ex10
     16 global ex11
     17 global ex12
     18 global ex13
     19 global ex14
     20 global ex15
     21 global ex16
     22 global ex17
     23 global ex18
     24 global ex19
     25 global ex20
     26 global ex21
     27 global ex22
     28 global ex23
     29 global ex24
     30 global ex25
     31 global ex26
     32 global ex27
     33 global ex28
     34 global ex29
     35 global ex30
     36 global ex31
     37 
     38 ; IRQs
     39 global irq0
     40 global irq1
     41 global irq2
     42 global irq3
     43 global irq4
     44 global irq5
     45 global irq6
     46 global irq7
     47 global irq8
     48 global irq9
     49 global irq10
     50 global irq11
     51 global irq12
     52 global irq13
     53 global irq14
     54 global irq15
     55 
     56 %macro intdef_noerr 1
     57 	cli
     58 	push	byte 0
     59 	push	byte %1
     60 	jmp	int_common_stub
     61 %endmacro
     62 
     63 %macro intdef_err 1
     64 	cli
     65 	push	byte 0
     66 	push	byte %1
     67 	jmp	int_common_stub
     68 %endmacro
     69 
     70 ; Exceptions
     71 ex0:	intdef_noerr	0  ; Division By Zero
     72 ex1:	intdef_noerr	1  ; Debug
     73 ex2:	intdef_noerr	2  ; Non Maskable Interrupt
     74 ex3:	intdef_noerr	3  ; Breakpoint
     75 ex4:	intdef_noerr	4  ; Into Detected Overflow
     76 ex5:	intdef_noerr	5  ; Out of Bounds
     77 ex6:	intdef_noerr	6  ; Invalid Opcode
     78 ex7:	intdef_noerr	7  ; No Coprocessor
     79 ex8:	intdef_err	8  ; Double Fault (with error code)
     80 ex9:	intdef_noerr	9  ; Coprocessor Segment Overrrun
     81 ex10:	intdef_err	10 ; Bad TSS (with error code)
     82 ex11:	intdef_err	11 ; Segment Not Present (with error code)
     83 ex12:	intdef_err	12 ; Stack Fault (with error code)
     84 ex13:	intdef_err	13 ; General Protection Fault (with error code)
     85 ex14:	intdef_err	14 ; Page Fault (with error code)
     86 ex15:	intdef_noerr	15 ; Unkown Interrupt
     87 ex16:	intdef_noerr	16 ; Coprocessor Fault
     88 ex17:	intdef_noerr	17 ; Alignment Check (486+)
     89 ex18:	intdef_noerr	18 ; Machine Check (Pentium/586+)
     90 ex19:	intdef_noerr	19 ; Reserved
     91 ex20:	intdef_noerr	20 ; Reserved
     92 ex21:	intdef_noerr	21 ; Reserved
     93 ex22:	intdef_noerr	22 ; Reserved
     94 ex23:	intdef_noerr	23 ; Reserved
     95 ex24:	intdef_noerr	24 ; Reserved
     96 ex25:	intdef_noerr	25 ; Reserved
     97 ex26:	intdef_noerr	26 ; Reserved
     98 ex27:	intdef_noerr	27 ; Reserved
     99 ex28:	intdef_noerr	28 ; Reserved
    100 ex29:	intdef_noerr	29 ; Reserved
    101 ex30:	intdef_noerr	30 ; Reserved
    102 ex31:	intdef_noerr	31 ; Reserved
    103 ; IRQs
    104 irq0:	intdef_noerr	32 ; Programmable Interrupt Timer
    105 irq1:	intdef_noerr	33 ; Keyboard
    106 irq2:	intdef_noerr	34 ; Cascade (used internally by the two PICs, never raised)
    107 irq3:	intdef_noerr	35 ; COM2 (if enabled)
    108 irq4:	intdef_noerr	36 ; COM1 (if enabled)
    109 irq5:	intdef_noerr	37 ; LPT2 (if enabled)
    110 irq6:	intdef_noerr	38 ; Floppy Disk
    111 irq7:	intdef_noerr	39 ; LPT1
    112 irq8:	intdef_noerr	40 ; CMOS real-time clock (if enabled)
    113 irq9:	intdef_noerr	41 ; Peripherals / Legacy SCSI / NIC
    114 irq10:	intdef_noerr	42 ; Peripherals / SCSI / NIC
    115 irq11:	intdef_noerr	43 ; Peripherals / SCSI / NIC
    116 irq12:	intdef_noerr	44 ; PS2 Mouse
    117 irq13:	intdef_noerr	45 ; FPU / Coprocessor / Inter-processor
    118 irq14:	intdef_noerr	46 ; Primary ATA Hard Disk
    119 irq15:	intdef_noerr	47 ; Secondary ATA Hard Disk
    120 
    121 ; Save the processor state, call the C interrupt handler and restore the
    122 ; stack frame.
    123 int_common_stub:
    124 	pusha
    125 	push	ds
    126 	push	es
    127 	push	fs
    128 	push	gs
    129 	mov	ax, 0x10	; Kernel data segment descriptor.
    130 	mov	ds, ax
    131 	mov	es, ax
    132 	mov	fs, ax
    133 	mov	gs, ax
    134 	mov	eax, esp	; Push the stack.
    135 	push	eax
    136 	mov	eax, int_handler 
    137 	call	eax
    138 	pop	eax
    139 	pop	gs
    140 	pop	fs
    141 	pop	es
    142 	pop	ds
    143 	popa
    144 	add	esp, 8		; Clean up ISR info.
    145 	sti
    146 	iret