Rev 6817 | Rev 8050 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6817 | Rev 7733 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2020. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License. ;; |
4 | ;; Distributed under terms of the GNU General Public License. ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 6817 $ |
8 | $Revision: 7733 $ |
9 | 9 | ||
10 | align 4 ;3A08 |
10 | align 4 ;3A08 |
11 | build_interrupt_table: |
11 | build_interrupt_table: |
Line 18... | Line 18... | ||
18 | stosd ;interrupt gate type : os_code selector |
18 | stosd ;interrupt gate type : os_code selector |
19 | movsw ;high word of code-entry |
19 | movsw ;high word of code-entry |
20 | loop @b |
20 | loop @b |
21 | movsd ;copy low dword of trap gate for int 0x40 |
21 | movsd ;copy low dword of trap gate for int 0x40 |
22 | movsd ;copy high dword of trap gate for int 0x40 |
22 | movsd ;copy high dword of trap gate for int 0x40 |
- | 23 | mov ecx, 23 |
|
- | 24 | mov eax, (10001110b shl 24) + os_code |
|
- | 25 | @@: |
|
- | 26 | movsw ;low word of code-entry |
|
- | 27 | stosd ;interrupt gate type : os_code selector |
|
- | 28 | movsw ;high word of code-entry |
|
- | 29 | loop @b |
|
23 | lidt [esi] |
30 | lidt [esi] |
24 | ret |
31 | ret |
Line 25... | Line 32... | ||
25 | 32 | ||
26 | iglobal |
33 | iglobal |
Line 31... | Line 38... | ||
31 | dd e8,e9,e10,e11,e12,e13,page_fault_exc,e15 |
38 | dd e8,e9,e10,e11,e12,e13,page_fault_exc,e15 |
32 | dd e16, e17,e18, e19 |
39 | dd e16, e17,e18, e19 |
33 | times 12 dd unknown_interrupt ;int_20..int_31 |
40 | times 12 dd unknown_interrupt ;int_20..int_31 |
Line 34... | Line 41... | ||
34 | 41 | ||
35 | ;interrupt handlers addresses (for interrupt gate construction) |
42 | ;interrupt handlers addresses (for interrupt gate construction) |
36 | ; 0x20 .. 0x2F - IRQ handlers |
- | |
37 | dd irq0, irq_serv.irq_1, irq_serv.irq_2 |
- | |
38 | dd irq_serv.irq_3, irq_serv.irq_4 |
- | |
39 | dd irq_serv.irq_5, irq_serv.irq_6, irq_serv.irq_7 |
- | |
40 | dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10 |
- | |
41 | dd irq_serv.irq_11, irq_serv.irq_12, irqD, irq_serv.irq_14, irq_serv.irq_15 |
- | |
42 | dd irq_serv.irq_16 |
- | |
43 | dd irq_serv.irq_17 |
- | |
44 | dd irq_serv.irq_18 |
- | |
45 | dd irq_serv.irq_19 |
43 | ; 0x20+ are IRQ handlers |
46 | dd irq_serv.irq_20 |
44 | dd irq0 |
47 | dd irq_serv.irq_21 |
45 | rept 12 irqn:1 \{dd irq_serv.irq_\#irqn\} |
48 | dd irq_serv.irq_22 |
46 | dd irqD |
Line 49... | Line -... | ||
49 | dd irq_serv.irq_23 |
- | |
50 | 47 | rept 18 irqn:14 \{dd irq_serv.irq_\#irqn\} |
|
51 | times 32 - IRQ_RESERVED dd unknown_interrupt |
48 | |
Line -... | Line 49... | ||
- | 49 | ; int_0x40 gate trap (for directly copied) |
|
- | 50 | dw i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16 |
|
52 | ;int_0x40 gate trap (for directly copied) |
51 | |
53 | dw i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16 |
52 | rept 23 irqn:33 \{dd irq_serv.irq_\#irqn\} |
54 | 53 | ||
55 | idtreg: ; data for LIDT instruction (!!! must be immediately below sys_int data) |
54 | idtreg: ; data for LIDT instruction (!!! must be immediately below sys_int data) |
Line 56... | Line 55... | ||
56 | dw 2*($-sys_int-4)-1 |
55 | dw 2*($-sys_int-4)-1 |
57 | dd idts ;0x8000B100 |
56 | dd idts ;0x8000B100 |
58 | dw 0 ;просто выравнивание |
57 | dw 0 ;alignment |