Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9909 → Rev 9910

/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