Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 226 → Rev 227

/kernel/trunk/boot/shutdown.inc
171,6 → 171,10
 
call restorefatchain
 
mov al, 0xFF
out 0x21, al
out 0xA1, al
 
mov word [0x467+0],pr_mode_exit-0x10000
mov word [0x467+2],0x1000
 
224,9 → 228,10
out 0xA1,al
call rdelay
mov al,0
mov al,0xB8
out 0x21,al
call rdelay
mov al,0xBD
out 0xA1,al
sti
 
/kernel/trunk/const.inc
296,7 → 296,7
EVENT_IPC equ 0x00000040
EVENT_NETWORK equ 0x00000080
EVENT_DEBUG equ 0x00000100
EVENT_NOTIFY equ 0x00000200
EVENT_EXTENDED equ 0x00000200
 
EV_INTR equ 1
 
/kernel/trunk/core/dll.inc
1,7 → 1,11
 
DRV_ENTRY equ 1
DRV_EXIT equ -1
DRV_COMPAT equ 1 ;minimal required drivers version
DRV_CURRENT equ 1 ;current drivers model version
 
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
 
align 4
proc attach_int_handler stdcall, irq:dword, handler:dword
 
704,7 → 708,7
stdcall load_file, [file_name]
 
test eax, eax
jz .fail
jz .exit
 
mov [coff], eax
 
775,24 → 779,26
stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\
[strings], ebx
test eax, eax
jnz @F
jz .link_fail
 
mov esi, msg_module
call sys_msg_board_str
mov esi, [file_name]
call sys_msg_board_str
mov esi, msg_CR
call sys_msg_board_str
 
stdcall kernel_free,[coff]
xor eax, eax
ret
@@:
mov ebx, [coff]
add ebx, 20
stdcall fix_coff_relocs, [coff], ebx, [sym]
 
mov ebx, [coff]
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szVersion
test eax, eax
jz .link_fail
 
mov eax, [eax]
shr eax, 16
cmp eax, DRV_COMPAT
jb .ver_fail
 
cmp eax, DRV_CURRENT
ja .ver_fail
 
mov ebx, [coff]
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szSTART
mov [start], eax
 
812,7 → 818,32
mov ecx, [start]
mov [eax+SRV.entry], ecx
ret
 
.ver_fail:
mov esi, msg_CR
call sys_msg_board_str
mov esi, [file_name]
call sys_msg_board_str
mov esi, msg_CR
call sys_msg_board_str
mov esi, msg_version
call sys_msg_board_str
mov esi, msg_www
call sys_msg_board_str
jmp .cleanup
 
.link_fail:
mov esi, msg_module
call sys_msg_board_str
mov esi, [file_name]
call sys_msg_board_str
mov esi, msg_CR
call sys_msg_board_str
.cleanup:
stdcall kernel_free,[img_base]
.fail:
stdcall kernel_free, [coff]
.exit:
xor eax, eax
ret
endp
924,20 → 955,19
 
align 4
proc stop_all_services
pushf
cli
mov eax, [srv_map]
not eax
mov [srv_map], eax
not [srv_map]
.next:
bsf eax, [srv_map]
jnz .find
popf
ret
.find:
btr [srv_map], eax
shl eax,0x02
lea eax,[srv_tab+eax+eax*8] ;srv_tab+eax*36
cmp [eax+SRV.magic], ' SRV'
jne .next
cmp [eax+SRV.size], SRV_SIZE
jne .next
mov ebx, [eax+SRV.entry]
stdcall ebx, dword -1
jmp .next
946,13 → 976,11
 
drv_sound db '/rd/1/drivers/unisound.obj', 0
drv_infinity db '/rd/1/drivers/infinity.obj', 0
;drv_ati2d db '/rd/1/drivers/vesa.obj', 0
;drv_cursor db '/rd/1/drivers/vesa.obj',0
drv_hw_mouse db '/rd/1/drivers/ati2d.obj',0
 
szSound db 'SOUND',0
szInfinity db 'INFINITY',0
;szHMouse db 'ATI2D',0
;szCURSOR db 'VESACURSOR',0
szHwMouse db 'HWCURSOR',0
 
szSTART db 'START',0
szEXPORTS db 'EXPORTS',0
960,9 → 988,12
 
msg_unresolved db 'unresolved ',0
msg_module db 'in module ',0
msg_version db 'incompatible driver version',13,10,0
msg_www db 'please visit www.kolibrios.org',13,10,0
msg_CR db 13,10,0
 
align 4
create_cursor dd 0
set_hw_cursor dd 0
hw_restore dd 0
 
970,6 → 1001,5
services:
dd szSound, drv_sound
dd szInfinity, drv_infinity
; dd szHMouse, drv_ati2d
; dd szCURSOR, drv_cursor
dd szHwMouse, drv_hw_mouse
dd 0
/kernel/trunk/core/exports.inc
1,6 → 1,7
 
iglobal
szKernel db 'KERNEL', 0
szVersion db 'version',0
szAttachIntHandler db 'AttachIntHandler',0
szSysMsgBoardStr db 'SysMsgBoardStr', 0
szPciApi db 'PciApi', 0
20,9 → 21,11
szFpuRestore db 'FpuRestore',0
szLoadCursor db 'LoadCursor',0
szSetHwCursor db 'SetHwCursor',0
szHWRestore db 'HWRestore', 0
szHwCursorRestore db 'HwCursorRestore', 0
szHwCursorCreate db 'HwCursorCreate', 0
szLFBAddress db 'LFBAddress',0
szLoadFile db 'LoadFile',0
szSendEvent db 'SendEvent',0
 
align 16
kernel_export:
45,12 → 48,13
dd szFpuRestore , fpu_restore
dd szLoadCursor , load_cursor
dd szSetHwCursor , set_hw_cursor
dd szHWRestore , hw_restore
dd szHwCursorRestore , hw_restore
dd szHwCursorCreate , create_cursor
dd szLoadFile , load_file
dd szSendEvent , send_event
exp_lfb:
dd szLFBAddress , 0
dd 0
 
 
endg
 
/kernel/trunk/core/memory.inc
806,6 → 806,7
add edi, [ipc_tmp]
cmp dword [edi], 0
jnz .ipc_blocked ;if dword [buffer]<>0 - ipc blocked now
 
mov ebx, dword [edi+4]
mov edx, ebx
add ebx, 8
812,6 → 813,7
add ebx, [msg_size]
cmp ebx, [buf_size]
ja .buffer_overflow ;esi<0 - not enough memory in buffer
 
mov dword [edi+4], ebx
mov eax,[TASK_BASE]
mov eax, [eax+0x04] ;eax - our PID
940,7 → 942,8
add ebx,new_app_base
cmp ebx, new_app_base
jb .fail
stdcall get_notify, ebx
stdcall get_event_ex, ebx, ecx
mov [esp+36], eax
ret
@@:
cmp eax, 15
980,7 → 983,7
ret
@@:
cmp eax, 19
ja @f
ja .fail
add ebx, new_app_base
cmp ebx, new_app_base
jb .fail
987,7 → 990,7
stdcall load_library, ebx
mov [esp+36], eax
ret
@@:
 
.fail:
xor eax, eax
mov [esp+36], eax
1293,18 → 1296,21
 
uglobal
align 16
 
dll_tab rb 32*32
srv_tab rb 36*32
mem_block_map rb 512
event_map rb 128
mem_block_list rd 64
mem_block_mask rd 2
 
dll_map rd 1
srv_map rd 1
 
mem_used_list rd 1
mem_block_list rd 64
mem_block_map rb 512
mem_block_arr rd 1
mem_block_start rd 1
mem_block_end rd 1
mem_block_mask rd 2
heap_size rd 1
heap_free rd 1
heap_blocks rd 1
1312,8 → 1318,11
 
page_start rd 1
page_end rd 1
events rd 1
event_start rd 1
event_end rd 1
 
sys_page_map rd 1
; app_load rd 1
endg
 
 
/kernel/trunk/drivers/ati2d.asm
6,10 → 6,47
 
include 'proc32.inc'
 
DEBUG equ 0
DEBUG equ 1
 
VID_ATI equ 0x1002
 
LOAD_FROM_FILE equ 0
LOAD_FROM_MEM equ 1
LOAD_INDIRECT equ 2
LOAD_SYSTEM equ 3
 
struc BITMAPINFOHEADER {
.biSize dd ? ; DWORD
.biWidth dd ? ; LONG
.biHeight dd ? ; LONG
.biPlanes dw ? ; WORD
.biBitCount dw ? ; WORD
.biCompression dd ? ; DWORD
.biSizeImage dd ? ; DWORD
.biXPelsPerMeter dd ? ; LONG
.biYPelsPerMeter dd ? ; LONG
.biClrUsed dd ? ; DWORD
.biClrImportant dd ? ; DWORD
}
 
virtual at 0
BI BITMAPINFOHEADER
end virtual
 
struc CURSOR
{ .magic dd ?
.size dd ?
.pid dd ?
.base dd ?
.hot_x dd ?
.hot_y dd ?
}
virtual at 0
CURSOR CURSOR
end virtual
 
CURSOR_SIZE equ 24
 
R8500 equ 0x514C ;R200
R9000 equ 0x4966 ;RV250
R9200 equ 0x5961 ;RV280
117,6 → 154,7
 
public START
public service_proc
public version
 
extrn SysMsgBoardStr
extrn PciApi
125,6 → 163,8
extrn MapPage
extrn RegService
extrn SetHwCursor
extrn HwCursorRestore
extrn HwCursorCreate
extrn LFBAddress
extrn LoadFile
 
137,11 → 177,9
 
proc START stdcall, state:dword
 
mov eax, [state]
cmp eax, 1
je .entry
jmp .exit
.entry:
cmp [state], 1
jne .exit
 
if DEBUG
mov esi, msgInit
call SysMsgBoardStr
151,22 → 189,30
test eax, eax
jz .fail
 
stdcall LoadFile, user_file
test eax, eax
jz @F
mov [user_arrow], eax
@@:
stdcall ati_init_cursor, [user_arrow]
 
call init_ati
test eax, eax
jz .fail
 
xor eax, eax
mov edi, cursors
mov ecx, CURSOR_SIZE*16
cld
rep stosd
 
not eax
mov [cursor_map], eax
mov [cursor_map+4], eax
mov edx, cursor_map
mov [cursor_start], edx
add edx, 4
mov [cursor_end], edx
 
stdcall RegService, sz_ati_srv, service_proc
test eax, eax
jz .fail
mov ebx, SetHwCursor
mov dword [ebx], drvCursorPos ;enable hardware cursor
mov dword [SetHwCursor], drvCursorPos ;enable hardware cursor
mov dword [HwCursorRestore], drv_restore
mov dword [HwCursorCreate], ati_cursor
ret
.fail:
if DEBUG
176,8 → 222,8
 
.exit:
xor eax, eax
mov ebx, SetHwCursor
mov dword [ebx], eax ;force disable hardware cursor
; mov ebx, SetHwCursor
; mov dword [ebx], eax ;force disable hardware cursor
ret
endp
 
240,7 → 286,8
add edi, 4
jmp @B
 
.next: inc [devfn]
.next:
inc [devfn]
cmp [devfn], 256
jb .next_dev
mov eax, [bus]
296,9 → 343,6
or eax, ebx
mov [edi+0x50], eax
 
pushd 0
pushd 0
call drvCursorPos
call drvShowCursor
xor eax, eax
inc eax
307,6 → 351,10
endp
 
align 4
drv_restore:
ret 8
 
align 4
drvShowCursor:
mov edi, [ati_io]
 
316,25 → 364,105
ret
 
align 4
drvCursorPos:
push ebp
mov ebp, esp
proc drvCursorPos stdcall, hcursor:dword, x:dword, y:dword
 
mov eax, 80000000h
wrr CUR_HORZ_VERT_OFF, eax
 
mov eax, [ebp+8]
mov eax, [x]
shl eax, 16
or eax, [ebp+12]
or eax, [y]
or eax, 80000000h
wrr CUR_HORZ_VERT_POSN, eax
 
mov eax, CURSOR_IMAGE_OFFSET
mov esi, [hcursor]
mov eax, [esi+CURSOR.base]
sub eax, LFBAddress
wrr CUR_OFFSET, eax
leave
ret 8
ret
endp
 
align 4
proc ati_init_cursor stdcall, arrow:dword
proc video_alloc
 
pushfd
cli
mov ebx, [cursor_start]
mov ecx, [cursor_end]
.l1:
bsf eax,[ebx];
jnz .found
add ebx,4
cmp ebx, ecx
jb .l1
popfd
xor eax,eax
ret
.found:
btr [ebx], eax
popfd
 
mov [cursor_start],ebx
sub ebx, cursor_map
shl ebx, 3
add eax,ebx
 
shl eax,14
add eax, LFBAddress+CURSOR_IMAGE_OFFSET
ret
endp
 
align 4
proc ati_cursor stdcall, hcursor:dword, src:dword, flags:dword
 
stdcall video_alloc
 
mov edi, [hcursor]
mov [edi+CURSOR.base], eax
 
mov esi, [src]
mov ebx, [flags]
cmp bx, LOAD_INDIRECT
je .indirect
 
movzx ecx, word [esi+10]
movzx edx, word [esi+12]
mov [edi+CURSOR.hot_x], ecx
mov [edi+CURSOR.hot_y], edx
 
stdcall ati_init_cursor, eax, esi
mov eax, [hcursor]
.fail:
ret
.indirect:
shr ebx, 16
movzx ecx, bh
movzx edx, bl
mov [eax+CURSOR.hot_x], ecx
mov [eax+CURSOR.hot_y], edx
 
xchg edi, eax
push edi
mov ecx, 64*64
xor eax,eax
rep stosd
 
mov esi, [src]
pop edi
mov ebx, 32
cld
@@:
mov ecx, 32
rep movsd
add edi, 128
dec ebx
jnz @B
mov eax, [hcursor]
ret
endp
 
align 4
proc ati_init_cursor stdcall, dst:dword, src:dword
locals
rBase dd ?
pQuad dd ?
345,12 → 473,13
counter dd ?
endl
 
cld
mov esi, [src]
add esi,[esi+18]
mov eax,esi
 
mov esi, [arrow]
add esi,[esi+18d]
 
mov eax,esi
cmp [esi+BI.biBitCount], 24
je .img_24
.img_4:
add eax, [esi]
mov [pQuad],eax
add eax,64
415,30 → 544,68
mov [rBase],edi
sub [height],1
jnz .l1
jmp .copy
 
mov edi, LFBAddress
add edi, CURSOR_IMAGE_OFFSET
.img_24:
add eax, [esi]
mov [pQuad],eax
add eax, 0xC00
mov [pAnd],eax
mov eax,[esi+BI.biWidth]
mov [width],eax
mov ebx,[esi+BI.biHeight]
shr ebx,1
mov [height],ebx
 
mov edi, pCursor
add edi, 32*31*4
mov [rBase],edi
 
mov esi,[pAnd]
mov ebx, [pQuad]
.row_24:
mov eax, [esi]
bswap eax
mov [counter], 32
@@:
xor edx, edx
shl eax,1
setc dl
dec edx
 
mov ecx, [ebx]
and ecx, 0x00FFFFFF
and ecx, edx
and edx, 0xFF000000
or edx, ecx
mov [edi], edx
add ebx, 3
add edi, 4
dec [counter]
jnz @B
 
add esi, 4
mov edi,[rBase]
sub edi,128
mov [rBase],edi
sub [height],1
jnz .row_24
.copy:
mov edi, [dst]
mov ecx, 64*64
xor eax,eax
rep stosd
 
mov esi, pCursor
mov edi, LFBAddress
add edi, CURSOR_IMAGE_OFFSET
mov edi, [dst]
mov ebx, 32
lc:
cld
@@:
mov ecx, 32
lb:
mov eax, [esi]
mov [edi], eax
add esi, 4
add edi, 4
sub ecx, 1
jnz lb
 
rep movsd
add edi, 128
sub ebx, 1
jnz lc
dec ebx
jnz @B
 
ret
endp
572,7 → 739,6
ret
endp
 
 
align 4
engSetupSolidFill:
push ebp
641,25 → 807,24
dd (R9800XT shl 16)+VID_ATI
dd 0 ;terminator
 
;szKernel db 'KERNEL', 0
sz_ati_srv db 'ATI2D',0
user_file db '/rd/1/user.cur',0
version dd 0x00010001
 
sz_ati_srv db 'HWCURSOR',0
 
msgInit db 'detect hardware...',13,10,0
msgPCI db 'PCI accsess not supported',13,10,0
msgFail db 'device not found',13,10,0
 
user_arrow dd pArrow
 
align 16
pArrow:
file 'arrow.cur'
 
section '.data' data readable writable align 16
 
pCursor db 4096 dup(?)
 
cursors rb CURSOR_SIZE*64
cursor_map rd 2
cursor_start rd 1
cursor_end rd 1
 
bus dd ?
devfn dd ?
ati_io dd ?
/kernel/trunk/drivers/infinity.asm
28,6 → 28,7
 
public START
public service_proc
public version
 
extrn AttachIntHandler
extrn SysMsgBoardStr
46,6 → 47,7
extrn ServiceHandler
extrn FpuSave
extrn FpuRestore
extrn SendEvent
 
SND_CREATE_BUFF equ 2
SND_PLAY equ 3
74,11 → 76,9
 
proc START stdcall, state:dword
 
mov eax, [state]
cmp eax, 1
je .entry
jmp .exit
.entry:
cmp [state], 1
jne .exit
 
stdcall GetService, szSound
test eax, eax
jz .fail
401,15 → 401,12
; end if
 
stdcall dev_play, [hSound]
 
xor eax, eax
inc eax
ret
 
.fail:
xor eax, eax
ret
 
endp
 
align 4
430,11 → 427,9
xor eax, eax
inc eax
ret
 
.fail:
xor eax, eax
ret
 
endp
 
align 4
499,8 → 494,8
popf
xor eax, eax
ret
 
.find: btr [esi], eax
.find:
btr [esi], eax
popf
mov ebx, STREAM_SIZE
mul ebx
519,7 → 514,6
jnz .err
 
bts [stream_map], eax
 
ret
.err:
xor eax, eax
538,7 → 532,8
cmp eax, [esi+STR.limit]
jb .next
 
.m1: mov eax,[esi+STR.base]
.m1:
mov eax,[esi+STR.base]
mov [esi+STR.curr_seg], eax
.next:
add edx, 4
738,6 → 733,7
mm_mask dq 0xFF00FF00FF00FF00
 
stream_map dd 0xFFFF ; 16
version dd 0x00010001
 
szInfinity db 'INFINITY',0
szSound db 'SOUND',0
/kernel/trunk/drivers/mixer.asm
111,6 → 111,9
proc update_stream
locals
stream_index dd ?
ev_code dd ? ;EVENT
ev_offs dd ?
rd 4
endl
 
mov [stream_index], 0
176,17 → 179,19
 
ret
@@:
mov [ev_code], 0xFF000001
mov [ev_offs], ecx
mov eax, [ebx+STREAM.notify_task]
call pid_to_slot
 
lea edx, [ev_code]
push ebx
stdcall SendEvent, eax, edx
pop ebx
test eax, eax
jnz @f
jnz .l_end
 
not eax
mov [ebx+STREAM.notify_task], eax ;-1
jmp .l_end
@@:
shl eax, 8
mov [eax+PROC_BASE+32],ecx
or dword [eax+PROC_BASE+0xA8],EVENT_NOTIFY
.l_end:
inc [stream_index]
dec [play_count]
196,14 → 201,13
 
align 4
proc refill stdcall, str:dword
locals
ev_code dd ? ;EVENT
ev_offs dd ?
rd 4
endl
 
; if DEBUG
; mov esi, msgUser
; call [SysMsgBoardStr]
; end if
 
mov ebx, [str]
 
mov ecx, [ebx+STREAM.work_write]
cmp ecx, [ebx+STREAM.work_top]
jbe .m2
245,17 → 249,19
 
ret
@@:
mov [ev_code], 0xFF000001
mov [ev_offs], ecx
mov eax, [ebx+STREAM.notify_task]
call pid_to_slot
 
lea edx, [ev_code]
push ebx
stdcall SendEvent, eax, edx
pop ebx
test eax, eax
jnz @f
jnz @F
not eax
mov [ebx+STREAM.notify_task], eax ;-1
ret
@@:
shl eax, 8
mov [eax+PROC_BASE+32],ecx
or dword [eax+PROC_BASE+0xA8],EVENT_NOTIFY
ret
endp
 
/kernel/trunk/drivers/sceletone.asm
25,6 → 25,7
 
public START
public service_proc
public version
 
extrn AttachIntHandler
extrn SysMsgBoardStr
54,11 → 55,10
 
proc START stdcall, state:dword
 
mov eax, [state]
cmp eax, 1
je .entry
jmp .exit
cmp [state], 1
jne .exit
.entry:
 
if DEBUG
mov esi, msgInit
call SysMsgBoardStr
161,6 → 161,8
devices dd (DEVICE_ID shl 16)+VENDOR_ID
dd 0 ;terminator
 
version dd 0x00010001
 
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
 
msgInit db 'detect hardware...',13,10,0
/kernel/trunk/drivers/sis.asm
249,6 → 249,7
 
public START
public service_proc
public version
 
extrn AttachIntHandler
extrn SysMsgBoardStr
267,11 → 268,9
 
proc START stdcall, state:dword
 
mov eax, [state]
cmp eax, 1
je .entry
jmp .stop
.entry:
cmp [state], 1
jne .stop
 
if DEBUG
mov esi, msgInit
call SysMsgBoardStr
323,7 → 322,6
 
mov esi, msgOk
call SysMsgBoardStr
 
ret
.fail:
if DEBUG
334,10 → 332,7
ret
.stop:
call stop
mov ax, 0x1c
mov edx, PCM_OUT_SR_REG
call [ctrl.ctrl_write16]
mov [ctrl.user_callback], 0
xor eax, eax
ret
endp
 
483,25 → 478,18
@@:
mov [edi], eax
mov [edi+4], ebx
 
mov [edi+32], eax
mov [edi+4+32], ebx
 
mov [edi+64], eax
mov [edi+4+64], ebx
 
mov [edi+96], eax
mov [edi+4+96], ebx
 
mov [edi+128], eax
mov [edi+4+128], ebx
 
mov [edi+160], eax
mov [edi+4+160], ebx
 
mov [edi+192], eax
mov [edi+4+192], ebx
 
mov [edi+224], eax
mov [edi+4+224], ebx
 
574,7 → 562,6
jz .next
cmp eax, -1
je .next
 
mov edi, devices
@@:
mov ebx, [edi]
586,7 → 573,8
add edi, 12
jmp @B
 
.next: inc [devfn]
.next:
inc [devfn]
cmp [devfn], 256
jb .next_dev
mov eax, [bus]
615,7 → 603,6
 
mov esi, [edi+8]
mov [ctrl.ctrl_setup], esi
 
ret
.err:
xor eax, eax
697,8 → 684,6
 
mov edx, MC_IN_CR_REG
call [ctrl.ctrl_write8]
 
 
ret
endp
 
799,7 → 784,6
mov esi, msgWRFail
call SysMsgBoardStr
end if
 
stc
ret
.ok:
887,13 → 871,12
align 4
proc stop
mov edx, PCM_OUT_CR_REG
mov ax, 0x14
mov ax, 0x0
call [ctrl.ctrl_write8]
 
mov eax, 16
mov [ctrl.lvi_reg], eax
mov edx, PCM_OUT_LVI_REG
call [ctrl.ctrl_write8]
mov ax, 0x1c
mov edx, PCM_OUT_SR_REG
call [ctrl.ctrl_write16]
ret
endp
 
1131,6 → 1114,8
devices dd (CTRL_SIS shl 16)+VID_SIS,msg_AC, set_SIS
dd 0
 
version dd 0x00010001
 
msg_AC db '7012 AC97 controller',13,10, 0
msg_SIS db 'Silicon Integrated Systems',13,10, 0
 
/kernel/trunk/drivers/unisound.asm
275,6 → 275,7
 
public START
public service_proc
public version
 
extrn AttachIntHandler
extrn SysMsgBoardStr
293,10 → 294,8
 
proc START stdcall, state:dword
 
mov eax, [state]
cmp eax, 1
cmp [state], 1
jne .stop
.entry:
 
if DEBUG
mov esi, msgInit
376,6 → 375,7
ret
.stop:
call stop
xor eax, eax
ret
endp
 
1011,14 → 1011,9
align 4
proc stop
mov edx, PCM_OUT_CR_REG
mov ax, 0x14
mov ax, 0x0
call [ctrl.ctrl_write8]
 
mov eax, 16
mov [ctrl.lvi_reg], eax
mov edx, PCM_OUT_LVI_REG
call [ctrl.ctrl_write8]
 
mov ax, 0x1c
mov edx, PCM_OUT_SR_REG
call [ctrl.ctrl_write16]
1336,6 → 1331,8
 
dd 0 ;terminator
 
version dd 0x00010001
 
msg_ICH db 'Intel ICH', 13,10, 0
msg_ICH0 db 'Intel ICH0', 13,10, 0
msg_ICH2 db 'Intel ICH2', 13,10, 0
/kernel/trunk/gui/event.inc
1,3 → 1,169
struc EVENT
{ .code rd 1
rd 5
.next rd 1 ;+24
.prev rd 1 ;+28
}
EVENT_SIZE equ 32
 
virtual at 0
EVENT EVENT
end virtual
 
align 4
init_events:
stdcall kernel_alloc, 1024*EVENT_SIZE
mov [events], eax
xor eax, eax
not eax
mov edi, event_map
mov [event_start], edi
mov ecx, 128/4
cld
rep stosd
mov [event_end], edi
ret
 
align 4
proc alloc_event
 
pushfd
cli
mov ebx, [event_start]
mov ecx, [event_end]
.l1:
bsf eax,[ebx]
jnz .found
add ebx,4
cmp ebx, ecx
jb .l1
popfd
xor eax,eax
ret
.found:
btr [ebx], eax
mov [event_start],ebx
sub ebx, event_map
shl ebx, 3
add eax,ebx
shl eax,5
add eax, [events]
popfd
xor ebx, ebx
mov [eax+EVENT.next], ebx
mov [eax+EVENT.prev], ebx
ret
endp
 
align 4
free_event:
pushfd
cli
sub eax, [events]
shr eax, 5
mov ebx, event_map
bts [ebx], eax
shr eax, 3
and eax, not 3
add eax, ebx
cmp [event_start], eax
ja @f
popfd
ret
@@:
mov [event_start], eax
popfd
ret
 
align 4
proc send_event stdcall pid:dword, event:dword
locals
slot dd ?
endl
 
mov eax, [pid]
call pid_to_slot
test eax, eax
jz .fail
 
shl eax, 8
cmp [PROC_BASE+eax+APPDATA.ev_count], 32
ja .fail
 
mov [slot], eax
call alloc_event
test eax, eax
jz .fail
 
mov edi, eax
mov ecx, 6
mov esi, [event]
cld
rep movsd
 
mov esi, eax
mov eax, [slot]
mov edi, [PROC_BASE+eax+APPDATA.ev_last]
mov [esi+EVENT.prev], edi
test edi, edi
jz .set_last
mov [edi+EVENT.next], esi
.set_last:
mov edx, [PROC_BASE+eax+APPDATA.ev_first]
test edx, edx
jnz @F
mov [PROC_BASE+eax+APPDATA.ev_first], esi
@@:
mov [PROC_BASE+eax+APPDATA.ev_last], esi
inc [PROC_BASE+eax+APPDATA.ev_count]
or [PROC_BASE+eax+APPDATA.event_mask], EVENT_EXTENDED
.fail:
ret
endp
 
align 4
proc get_event_ex stdcall, p_ev:dword, timeout:dword
 
; push eax
; push edx
; mov edx, 0x400 ;bocsh
; mov al,0xff ;bocsh
; out dx, al ;bocsh
; pop edx
; pop eax
 
.wait:
mov ebx,[CURRENT_TASK]
shl ebx,8
cmp [PROC_BASE+ebx+APPDATA.ev_count], 0
je .switch
 
mov esi, [PROC_BASE+ebx+APPDATA.ev_first]
mov edx, [esi+EVENT.next]
mov [PROC_BASE+ebx+APPDATA.ev_first], edx
test edx, edx
jnz @F
mov [PROC_BASE+ebx+APPDATA.ev_last], edx
and dword [PROC_BASE+ebx+APPDATA.event_mask], not EVENT_EXTENDED
@@:
mov [edx+EVENT.prev], 0
dec [PROC_BASE+ebx+APPDATA.ev_count]
 
mov eax, esi
and dword [esi], 0xFF00FFFF
mov edi, [p_ev]
mov ecx, 6
cld
rep movsd
call free_event
ret
.switch:
mov eax, [0x3010]
mov [eax+TASKDATA.state], byte 5
call change_task
jmp .wait
endp
 
sys_getevent:
 
call get_event_for_app
6,7 → 172,6
 
 
align 4
 
sys_wait_event_timeout:
 
mov ebx,[timer_ticks]
46,7 → 211,6
mov [esp+36],eax
ret
 
 
get_event_for_app:
 
pushad
164,17 → 328,27
no_stack_event:
 
test byte [edi+TASKDATA.event_mask+1], 1 ; DEBUG
jz no_debug_event
jz .test_ext
mov eax, [0x3000]
shl eax, 8
test byte [eax+0x80000+APPDATA.event_mask+1], byte 1
jz no_debug_event
jz .test_ext
and byte [eax+0x80000+APPDATA.event_mask+1], not 1
popad
mov eax, 9
ret
no_debug_event:
 
.test_ext:
mov eax, [0x3000]
shl eax, 8
test dword [eax+0x80000+APPDATA.event_mask], EVENT_EXTENDED
jz .test_IRQ
mov eax, 10
ret
 
.test_IRQ:
 
 
cmp dword [edi+TASKDATA.event_mask], 0xFFFF
jbe no_events
 
213,3 → 387,4
ret
 
 
 
/kernel/trunk/kernel.asm
440,6 → 440,8
stdcall kernel_alloc, 0x1000
mov [tmp_task_data], eax
 
call init_events
 
mov [dll_map], 0xFFFFFFFF
mov [srv_map], 0xFFFFFFFF
 
550,11 → 552,9
call boot_log
call setmouse
 
mov [pci_access_enabled],1
call init_cursors
 
; mov [pci_access_enabled],1
; stdcall get_service, szCURSOR
 
; SET PRELIMINARY WINDOW STACK AND POSITIONS
 
mov esi,boot_windefs
/kernel/trunk/kernel32.inc
173,7 → 173,7
db 5 dup(?)
 
.fpu_state dd ? ;+16
dd ? ;+20 unused
.ev_count dd ? ;+20
.fpu_handler dd ? ;+24
.sse_handler dd ? ;+28
.event dd ? ;+32
180,13 → 180,15
.heap_base dd ? ;+36
.heap_top dd ? ;+40
.cursor dd ? ;+44
.ev_first dd ? ;+48
.ev_last dd ? ;+52
 
db 80 dup(?) ;+48
db 72 dup(?) ;+56
 
.wnd_shape dd ? ;+128
.wnd_shape_scale dd ?
dd ?
.mem_size dd ?
.wnd_shape_scale dd ? ;+132
dd ? ;+136
.mem_size dd ? ;+140
.saved_box BOX
.ipc_start dd ?
.ipc_size dd ?
/kernel/trunk/video/cursors.inc
151,7 → 151,6
sub [height],1
jnz .row_24
ret
 
endp
 
align 4
172,6 → 171,8
ret
.found:
btr [ebx], eax
popfd
 
mov [cursor_start],ebx
sub ebx, cursor_map
shl ebx, 3
178,49 → 179,59
add eax,ebx
shl eax,3
lea eax,[cursors+eax+eax*2]
popfd
 
xor ebx, ebx
mov [eax+CURSOR.magic], 'CURS'
mov [eax+CURSOR.size], CURSOR_SIZE
mov [eax+CURSOR.pid], ebx
mov [eax+CURSOR.hot_x], ebx
mov [eax+CURSOR.hot_y], ebx
ret
endp
 
align 4
proc create_cursor
locals
h_cur dd ?
endl
proc set_cursor stdcall, hcursor:dword
mov eax, [hcursor]
mov ebx, [CURRENT_TASK]
shl ebx, 8
xchg eax, [ebx+PROC_BASE+APPDATA.cursor]
ret
endp
 
call alloc_cursor
proc vesa_cursor stdcall, hcursor:dword, src:dword, flags:dword
 
stdcall kernel_alloc, 0x1000
test eax, eax
jz .fail
 
mov [h_cur], eax
mov edi, eax
mov edi, [hcursor]
mov [edi+CURSOR.base], eax
 
xor ebx, ebx
mov esi, [src]
mov ebx, [flags]
cmp bx, LOAD_INDIRECT
je .indirect
 
mov [edi+CURSOR.magic], 'CURS'
mov [edi+CURSOR.size], CURSOR_SIZE
mov [edi+CURSOR.pid], ebx
mov [edi+CURSOR.hot_x], ebx
mov [edi+CURSOR.hot_y], ebx
movzx ecx, word [esi+10]
movzx edx, word [esi+12]
mov [edi+CURSOR.hot_x], ecx
mov [edi+CURSOR.hot_y], edx
 
stdcall kernel_alloc, dword 0x2000
test eax, eax
jz .fail
 
mov ebx, eax
mov eax, [h_cur]
mov [eax+CURSOR.base], ebx
ret
stdcall vesa_init_cursor, eax, esi
mov eax, [hcursor]
.fail:
ret
endp
.indirect:
shr ebx, 16
movzx ecx, bh
movzx edx, bl
mov [eax+CURSOR.hot_x], ecx
mov [eax+CURSOR.hot_y], edx
 
align 4
proc set_cursor stdcall, hcursor:dword
mov eax, [hcursor]
mov ebx, [CURRENT_TASK]
shl ebx, 8
xchg eax, [ebx+PROC_BASE+APPDATA.cursor]
xchg edi, eax
mov ecx, 1024
cld
rep movsd
ret
endp
 
230,75 → 241,29
handle dd ?
endl
 
movzx eax, word [flags]
cmp eax, LOAD_FROM_FILE
jne .from_mem
xor eax, eax
mov [handle], eax
cmp word [flags], LOAD_FROM_FILE
jne @F
 
stdcall load_file, [src]
test eax, eax
jz .exit
mov [src], eax
 
call create_cursor
@@:
call alloc_cursor
test eax, eax
jz .fail
 
stdcall [create_cursor], eax, [src], [flags]
mov [handle], eax
mov esi, [src]
movzx ebx, word [esi+10]
movzx ecx, word [esi+12]
mov [eax+CURSOR.hot_x], ebx
mov [eax+CURSOR.hot_y], ecx
 
stdcall vesa_init_cursor, [eax+CURSOR.base], esi
.fail:
cmp word [flags], LOAD_FROM_FILE
jne .exit
stdcall kernel_free, [src]
.exit:
mov eax, [handle]
ret
 
.from_mem:
cmp eax, LOAD_FROM_MEM
jne .indirect
 
call create_cursor
test eax, eax
jz .exit
 
mov [handle], eax
mov esi, [src]
movzx ebx, word [esi+10]
movzx ecx, word [esi+12]
mov [eax+CURSOR.hot_x], ebx
mov [eax+CURSOR.hot_y], ecx
 
stdcall vesa_init_cursor, [eax+CURSOR.base], [src]
mov eax, [handle]
ret
 
.indirect:
cmp eax, LOAD_INDIRECT
jne .fail
 
call create_cursor
test eax, eax
jz .exit
 
movzx edx, byte [flags+2]
movzx ebx, byte [flags+3]
mov [eax+CURSOR.hot_x], ebx
mov [eax+CURSOR.hot_y], edx
 
mov edi, [eax+CURSOR.base]
mov esi, [src]
mov ecx, 1024
cld
rep movsd
ret
.fail:
mov ebx, [src]
stdcall kernel_free, ebx
.exit:
xor eax, eax
ret
endp
 
align 4
330,9 → 295,19
add edx, 4
mov [cursor_end], edx
 
stdcall load_driver, drv_hw_mouse
test eax, eax
jz .sw_mouse
 
stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM
mov [def_cursor], eax
ret
.sw_mouse:
mov [create_cursor], vesa_cursor
 
stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM
mov [def_cursor], eax
 
mov ecx, [SCR_X_SIZE]
mov edx, [SCR_Y_SIZE]
inc ecx
446,7 → 421,6
 
sub edi, ecx
cmp edi, eax
;cmovg edi, eax
jng @F
mov edi, eax
@@:
454,7 → 428,6
 
sub edx, [y]
cmp edx, eax
;cmovg edx, eax
jng @F
mov edx, eax
@@:
559,7 → 532,6
 
sub edi, ecx
cmp edi, eax
; cmovg edi, eax
jng @F
mov edi, eax
@@:
567,7 → 539,6
 
sub edx, [y]
cmp edx, eax
; cmovg edx, eax
jng @F
mov edx, eax
@@: