Subversion Repositories Kolibri OS

Rev

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