/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 |
@@: |