/kernel/trunk/core/conf_lib-sp.inc |
---|
1,11 → 1,11 |
; ste archivo debe ser editado con codificaci¢n CP866 |
; Éste archivo debe ser editado con codificación CP866 |
ugui_mouse_speed db 'velocidad del rat¢n',0 |
ugui_mouse_delay db 'demora del rat¢n',0 |
ugui_mouse_speed:cp850 'velocidad del ratón',0 |
ugui_mouse_delay:cp850 'demora del ratón',0 |
udev db 'disp',0 |
unet db 'red',0 |
unet_active db 'activa',0 |
unet_addr db 'direc',0 |
unet_mask db 'm sc',0 |
unet_gate db 'puer',0 |
udev:cp850 'disp',0 |
unet:cp850 'red',0 |
unet_active:cp850 'activa',0 |
unet_addr:cp850 'direc',0 |
unet_mask:cp850 'másc',0 |
unet_gate:cp850 'puer',0 |
/kernel/trunk/core/conf_lib.inc |
---|
164,7 → 164,7 |
proc strtoint_dec stdcall,strs |
pushad |
xor edx, edx |
; ¯®¨áª ª®æ |
; поиск конца |
mov esi, [strs] |
@@: |
lodsb |
180,7 → 180,7 |
dec ebx |
or ebx, ebx |
jz @f |
imul ecx, ecx, 10; ¯®à冷ª |
imul ecx, ecx, 10; порядок |
jmp @b |
@@: |
/kernel/trunk/core/memory.inc |
---|
631,21 → 631,21 |
mov eax, [pf_err_code] |
cmp ebx, OS_BASE ;ebx == .err_addr |
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ; |
jb .user_space ;страница в памяти приложения ; |
cmp ebx, page_tabs |
jb .kernel_space ;ñòðàíèöà â ïàìÿòè ÿäðà |
jb .kernel_space ;страница в памяти ядра |
cmp ebx, kernel_tabs |
jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ; |
;ïðîñòî ñîçäàäèì îäíó |
if 0 ;ïîêà ýòî ïðîñòî ëèøíåå |
jb .alloc;.app_tabs ;таблицы страниц приложения ; |
;просто создадим одну |
if 0 ;пока это просто лишнее |
cmp ebx, LFB_BASE |
jb .core_tabs ;òàáëèöû ñòðàíèö ÿäðà |
;Îøèáêà |
jb .core_tabs ;таблицы страниц ядра |
;Ошибка |
.lfb: |
;îáëàñòü LFB |
;Îøèáêà |
;область LFB |
;Ошибка |
jmp .fail |
end if |
.core_tabs: |
661,8 → 661,8 |
.user_space: |
test eax, PG_MAP |
jnz .err_access ;Ñòðàíèöà ïðèñóòñòâóåò |
;Îøèáêà äîñòóïà ? |
jnz .err_access ;Страница присутствует |
;Ошибка доступа ? |
shr ebx, 12 |
mov ecx, ebx |
669,13 → 669,13 |
shr ecx, 10 |
mov edx, [master_tab+ecx*4] |
test edx, PG_MAP |
jz .fail ;òàáëèöà ñòðàíèö íå ñîçäàíà |
;íåâåðíûé àäðåñ â ïðîãðàììå |
jz .fail ;таблица страниц не создана |
;неверный адрес в программе |
mov eax, [page_tabs+ebx*4] |
test eax, 2 |
jz .fail ;àäðåñ íå çàðåçåðâèðîâàí äëÿ ; |
;èñïîëüçîâàíèÿ. Îøèáêà |
jz .fail ;адрес не зарезервирован для ; |
;использования. Ошибка |
.alloc: |
call alloc_page |
test eax, eax |
731,16 → 731,16 |
.kernel_space: |
test eax, PG_MAP |
jz .fail ;ñòðàíèöà íå ïðèñóòñòâóåò |
jz .fail ;страница не присутствует |
test eax, 12 ;U/S (+below) |
jnz .fail ;ïðèëîæåíèå îáðàòèëîñü ê ïàìÿòè |
;ÿäðà |
jnz .fail ;приложение обратилось к памяти |
;ядра |
;test eax, 8 |
;jnz .fail ;óñòàíîâëåí çàðåçåðâèðîâàííûé áèò |
;â òàáëèöàõ ñòðàíèö. äîáàâëåíî â P4/Xeon |
;jnz .fail ;установлен зарезервированный бит |
;в таблицах страниц. добавлено в P4/Xeon |
;ïîïûòêà çàïèñè â çàùèù¸ííóþ ñòðàíèöó ÿäðà |
;попытка записи в защищённую страницу ядра |
cmp ebx, tss._io_map_0 |
jb .fail |
/kernel/trunk/core/sched.inc |
---|
99,8 → 99,8 |
loop .newupdate |
ret |
;TODO: Íàäî áû óáðàòü èñïîëüçîâàíèå do_change_task èç V86... |
; è ïîñëå ýòîãî ïåðåíåñòè îáðàáîòêó TASKDATA.counter_add/sum â do_change_task |
;TODO: Надо бы убрать использование do_change_task из V86... |
; и после этого перенести обработку TASKDATA.counter_add/sum в do_change_task |
align 4 |
do_change_task: |
/kernel/trunk/core/sys32-sp.inc |
---|
1,4 → 1,4 |
; ste archivo debe ser editado con codificaci¢n CP866 |
; Éste archivo debe ser editado con codificación CP866 |
msg_sel_ker db "n£cleo", 0 |
msg_sel_app db "aplicaci¢n", 0 |
msg_sel_ker: cp850 "núcleo", 0 |
msg_sel_app: cp850 "aplicación", 0 |
/kernel/trunk/core/sys32.inc |
---|
61,7 → 61,7 |
idtreg: ; data for LIDT instruction (!!! must be immediately below sys_int data) |
dw 2*($-sys_int-4)-1 |
dd idts ;0x8000B100 |
dw 0 ;ïðîñòî âûðàâíèâàíèå |
dw 0 ;просто выравнивание |
msg_fault_sel dd msg_exc_8,msg_exc_u,msg_exc_a,msg_exc_b |
dd msg_exc_c,msg_exc_d,msg_exc_e |
109,19 → 109,19 |
pf_err_code dd ? |
endg |
page_fault_exc: ; äóðàêîóñòî÷èâîñòü: ñåëåêòîðû èñïîð÷åíû... |
pop [ss:pf_err_code]; äåéñòâèòåëüíî äî ñëåäóþùåãî #PF |
page_fault_exc: ; дуракоусточивость: селекторы испорчены... |
pop [ss:pf_err_code]; действительно до следующего #PF |
save_ring3_context |
mov bl, 14 |
exc_c: ; èñêëþ÷åíèÿ (âñå, êðîìå 7-ãî - #NM) |
; Ôðýéì ñòåêà ïðè èñêëþ÷åíèè/ïðåðûâàíèè èç 3-ãî êîëüöà + pushad (ò.å., èìåííî çäåñü) |
exc_c: ; исключения (все, кроме 7-го - #NM) |
; Фрэйм стека при исключении/прерывании из 3-го кольца + pushad (т.е., именно здесь) |
reg_ss equ esp+0x30 |
reg_esp3 equ esp+0x2C |
reg_eflags equ esp+0x28 |
reg_cs3 equ esp+0x24 |
reg_eip equ esp+0x20 |
; ýòî ôðýéì îò pushad |
; это фрэйм от pushad |
reg_eax equ esp+0x1C |
reg_ecx equ esp+0x18 |
reg_edx equ esp+0x14 |
131,10 → 131,10 |
reg_esi equ esp+0x04 |
reg_edi equ esp+0x00 |
mov ax, app_data ;èñêëþ÷åíèå |
mov ds, ax ;çàãðóçèì ïðàâèëüíûå çíà÷åíèÿ |
mov es, ax ;â ðåãèñòðû |
cld ; è ïðèâîäèì DF ê ñòàíäàðòó |
mov ax, app_data ;исключение |
mov ds, ax ;загрузим правильные значения |
mov es, ax ;в регистры |
cld ; и приводим DF к стандарту |
movzx ebx, bl |
; redirect to V86 manager? (EFLAGS & 0x20000) != 0? |
test byte[reg_eflags+2], 2 |
290,12 → 290,12 |
ret |
; * eax = 64 - íîìåð ôóíêöèè |
; * ebx = 1 - åäèíñòâåííàÿ ïîäôóíêöèÿ |
; * ecx = íîâûé ðàçìåð ïàìÿòè |
;Âîçâðàùàåìîå çíà÷åíèå: |
; * eax = 0 - óñïåøíî |
; * eax = 1 - íåäîñòàòî÷íî ïàìÿòè |
; * eax = 64 - номер функции |
; * ebx = 1 - единственная подфункция |
; * ecx = новый размер памяти |
;Возвращаемое значение: |
; * eax = 0 - успешно |
; * eax = 1 - недостаточно памяти |
align 4 |
sys_resize_app_memory: |
685,17 → 685,6 |
ret |
restore .slot |
;iglobal |
;if lang eq ru |
; boot_sched_1 db '®§¤ ¨¥ GDT TSS 㪠§ ⥫ï',0 |
; boot_sched_2 db '®§¤ ¨¥ IDT â ¡«¨æë',0 |
;else |
; boot_sched_1 db 'Building gdt tss pointer',0 |
; boot_sched_2 db 'Building IDT table',0 |
;end if |
;endg |
;build_scheduler: |
; mov esi, boot_sched_1 |
; call boot_log |
/kernel/trunk/core/syscall.inc |
---|
29,7 → 29,7 |
align 32 |
sysenter_entry: |
; Íàñòðàèâàåì ñòåê |
; Настраиваем стек |
mov esp, [ss:tss._esp0] |
sti |
push ebp ; save app esp + 4 |
47,7 → 47,7 |
call unprotect_from_terminate |
popad |
;------------------ |
xchg ecx, [ss:esp] ; â âåðøèí ñòåêà - app ecx, ecx - app esp + 4 |
xchg ecx, [ss:esp] ; в вершин стека - app ecx, ecx - app esp + 4 |
sub ecx, 4 |
xchg edx, [ecx] ; edx - return point, & save original edx |
push edx |
/kernel/trunk/core/v86.inc |
---|
178,7 → 178,7 |
; esi=handle |
; out: eax=V86 address, para-aligned (0x10 multiple) |
; destroys: nothing |
; ¥¤®¯¨á !!! |
; недописана!!! |
;v86_alloc: |
; push ebx ecx edx edi |
; lea ebx, [esi+V86_machine.mutex] |
377,8 → 377,8 |
jnz .nogp |
; Otherwise we can safely access byte at CS:IP |
; (because it is #GP, not #PF handler) |
; ᫨ ¡ë ¬ë ¬®£«¨ áå«®¯®â âì ¨áª«î票¥ ⮫쪮 ¨§-§ çâ¥¨ï ¡ ©â®¢ ª®¤ , |
; ¬ë ¡ë ¥£® 㦥 áå«®¯®â «¨ ¨ íâ® ¡ë«® ¡ë ¥ #GP |
; Если бы мы могли схлопотать исключение только из-за чтения байтов кода, |
; мы бы его уже схлопотали и это было бы не #GP |
movzx esi, word [esp+v86_regs.cs] |
shl esi, 4 |
add esi, [esp+v86_regs.eip] |