/kernel/trunk/core/apic.inc |
---|
0,0 → 1,90 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
align 4 |
pic_delay: |
jmp pdl1 |
pdl1: ret |
align 4 |
rerouteirqs: |
cli |
mov al,0x11 ; icw4, edge triggered |
out 0x20,al |
call pic_delay |
out 0xA0,al |
call pic_delay |
mov al,0x20 ; generate 0x20 + |
out 0x21,al |
call pic_delay |
mov al,0x28 ; generate 0x28 + |
out 0xA1,al |
call pic_delay |
mov al,0x04 ; slave at irq2 |
out 0x21,al |
call pic_delay |
mov al,0x02 ; at irq9 |
out 0xA1,al |
call pic_delay |
mov al,0x01 ; 8086 mode |
out 0x21,al |
call pic_delay |
out 0xA1,al |
call pic_delay |
mov al,255 ; mask all irq's |
out 0xA1,al |
call pic_delay |
out 0x21,al |
call pic_delay |
mov ecx,0x1000 |
cld |
picl1: call pic_delay |
loop picl1 |
mov al,255 ; mask all irq's |
out 0xA1,al |
call pic_delay |
out 0x21,al |
call pic_delay |
ret |
align 4 |
;proc enable_irq stdcall, irq_line:dword |
enable_irq: ; FIXME make fastcall |
mov ebx, [esp+4] ;irq_line |
mov edx, 0x21 |
cmp ebx, 8 |
jb @F |
mov edx, 0xA1 |
sub ebx,8 |
@@: |
in al,dx |
btr eax, ebx |
out dx, al |
ret 4 |
align 4 |
;proc irq_eoi fastcall, irq_line:dword |
irq_eoi: |
cmp cl, 8 |
mov al, 0x20 |
jb @f |
out 0xa0, al |
@@: |
out 0x20, al |
ret |
/kernel/trunk/core/irq.inc |
---|
143,22 → 143,7 |
ret |
endp |
align 4 |
proc enable_irq stdcall, irq_line:dword |
mov ebx, [irq_line] |
mov edx, 0x21 |
cmp ebx, 8 |
jb @F |
mov edx, 0xA1 |
sub ebx,8 |
@@: |
in al,dx |
btr eax, ebx |
out dx, al |
ret |
endp |
macro irq_serv_h [num] { |
forward |
align 4 |
246,15 → 231,22 |
.exit: |
mov [check_idle_semaphore],5 |
cmp bp, 8 |
mov al, 0x20 |
jb @f |
out 0xa0, al |
@@: |
out 0x20, al |
mov ecx, ebp |
call irq_eoi |
restore_ring3_context |
add esp, 4 |
iret |
align 4 |
irqD: |
push eax |
push ecx |
xor eax,eax |
out 0xf0,al |
mov cl, 13 |
call irq_eoi |
pop ecx |
pop eax |
iret |
/kernel/trunk/core/sched.inc |
---|
27,8 → 27,8 |
add [next_usage_update],100 |
call updatecputimes |
.nocounter: |
mov al,0x20 ; send End Of Interrupt signal |
out 0x20,al |
xor ecx, ecx |
call irq_eoi |
btr dword[DONT_SWITCH], 0 |
jc .return |
call find_next_task |
/kernel/trunk/core/sys32.inc |
---|
120,7 → 120,7 |
reg_esi equ esp+0x04 |
reg_edi equ esp+0x00 |
Mov ds,ax,app_data ; çàãðóçèì ïðàâèëüíûå çíà÷åíèÿ |
Mov ds,ax,app_data ; çàãðóçèì ïðàâèëüíûå çíà÷åíè |
mov es,ax ; â ñåãìåíòíûå ðåãèñòðû |
cld ; è ïðèâîäèì DF ê ñòàíäàðòó |
movzx ebx,bl |
238,18 → 238,6 |
align 4 |
irqD: |
push eax |
xor eax,eax |
out 0xf0,al |
mov al,0x20 |
out 0xa0,al |
out 0x20,al |
pop eax |
iret |
align 4 |
set_application_table_status: |
push eax |
/kernel/trunk/core/v86.inc |
---|
839,6 → 839,7 |
; mov byte [BOOT_VAR + 48Eh], 0FFh |
; ret |
align 4 |
v86_irq: |
; push irq/pushad/jmp v86_irq |
; eax = irq |
898,12 → 899,8 |
pop ecx |
.cont: |
loop .scan |
mov al, 20h |
out 20h, al |
cmp edi, 8 |
jb @f |
out 0A0h, al |
@@: |
mov ecx, edi |
call irq_eoi |
popad |
iretd |
.found: |
/kernel/trunk/drivers/com_mouse.asm |
---|
332,7 → 332,7 |
mov [esi+COM_MOUSE_DATA.MouseByteNumber],0 |
.EndMouseInterrupt: |
mov al, 1 |
ret |
;all initialized data place here |
/kernel/trunk/drivers/sb16/sb16.asm |
---|
240,6 → 240,7 |
stdcall [callback],SB16Buffer1 ;for 64k buffer |
end if |
xor eax,eax |
not eax |
ret |
.fill_second_half: |
250,6 → 251,7 |
stdcall [callback],SB16Buffer3 ;for 64k buffer |
end if |
xor eax,eax |
not eax |
ret |
endp |
;------------------------------------------------------------------------------- |
/kernel/trunk/kernel.asm |
---|
4119,64 → 4119,8 |
ret |
end if |
rerouteirqs: |
cli |
mov al,0x11 ; icw4, edge triggered |
out 0x20,al |
call pic_delay |
out 0xA0,al |
call pic_delay |
mov al,0x20 ; generate 0x20 + |
out 0x21,al |
call pic_delay |
mov al,0x28 ; generate 0x28 + |
out 0xA1,al |
call pic_delay |
mov al,0x04 ; slave at irq2 |
out 0x21,al |
call pic_delay |
mov al,0x02 ; at irq9 |
out 0xA1,al |
call pic_delay |
mov al,0x01 ; 8086 mode |
out 0x21,al |
call pic_delay |
out 0xA1,al |
call pic_delay |
mov al,255 ; mask all irq's |
out 0xA1,al |
call pic_delay |
out 0x21,al |
call pic_delay |
mov ecx,0x1000 |
cld |
picl1: call pic_delay |
loop picl1 |
mov al,255 ; mask all irq's |
out 0xA1,al |
call pic_delay |
out 0x21,al |
call pic_delay |
cli |
ret |
pic_delay: |
jmp pdl1 |
pdl1: ret |
sys_msg_board_str: |
pushad |
/kernel/trunk/kernel32.inc |
---|
221,7 → 221,7 |
include "core/exports.inc" |
include "core/string.inc" |
include "core/v86.inc" ; virtual-8086 manager |
;include "core/apic.inc" ; Interrupt Controller functions |
include "core/apic.inc" ; Interrupt Controller functions |
include "core/irq.inc" ; irq handling functions |
; GUI stuff |