/kernel/trunk/core/sys32.inc |
---|
279,14 → 279,20 |
iret |
ready_for_next_irq: |
mov [check_idle_semaphore],5 |
mov eax,5 |
mov [check_idle_semaphore],eax |
; mov al, 0x20 |
add eax,(0x20-0x5) |
mov al, 0x20 |
out 0x20, al |
ret |
;destroy eax |
ready_for_next_irq_1: |
mov [check_idle_semaphore],5 |
mov al, 0x20 |
mov eax,5 |
mov [check_idle_semaphore],eax |
; mov al, 0x20 |
add eax,(0x20-0x5) |
out 0xa0,al |
out 0x20, al |
ret |
293,7 → 299,7 |
irqD: |
push eax |
mov al,0 |
xor eax,eax |
out 0xf0,al |
mov al,0x20 |
out 0xa0,al |
396,7 → 402,8 |
cmp eax,[application_table_status] |
jne apptsl1 |
mov [application_table_status],0 |
xor eax,eax |
mov [application_table_status],eax |
apptsl1: |
pop eax |
403,17 → 410,24 |
ret |
; * eax = 64 - íîìåð ôóíêöèè |
; * ebx = 1 - åäèíñòâåííàÿ ïîäôóíêöèÿ |
; * ecx = íîâûé ðàçìåð ïàìÿòè |
;Âîçâðàùàåìîå çíà÷åíèå: |
; * eax = 0 - óñïåøíî |
; * eax = 1 - íåäîñòàòî÷íî ïàìÿòè |
sys_resize_app_memory: |
; eax = 1 - resize |
; ebx = new amount of memory |
; ebx = 1 - resize |
; ecx = new amount of memory |
cmp eax,1 |
jne .no_application_mem_resize |
; cmp eax,1 |
dec ebx |
jnz .no_application_mem_resize |
;fix it! |
mov ebx,ecx |
stdcall new_mem_resize, ebx |
mov [esp+36], eax |
ret |
mov [esp+32], eax |
.no_application_mem_resize: |
ret |
689,22 → 703,22 |
cmp [hd1_status], esi |
jnz @f |
call free_hd_channel |
mov [hd1_status], 0 |
and [hd1_status], 0 |
@@: |
cmp [cd_status], esi |
jnz @f |
call free_cd_channel |
mov [cd_status], 0 |
and [cd_status], 0 |
@@: |
cmp [flp_status], esi |
jnz @f |
mov [flp_status], 0 |
and [flp_status], 0 |
@@: |
pop esi |
cmp [bgrlockpid], esi |
jnz @f |
and [bgrlockpid], 0 |
mov [bgrlock], 0 |
and [bgrlock], 0 |
@@: |
pusha ; remove all irq reservations |
736,8 → 750,8 |
mov esi,[RESERVED_PORTS] |
cmp esi,0 |
je rmpr9 |
test esi,esi |
jz rmpr9 |
rmpr3: |
808,7 → 822,7 |
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background |
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse |
mov [application_table_status],0 |
and [application_table_status],0 |
;mov esi,process_terminated |
;call sys_msg_board_str |
add esp, 4 |
/kernel/trunk/core/syscall.inc |
---|
149,7 → 149,7 |
dd 0 ; 43-SendDeviceData |
dd 0 |
dd 0 |
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea |
dd 0 ; 46-ReservePortArea and FreePortArea |
dd display_number ; 47-WriteNum |
dd display_settings ; 48-SetRedrawType and SetButtonType |
dd sys_apm ; 49-Advanced Power Management (APM) |
167,7 → 167,7 |
dd sys_gs ; 61-Direct graphics access |
dd sys_pci ; 62-PCI functions |
dd sys_msg_board ; 63-System message board |
dd sys_resize_app_memory ; 64-Resize application memory usage |
dd 0 ; 64-Resize application memory usage |
dd syscall_putimage_palette; 65-PutImagePalette |
dd sys_process_def ; 66-Process definitions - keyboard |
dd sys_window_move ; 67-Window move or resize |
228,7 → 228,7 |
dd sys_outport ; 43-SendDeviceData |
dd sys_programirq ; 44-ProgramIrqs |
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq |
dd cross_order ; 46-ReservePortArea and FreePortArea |
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea |
dd cross_order ; 47-WriteNum |
dd cross_order ; 48-SetRedrawType and SetButtonType |
dd cross_order ; 49-Advanced Power Management (APM) |
246,7 → 246,7 |
dd cross_order ; 61-Direct graphics access |
dd cross_order ; 62-PCI functions |
dd cross_order ; 63-System message board |
dd cross_order ; 64-Resize application memory usage |
dd sys_resize_app_memory ; 64-Resize application memory usage |
dd cross_order ; 65-PutImagePalette |
dd cross_order ; 66-Process definitions - keyboard |
dd cross_order ; 67-Window move or resize |
/kernel/trunk/drivers/com_mouse.asm |
---|
5,6 → 5,7 |
;; ;; |
;; Includes source code by Kulakov Vladimir Gennadievich. ;; |
;; Modified by Mario79 and Rus. ;; |
;; 02.12.2009 <Lrz> ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;driver sceletone |
67,7 → 68,7 |
stdcall AttachIntHandler, 4, irq4_handler, dword 0 |
if DEBUG |
cmp eax, 0 |
test eax, eax |
jne .label1 |
mov esi, msg_error_attach_int_handler |
74,9 → 75,12 |
call Boot_Log |
end if |
.label1: |
mov eax, 0 |
mov ebx, 0x3F8 |
mov ecx, 0x3FF |
; mov eax, 0 |
; mov ebx, 0x3F8 |
; mov ecx, 0x3FF |
xor ebx,ebx |
mov ecx, 0x3F8 |
mov edx, 0x3FF |
call ReservePortArea |
if DEBUG |
100,9 → 104,13 |
stdcall AttachIntHandler, 3, irq3_handler, dword 0 |
mov eax, 0 |
mov ebx, 0x2F8 |
mov ecx, 0x3F8 |
; mov eax, 0 |
; mov ebx, 0x2F8 |
; mov ecx, 0x3F8 |
xor ebx,ebx |
mov ecx, 0x2F8 |
mov edx, 0x3F8 |
call ReservePortArea |
if DEBUG |
cmp eax, 1 |
119,7 → 127,7 |
stdcall RegService, my_service, service_proc |
if DEBUG |
cmp eax, 0 |
test eax, eax |
jne @f |
mov esi, msg_exit |
219,8 → 227,8 |
WaitData: |
; Îæèäàòü åùå 10 "òèêîâ" |
dec ecx |
cmp ecx,0 |
je NoMouse |
; cmp ecx,0 |
jz NoMouse |
; Ïðîâåðèòü íàëè÷èå èäåíòèôèêàöèîííîãî áàéòà |
mov DX, bx |
add DX,5 |
/kernel/trunk/drivers/sb16/sb16.asm |
---|
66,9 → 66,13 |
mov esi,msgDSPFound |
call SysMsgBoardStr |
end if |
xor eax,eax |
mov ebx,[sb_base_port] |
lea ecx,[ebx+0xF] |
; xor eax,eax |
; mov ebx,[sb_base_port] |
; lea ecx,[ebx+0xF] |
xor ebx,ebx |
mov ecx,[sb_base_port] |
lea edx,[ebx+0xF] |
call ReservePortArea ;these ports must be my! |
if DEBUG |
dec eax |
/kernel/trunk/kernel.asm |
---|
4015,44 → 4015,41 |
set_io_access_rights: |
pushad |
push edi eax |
mov edi, tss._io_map_0 |
; mov ecx,eax |
; and ecx,7 ; offset in byte |
; shr eax,3 ; number of byte |
; add edi,eax |
; mov ebx,1 |
; shl ebx,cl |
test ebp,ebp |
; cmp ebp,0 ; enable access - ebp = 0 |
jnz siar1 |
; not ebx |
; and [edi],byte bl |
btr [edi], eax |
popad |
pop eax edi |
ret |
siar1: |
bts [edi], eax |
; or [edi],byte bl ; disable access - ebp = 1 |
popad |
pop eax edi |
ret |
;reserve/free group of ports |
; * eax = 46 - number function |
; * ebx = 0 - reserve, 1 - free |
; * ecx = number start arrea of ports |
; * edx = number end arrea of ports (include last number of port) |
;Return value: |
; * eax = 0 - succesful |
; * eax = 1 - error |
; * The system has reserve this ports: |
; 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (include last number of port). |
;destroys eax,ebx, ebp |
r_f_port_area: |
test eax, eax |
test ebx, ebx |
jnz free_port_area |
; je r_port_area |
; jmp free_port_area |
4059,78 → 4056,70 |
; r_port_area: |
pushad |
; pushad |
cmp ebx,ecx ; beginning > end ? |
cmp ecx,edx ; beginning > end ? |
ja rpal1 |
cmp ecx,65536 |
cmp edx,65536 |
jae rpal1 |
mov esi,[RESERVED_PORTS] |
test esi,esi ; no reserved areas ? |
mov eax,[RESERVED_PORTS] |
test eax,eax ; no reserved areas ? |
je rpal2 |
cmp esi,255 ; max reserved |
cmp eax,255 ; max reserved |
jae rpal1 |
rpal3: |
mov edi,esi |
shl edi,4 |
add edi,RESERVED_PORTS |
cmp ebx,[edi+8] |
mov ebx,eax |
shl ebx,4 |
add ebx,RESERVED_PORTS |
cmp ecx,[ebx+8] |
ja rpal4 |
cmp ecx,[edi+4] |
cmp edx,[ebx+4] |
jae rpal1 |
; jb rpal4 |
; jmp rpal1 |
rpal4: |
dec esi |
dec eax |
jnz rpal3 |
jmp rpal2 |
rpal1: |
popad |
mov eax,1 |
; popad |
; mov eax,1 |
xor eax,eax |
inc eax |
ret |
rpal2: |
popad |
; popad |
; enable port access at port IO map |
cli |
pushad ; start enable io map |
cmp ecx,65536 ;16384 |
cmp edx,65536 ;16384 |
jae no_unmask_io ; jge |
mov eax,ebx |
mov eax,ecx |
; push ebp |
xor ebp,ebp ; enable - eax = port |
new_port_access: |
pushad |
xor ebp,ebp ; enable - eax = port |
; pushad |
call set_io_access_rights |
popad |
; popad |
inc eax |
cmp eax,ecx |
cmp eax,edx |
jbe new_port_access |
; pop ebp |
no_unmask_io: |
popad ; end enable io map |
sti |
mov edi,[RESERVED_PORTS] |
add edi,1 |
mov [RESERVED_PORTS],edi |
shl edi,4 |
add edi,RESERVED_PORTS |
mov esi,[TASK_BASE] |
mov esi,[esi+TASKDATA.pid] |
mov [edi],esi |
mov [edi+4],ebx |
mov [edi+8],ecx |
mov eax,[RESERVED_PORTS] |
add eax,1 |
mov [RESERVED_PORTS],eax |
shl eax,4 |
add eax,RESERVED_PORTS |
mov ebx,[TASK_BASE] |
mov ebx,[ebx+TASKDATA.pid] |
mov [eax],ebx |
mov [eax+4],ecx |
mov [eax+8],edx |
xor eax, eax |
ret |
4137,34 → 4126,34 |
free_port_area: |
pushad |
mov esi,[RESERVED_PORTS] ; no reserved areas ? |
test esi,esi |
je frpal2 |
mov edx,[TASK_BASE] |
mov edx,[edx+TASKDATA.pid] |
; pushad |
mov eax,[RESERVED_PORTS] ; no reserved areas ? |
test eax,eax |
jz frpal2 |
mov ebx,[TASK_BASE] |
mov ebx,[ebx+TASKDATA.pid] |
frpal3: |
mov edi,esi |
mov edi,eax |
shl edi,4 |
add edi,RESERVED_PORTS |
cmp edx,[edi] |
cmp ebx,[edi] |
jne frpal4 |
cmp ebx,[edi+4] |
cmp ecx,[edi+4] |
jne frpal4 |
cmp ecx,[edi+8] |
cmp edx,[edi+8] |
jne frpal4 |
jmp frpal1 |
frpal4: |
dec esi |
dec eax |
jnz frpal3 |
frpal2: |
popad |
mov eax,1 |
; popad |
inc eax |
ret |
frpal1: |
push ecx |
mov ecx,256 |
sub ecx,esi |
sub ecx,eax |
shl ecx,4 |
mov esi,edi |
add esi,16 |
4172,36 → 4161,27 |
rep movsb |
dec dword [RESERVED_PORTS] |
popad |
;popad |
; disable port access at port IO map |
pushad ; start disable io map |
cmp ecx,65536 ;16384 |
; pushad ; start disable io map |
pop eax ;start port |
cmp edx,65536 ;16384 |
jge no_mask_io |
mov eax,ebx |
; mov eax,ecx |
xor ebp,ebp |
inc ebp |
new_port_access_disable: |
pushad |
mov ebp,1 ; disable - eax = port |
; pushad |
; mov ebp,1 ; disable - eax = port |
call set_io_access_rights |
popad |
; popad |
inc eax |
cmp eax,ecx |
cmp eax,edx |
jbe new_port_access_disable |
no_mask_io: |
popad ; end disable io map |
; popad ; end disable io map |
xor eax, eax |
ret |
5381,7 → 5361,7 |
syscall_reserveportarea: ; ReservePortArea and FreePortArea |
call r_f_port_area |
mov [esp+36],eax |
mov [esp+32],eax |
ret |
align 4 |