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 |