Subversion Repositories Kolibri OS

Rev

Rev 3534 | Rev 3558 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3534 Rev 3539
Line 9... Line 9...
9
;;  Distributed under GPL. See file COPYING for details.        ;;
9
;;  Distributed under GPL. See file COPYING for details.        ;;
10
;;  Copyright 2003 Ville Turjanmaa                              ;;
10
;;  Copyright 2003 Ville Turjanmaa                              ;;
11
;;                                                              ;;
11
;;                                                              ;;
12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 13... Line 13...
13
 
13
 
Line 14... Line 14...
14
$Revision: 3534 $
14
$Revision: 3539 $
15
 
15
 
16
align 4 ;3A08
16
align 4 ;3A08
17
build_interrupt_table:
17
build_interrupt_table:
Line 59... Line 59...
59
        dw      i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16
59
        dw      i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16
Line 60... Line 60...
60
 
60
 
61
  idtreg: ; data for LIDT instruction (!!! must be immediately below sys_int data)
61
  idtreg: ; data for LIDT instruction (!!! must be immediately below sys_int data)
62
        dw      2*($-sys_int-4)-1
62
        dw      2*($-sys_int-4)-1
63
        dd      idts ;0x8000B100
63
        dd      idts ;0x8000B100
Line 64... Line 64...
64
        dw      0    ;ïðîñòî âûðàâíèâàíèå
64
        dw      0    ;просто выравнивание
65
 
65
 
Line 66... Line 66...
66
  msg_fault_sel dd  msg_exc_8,msg_exc_u,msg_exc_a,msg_exc_b
66
  msg_fault_sel dd  msg_exc_8,msg_exc_u,msg_exc_a,msg_exc_b
Line 107... Line 107...
107
 
107
 
108
uglobal
108
uglobal
109
  pf_err_code   dd ?
109
  pf_err_code   dd ?
Line 110... Line 110...
110
endg
110
endg
111
 
111
 
112
page_fault_exc:                 ; äóðàêîóñòî÷èâîñòü: ñåëåêòîðû èñïîð÷åíû...
112
page_fault_exc:                 ; дуракоусточивость: селекторы испорчены...
113
        pop     [ss:pf_err_code]; äåéñòâèòåëüíî äî ñëåäóþùåãî #PF
113
        pop     [ss:pf_err_code]; действительно до следующего #PF
Line 114... Line 114...
114
        save_ring3_context
114
        save_ring3_context
115
        mov     bl, 14
115
        mov     bl, 14
116
 
116
 
117
exc_c:                          ; èñêëþ÷åíèÿ (âñå, êðîìå 7-ãî - #NM)
117
exc_c:                          ; исключения (все, кроме 7-го - #NM)
118
; Ôðýéì ñòåêà ïðè èñêëþ÷åíèè/ïðåðûâàíèè èç 3-ãî êîëüöà + pushad (ò.å., èìåííî çäåñü)
118
; Фрэйм стека при исключении/прерывании из 3-го кольца + pushad (т.е., именно здесь)
119
  reg_ss        equ esp+0x30
119
  reg_ss        equ esp+0x30
120
  reg_esp3      equ esp+0x2C
120
  reg_esp3      equ esp+0x2C
121
  reg_eflags    equ esp+0x28
121
  reg_eflags    equ esp+0x28
122
  reg_cs3       equ esp+0x24
122
  reg_cs3       equ esp+0x24
123
  reg_eip       equ esp+0x20
123
  reg_eip       equ esp+0x20
124
 ; ýòî ôðýéì îò pushad
124
 ; это фрэйм от pushad
125
  reg_eax       equ esp+0x1C
125
  reg_eax       equ esp+0x1C
126
  reg_ecx       equ esp+0x18
126
  reg_ecx       equ esp+0x18
127
  reg_edx       equ esp+0x14
127
  reg_edx       equ esp+0x14
128
  reg_ebx       equ esp+0x10
128
  reg_ebx       equ esp+0x10
129
  reg_esp0      equ esp+0x0C
129
  reg_esp0      equ esp+0x0C
Line 130... Line 130...
130
  reg_ebp       equ esp+0x08
130
  reg_ebp       equ esp+0x08
131
  reg_esi       equ esp+0x04
131
  reg_esi       equ esp+0x04
132
  reg_edi       equ esp+0x00
132
  reg_edi       equ esp+0x00
133
 
133
 
134
        mov     ax, app_data        ;èñêëþ÷åíèå
134
        mov     ax, app_data        ;исключение
135
        mov     ds, ax                  ;çàãðóçèì ïðàâèëüíûå çíà÷åíèÿ
135
        mov     ds, ax                  ;загрузим правильные значения
136
        mov     es, ax                  ;â ðåãèñòðû
136
        mov     es, ax                  ;в регистры
137
        cld                     ; è ïðèâîäèì DF ê ñòàíäàðòó
137
        cld                     ; и приводим DF к стандарту
138
        movzx   ebx, bl
138
        movzx   ebx, bl
Line 288... Line 288...
288
 
288
 
Line 289... Line 289...
289
        pop     edx ecx eax
289
        pop     edx ecx eax
Line 290... Line 290...
290
 
290
 
291
        ret
291
        ret
292
 
292
 
293
;  * eax = 64 - íîìåð ôóíêöèè
293
;  * eax = 64 - номер функции
294
;  * ebx = 1 - åäèíñòâåííàÿ ïîäôóíêöèÿ
294
;  * ebx = 1 - единственная подфункция
295
;  * ecx = íîâûé ðàçìåð ïàìÿòè
295
;  * ecx = новый размер памяти
Line 296... Line 296...
296
;Âîçâðàùàåìîå çíà÷åíèå:
296
;Возвращаемое значение:
297
;  * eax = 0 - óñïåøíî
297
;  * eax = 0 - успешно
298
;  * eax = 1 - íåäîñòàòî÷íî ïàìÿòè
298
;  * eax = 1 - недостаточно памяти
299
 
299
 
Line 683... Line 683...
683
    ;call  sys_msg_board_str
683
    ;call  sys_msg_board_str
684
        add     esp, 4
684
        add     esp, 4
685
        ret
685
        ret
686
restore .slot
686
restore .slot
Line 687... Line -...
687
 
-
 
688
;iglobal
-
 
689
;if lang eq ru
-
 
690
;  boot_sched_1    db   '‘®§¤ ­¨¥ GDT TSS 㪠§ â¥«ï',0
-
 
691
;  boot_sched_2    db   '‘®§¤ ­¨¥ IDT â ¡«¨æë',0
-
 
692
;else
-
 
693
;  boot_sched_1    db   'Building gdt tss pointer',0
-
 
694
;  boot_sched_2    db   'Building IDT table',0
-
 
695
;end if
-
 
696
;endg
-
 
697
 
-
 
698
 
687
 
699
;build_scheduler:
688
;build_scheduler:
700
;        mov     esi, boot_sched_1
689
;        mov     esi, boot_sched_1
701
;        call    boot_log
690
;        call    boot_log