/kernel/trunk/bus/pci/pci32.inc |
---|
57,7 → 57,6 |
align 4 |
pci_api: |
;cross |
mov eax, ebx |
mov ebx, ecx |
77,7 → 76,7 |
end if |
call dword [f62call+edx*4] |
mov dword [esp+32], eax |
mov dword [esp + SYSCALL_STACK.eax], eax |
ret |
116,7 → 115,7 |
pci_service_not_supported: |
or eax, -1 |
mov dword [esp+32], eax |
mov dword [esp + SYSCALL_STACK.eax], eax |
ret |
;*************************************************************************** |
157,7 → 156,7 |
pci_read_reg: |
push ebx esi |
cmp [BOOT.pci_data.access_mechanism], 2; what mechanism will we use? |
je pci_read_reg_2 |
je .pci_read_reg_2 |
; mechanism 1 |
mov esi, eax ; save register size into ESI |
176,28 → 175,29 |
or dl, bl ; add to port address first 2 bits of register address |
or esi, esi |
jz pci_read_byte1 |
jz .byte1 |
cmp esi, 1 |
jz pci_read_word1 |
jz .word1 |
cmp esi, 2 |
jz pci_read_dword1 |
jmp pci_fin_read1 |
jz .dword1 |
jmp .fin_read1 |
pci_read_byte1: |
.byte1: |
in al, dx |
jmp pci_fin_read1 |
pci_read_word1: |
jmp .fin_read1 |
.word1: |
in ax, dx |
jmp pci_fin_read1 |
pci_read_dword1: |
jmp .fin_read1 |
.dword1: |
in eax, dx |
pci_fin_read1: |
.fin_read1: |
pop esi ebx |
ret |
pci_read_reg_2: |
.pci_read_reg_2: |
test bh, 128 ;mech#2 only supports 16 devices per bus |
jnz pci_read_reg_err |
jnz .pci_read_reg_err |
mov esi, eax ; save register size into ESI |
and esi, 3 |
217,27 → 217,27 |
mov dx, bx |
or esi, esi |
jz pci_read_byte2 |
jz .byte2 |
cmp esi, 1 |
jz pci_read_word2 |
jz .word2 |
cmp esi, 2 |
jz pci_read_dword2 |
jmp pci_fin_read2 |
jz .dword2 |
jmp .fin_read2 |
pci_read_byte2: |
.byte2: |
in al, dx |
jmp pci_fin_read2 |
pci_read_word2: |
jmp .fin_read2 |
.word2: |
in ax, dx |
jmp pci_fin_read2 |
pci_read_dword2: |
jmp .fin_read2 |
.dword2: |
in eax, dx |
pci_fin_read2: |
.fin_read2: |
pop esi ebx |
ret |
pci_read_reg_err: |
.pci_read_reg_err: |
xor eax, eax |
dec eax |
pop esi ebx |
281,22 → 281,22 |
mov eax, ecx |
or esi, esi |
jz pci_write_byte1 |
jz .byte1 |
cmp esi, 1 |
jz pci_write_word1 |
jz .word1 |
cmp esi, 2 |
jz pci_write_dword1 |
jmp pci_fin_write1 |
jz .dword1 |
jmp .fin_write1 |
pci_write_byte1: |
.byte1: |
out dx, al |
jmp pci_fin_write1 |
pci_write_word1: |
jmp .fin_write1 |
.word1: |
out dx, ax |
jmp pci_fin_write1 |
pci_write_dword1: |
jmp .fin_write1 |
.dword1: |
out dx, eax |
pci_fin_write1: |
.fin_write1: |
xor eax, eax |
pop ebx esi |
305,7 → 305,7 |
pci_write_reg_2: |
test bh, 128 ;mech#2 only supports 16 devices per bus |
jnz pci_write_reg_err |
jnz .pci_write_reg_err |
mov esi, eax ; save register size into ESI |
327,28 → 327,28 |
mov eax, ecx |
or esi, esi |
jz pci_write_byte2 |
jz .byte2 |
cmp esi, 1 |
jz pci_write_word2 |
jz .word2 |
cmp esi, 2 |
jz pci_write_dword2 |
jmp pci_fin_write2 |
jz .dword2 |
jmp .fin_write2 |
pci_write_byte2: |
.byte2: |
out dx, al |
jmp pci_fin_write2 |
pci_write_word2: |
jmp .fin_write2 |
.word2: |
out dx, ax |
jmp pci_fin_write2 |
pci_write_dword2: |
jmp .fin_write2 |
.dword2: |
out dx, eax |
pci_fin_write2: |
.fin_write2: |
xor eax, eax |
pop ebx esi |
ret |
pci_write_reg_err: |
.pci_write_reg_err: |
xor eax, eax |
dec eax |
pop ebx esi |
432,12 → 432,12 |
or eax, eax |
jnz @f |
mov eax, -3 ; empty I/O space |
jmp mmio_ret_fail |
jmp .mmio_ret_fail |
@@: |
test eax, 1 |
jz @f |
mov eax, -4 ; damned ports (not MMIO space) |
jmp mmio_ret_fail |
jmp .mmio_ret_fail |
@@: |
pop ecx ; ecx = block size, bytes (expanded to whole page) |
mov ebx, ecx; user_alloc destroys eax, ecx, edx, but saves ebx |
445,15 → 445,15 |
push eax ; store MMIO physical address + keep 2DWords in the stack |
stdcall user_alloc, ecx |
or eax, eax |
jnz mmio_map_over |
jnz .mmio_map_over |
mov eax, -5 ; problem with page allocation |
mmio_ret_fail: |
.mmio_ret_fail: |
pop ecx |
pop edx |
ret |
mmio_map_over: |
.mmio_map_over: |
mov ecx, ebx; ecx = size (bytes, expanded to whole page) |
shr ecx, 12 ; ecx = number of pages |
mov ebx, eax; ebx = linear address |
596,16 → 596,16 |
.unsupported_func: |
mov ah, 0x81 ; FUNC_NOT_SUPPORTED |
.return: |
mov dword[esp + 4 ], edi |
mov dword[esp + 8], esi |
mov dword[esp + SYSCALL_STACK.edi], edi |
mov dword[esp + SYSCALL_STACK.esi], esi |
.return_abcd: |
mov dword[esp + 24], edx |
mov dword[esp + SYSCALL_STACK.edx], edx |
.return_abc: |
mov dword[esp + 28], ecx |
mov dword[esp + SYSCALL_STACK.ecx], ecx |
.return_ab: |
mov dword[esp + 20], ebx |
mov dword[esp + SYSCALL_STACK.ebx], ebx |
.return_a: |
mov dword[esp + 32], eax |
mov dword[esp + SYSCALL_STACK.eax], eax |
ret |
proc pci_enum |
/kernel/trunk/core/memory.inc |
---|
936,7 → 936,7 |
jb .touch |
popf |
mov [esp+32], ebx ;ebx=0 |
mov [esp + SYSCALL_STACK.eax], ebx ;ebx=0 |
ret |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
946,11 → 946,11 |
jnz @f |
stdcall sys_ipc_send, ecx, edx, esi |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
@@: |
or eax, -1 |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
proc sys_ipc_send stdcall, PID:dword, msg_addr:dword, msg_size:dword |
1079,7 → 1079,7 |
mov eax, [pg_data.pages_count] |
mov [ecx], eax |
shl eax, 12 |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
mov eax, [pg_data.pages_free] |
mov [ecx+4], eax |
mov eax, [pg_data.pages_faults] |
1094,7 → 1094,7 |
mov [ecx+24], eax |
ret |
.fail: |
or dword [esp+32], -1 |
or dword [esp + SYSCALL_STACK.eax], -1 |
ret |
align 4 |
/kernel/trunk/core/sched.inc |
---|
76,6 → 76,7 |
sub eax, [esi - sizeof.APPDATA + APPDATA.counter_add] ; time stamp counter add |
add [esi - sizeof.APPDATA + APPDATA.counter_sum], eax ; counter sum |
ret |
align 4 |
updatecputimes: |
mov ecx, [thread_count] |
/kernel/trunk/core/sys32.inc |
---|
525,18 → 525,18 |
jb .loop2 |
mov ecx, esi ; remove buttons |
bnewba2: |
.bnewba2: |
mov edi, [BTN_ADDR] |
mov eax, edi |
cld |
movzx ebx, word [edi] |
inc bx |
bnewba: |
.bnewba: |
dec bx |
jz bnmba |
jz .bnmba |
add eax, 0x10 |
cmp cx, [eax] |
jnz bnewba |
jnz .bnewba |
pusha |
mov ecx, ebx |
inc ecx |
546,8 → 546,8 |
call memmove |
dec dword [edi] |
popa |
jmp bnewba2 |
bnmba: |
jmp .bnewba2 |
.bnmba: |
pusha ; save window coordinates for window restoring |
cld |
662,13 → 662,13 |
shl edx, BSF sizeof.APPDATA |
mov edx, [SLOT_BASE + edx + APPDATA.tid] |
rmpr0: |
.rmpr0: |
mov esi, [RESERVED_PORTS] |
test esi, esi |
jz rmpr9 |
jz .rmpr9 |
rmpr3: |
.rmpr3: |
mov edi, esi |
shl edi, 4 |
675,14 → 675,14 |
add edi, RESERVED_PORTS |
cmp edx, [edi] |
je rmpr4 |
je .rmpr4 |
dec esi |
jnz rmpr3 |
jnz .rmpr3 |
jmp rmpr9 |
jmp .rmpr9 |
rmpr4: |
.rmpr4: |
mov ecx, 256 |
sub ecx, esi |
695,9 → 695,9 |
dec dword [RESERVED_PORTS] |
jmp rmpr0 |
jmp .rmpr0 |
rmpr9: |
.rmpr9: |
popa |
; clearing APPDATA structure this thread |
/kernel/trunk/gui/background.inc |
---|
20,12 → 20,12 |
align 4 |
sys_background: |
cmp ebx, 1 ; BACKGROUND SIZE |
jnz nosb1 |
jnz .nosb1 |
test ecx, ecx |
jz sbgrr |
jz .sbgrr |
test edx, edx |
jz sbgrr |
jz .sbgrr |
;-------------------------------------- |
align 4 |
@@: |
98,13 → 98,13 |
mov [bgrlock], 0 |
;-------------------------------------- |
align 4 |
sbgrr: |
.sbgrr: |
ret |
;-------------------------------------- |
align 4 |
nosb1: |
.nosb1: |
cmp ebx, 2 ; SET PIXEL |
jnz nosb2 |
jnz .nosb2 |
mov eax, [img_background] |
test ecx, ecx |
115,8 → 115,8 |
align 4 |
@@: |
mov ebx, [mem_BACKGROUND] |
add ebx, 4095 |
and ebx, -4096 |
add ebx, PAGE_SIZE-1 |
and ebx, -PAGE_SIZE |
sub ebx, 4 |
cmp ecx, ebx |
ja .ret |
132,7 → 132,7 |
ret |
;-------------------------------------- |
align 4 |
nosb2: |
.nosb2: |
cmp ebx, 3 ; DRAW BACKGROUND |
jnz nosb3 |
;-------------------------------------- |
206,7 → 206,7 |
cmp [img_background], static_background_data |
jz .nomem |
stdcall user_alloc, [mem_BACKGROUND] |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
test eax, eax |
jz .nomem |
mov ebx, eax |
276,7 → 276,7 |
pop eax |
and dword [page_tabs+(eax-1)*4], not MEM_BLOCK_DONT_FREE |
stdcall user_free, ebx |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
and [bgrlockpid], 0 |
mov [bgrlock], 0 |
ret |
283,7 → 283,7 |
;-------------------------------------- |
align 4 |
.err: |
and dword [esp+32], 0 |
and dword [esp + SYSCALL_STACK.eax], 0 |
ret |
;------------------------------------- |
align 4 |
294,16 → 294,16 |
mov ecx, [current_slot] |
xor eax, eax |
xchg eax, [ecx+APPDATA.draw_bgr_x] |
mov [esp + 32], eax ; eax = [left]*65536 + [right] |
mov [esp + SYSCALL_STACK.eax], eax ; eax = [left]*65536 + [right] |
xor eax, eax |
xchg eax, [ecx+APPDATA.draw_bgr_y] |
mov [esp + 20], eax ; ebx = [top]*65536 + [bottom] |
mov [esp + SYSCALL_STACK.ebx], eax ; ebx = [top]*65536 + [bottom] |
ret |
;--------------------------------------- |
align 4 |
nosb8: |
cmp ebx, 9 |
jnz nosb9 |
jnz .exit |
; ecx = [left]*65536 + [right] |
; edx = [top]*65536 + [bottom] |
mov eax, [_display.width] |
343,10 → 343,6 |
align 4 |
.exit: |
ret |
;-------------------------------------- |
align 4 |
nosb9: |
ret |
;------------------------------------------------------------------------------ |
384,7 → 380,7 |
mov eax, [BgrDataWidth] |
shl eax, 16 |
mov ax, word [BgrDataHeight] |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
;--------------------------------------- |
align 4 |
400,8 → 396,8 |
align 4 |
@@: |
mov ebx, [mem_BACKGROUND] |
add ebx, 4095 |
and ebx, -4096 |
add ebx, PAGE_SIZE-1 |
and ebx, -PAGE_SIZE |
sub ebx, 4 |
cmp ecx, ebx |
ja .ret |
409,7 → 405,7 |
mov eax, [ecx+eax] |
and eax, 0xFFFFFF |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
align 4 |
.ret: |
ret |
456,8 → 452,8 |
; check bounds |
mov ebx, [mem_BACKGROUND] |
add ebx, 4095 |
and ebx, -4096 |
add ebx, PAGE_SIZE-1 |
and ebx, -PAGE_SIZE |
sub ebx, 4 |
add eax, [.subrect_startptr] |
cmp eax, ebx |
495,7 → 491,7 |
jmp .copy_rect |
.end_copy_rect: |
xor eax, eax |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
;-------------------------------------- |
align 4 |
.fail_39_3: |
513,7 → 509,7 |
;-------------------------------------- |
align 4 |
.nogb4: |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
;----------------------------------------------------------------------------- |
/kernel/trunk/gui/event.inc |
---|
480,7 → 480,7 |
cli ; the right to hope to disable interrupts, as when called from shed |
call get_event_for_app |
popfd |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
;----------------------------------------------------------------------------- |
align 4 |
492,7 → 492,7 |
call unprotect_from_terminate |
mov edx, get_event_for_app; wait_test |
call Wait_events_ex ; ebx - timeout |
mov [esp+32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
call protect_from_terminate |
ret |
;----------------------------------------------------------------------------- |
/kernel/trunk/gui/window.inc |
---|
284,10 → 284,10 |
; out: eax = pack[left, right], ebx = pack[top, bottom] |
mov eax, [screen_workarea.left - 2] |
mov ax, word[screen_workarea.right] |
mov [esp + 32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
mov eax, [screen_workarea.top - 2] |
mov ax, word[screen_workarea.bottom] |
mov [esp + 20], eax |
mov [esp + SYSCALL_STACK.ebx], eax |
ret |
.setScreenWorkingArea: |
346,9 → 346,9 |
.getSkinMargins: |
; out: eax = pack[left, right], ebx = pack[top, bottom] |
mov eax, [_skinmargins + 0] |
mov [esp + 32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
mov eax, [_skinmargins + 4] |
mov [esp + 20], eax |
mov [esp + SYSCALL_STACK.ebx], eax |
ret |
.setSkin: |
355,7 → 355,7 |
; in: ecx -> file path string |
mov ebx, ecx |
call read_skin_file |
mov [esp + 32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
test eax, eax |
jnz .ret |
call .calculateScreen |
364,7 → 364,7 |
.getFontSmoothing: |
xor eax, eax |
mov al, [fontSmoothing] |
mov [esp + 32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
.setFontSmoothing: |
374,7 → 374,7 |
.getFontSize: |
xor eax, eax |
mov al, [fontSize] |
mov [esp + 32], eax |
mov [esp + SYSCALL_STACK.eax], eax |
ret |
.setFontSize: |
393,7 → 393,7 |
jz @f |
mov ebx, [esp] |
call read_skin_file |
mov [esp + 32 + 4], eax |
mov [esp + SYSCALL_STACK.eax + 4], eax |
@@: |
call kernel_free |
call .calculateScreen |
505,7 → 505,7 |
align 4 |
set_window_defaults: |
mov byte [window_data + 0x20 + WDATA.cl_titlebar + 3], 1 ; desktop is not movable |
mov byte [window_data + sizeof.WDATA + WDATA.cl_titlebar + 3], 1 ; desktop is not movable |
push eax ecx |
xor eax, eax |
mov ecx, WIN_STACK |
1090,10 → 1090,10 |
movzx edi, word[WIN_POS + eax * 2] |
shl edi, BSF sizeof.WDATA |
; it is a unused slot? |
cmp byte [edi*8 + SLOT_BASE + APPDATA.state], TSTATE_FREE |
cmp byte [SLOT_BASE + edi*8 + APPDATA.state], TSTATE_FREE |
je @f |
; it is a hidden thread? |
lea esi, [edi*8+SLOT_BASE+APPDATA.app_name] |
lea esi, [SLOT_BASE + edi*8 + APPDATA.app_name] |
cmp [esi], byte '@' |
je @f |
; is it already minimized? |
2548,6 → 2548,3 |
add esp, 4 ;dword for 0/1 - set_screen/fl_redraw |
ret |
/kernel/trunk/hid/mousedrv.inc |
---|
61,7 → 61,7 |
xor ecx, ecx |
xor edx, edx |
mres: |
.mres: |
movzx eax, word [X_UNDER] |
movzx ebx, word [Y_UNDER] |
add eax, ecx |
86,11 → 86,13 |
pop ecx |
inc ecx |
cmp ecx, 16 |
jnz mres |
jnz .mres |
xor ecx, ecx |
inc edx |
cmp edx, 24 |
jnz mres |
jnz .mres |
popad |
ret |
186,7 → 188,7 |
mov edx, 0 |
;-------------------------------------- |
align 4 |
drm: |
.drm: |
push eax |
push ebx |
push ecx |
243,11 → 245,13 |
mov eax, [esp+4] ; and x |
inc ecx ; +1 cycle |
cmp ecx, 16 ; if more than 16 |
jnz drm |
jnz .drm |
xor ecx, ecx |
inc edx |
cmp edx, 24 |
jnz drm |
jnz .drm |
add esp, 8 |
popad |
ret |
/kernel/trunk/hid/set_dtc.inc |
---|
17,19 → 17,18 |
; ebx =3 - set alarm-clock ecx - 00SSMMHH |
; out: 0 -Ok 1 -wrong format 2 -battery low |
sys_settime: |
cli |
mov al, 0x0d |
out 0x70, al |
in al, 0x71 |
bt ax, 7 |
jnc bat_low |
jnc .bat_low |
cmp ebx, 2;day of week |
jne nosetweek |
jne .nosetweek |
test ecx, ecx ;test day of week |
je wrongtime |
je .wrongtime |
cmp ecx, 7 |
ja wrongtime |
ja .wrongtime |
mov edx, 0x70 |
call startstopclk |
dec edx |
38,52 → 37,52 |
inc edx |
mov al, cl |
out dx, al |
jmp endsettime |
nosetweek: ;set date |
jmp .endsettime |
.nosetweek: ;set date |
cmp ebx, 1 |
jne nosetdate |
jne .nosetdate |
cmp cl, 0x99;test year |
ja wrongtime |
ja .wrongtime |
shl ecx, 4 |
cmp cl, 0x90 |
ja wrongtime |
ja .wrongtime |
cmp ch, 0x99;test month |
ja wrongtime |
ja .wrongtime |
shr ecx, 4 |
test ch, ch |
je wrongtime |
je .wrongtime |
cmp ch, 0x12 |
ja wrongtime |
ja .wrongtime |
shl ecx, 8 |
bswap ecx ;ebx=00YYMMDD |
test cl, cl ;test day |
je wrongtime |
je .wrongtime |
shl ecx, 4 |
cmp cl, 0x90 |
ja wrongtime |
ja .wrongtime |
shr ecx, 4 |
cmp ch, 2 ;February |
jne testday |
jne .testday |
cmp cl, 0x29 |
ja wrongtime |
jmp setdate |
testday: |
ja .wrongtime |
jmp .setdate |
.testday: |
cmp ch, 8 |
jb testday1;Aug-Dec |
jb .testday1 ;Aug-Dec |
bt cx, 8 |
jnc days31 |
jmp days30 |
testday1: |
jnc .days31 |
jmp .days30 |
.testday1: |
bt cx, 8 ;Jan-Jul ex.Feb |
jnc days30 |
days31: |
jnc .days30 |
.days31: |
cmp cl, 0x31 |
ja wrongtime |
jmp setdate |
days30: |
ja .wrongtime |
jmp .setdate |
.days30: |
cmp cl, 0x30 |
ja wrongtime |
setdate: |
ja .wrongtime |
.setdate: |
mov edx, 0x70 |
call startstopclk |
dec edx |
105,26 → 104,26 |
shr ecx, 8 |
mov al, ch |
out dx, al |
jmp endsettime |
nosetdate: ;set time or alarm-clock |
jmp .endsettime |
.nosetdate: ;set time or alarm-clock |
cmp ebx, 3 |
ja wrongtime |
ja .wrongtime |
cmp cl, 0x23 |
ja wrongtime |
ja .wrongtime |
cmp ch, 0x59 |
ja wrongtime |
ja .wrongtime |
shl ecx, 4 |
cmp cl, 0x90 |
ja wrongtime |
ja .wrongtime |
cmp ch, 0x92 |
ja wrongtime |
ja .wrongtime |
shl ecx, 4 |
bswap ecx ;00HHMMSS |
cmp cl, 0x59 |
ja wrongtime |
ja .wrongtime |
shl ecx, 4 |
cmp cl, 0x90 |
ja wrongtime |
ja .wrongtime |
shr ecx, 4 |
mov edx, 0x70 |
132,7 → 131,7 |
dec edx |
cmp ebx, 3 |
je setalarm |
je .setalarm |
xor eax, eax;al=0-set seconds |
out dx, al |
inc edx |
151,8 → 150,8 |
shr ecx, 8 |
mov al, ch |
out dx, al |
jmp endsettime |
setalarm: |
jmp .endsettime |
.setalarm: |
mov al, 1;set seconds for al. |
out dx, al |
inc edx |
178,19 → 177,19 |
in al, dx |
bts ax, 5;set bit 5 |
out dx, al |
endsettime: |
.endsettime: |
dec edx |
call startstopclk |
sti |
and [esp+36-4], dword 0 |
and [esp + SYSCALL_STACK.eax], dword 0 |
ret |
bat_low: |
.bat_low: |
sti |
mov [esp+36-4], dword 2 |
mov [esp + SYSCALL_STACK.eax], dword 2 |
ret |
wrongtime: |
.wrongtime: |
sti |
mov [esp+36-4], dword 1 |
mov [esp + SYSCALL_STACK.eax], dword 1 |
ret |
startstopclk: |
235,14 → 234,11 |
movzx edx, al |
add ecx, edx |
sti |
mov [esp + 32], ecx |
mov [esp + SYSCALL_STACK.eax], ecx |
ret |
align 4 |
sys_date: |
cli |
@@: |
mov al, 10 |
254,7 → 250,6 |
call delay_ms |
jmp @b |
@@: |
mov ch, 0 |
mov al, 7 ; date |
out 0x70, al |
270,5 → 265,5 |
in al, 0x71 |
mov cl, al |
sti |
mov [esp+32], ecx |
mov [esp + SYSCALL_STACK.eax], ecx |
ret |
/kernel/trunk/kernel.asm |
---|
1363,10 → 1363,17 |
; add check pointers |
test bl, bl |
jz @f |
stdcall is_region_userspace, ecx, 1 |
bt ebx, 30 ; check 30 bit |
jb @f |
stdcall is_region_userspace, ecx, 4 |
jz @f |
ret |
@@: |
jz @f |
stdcall is_region_userspace, ecx, 8 |
jz @f |
ret |
@@: |
test esi, 0x08000000 |
jz @f |
stdcall is_region_userspace, edi, 1 |
1882,16 → 1889,6 |
smn2: |
ret |
detect_devices: |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
;include 'detect/commouse.inc' |
;include 'detect/ps2mouse.inc' |
;include 'detect/dev_fd.inc' |
;include 'detect/dev_hdcd.inc' |
;include 'detect/sear_par.inc' |
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
ret |
sys_end: |
;-------------------------------------- |
cmp [_display.select_cursor], 0 |
2024,27 → 2021,27 |
sysfn_terminate: ; 18.2 = TERMINATE |
push ecx |
cmp ecx, 2 |
jb noprocessterminate |
jb .noprocessterminate |
mov edx, [thread_count] |
cmp ecx, edx |
ja noprocessterminate |
ja .noprocessterminate |
mov eax, [thread_count] |
shl ecx, BSF sizeof.APPDATA |
add ecx, SLOT_BASE |
mov edx, [ecx + APPDATA.tid] |
cmp byte [ecx + APPDATA.state], TSTATE_FREE |
jz noprocessterminate |
jz .noprocessterminate |
push eax |
mov eax, ecx |
call is_kernel_thread |
pop eax |
jz noprocessterminate |
jz .noprocessterminate |
push ecx edx |
mov edx, ecx |
call request_terminate |
pop edx ecx |
test eax, eax |
jz noprocessterminate |
jz .noprocessterminate |
;-------------------------------------- |
; terminate all network sockets it used |
pusha |
2073,10 → 2070,10 |
;call MEM_Heap_UnLock |
cmp edx, [application_table_owner]; clear app table stat |
jne noatsc |
jne .noatsc |
call unlock_application_table |
noatsc: |
noprocessterminate: |
.noatsc: |
.noprocessterminate: |
add esp, 4 |
ret |
;------------------------------------------------------------------------------ |
2496,7 → 2493,7 |
align 4 |
sys_getkey: |
mov [esp + 32], dword 1 |
mov [esp + SYSCALL_STACK.eax], dword 1 |
; test main buffer |
mov ebx, [current_slot_idx] ; TOP OF WINDOW STACK |
movzx ecx, word [WIN_STACK + ebx * 2] |
2688,23 → 2685,23 |
align 4 |
sys_redrawstat: |
cmp ebx, 1 |
jne no_widgets_away |
jne .no_widgets_away |
; buttons away |
mov ecx, [current_slot_idx] |
sys_newba2: |
.sys_newba2: |
mov edi, [BTN_ADDR] |
cmp [edi], dword 0 ; empty button list ? |
je end_of_buttons_away |
je .end_of_buttons_away |
movzx ebx, word [edi] |
inc ebx |
mov eax, edi |
sys_newba: |
.sys_newba: |
dec ebx |
jz end_of_buttons_away |
jz .end_of_buttons_away |
add eax, 0x10 |
cmp cx, [eax] |
jnz sys_newba |
jnz .sys_newba |
push eax ebx ecx |
mov ecx, ebx |
2716,16 → 2713,15 |
dec dword [edi] |
pop ecx ebx eax |
jmp sys_newba2 |
jmp .sys_newba2 |
end_of_buttons_away: |
.end_of_buttons_away: |
ret |
no_widgets_away: |
.no_widgets_away: |
cmp ebx, 2 |
jnz srl1 |
jnz .srl1 |
mov edx, [current_slot_idx] ; return whole screen draw area for this app |
shl edx, 5 ;? |
2739,7 → 2735,7 |
dec eax |
mov [edx + RECT.bottom], eax |
srl1: |
.srl1: |
ret |
;ok - 100% work |
2878,7 → 2874,7 |
align 4 |
checkmisc: |
cmp [ctrl_alt_del], 1 |
jne nocpustart |
jne .nocpustart |
mov ebp, cpustring |
call fs_execute_from_sysdir |
2886,9 → 2882,9 |
mov [ctrl_alt_del], 0 |
;-------------------------------------- |
align 4 |
nocpustart: |
.nocpustart: |
cmp [mouse_active], 1 |
jne mouse_not_active |
jne .mouse_not_active |
mov [mouse_active], 0 |
xor edi, edi |
2942,7 → 2938,7 |
pop eax |
;-------------------------------------- |
align 4 |
mouse_not_active: |
.mouse_not_active: |
cmp [REDRAW_BACKGROUND], 0 ; background update ? |
jz nobackgr |
3425,18 → 3421,18 |
mov edx, [timer_ticks] |
;-------------------------------------- |
align 4 |
newtic: |
.newtic: |
mov ecx, [timer_ticks] |
sub ecx, edx |
cmp ecx, ebx |
jae zerodelay |
jae .zerodelay |
call change_task |
jmp newtic |
jmp .newtic |
;-------------------------------------- |
align 4 |
zerodelay: |
.zerodelay: |
pop edx |
pop ecx |
ret |
3527,46 → 3523,46 |
r_f_port_area: |
test ebx, ebx |
jnz free_port_area |
jnz .free_port_area |
cmp ecx, edx ; beginning > end ? |
ja rpal1 |
ja .rpal1 |
cmp edx, 65536 ;test ebx, not 0xffff |
jae rpal1 |
jae .rpal1 |
mov eax, [RESERVED_PORTS] |
test eax, eax ; no reserved areas ? |
je rpal2 |
je .rpal2 |
cmp eax, 255 ; max reserved |
jae rpal1 |
rpal3: |
jae .rpal1 |
.rpal3: |
mov ebx, eax |
shl ebx, 4 ;16 byte is sizeof item in RESERVED_PORTS table |
add ebx, RESERVED_PORTS |
cmp ecx, [ebx+8] |
ja rpal4 |
ja .rpal4 |
cmp edx, [ebx+4] |
jae rpal1 |
rpal4: |
jae .rpal1 |
.rpal4: |
dec eax |
jnz rpal3 |
jmp rpal2 |
rpal1: |
jnz .rpal3 |
jmp .rpal2 |
.rpal1: |
xor eax, eax |
inc eax |
ret |
rpal2: |
.rpal2: |
; enable port access at port IO map |
pushad ; start enable io map |
mov eax, ecx |
xor ebp, ebp ; enable - eax = port |
cli |
new_port_access: |
.new_port_access: |
call set_io_access_rights |
inc eax |
cmp eax, edx |
jbe new_port_access |
no_unmask_io: |
jbe .new_port_access |
;no_unmask_io: |
sti |
popad ; end enable io map |
3584,31 → 3580,31 |
xor eax, eax |
ret |
free_port_area: |
.free_port_area: |
mov eax, [RESERVED_PORTS]; no reserved areas ? |
test eax, eax |
jz frpal2 |
jz .frpal2 |
mov ebx, [current_slot] |
mov ebx, [ebx + APPDATA.tid] |
frpal3: |
.frpal3: |
mov edi, eax |
shl edi, 4 |
add edi, RESERVED_PORTS |
cmp ebx, [edi] |
jne frpal4 |
jne .frpal4 |
cmp ecx, [edi+4] |
jne frpal4 |
jne .frpal4 |
cmp edx, [edi+8] |
jne frpal4 |
jmp frpal1 |
frpal4: |
jne .frpal4 |
jmp .frpal1 |
.frpal4: |
dec eax |
jnz frpal3 |
frpal2: |
jnz .frpal3 |
.frpal2: |
inc eax |
ret |
frpal1: |
.frpal1: |
push ecx |
mov ecx, 256 |
sub ecx, eax |
3627,21 → 3623,20 |
xor ebp, ebp |
inc ebp |
new_port_access_disable: ; disable - eax = port |
.new_port_access_disable: ; disable - eax = port |
call set_io_access_rights |
inc eax |
cmp eax, edx |
jbe new_port_access_disable |
no_mask_io: ; end disable io map |
jbe .new_port_access_disable |
;no_mask_io: ; end disable io map |
xor eax, eax |
ret |
;----------------------------------------------------------------------------- |
align 4 |
drawbackground: |
dbrv20: |
cmp [BgrDrawMode], dword 1 |
jne bgrstr |
jne .bgrstr |
call vesa20_drawbackground_tiled |
; call [draw_pointer] |
call __sys_draw_pointer |
3648,7 → 3643,7 |
ret |
;-------------------------------------- |
align 4 |
bgrstr: |
.bgrstr: |
call vesa20_drawbackground_stretch |
; call [draw_pointer] |
call __sys_draw_pointer |
3708,12 → 3703,14 |
; edi = pointer to palette |
; ebp = row delta |
; check pointer |
push ecx |
push ecx esi |
mov ax, cx |
shr ecx, 16 |
imul eax, ecx |
; imul eax, esi ; eax*count bit in 1 pixel |
; shr eax, 3 |
stdcall is_region_userspace, ebx, eax |
pop ecx |
pop esi ecx |
jnz sys_putimage.exit |
mov eax, [current_slot] |
4078,10 → 4075,10 |
if used _rdtsc |
_rdtsc: |
bt [cpu_caps], CAPS_TSC |
jnc ret_rdtsc |
jnc .ret_rdtsc |
rdtsc |
ret |
ret_rdtsc: |
.ret_rdtsc: |
mov edx, 0xffffffff |
mov eax, 0xffffffff |
ret |
/kernel/trunk/sound/playnote.inc |
---|
1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2004-2023. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;; PLAYNOTE.INC version 1.1 22 November 2003 ;; |
22,21 → 22,21 |
sound_interface: |
cmp eax, ebx ; this is subfunction #55 ? |
jne retFunc55 ; if no then return. |
jne .ret ; if no then return. |
cmp byte [sound_flag], 0 |
jne retFunc55 |
jne .ret |
movzx eax, byte [countDelayNote] |
or al, al ; player is busy ? |
jnz retFunc55 ; return counter delay Note |
jnz .ret ; return counter delay Note |
mov [memAdrNote], esi;edx |
call get_pid |
mov [pidProcessNote], eax |
xor eax, eax ; Ok! EAX = 0 |
retFunc55: |
mov [esp+32], eax ; return value EAX for application |
.ret: |
mov [esp + SYSCALL_STACK.eax], eax ; return value EAX for application |
ret |
iglobal |
55,17 → 55,17 |
; jmp NotPlayNotes |
mov esi, [memAdrNote] |
or esi, esi ; ESI = 0 ? - OFF Notes Play ? |
jz NotPlayNotes ; if ESI = 0 -> ignore play pocedure |
jz .NotPlayNotes ; if ESI = 0 -> ignore play pocedure |
cmp eax, [count_timer_Note] |
jb NotPlayNotes |
jb .NotPlayNotes |
push eax |
inc eax |
mov [count_timer_Note], eax |
mov al, [countDelayNote] |
dec al ; decrement counter Delay for Playing Note |
jz NewLoadNote@Delay |
jz .NewLoadNote@Delay |
cmp al, 0xFF ; this is first Note Play ? |
jne NextDelayNote |
jne .NextDelayNote |
;This is FIRST Note, save counter channel 2 chip 8253 |
mov al, 0xB6 ; control byte to timer chip 8253 |
out 0x43, al ; Send it to the control port chip 8253 |
73,14 → 73,14 |
mov ah, al ; AH = Lower byte counter channel 2 |
in al, 0x42 ; Read Upper byte counter channel 2 chip 8253 |
mov [mem8253r42], ax ; Save counter channel 2 timer chip 8253 |
NewLoadNote@Delay: |
.NewLoadNote@Delay: |
cld |
; lodsb ; load AL - counter Delay |
call ReadNoteByte |
or al, al ; THE END ? |
jz EndPlayNote |
jz .EndPlayNote |
cmp al, 0x81 |
jnc NoteforOctave |
jnc .NoteforOctave |
mov [countDelayNote], al |
; lodsw ; load AX - counter for Note! |
call ReadNoteByte |
87,9 → 87,9 |
mov ah, al |
call ReadNoteByte |
xchg al, ah |
jmp pokeNote |
jmp .pokeNote |
EndPlayNote: ; THE END Play Notes! |
.EndPlayNote: ; THE END Play Notes! |
in al, 0x61 ; Get contents of system port B chip 8255 |
and al, 0xFC ; Turn OFF timer and speaker |
out 0x61, al ; Send out new values to port B chip 8255 |
100,25 → 100,25 |
out 0x42, al ; restore Upper byte channel 2 |
xor eax, eax ; EAX = 0 |
mov [memAdrNote], eax; clear header control Delay-Note string |
NextDelayNote: |
.NextDelayNote: |
mov [countDelayNote], al; save new counter delay Note |
pop eax |
NotPlayNotes: |
RET |
.NotPlayNotes: |
ret |
NoteforOctave: |
.NoteforOctave: |
sub al, 0x81 ; correction value for delay Note |
mov [countDelayNote], al; save counter delay this new Note |
; lodsb ; load pack control code |
call ReadNoteByte |
cmp al, 0xFF ; this is PAUSE ? |
jne packCode ; no, this is PACK CODE |
jne .packCode ; no, this is PACK CODE |
in al, 0x61 ; Get contents of system port B chip 8255 |
and al, 0xFC ; Turn OFF timer and speaker |
out 0x61, al ; Send out new values to port B chip 8255 |
jmp saveESI |
jmp .saveESI |
packCode: |
.packCode: |
mov cl, al ; save code |
and al, 0xF ; clear upper bits |
dec al ; correction |
128,7 → 128,7 |
mov ax, [eax] ; read constant |
shr cl, 4 ; transform for number Octave |
shr ax, cl ; calculate from Note this Octave! |
pokeNote: |
.pokeNote: |
out 0x42, al ; Lower byte Out to channel 2 timer chip 8253 |
mov al, ah |
out 0x42, al ; Upper byte Out to channel 2 timer chip 8253 |
135,10 → 135,11 |
in al, 0x61 ; Get contents of system port B chip 8255 |
or al, 3 ; Turn ON timer and speaker |
out 0x61, al ; Send out new values to port B chip 8255 |
saveESI: |
.saveESI: |
; mov [memAdrNote], esi ; save new header control Delay-Note string |
pop eax |
RET |
ret |
ReadNoteByte: |
;result: |
; al - note |