Sync net branch with trunk

git-svn-id: svn://kolibrios.org@2540 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr
2012-04-02 15:18:46 +00:00
parent f28853c51d
commit dd88d5bff6
93 changed files with 5279 additions and 2893 deletions

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2011-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2011-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; RAMDISK functions ;; ;; RAMDISK functions ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
@@ -274,7 +274,7 @@ sayerr:
push 0 push 0
pop es pop es
and word [es:0x9031], 0 and word [es:BOOT_IDE_BASE_ADDR], 0
; \begin{Mario79} ; \begin{Mario79}
; find HDD IDE DMA PCI device ; find HDD IDE DMA PCI device
; check for PCI BIOS ; check for PCI BIOS
@@ -311,7 +311,7 @@ sayerr:
int 0x1A int 0x1A
jc .nopci jc .nopci
and cx, 0xFFF0 ; clear address decode type and cx, 0xFFF0 ; clear address decode type
mov [es:0x9031], cx mov [es:BOOT_IDE_BASE_ADDR], cx
.nopci: .nopci:
; \end{Mario79} ; \end{Mario79}
@@ -343,15 +343,15 @@ wait_loop: ; variant 2
loopnz @b loopnz @b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; --------------- APM --------------------- ; --------------- APM ---------------------
and word [es:0x9044], 0 ; ver = 0.0 (APM not found) and word [es:BOOT_APM_VERSION], 0 ; ver = 0.0 (APM not found)
mov ax, 0x5300 mov ax, 0x5300
xor bx, bx xor bx, bx
int 0x15 int 0x15
jc apm_end ; APM not found jc apm_end ; APM not found
test cx, 2 test cx, 2
jz apm_end ; APM 32-bit protected-mode interface not supported jz apm_end ; APM 32-bit protected-mode interface not supported
mov [es:0x9044], ax ; Save APM Version mov [es:BOOT_APM_VERSION], ax ; Save APM Version
mov [es:0x9046], cx ; Save APM flags mov [es:BOOT_APM_FLAGS], cx ; Save APM flags
; Write APM ver ---- ; Write APM ver ----
and ax, 0xf0f and ax, 0xf0f
@@ -370,10 +370,10 @@ wait_loop: ; variant 2
xor bx, bx xor bx, bx
int 0x15 int 0x15
mov [es:0x9040], ebx mov [es:BOOT_APM_ENTRY], ebx
mov [es:0x9050], ax mov [es:BOOT_APM_CODE_32], ax
mov [es:0x9052], cx mov [es:BOOT_APM_CODE_16], cx
mov [es:0x9054], dx mov [es:BOOT_APM_DATA_16], dx
apm_end: apm_end:
_setcursor d80x25_top_num, 0 _setcursor d80x25_top_num, 0
@@ -1151,7 +1151,7 @@ no_sys_on_floppy:
xor ax, ax xor ax, ax
mov es, ax mov es, ax
mov ax, [es:0x9008] ; vga & 320x200 mov ax, [es:BOOT_VESA_MODE] ; vga & 320x200
mov bx, ax mov bx, ax
cmp ax, 0x13 cmp ax, 0x13
je setgr je setgr

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -241,7 +241,8 @@ calc_vmodes_table:
mov [es:bx+4],ax ; +4[2] : attributes mov [es:bx+4],ax ; +4[2] : attributes
cmp [s_vesa.ver], '2' cmp [s_vesa.ver], '2'
jb .lp1 ; jb .lp1
jb @f ; We do not use Vesa 1.2 mode is now
or cx, 0x4000 ; use LFB or cx, 0x4000 ; use LFB
.lp1: mov [es:bx+6],cx ; +6 : mode number .lp1: mov [es:bx+6],cx ; +6 : mode number
@@ -681,9 +682,9 @@ set_vmode:
mov bx, word [es:si+2] ; resolution Y mov bx, word [es:si+2] ; resolution Y
mov word [es:0x900A],ax ; resolution X mov word [es:BOOT_X_RES], ax ; resolution X
mov word [es:0x900C],bx ; resolution Y mov word [es:BOOT_Y_RES], bx ; resolution Y
mov word [es:0x9008],cx ; number of mode mov word [es:BOOT_VESA_MODE], cx ; number of mode
cmp cx, 0x12 cmp cx, 0x12
je .mode0x12_0x13 je .mode0x12_0x13
@@ -691,8 +692,8 @@ set_vmode:
je .mode0x12_0x13 je .mode0x12_0x13
cmp byte [s_vesa.ver],'2' ; cmp byte [s_vesa.ver], '2'
jb .vesa12 ; jb .vesa12
; VESA 2 and Vesa 3 ; VESA 2 and Vesa 3
@@ -702,11 +703,11 @@ set_vmode:
int 0x10 int 0x10
; LFB ; LFB
mov eax, [es:mi.PhysBasePtr];di+0x28] mov eax, [es:mi.PhysBasePtr];di+0x28]
mov [es:0x9018],eax mov [es:BOOT_LFB], eax
; ---- vbe voodoo ; ---- vbe voodoo
BytesPerLine equ 0x10 BytesPerLine equ 0x10
mov ax, [es:di+BytesPerLine] mov ax, [es:di+BytesPerLine]
mov [es:0x9001], ax mov [es:BOOT_PITCH], ax
; BPP ; BPP
cmp [es:mi.BitsPerPixel], 16 cmp [es:mi.BitsPerPixel], 16
jne .l0 jne .l0
@@ -715,40 +716,34 @@ set_vmode:
mov [es:mi.BitsPerPixel], 15 mov [es:mi.BitsPerPixel], 15
.l0: .l0:
mov al, byte [es:di+0x19] mov al, byte [es:di+0x19]
mov [es:0x9000], al mov [es:BOOT_BPP], al
jmp .exit jmp .exit
.mode0x12_0x13: .mode0x12_0x13:
mov byte [es:0x9000], 32 mov byte [es:BOOT_BPP], 32
or dword [es:0x9018], 0xFFFFFFFF; 0x800000 or dword [es:BOOT_LFB], 0xFFFFFFFF; 0x800000
; VESA 1.2 PM BANK SWITCH ADDRESS ; VESA 1.2 PM BANK SWITCH ADDRESS
.vesa12: ;.vesa12:
; mov ax, 0x4f0A
; xor bx, bx
mov ax,0x4f0A ; int 0x10
xor bx,bx ; xor eax, eax
int 0x10 ; xor ebx, ebx
xor eax,eax ; mov ax, es
xor ebx,ebx ; shl eax, 4
mov ax,es ; mov bx, di
shl eax,4 ; add eax, ebx
mov bx,di ; movzx ebx, word[es:di]
add eax,ebx ; add eax, ebx
movzx ebx,word[es:di] ; push 0x0000
add eax,ebx ; pop es
push 0x0000 ; mov [es:0x9014], eax
pop es
mov [es:0x9014],eax
.exit: .exit:
ret ret
; mov dword[es:0x9018],0x000A0000
; ret
;============================================================================= ;=============================================================================
;============================================================================= ;=============================================================================
;============================================================================= ;=============================================================================

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; Shutdown for Menuet ;; ;; Shutdown for Menuet ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) 2010 KolibriOS team. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2010-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; ;; ;; ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; PCI16.INC ;; ;; PCI16.INC ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; ;; ;; ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -210,7 +210,7 @@ BANK_SWITCH equ (OS_BASE+0x000E030)
;unused ? store mousepointer ;unused ? store mousepointer
MOUSE_PICTURE equ (OS_BASE+0x000F200) MOUSE_PICTURE equ (OS_BASE+0x000F200)
MOUSE_VISIBLE equ (OS_BASE+0x000F204) ;MOUSE_VISIBLE equ (OS_BASE+0x000F204)
WIN_TEMP_XY equ (OS_BASE+0x000F300) WIN_TEMP_XY equ (OS_BASE+0x000F300)
KEY_COUNT equ (OS_BASE+0x000F400) KEY_COUNT equ (OS_BASE+0x000F400)
KEY_BUFF equ (OS_BASE+0x000F401) KEY_BUFF equ (OS_BASE+0x000F401)
@@ -255,7 +255,7 @@ SYS_SHUTDOWN equ (OS_BASE+0x000FF00)
TASK_ACTIVATE equ (OS_BASE+0x000FF01) TASK_ACTIVATE equ (OS_BASE+0x000FF01)
REDRAW_BACKGROUND equ (OS_BASE+0x000FFF0) REDRAW_BACKGROUND equ (OS_BASE+0x000FFF0)
BACKGROUND_CHANGED equ (OS_BASE+0x000FFF1)
BANK_RW equ (OS_BASE+0x000FFF2) BANK_RW equ (OS_BASE+0x000FFF2)
MOUSE_BACKGROUND equ (OS_BASE+0x000FFF4) MOUSE_BACKGROUND equ (OS_BASE+0x000FFF4)
DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5) DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5)
@@ -289,7 +289,11 @@ BgrAuxTable equ (OS_BASE+0x0298000)
SB16Buffer equ (OS_BASE+0x02A0000) SB16Buffer equ (OS_BASE+0x02A0000)
SB16_Status equ (OS_BASE+0x02B0000) SB16_Status equ (OS_BASE+0x02B0000)
BUTTON_INFO equ (OS_BASE+0x02C0000) BUTTON_INFO equ (OS_BASE+0x02B3FEE)
BPSLine_calc_area equ (OS_BASE+0x02C4000)
d_width_calc_area equ (OS_BASE+0x02CA000)
RESERVED_PORTS equ (OS_BASE+0x02D0000) RESERVED_PORTS equ (OS_BASE+0x02D0000)
BOOT_VAR equ (OS_BASE+0x02E0000) BOOT_VAR equ (OS_BASE+0x02E0000)
@@ -362,22 +366,30 @@ PG_SHARED equ 0x200
;;;;;;;;;;;boot time variables ;;;;;;;;;;;boot time variables
;BOOT_BPP equ 0x9000 ;byte bits per pixel BOOT_BPP equ 0x9000 ;byte bits per pixel
BOOT_SCANLINE equ 0x9001 ;word scanline length BOOT_PITCH equ 0x9001 ;word scanline length
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode BOOT_VESA_MODE equ 0x9008 ;word vesa video mode
;;BOOT_X_RES equ 0x900A ;word X res BOOT_X_RES equ 0x900A ;word X res
;;BOOT_Y_RES equ 0x900C ;word Y res BOOT_Y_RES equ 0x900C ;word Y res
;;BOOT_MOUSE_PORT equ 0x9010 ;byte mouse port - not used ;;BOOT_MOUSE_PORT equ 0x9010 ;byte mouse port - not used
BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address
BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration
BOOT_LOG equ 0x901D ;byte not used anymore (0 or 1 : enable system log display) BOOT_LOG equ 0x901D ;byte not used anymore (0 or 1 : enable system log display)
BOOT_DIRECT_LFB equ 0x901E ;byte 0 or 1 : enable direct lfb write, paging disabled ;BOOT_DIRECT_LFB equ 0x901E ;byte 0 or 1 : enable direct lfb write, paging disabled
BOOT_DMA equ 0x901F ;
BOOT_PCI_DATA equ 0x9020 ;8bytes pci data BOOT_PCI_DATA equ 0x9020 ;8bytes pci data
BOOT_VRR equ 0x9030 ;byte VRR start enabled 1, 2-no BOOT_VRR equ 0x9030 ;byte VRR start enabled 1, 2-no
BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr
BOOT_MEM_AMOUNT equ 0x9034 ;dword memory amount BOOT_MEM_AMOUNT equ 0x9034 ;dword memory amount
BOOT_APM_ENTRY equ 0x9040
BOOT_APM_VERSION equ 0x9044
BOOT_APM_FLAGS equ 0x9046 ;unused
BOOT_APM_CODE_32 equ 0x9050
BOOT_APM_CODE_16 equ 0x9052
BOOT_APM_DATA_16 equ 0x9054
TMP_FILE_NAME equ 0 TMP_FILE_NAME equ 0
TMP_CMD_LINE equ 1024 TMP_CMD_LINE equ 1024
TMP_ICON_OFFS equ 1280 TMP_ICON_OFFS equ 1280
@@ -513,6 +525,9 @@ struct display_t
move_cursor dd ? move_cursor dd ?
restore_cursor dd ? restore_cursor dd ?
disable_mouse dd ? disable_mouse dd ?
mask_seqno dd ?
check_mouse dd ?
check_m_pixel dd ?
ends ends
struct BOOT_DATA struct BOOT_DATA

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -61,7 +61,7 @@ APIC_init:
call IRQ_mask_all call IRQ_mask_all
; IOAPIC init ; IOAPIC init
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW+PG_NOCACHE
mov [IOAPIC_base], eax mov [IOAPIC_base], eax
mov eax, IOAPIC_VER mov eax, IOAPIC_VER
@@ -121,14 +121,11 @@ APIC_init:
;=========================================================== ;===========================================================
align 4 align 4
LAPIC_init: LAPIC_init:
; Check MSR support
;....
; Get LAPIC base address
; mov ecx, 0x1b
; rdmsr ; it may be replaced to
; and ax, 0xf000 ; mov eax, 0xfee00000
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW cmp [LAPIC_BASE], 0
jne .done
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE
mov [LAPIC_BASE], eax mov [LAPIC_BASE], eax
mov esi, eax mov esi, eax
@@ -200,6 +197,8 @@ LAPIC_init:
; Start (every 0.01 sec) ; Start (every 0.01 sec)
mov dword[esi + APIC_LVT_timer], 0x30020; periodic int 0x20 mov dword[esi + APIC_LVT_timer], 0x30020; periodic int 0x20
mov dword[esi + APIC_timer_init], eax mov dword[esi + APIC_timer_init], eax
.done:
ret ret
;=========================================================== ;===========================================================

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -437,10 +437,19 @@ proc load_file stdcall, file_name:dword
jz .cleanup jz .cleanup
mov [file2], eax mov [file2], eax
pushfd
cli pushad
mov ecx, unpack_mutex
call mutex_lock
popad
stdcall unpack, [file], eax stdcall unpack, [file], eax
popfd
pushad
mov ecx, unpack_mutex
call mutex_unlock
popad
stdcall kernel_free, [file] stdcall kernel_free, [file]
mov eax, [file2] mov eax, [file2]
mov ebx, [file_size] mov ebx, [file_size]
@@ -470,6 +479,11 @@ proc load_file stdcall, file_name:dword
ret ret
endp endp
uglobal
align 4
unpack_mutex MUTEX
endg
align 4 align 4
proc get_proc_ex stdcall, proc_name:dword, imports:dword proc get_proc_ex stdcall, proc_name:dword, imports:dword
@@ -802,7 +816,7 @@ proc load_driver stdcall, driver_name:dword
jnz @f jnz @f
cmp word [file_name+21], 'j' cmp word [file_name+21], 'j'
jnz @f jnz @f
mov esi, aSis mov esi, aHDA
jmp .redo jmp .redo
@@: @@:
xor eax, eax xor eax, eax

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -578,7 +578,7 @@ restore block_flags
;;;;;;;;;;;;;; USER ;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; USER ;;;;;;;;;;;;;;;;;
HEAP_TOP equ 0x5FC00000 HEAP_TOP equ 0x80000000
align 4 align 4
proc init_heap proc init_heap
@@ -848,6 +848,71 @@ proc user_free stdcall, base:dword
ret ret
endp endp
align 4
proc user_unmap stdcall, base:dword, offset:dword, size:dword
push ebx
mov ebx, [base] ; must be valid pointer
test ebx, ebx
jz .error
mov edx, [offset] ; check offset
add edx, ebx ; must be below 2Gb app limit
js .error
shr ebx, 12 ; chek block attributes
lea ebx, [page_tabs+ebx*4]
mov eax, [ebx-4] ; block attributes
test al, USED_BLOCK
jz .error
test al, DONT_FREE_BLOCK
jnz .error
shr edx, 12
lea edx, [page_tabs+edx*4] ; unmap offset
mov ecx, [size]
add ecx, 4095
shr ecx, 12 ; unmap size in pages
shr eax, 12 ; block size + 1 page
lea ebx, [ebx+eax*4-4] ; block end ptr
lea eax, [edx+ecx*4] ; unmap end ptr
cmp eax, ebx ; check for overflow
ja .error
mov ebx, [offset]
and ebx, not 4095 ; is it required ?
.unmap:
mov eax, [edx] ; get page addres
test al, 1 ; page mapped ?
jz @F
test eax, PG_SHARED ; page shared ?
jnz @F
mov [page_tabs+edx*4], dword 2
; mark page as reserved
invlpg [ebx] ; when we start using
call free_page ; empty c-o-w page instead this ?
@@:
add ebx, 4096
add edx, 4
dec ecx
jnz .unmap
pop ebx
or al, 1 ; return non zero on success
ret
.error:
pop ebx
xor eax, eax ; something wrong
ret
endp
align 4
user_normalize: user_normalize:
; in: esi=heap_base, edi=heap_top ; in: esi=heap_base, edi=heap_top
; out: eax=0 <=> OK ; out: eax=0 <=> OK

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -166,6 +166,7 @@ proc free_page
ret ret
endp endp
align 4
proc map_io_mem stdcall, base:dword, size:dword, flags:dword proc map_io_mem stdcall, base:dword, size:dword, flags:dword
push ebx push ebx
@@ -357,8 +358,10 @@ proc init_LFB
cmp dword [LFBAddress], -1 cmp dword [LFBAddress], -1
jne @f jne @f
mov [BOOT_VAR+0x901c], byte 2 mov [BOOT_VAR+BOOT_MTRR], byte 2
stdcall alloc_pages, (0x280000 / 4096) ; max VGA=640*480*4=1228800 bytes
; + 32*640*4=81920 bytes for mouse pointer
stdcall alloc_pages, ((1228800+81920)/4096)
push eax push eax
call alloc_page call alloc_page
@@ -366,14 +369,16 @@ proc init_LFB
pop eax pop eax
or eax, PG_UW or eax, PG_UW
mov ebx, LFB_BASE mov ebx, LFB_BASE
mov ecx, 0x280000 / 4096 ; max VGA=640*480*4=1228800 bytes
; + 32*640*4=81920 bytes for mouse pointer
mov ecx, (1228800+81920)/4096
call commit_pages call commit_pages
mov [LFBAddress], dword LFB_BASE mov [LFBAddress], dword LFB_BASE
ret ret
@@: @@:
test [SCR_MODE], word 0100000000000000b test [SCR_MODE], word 0100000000000000b
jnz @f jnz @f
mov [BOOT_VAR+0x901c], byte 2 mov [BOOT_VAR+BOOT_MTRR], byte 2
ret ret
@@: @@:
call init_mtrr call init_mtrr
@@ -1303,6 +1308,11 @@ f68:
@@: @@:
ret ret
.26:
stdcall user_unmap, ecx, edx, esi
mov [esp+32], eax
ret
.fail: .fail:
xor eax, eax xor eax, eax
mov [esp+32], eax mov [esp+32], eax
@@ -1325,8 +1335,9 @@ f68call: ; keep this table closer to main code
dd f68.21 ; load_driver dd f68.21 ; load_driver
dd f68.22 ; shmem_open dd f68.22 ; shmem_open
dd f68.23 ; shmem_close dd f68.23 ; shmem_close
dd f68.24 dd f68.24 ; set exception handler
dd f68.25 dd f68.25 ; unmask exception
dd f68.26 ; user_unmap
align 4 align 4
@@ -1353,7 +1364,7 @@ endp
align 4 align 4
proc init_mtrr proc init_mtrr
cmp [BOOT_VAR+0x901c], byte 2 cmp [BOOT_VAR+BOOT_MTRR], byte 2
je .exit je .exit
bt [cpu_caps], CAPS_MTRR bt [cpu_caps], CAPS_MTRR
@@ -1543,3 +1554,27 @@ proc create_ring_buffer stdcall, size:dword, flags:dword
.fail: .fail:
ret ret
endp endp
align 4
proc print_mem
mov edi, BOOT_VAR + 0x9104
mov ecx, [edi-4]
test ecx, ecx
jz .done
@@:
mov eax, [edi]
mov edx, [edi+4]
add eax, [edi+8]
adc edx, [edi+12]
DEBUGF 1, "K : E820 %x%x - %x%x type %d\n", \
[edi+4], [edi],\
edx, eax, [edi+16]
add edi, 20
dec ecx
jnz @b
.done:
ret
endp

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; Author: Kees J. Bot 1 Jan 1994 ;; ;; Author: Kees J. Bot 1 Jan 1994 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; Synhronization for MenuetOS. ;; ;; Synhronization for MenuetOS. ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; ;; ;; ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -145,7 +145,7 @@ iglobal
dd sys_settime ; 22-setting date,time,clock and alarm-clock dd sys_settime ; 22-setting date,time,clock and alarm-clock
dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent
dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist
dd undefined_syscall ; 25-reserved dd syscall_putarea_backgr ; 25-Put Area to background
dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
dd undefined_syscall ; 27-reserved dd undefined_syscall ; 27-reserved
dd undefined_syscall ; 28-reserved dd undefined_syscall ; 28-reserved
@@ -154,7 +154,7 @@ iglobal
dd undefined_syscall ; 31-reserved dd undefined_syscall ; 31-reserved
dd undefined_syscall ; 32-reserved dd undefined_syscall ; 32-reserved
dd undefined_syscall ; 33-reserved dd undefined_syscall ; 33-reserved
dd undefined_syscall ; 34-reserved dd syscall_getpixel_WinMap ; 34-GetPixel WinMap
dd syscall_getpixel ; 35-GetPixel dd syscall_getpixel ; 35-GetPixel
dd syscall_getarea ; 36-GetArea dd syscall_getarea ; 36-GetArea
dd readmousepos ; 37-GetMousePosition_ScreenRelative,. dd readmousepos ; 37-GetMousePosition_ScreenRelative,.

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -72,6 +72,7 @@ proc fs_execute
slot_base dd ? slot_base dd ?
file_base dd ? file_base dd ?
file_size dd ? file_size dd ?
handle dd ? ;temp. for default cursor handle for curr. thread
;app header data ;app header data
hdr_cmdline dd ? ;0x00 hdr_cmdline dd ? ;0x00
hdr_path dd ? ;0x04 hdr_path dd ? ;0x04
@@ -83,6 +84,13 @@ proc fs_execute
pushad pushad
pushad
stdcall set_cursor, [def_cursor_clock]
mov [handle], eax
mov [redrawmouse_unconditional], 1
call __sys_draw_pointer
popad
mov [flags], edx mov [flags], edx
; [ebp] pointer to filename ; [ebp] pointer to filename
@@ -113,7 +121,8 @@ proc fs_execute
.bigfilename: .bigfilename:
popad popad
mov eax, -ERROR_FILE_NOT_FOUND mov eax, -ERROR_FILE_NOT_FOUND
ret
jmp .final
.namecopied: .namecopied:
@@ -127,6 +136,7 @@ proc fs_execute
@@: @@:
lea eax, [filename] lea eax, [filename]
stdcall load_file, eax stdcall load_file, eax
mov esi, -ERROR_FILE_NOT_FOUND mov esi, -ERROR_FILE_NOT_FOUND
test eax, eax test eax, eax
jz .err_file jz .err_file
@@ -237,7 +247,9 @@ end if
xor ebx, ebx xor ebx, ebx
mov [application_table_status], ebx;unlock application_table_status mutex mov [application_table_status], ebx;unlock application_table_status mutex
mov eax, [process_number];set result mov eax, [process_number];set result
ret
jmp .final
.failed: .failed:
mov eax, [save_cr3] mov eax, [save_cr3]
call set_cr3 call set_cr3
@@ -248,6 +260,12 @@ end if
xor eax, eax xor eax, eax
mov [application_table_status], eax mov [application_table_status], eax
mov eax, esi mov eax, esi
.final:
pushad
stdcall set_cursor, [handle]
mov [redrawmouse_unconditional], 1
call __sys_draw_pointer
popad
ret ret
endp endp

View File

@@ -1,3 +1,10 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2009-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Tests of malloc()/free() from the kernel heap. ; Tests of malloc()/free() from the kernel heap.
; This file is not included in the kernel, it is just test application. ; This file is not included in the kernel, it is just test application.
use32 use32

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2007-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2007-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -107,7 +107,7 @@ msg_module db 'in module ',0
msg_version db 'incompatible driver version',13,10,0 msg_version db 'incompatible driver version',13,10,0
msg_www db 'please visit www.kolibrios.org',13,10,0 msg_www db 'please visit www.kolibrios.org',13,10,0
msg_CR db 13,10,0 msg_CR db 13,10,0
aSis db 'SIS',0 aHDA db 'INTEL_HDA',0
intel_str db "GenuineIntel",0 intel_str db "GenuineIntel",0
AMD_str db "AuthenticAMD",0 AMD_str db "AuthenticAMD",0
@@ -156,23 +156,25 @@ dll_list:
.bk dd dll_list .bk dd dll_list
.fd dd dll_list .fd dd dll_list
MAX_DEFAULT_DLL_ADDR = 0x20000000 MAX_DEFAULT_DLL_ADDR = 0x80000000
MIN_DEFAULT_DLL_ADDR = 0x10000000 MIN_DEFAULT_DLL_ADDR = 0x70000000
dll_cur_addr dd MIN_DEFAULT_DLL_ADDR dll_cur_addr dd MIN_DEFAULT_DLL_ADDR
; supported videomodes ; supported videomodes
; mike.dld { ; mike.dld {
db 0 ;db 0
dd servetable-0x10000 ;dd servetable-0x10000
draw_line dd __sys_draw_line ;align 4
draw_pointer dd __sys_draw_pointer ;draw_line dd __sys_draw_line
;draw_pointer dd __sys_draw_pointer
;//mike.dld, 2006-08-02 [ ;//mike.dld, 2006-08-02 [
;drawbar dd __sys_drawbar ;;drawbar dd __sys_drawbar
drawbar dd __sys_drawbar.forced ;;drawbar dd __sys_drawbar.forced
;drawbar dd vesa20_drawbar
;//mike.dld, 2006-08-02 ] ;//mike.dld, 2006-08-02 ]
putpixel dd __sys_putpixel ;putpixel dd __sys_putpixel
; } mike.dld ; } mike.dld
@@ -292,7 +294,8 @@ endofcode:
gdte: gdte:
align 16 align 16
cur_saved_data rb 4096 cur_saved_data:
rb 4096
fpu_data: fpu_data:
rb 512 rb 512
@@ -330,6 +333,7 @@ _WinMapAddress rd 1
_WinMapSize rd 1 _WinMapSize rd 1
def_cursor rd 1 def_cursor rd 1
def_cursor_clock rd 1
current_cursor rd 1 current_cursor rd 1
hw_cursor rd 1 hw_cursor rd 1
cur_saved_base rd 1 cur_saved_base rd 1
@@ -393,13 +397,10 @@ windowtypechanged rd 1
hd_entries rd 1 ;unused ? 0xfe10 hd_entries rd 1 ;unused ? 0xfe10
;* start code - Mario79
mouse_active rd 1 mouse_active rd 1
mouse_pause rd 1 mouse_pause rd 1
MouseTickCounter rd 1
;* end code - Mario79 redrawmouse_unconditional rd 1
img_background rd 1 img_background rd 1
mem_BACKGROUND rd 1 mem_BACKGROUND rd 1

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2008-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2009-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -23,8 +23,8 @@
cmp eax, 0x534D4150 cmp eax, 0x534D4150
jnz no_E820 jnz no_E820
e820_mem_loop: e820_mem_loop:
cmp byte [di+16], 1 ; ignore non-free areas ; cmp byte [di+16], 1 ; ignore non-free areas
jnz e820_mem_next ; jnz e820_mem_next
inc byte [0x9100] inc byte [0x9100]
add di, 20 add di, 20
e820_mem_next: e820_mem_next:

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -16,10 +16,6 @@ API_VERSION equ 0 ;debug
include 'proc32.inc' include 'proc32.inc'
include 'imports.inc' include 'imports.inc'
OS_BASE equ 0;
new_app_base equ 0x60400000
PROC_BASE equ OS_BASE+0x0080000
struc IOCTL struc IOCTL
{ .handle dd ? { .handle dd ?
.io_code dd ? .io_code dd ?

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; 02.02.2010 turbanoff - support 70.5 ;; ;; 02.02.2010 turbanoff - support 70.5 ;;
;; 23.01.2010 turbanoff - support 70.0 70.1 ;; ;; 23.01.2010 turbanoff - support 70.0 70.1 ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; FAT12.INC ;; ;; FAT12.INC ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; FAT32.INC ;; ;; FAT32.INC ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; ;; ;; ;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
@@ -133,7 +133,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
call button._.button_dececx call button._.button_dececx
push edi push edi
xor edi, edi xor edi, edi
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop edi pop edi
add ebx, 0x00010001 add ebx, 0x00010001
dec edx dec edx
@@ -164,7 +165,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
xor edi, edi xor edi, edi
mov ecx, esi mov ecx, esi
call button._.incecx call button._.incecx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; bottom border ; bottom border
movzx edx, word[esp + 4 + 0] movzx edx, word[esp + 4 + 0]
@@ -173,7 +175,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
add ebx, edx add ebx, edx
mov ecx, esi mov ecx, esi
call button._.dececx call button._.dececx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; left border ; left border
pop ebx pop ebx
@@ -188,7 +191,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
pop edx pop edx
mov ecx, esi mov ecx, esi
call button._.incecx call button._.incecx
call [draw_line] ; call [draw_line]
call __sys_draw_line
; right border ; right border
mov dx, [esp + 4] mov dx, [esp + 4]
@@ -198,7 +202,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
add ebx, 0x00010000 add ebx, 0x00010000
mov ecx, esi mov ecx, esi
call button._.dececx call button._.dececx
call [draw_line] ; call [draw_line]
call __sys_draw_line
pop ecx ebx pop ecx ebx

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -23,6 +23,7 @@ endg
EV_SPACE = 512 EV_SPACE = 512
FreeEvents = event_start-EVENT.fd ; "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" event, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: FreeEvents = event_start-EVENT.fd ; "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" event, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
; FreeEvents.fd=event_start <EFBFBD> FreeEvents.bk=event_end ; FreeEvents.fd=event_start <EFBFBD> FreeEvents.bk=event_end
;-----------------------------------------------------------------------------
align 4 align 4
init_events: ;; used from kernel.asm init_events: ;; used from kernel.asm
stdcall kernel_alloc, EV_SPACE*sizeof.EVENT stdcall kernel_alloc, EV_SPACE*sizeof.EVENT
@@ -32,6 +33,8 @@ init_events: ;; used from kernel.asm
mov ecx, EV_SPACE ; current - in allocated space mov ecx, EV_SPACE ; current - in allocated space
mov ebx, FreeEvents ; previos - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mov ebx, FreeEvents ; previos - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
push ebx ; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> push ebx ; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;--------------------------------------
align 4
@@: @@:
mov [ebx+EVENT.fd], eax mov [ebx+EVENT.fd], eax
mov [eax+EVENT.bk], ebx mov [eax+EVENT.bk], ebx
@@ -41,14 +44,16 @@ init_events: ;; used from kernel.asm
pop eax ; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pop eax ; <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov [ebx+EVENT.fd], eax mov [ebx+EVENT.fd], eax
mov [eax+EVENT.bk], ebx mov [eax+EVENT.bk], ebx
;--------------------------------------
align 4
.fail: .fail:
ret ret
;-----------------------------------------------------------------------------
EVENT_WATCHED equ 0x10000000 ;<EFBFBD><EFBFBD><EFBFBD> 28 EVENT_WATCHED equ 0x10000000 ;<EFBFBD><EFBFBD><EFBFBD> 28
EVENT_SIGNALED equ 0x20000000 ;<EFBFBD><EFBFBD><EFBFBD> 29 EVENT_SIGNALED equ 0x20000000 ;<EFBFBD><EFBFBD><EFBFBD> 29
MANUAL_RESET equ 0x40000000 ;<EFBFBD><EFBFBD><EFBFBD> 30 MANUAL_RESET equ 0x40000000 ;<EFBFBD><EFBFBD><EFBFBD> 30
MANUAL_DESTROY equ 0x80000000 ;<EFBFBD><EFBFBD><EFBFBD> 31 MANUAL_DESTROY equ 0x80000000 ;<EFBFBD><EFBFBD><EFBFBD> 31
;-----------------------------------------------------------------------------
align 4 align 4
create_event: ;; EXPORT use create_event: ;; EXPORT use
;info: ;info:
@@ -67,7 +72,8 @@ create_event: ;; EXPORT use
mov edx, [edx+TASKDATA.pid] mov edx, [edx+TASKDATA.pid]
pushfd pushfd
cli cli
;--------------------------------------
align 4
set_event: ;; INTERNAL use !!! don't use for Call set_event: ;; INTERNAL use !!! don't use for Call
;info: ;info:
; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> event <20><> FreeEvents, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ecx,edx,esi ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> event <20><> FreeEvents, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ecx,edx,esi
@@ -89,6 +95,8 @@ set_event: ;; INTERNAL use !!! don't use
call init_events call init_events
popad popad
jz RemoveEventTo.break ; POPF+RET jz RemoveEventTo.break ; POPF+RET
;--------------------------------------
align 4
@@: @@:
mov eax, [eax+EVENT.fd] mov eax, [eax+EVENT.fd]
mov [eax+EVENT.magic], 'EVNT' mov [eax+EVENT.magic], 'EVNT'
@@ -103,7 +111,8 @@ set_event: ;; INTERNAL use !!! don't use
mov ecx, (sizeof.EVENT -EVENT.code)/4 mov ecx, (sizeof.EVENT -EVENT.code)/4
cld cld
rep movsd rep movsd
;--------------------------------------
align 4
RemoveEventTo: ;; INTERNAL use !!! don't use for Call RemoveEventTo: ;; INTERNAL use !!! don't use for Call
;param: ;param:
; eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> event, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ; eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> event, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@@ -118,10 +127,12 @@ RemoveEventTo: ;; INTERNAL use !!! don't use
xchg ecx, [eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight xchg ecx, [eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight
mov [ebx+EVENT.fd], ecx ; OldLeft.fd=OldRight mov [ebx+EVENT.fd], ecx ; OldLeft.fd=OldRight
mov [ecx+EVENT.bk], ebx ; OldRight.bk=OldLeft mov [ecx+EVENT.bk], ebx ; OldRight.bk=OldLeft
;--------------------------------------
align 4
.break: .break:
popfd popfd
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
NotDummyTest: ;; INTERNAL use (not returned for fail !!!) NotDummyTest: ;; INTERNAL use (not returned for fail !!!)
pop edi pop edi
@@ -129,6 +140,8 @@ NotDummyTest: ;; INTERNAL use (not returned
mov ebx, eax mov ebx, eax
mov eax, [ebx+EVENT.pid] mov eax, [ebx+EVENT.pid]
push edi push edi
;--------------------------------------
align 4
.small: ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>... .small: ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD>...
pop edi pop edi
pushfd pushfd
@@ -137,7 +150,7 @@ NotDummyTest: ;; INTERNAL use (not returned
shl eax, 8 shl eax, 8
jz RemoveEventTo.break ; POPF+RET jz RemoveEventTo.break ; POPF+RET
jmp edi ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> jmp edi ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;-----------------------------------------------------------------------------
align 4 align 4
raise_event: ;; EXPORT use raise_event: ;; EXPORT use
;info: ;info:
@@ -158,6 +171,8 @@ raise_event: ;; EXPORT use
mov ecx, (sizeof.EVENT -EVENT.code)/4 mov ecx, (sizeof.EVENT -EVENT.code)/4
cld cld
rep movsd rep movsd
;--------------------------------------
align 4
@@: @@:
test byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24 test byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24
jnz RemoveEventTo.break ; POPF+RET jnz RemoveEventTo.break ; POPF+RET
@@ -165,12 +180,14 @@ raise_event: ;; EXPORT use
jnc @f jnc @f
test byte[ebx+EVENT.state+3], EVENT_WATCHED shr 24 test byte[ebx+EVENT.state+3], EVENT_WATCHED shr 24
jz RemoveEventTo.break ; POPF+RET jz RemoveEventTo.break ; POPF+RET
;--------------------------------------
align 4
@@: @@:
or byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24 or byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24
add eax, SLOT_BASE+APP_EV_OFFSET add eax, SLOT_BASE+APP_EV_OFFSET
xchg eax, ebx xchg eax, ebx
jmp RemoveEventTo jmp RemoveEventTo
;-----------------------------------------------------------------------------
align 4 align 4
clear_event: ;; EXPORT use clear_event: ;; EXPORT use
;info: ;info:
@@ -184,7 +201,7 @@ clear_event: ;; EXPORT use
and byte[ebx+EVENT.state+3], not((EVENT_SIGNALED+EVENT_WATCHED)shr 24) and byte[ebx+EVENT.state+3], not((EVENT_SIGNALED+EVENT_WATCHED)shr 24)
xchg eax, ebx xchg eax, ebx
jmp RemoveEventTo jmp RemoveEventTo
;-----------------------------------------------------------------------------
align 4 align 4
send_event: ;; EXPORT use send_event: ;; EXPORT use
;info: ;info:
@@ -207,7 +224,7 @@ send_event: ;; EXPORT use
lea ebx, [eax+SLOT_BASE+APP_EV_OFFSET] lea ebx, [eax+SLOT_BASE+APP_EV_OFFSET]
mov ecx, EVENT_SIGNALED mov ecx, EVENT_SIGNALED
jmp set_event jmp set_event
;-----------------------------------------------------------------------------
align 4 align 4
DummyTest: ;; INTERNAL use (not returned for fail !!!) DummyTest: ;; INTERNAL use (not returned for fail !!!)
;param: ;param:
@@ -217,16 +234,21 @@ DummyTest: ;; INTERNAL use (not returned
jne @f jne @f
cmp [eax+EVENT.id], ebx cmp [eax+EVENT.id], ebx
je .ret je .ret
;--------------------------------------
align 4
@@: @@:
pop eax pop eax
xor eax, eax xor eax, eax
;--------------------------------------
align 4
.ret: .ret:
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
Wait_events: Wait_events:
or ebx, -1; infinite timeout or ebx, -1; infinite timeout
;--------------------------------------
align 4
Wait_events_ex: Wait_events_ex:
;info: ;info:
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 5-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 5-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
@@ -260,9 +282,11 @@ Wait_events_ex:
mov [eax+TASKDATA.state], 5 mov [eax+TASKDATA.state], 5
call change_task call change_task
mov eax, [esi+APPDATA.wait_param] mov eax, [esi+APPDATA.wait_param]
;--------------------------------------
align 4
@@: @@:
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
wait_event: ;; EXPORT use wait_event: ;; EXPORT use
;info: ;info:
@@ -281,7 +305,7 @@ wait_event: ;; EXPORT use
mov edx, get_event_alone ; wait_test mov edx, get_event_alone ; wait_test
call Wait_events ; timeout ignored call Wait_events ; timeout ignored
jmp wait_finish jmp wait_finish
;-----------------------------------------------------------------------------
align 4 align 4
get_event_ex: ;; f68:14 get_event_ex: ;; f68:14
;info: ;info:
@@ -303,6 +327,8 @@ get_event_ex: ;; f68:14
cld cld
rep movsd rep movsd
mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field
;--------------------------------------
align 4
wait_finish: wait_finish:
test byte[eax+EVENT.state+3], MANUAL_RESET shr 24 test byte[eax+EVENT.state+3], MANUAL_RESET shr 24
jnz get_event_queue.ret ; RET jnz get_event_queue.ret ; RET
@@ -314,7 +340,7 @@ wait_finish:
pushfd pushfd
cli cli
jmp RemoveEventTo jmp RemoveEventTo
;-----------------------------------------------------------------------------
align 4 align 4
destroy_event: ;; EXPORT use destroy_event: ;; EXPORT use
;info: ;info:
@@ -326,6 +352,8 @@ destroy_event: ;; EXPORT use
; eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EVENT (=0 => fail) ; eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EVENT (=0 => fail)
;scratched: ebx,ecx ;scratched: ebx,ecx
call DummyTest ; not returned for fail !!! call DummyTest ; not returned for fail !!!
;--------------------------------------
align 4
.internal: .internal:
xor ecx, ecx ; clear common header xor ecx, ecx ; clear common header
pushfd pushfd
@@ -336,7 +364,7 @@ destroy_event: ;; EXPORT use
mov [eax+EVENT.id], ecx mov [eax+EVENT.id], ecx
mov ebx, FreeEvents mov ebx, FreeEvents
jmp RemoveEventTo jmp RemoveEventTo
;-----------------------------------------------------------------------------
align 4 align 4
get_event_queue: get_event_queue:
;info: ;info:
@@ -353,9 +381,11 @@ get_event_queue:
mov eax, [ebx+APPOBJ.bk] ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO mov eax, [ebx+APPOBJ.bk] ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FIFO
cmp eax, ebx ; empty ??? cmp eax, ebx ; empty ???
je get_event_alone.ret0 je get_event_alone.ret0
;--------------------------------------
align 4
.ret: .ret:
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
get_event_alone: get_event_alone:
;info: ;info:
@@ -372,21 +402,27 @@ get_event_alone:
test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24 test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24
jnz .ret jnz .ret
or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24 or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24
;--------------------------------------
align 4
.ret0: .ret0:
xor eax, eax; NO event!!! xor eax, eax; NO event!!!
;--------------------------------------
align 4
.ret: .ret:
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
sys_sendwindowmsg: ;; f72 sys_sendwindowmsg: ;; f72
dec ebx dec ebx
jnz .ret ;subfunction==1 ? jnz .ret ;subfunction==1 ?
;pushfd ;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? pushfd
cli cli
sub ecx, 2 sub ecx, 2
je .sendkey je .sendkey
dec ecx dec ecx
jnz .retf jnz .retf
;--------------------------------------
align 4
.sendbtn: .sendbtn:
cmp byte[BTN_COUNT], 1 cmp byte[BTN_COUNT], 1
jae .result ;overflow jae .result ;overflow
@@ -394,18 +430,27 @@ sys_sendwindowmsg: ;; f72
shl edx, 8 shl edx, 8
mov [BTN_BUFF], edx mov [BTN_BUFF], edx
jmp .result jmp .result
;--------------------------------------
align 4
.sendkey: .sendkey:
movzx eax, byte[KEY_COUNT] movzx eax, byte[KEY_COUNT]
cmp al, 120 cmp al, 120
jae .result ;overflow jae .result ;overflow
inc byte[KEY_COUNT] inc byte[KEY_COUNT]
mov [KEY_COUNT+1+eax], dl mov [KEY_COUNT+1+eax], dl
;--------------------------------------
align 4
.result: .result:
setae byte[esp+32] ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: dword[esp+32]==72 setae byte[esp+32] ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: dword[esp+32]==72
.retf: ;popfd ;--------------------------------------
align 4
.retf:
popfd
;--------------------------------------
align 4
.ret: .ret:
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
sys_getevent: ;; f11 sys_getevent: ;; f11
mov ebx, [current_slot];<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.......... mov ebx, [current_slot];<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..........
@@ -415,16 +460,18 @@ sys_getevent: ;; f11
popfd popfd
mov [esp+32], eax mov [esp+32], eax
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
sys_waitforevent: ;; f10 sys_waitforevent: ;; f10
or ebx, -1; infinite timeout or ebx, -1; infinite timeout
;--------------------------------------
align 4
sys_wait_event_timeout: ;; f23 sys_wait_event_timeout: ;; f23
mov edx, get_event_for_app; wait_test mov edx, get_event_for_app; wait_test
call Wait_events_ex ; ebx - timeout call Wait_events_ex ; ebx - timeout
mov [esp+32], eax mov [esp+32], eax
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
get_event_for_app: ;; used from f10,f11,f23 get_event_for_app: ;; used from f10,f11,f23
;info: ;info:
@@ -441,46 +488,78 @@ get_event_for_app: ;; used from f10,f11,f23
shl edi, 5 shl edi, 5
add edi, CURRENT_TASK ; edi is assumed as [TASK_BASE] add edi, CURRENT_TASK ; edi is assumed as [TASK_BASE]
mov ecx, [edi+TASKDATA.event_mask] mov ecx, [edi+TASKDATA.event_mask]
and ecx, 0x7FFFFFFF
;--------------------------------------
align 4
.loop: ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> .loop: ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bsr eax, ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (31 -> 0) bsr eax, ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (31 -> 0)
jz .no_events ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ??? jz .no_events ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ???
btr ecx, eax ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> btr ecx, eax ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (eax) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (eax) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmp eax, 9 cmp eax, 9
jae .loop ; eax=[9..31], ignored jae .loop ; eax=[9..31], ignored (event 10...32)
cmp eax, 3 cmp eax, 3
je .loop ; eax=3, ignored je .loop ; eax=3, ignored (event 4)
ja .FlagAutoReset ; eax=[4..8], retvals=eax+1
cmp eax, 4
je .FlagAutoReset ; eax=4, retvals=eax+1 (event 5)
cmp eax, 5
je .mouse_check ; eax=5, retvals=eax+1 (event 6)
ja .FlagAutoReset ; eax=[6..8], retvals=eax+1 (event 7...9)
cmp eax, 1 cmp eax, 1
jae .BtKy ; eax=[1,2], retvals=eax+1 jae .BtKy ; eax=[1,2], retvals=eax+1 (event 2,3)
;--------------------------------------
align 4
.WndRedraw: ; eax=0, retval WndRedraw=1 .WndRedraw: ; eax=0, retval WndRedraw=1
cmp [edi-twdw+WDATA.fl_redraw], al;al==0 cmp [edi-twdw+WDATA.fl_redraw], al;al==0
jne .result jne .result
jmp .loop jmp .loop
;--------------------------------------
align 4
.no_events: .no_events:
xor eax, eax xor eax, eax
ret ret
;--------------------------------------
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9 align 4
cmp eax, 5; Mouse 5+1=6 .mouse_check: ; Mouse 5+1=6
jne @f
push eax push eax
mov eax, [TASK_BASE]
mov eax, [eax + TASKDATA.event_mask]
test eax, 0x80000000 ; bit 31: active/inactive filter f.40
jz @f
pop eax
jmp .FlagAutoReset
;--------------------------------------
align 4
@@:
; If the window is captured and moved by the user, then no mouse events!!! ; If the window is captured and moved by the user, then no mouse events!!!
mov al, [mouse.active_sys_window.action] mov al, [mouse.active_sys_window.action]
and al, WINDOW_MOVE_AND_RESIZE_FLAGS and al, WINDOW_MOVE_AND_RESIZE_FLAGS
test al, al test al, al
pop eax pop eax
jnz .loop jnz .loop
@@: ;--------------------------------------
align 4
.FlagAutoReset: ; retvals: BgrRedraw=5, IPC=7, Stack=8, Debug=9
btr [ebx+APPDATA.event_mask], eax btr [ebx+APPDATA.event_mask], eax
jnc .loop jnc .loop
;--------------------------------------
align 4
.result: ; retval = eax+1 .result: ; retval = eax+1
inc eax inc eax
ret ret
;--------------------------------------
align 4
.BtKy: .BtKy:
movzx edx, bh movzx edx, bh
movzx edx, word[WIN_STACK+edx*2] movzx edx, word[WIN_STACK+edx*2]
je .Keys ; eax=1, retval Keys=2 je .Keys ; eax=1, retval Keys=2
;--------------------------------------
align 4
.Buttons: ; eax=2, retval Buttons=3 .Buttons: ; eax=2, retval Buttons=3
cmp byte[BTN_COUNT], 0 cmp byte[BTN_COUNT], 0
je .loop ; empty ??? je .loop ; empty ???
@@ -493,13 +572,19 @@ get_event_for_app: ;; used from f10,f11,f23
mov [window_minimize], 1 mov [window_minimize], 1
dec byte[BTN_COUNT] dec byte[BTN_COUNT]
jmp .loop jmp .loop
;--------------------------------------
align 4
.Keys: ; eax==1 .Keys: ; eax==1
cmp edx, [TASK_COUNT] cmp edx, [TASK_COUNT]
jne @f ; not Top ??? jne @f ; not Top ???
cmp [KEY_COUNT], al; al==1 cmp [KEY_COUNT], al; al==1
jae .result ; not empty ??? jae .result ; not empty ???
;--------------------------------------
align 4
@@: @@:
mov edx, hotkey_buffer mov edx, hotkey_buffer
;--------------------------------------
align 4
@@: @@:
cmp [edx], bh ; bh - slot for testing cmp [edx], bh ; bh - slot for testing
je .result je .result
@@ -508,3 +593,4 @@ get_event_for_app: ;; used from f10,f11,f23
jb @b jb @b
jmp .loop jmp .loop
;end. ;end.
;-----------------------------------------------------------------------------

View File

@@ -1,23 +1,22 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision $ $Revision $
; // Alver 22.06.2008 // { ;------------------------------------------------------------------------------
align 4 align 4
dtext_asciiz_esi: ; for skins title out dtext_asciiz_esi: ; for skins title out
push eax push eax
xor eax, eax xor eax, eax
inc eax inc eax
jmp dtext.1 jmp dtext.1
; } \\ Alver \\ ;------------------------------------------------------------------------------
align 4 align 4
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) dtext:
; ebx x & y ; ebx x & y
; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB ) ; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
; X = ABnnb: ; X = ABnnb:
@@ -25,108 +24,208 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
; A = 0 <=> output esi characters; otherwise output ASCIIZ string ; A = 0 <=> output esi characters; otherwise output ASCIIZ string
; B = 1 <=> fill background with color eax ; B = 1 <=> fill background with color eax
; edx start of text ; edx start of text
; edi 1 force ; edi 1 force or user area for redirect
; // Alver 22.06.2008 // {
push eax push eax
xor eax, eax xor eax, eax
;--------------------------------------
align 4
.1: .1:
; } \\ Alver \\
pushad pushad
call [_display.disable_mouse]
movsx eax, bx ; eax=y movsx eax, bx ; eax=y
sar ebx, 16 ; ebx=x sar ebx, 16 ; ebx=x
xchg eax, ebx ; eax=x, ebx=y xchg eax, ebx ; eax=x, ebx=y
cmp esi, 255 cmp esi, 255
jb .loop jb .loop
mov esi, 255 mov esi, 255
;--------------------------------------
align 4
.loop: .loop:
test ecx, ecx test ecx, ecx
js .test_asciiz js .test_asciiz
dec esi dec esi
js .end js .end
jmp @f jmp @f
;--------------------------------------
align 4
.test_asciiz: .test_asciiz:
cmp byte [edx], 0 cmp byte [edx], 0
jz .end jz .end
; // Alver 22.06.2008 // {
cmp byte [esp+28], 1 cmp byte [esp+28], 1
jne @f jne @f
dec esi dec esi
js .end js .end
; } \\ Alver \\ ;--------------------------------------
align 4
@@: @@:
inc edx inc edx
pushad pushad
movzx edx, byte [edx-1] movzx edx, byte [edx-1]
test ecx, 0x10000000 test ecx, 0x10000000
jnz .font2 jnz .font2
mov esi, 9 mov esi, 9
lea ebp, [FONT_I+8*edx+edx] lea ebp, [FONT_I+8*edx+edx]
;--------------------------------------
align 4
.symloop1: .symloop1:
mov dl, byte [ebp] mov dl, byte [ebp]
or dl, 1 shl 6 or dl, 1 shl 6
;--------------------------------------
align 4
.pixloop1: .pixloop1:
shr dl, 1 shr dl, 1
jz .pixloop1end jz .pixloop1end
jnc .nopix jnc .nopix
call [putpixel]
test ecx, 0x08000000 ; redirect the output to the user area
jz @f
call draw_text_to_user_area
jmp .pixloop1cont jmp .pixloop1cont
;--------------------------------------
align 4
@@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
; call [putpixel]
call __sys_putpixel
jmp .pixloop1cont
;--------------------------------------
align 4
.nopix: .nopix:
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop1cont jz .pixloop1cont
push ecx push ecx
mov ecx, [esp+4+20h+20h] mov ecx, [esp+4+20h+20h]
call [putpixel]
test ecx, 0x08000000 ; redirect the output to the user area
jz @f
call draw_text_to_user_area
pop ecx pop ecx
jmp .pixloop1cont
;--------------------------------------
align 4
@@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop ecx
;--------------------------------------
align 4
.pixloop1cont: .pixloop1cont:
inc eax inc eax
jmp .pixloop1 jmp .pixloop1
;--------------------------------------
align 4
.pixloop1end: .pixloop1end:
sub eax, 6 sub eax, 6
inc ebx inc ebx
inc ebp inc ebp
dec esi dec esi
jnz .symloop1 jnz .symloop1
popad popad
add eax, 6 add eax, 6
jmp .loop jmp .loop
;--------------------------------------
align 4
.font2: .font2:
add edx, edx add edx, edx
lea ebp, [FONT_II+4*edx+edx+1] lea ebp, [FONT_II+4*edx+edx+1]
push 9 push 9
movzx esi, byte [ebp-1] movzx esi, byte [ebp-1]
;--------------------------------------
align 4
.symloop2: .symloop2:
mov dl, byte [ebp] mov dl, byte [ebp]
push esi push esi
;--------------------------------------
align 4
.pixloop2: .pixloop2:
shr dl, 1 shr dl, 1
jnc .nopix2 jnc .nopix2
call [putpixel]
test ecx, 0x08000000 ; redirect the output to the user area
jz @f
call draw_text_to_user_area
jmp .pixloop2cont jmp .pixloop2cont
;--------------------------------------
align 4
@@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
; call [putpixel]
call __sys_putpixel
jmp .pixloop2cont
;--------------------------------------
align 4
.nopix2: .nopix2:
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop2cont jz .pixloop2cont
push ecx push ecx
mov ecx, [esp+12+20h+20h] mov ecx, [esp+12+20h+20h]
call [putpixel]
test ecx, 0x08000000 ; redirect the output to the user area
jz @f
call draw_text_to_user_area
pop ecx pop ecx
jmp .pixloop2cont
;--------------------------------------
align 4
@@:
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop ecx
;--------------------------------------
align 4
.pixloop2cont: .pixloop2cont:
inc eax inc eax
dec esi dec esi
jnz .pixloop2 jnz .pixloop2
pop esi pop esi
sub eax, esi sub eax, esi
inc ebx inc ebx
inc ebp inc ebp
dec dword [esp] dec dword [esp]
jnz .symloop2 jnz .symloop2
pop eax pop eax
add dword [esp+28], esi add dword [esp+28], esi
popad popad
jmp .loop jmp .loop
;--------------------------------------
align 4
.end: .end:
popad popad
pop eax ; << // Alver 22.06.2008 // << pop eax
ret ret
;------------------------------------------------------------------------------
; eax = x coordinate
; ebx = y coordinate
; ecx = ?? RR GG BB
; edi = user area
align 4
draw_text_to_user_area:
pushad
imul ebx, [edi+0]
add eax, ebx
shl eax, 2
add eax, edi
add eax, 8
and ecx, 0xffffff
or ecx, 0xff000000 ; not transparent
mov [eax], ecx ; store pixel
popad
ret
;------------------------------------------------------------------------------

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2010. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2010-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -527,9 +527,12 @@ mouse._.find_sys_window_under_cursor: ;////////////////////////////////////////
;< esi = process slot ;< esi = process slot
;< edi = pointer to WDATA struct ;< edi = pointer to WDATA struct
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
mov esi, [Screen_Max_X] ; mov esi, [Screen_Max_X]
inc esi ; inc esi
imul esi, [mouse.state.pos.y] ; imul esi, [mouse.state.pos.y]
mov esi, [mouse.state.pos.y]
mov esi, [d_width_calc_area + esi*4]
add esi, [_WinMapAddress] add esi, [_WinMapAddress]
add esi, [mouse.state.pos.x] add esi, [mouse.state.pos.x]
movzx esi, byte[esi] movzx esi, byte[esi]

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -11,7 +11,8 @@ $Revision$
include "skindata.inc" include "skindata.inc"
;skin_data = 0x00778000 ;skin_data = 0x00778000
;------------------------------------------------------------------------------
align 4
read_skin_file: read_skin_file:
stdcall load_file, ebx stdcall load_file, ebx
test eax, eax test eax, eax
@@ -21,6 +22,8 @@ read_skin_file:
cmp ebx, 32*1024 cmp ebx, 32*1024
jb @f jb @f
mov ebx, 32*1024 mov ebx, 32*1024
;--------------------------------------
align 4
@@: @@:
lea ecx, [ebx+3] lea ecx, [ebx+3]
shr ecx, 2 shr ecx, 2
@@ -32,16 +35,20 @@ read_skin_file:
call parse_skin_data call parse_skin_data
xor eax, eax xor eax, eax
ret ret
;--------------------------------------
align 4
.notfound: .notfound:
xor eax, eax xor eax, eax
inc eax inc eax
ret ret
;--------------------------------------
align 4
.noskin: .noskin:
stdcall kernel_free, eax stdcall kernel_free, eax
push 2 push 2
pop eax pop eax
ret ret
;------------------------------------------------------------------------------
struct SKIN_HEADER struct SKIN_HEADER
ident dd ? ident dd ?
version dd ? version dd ?
@@ -81,13 +88,15 @@ struct SKIN_BITMAPS
type dw ? type dw ?
data dd ? data dd ?
ends ends
;------------------------------------------------------------------------------
align 4
load_default_skin: load_default_skin:
mov [_skinh], 22 mov [_skinh], 22
mov ebx, _skin_file_default mov ebx, _skin_file_default
call read_skin_file call read_skin_file
ret ret
;------------------------------------------------------------------------------
align 4
parse_skin_data: parse_skin_data:
mov ebp, skin_data mov ebp, skin_data
cmp [ebp+SKIN_HEADER.ident], 'SKIN' cmp [ebp+SKIN_HEADER.ident], 'SKIN'
@@ -127,6 +136,8 @@ parse_skin_data:
mov ebx, [ebp+SKIN_HEADER.bitmaps] mov ebx, [ebp+SKIN_HEADER.bitmaps]
add ebx, skin_data add ebx, skin_data
;--------------------------------------
align 4
.lp1: .lp1:
cmp dword[ebx], 0 cmp dword[ebx], 0
je .end_bitmaps je .end_bitmaps
@@ -139,8 +150,12 @@ parse_skin_data:
or ecx, ecx or ecx, ecx
jnz @f jnz @f
mov edx, skin_inactive.left.data mov edx, skin_inactive.left.data
;--------------------------------------
align 4
@@: @@:
jmp .next_bitmap jmp .next_bitmap
;--------------------------------------
align 4
.not_left: .not_left:
dec eax dec eax
jnz .not_oper jnz .not_oper
@@ -152,8 +167,12 @@ parse_skin_data:
or ecx, ecx or ecx, ecx
jnz @f jnz @f
mov edx, skin_inactive.oper.data mov edx, skin_inactive.oper.data
;--------------------------------------
align 4
@@: @@:
jmp .next_bitmap jmp .next_bitmap
;--------------------------------------
align 4
.not_oper: .not_oper:
dec eax dec eax
jnz .not_base jnz .not_base
@@ -163,11 +182,17 @@ parse_skin_data:
jnz @f jnz @f
mov eax, [skin_inactive.left.width] mov eax, [skin_inactive.left.width]
mov edx, skin_inactive.base.data mov edx, skin_inactive.base.data
;--------------------------------------
align 4
@@: @@:
jmp .next_bitmap jmp .next_bitmap
;--------------------------------------
align 4
.not_base: .not_base:
add ebx, 8 add ebx, 8
jmp .lp1 jmp .lp1
;--------------------------------------
align 4
.next_bitmap: .next_bitmap:
mov ecx, [ebx+SKIN_BITMAPS.data] mov ecx, [ebx+SKIN_BITMAPS.data]
add ecx, skin_data add ecx, skin_data
@@ -178,10 +203,13 @@ parse_skin_data:
mov [edx+0], ecx mov [edx+0], ecx
add ebx, 8 add ebx, 8
jmp .lp1 jmp .lp1
;--------------------------------------
align 4
.end_bitmaps: .end_bitmaps:
mov ebx, [ebp+SKIN_HEADER.buttons] mov ebx, [ebp+SKIN_HEADER.buttons]
add ebx, skin_data add ebx, skin_data
;--------------------------------------
align 4
.lp2: .lp2:
cmp dword[ebx], 0 cmp dword[ebx], 0
je .end_buttons je .end_buttons
@@ -190,14 +218,20 @@ parse_skin_data:
jnz .not_close jnz .not_close
mov edx, skin_btn_close mov edx, skin_btn_close
jmp .next_button jmp .next_button
;--------------------------------------
align 4
.not_close: .not_close:
dec eax dec eax
jnz .not_minimize jnz .not_minimize
mov edx, skin_btn_minimize mov edx, skin_btn_minimize
jmp .next_button jmp .next_button
;--------------------------------------
align 4
.not_minimize: .not_minimize:
add ebx, 12 add ebx, 12
jmp .lp2 jmp .lp2
;--------------------------------------
align 4
.next_button: .next_button:
movsx eax, [ebx+SKIN_BUTTONS.left] movsx eax, [ebx+SKIN_BUTTONS.left]
mov [edx+SKIN_BUTTON.left], eax mov [edx+SKIN_BUTTON.left], eax
@@ -209,26 +243,22 @@ parse_skin_data:
mov [edx+SKIN_BUTTON.height], eax mov [edx+SKIN_BUTTON.height], eax
add ebx, 12 add ebx, 12
jmp .lp2 jmp .lp2
;--------------------------------------
align 4
.end_buttons: .end_buttons:
.exit: .exit:
ret ret
;------------------------------------------------------------------------------
sys_putimage_with_check: align 4
or ebx, ebx
jz @f
call sys_putimage.forced
@@:
ret
drawwindow_IV_caption: drawwindow_IV_caption:
mov ebp, skin_active mov ebp, skin_active
or al, al or al, al
jnz @f jnz @f
mov ebp, skin_inactive mov ebp, skin_inactive
;--------------------------------------
align 4
@@: @@:
mov esi, [esp+4] mov esi, [esp+4]
mov eax, [esi+WDATA.box.width] ; window width mov eax, [esi+WDATA.box.width] ; window width
mov edx, [ebp+SKIN_DATA.left.left] mov edx, [ebp+SKIN_DATA.left.left]
@@ -238,8 +268,12 @@ drawwindow_IV_caption:
add ecx, [_skinh] add ecx, [_skinh]
mov ebx, [ebp+SKIN_DATA.left.data] mov ebx, [ebp+SKIN_DATA.left.data]
call sys_putimage_with_check or ebx, ebx
jz @f
call sys_putimage.forced
;--------------------------------------
align 4
@@:
mov esi, [esp+4] mov esi, [esp+4]
mov eax, [esi+WDATA.box.width] mov eax, [esi+WDATA.box.width]
sub eax, [ebp+SKIN_DATA.left.width] sub eax, [ebp+SKIN_DATA.left.width]
@@ -260,17 +294,27 @@ drawwindow_IV_caption:
mov edx, [ebp+SKIN_DATA.base.left] mov edx, [ebp+SKIN_DATA.base.left]
sub edx, [ebp+SKIN_DATA.base.width] sub edx, [ebp+SKIN_DATA.base.width]
shl edx, 16 shl edx, 16
;--------------------------------------
align 4
.baseskinloop: .baseskinloop:
shr edx, 16 shr edx, 16
add edx, [ebp+SKIN_DATA.base.width] add edx, [ebp+SKIN_DATA.base.width]
shl edx, 16 shl edx, 16
push eax ebx ecx edx push eax ebx ecx edx
call sys_putimage_with_check
or ebx, ebx
jz @f
call sys_putimage.forced
;--------------------------------------
align 4
@@:
pop edx ecx ebx eax pop edx ecx ebx eax
dec eax dec eax
jnz .baseskinloop jnz .baseskinloop
;--------------------------------------
align 4
.non_base: .non_base:
mov esi, [esp+4] mov esi, [esp+4]
@@ -283,16 +327,18 @@ drawwindow_IV_caption:
mov ecx, [ebp+SKIN_DATA.oper.width] mov ecx, [ebp+SKIN_DATA.oper.width]
shl ecx, 16 shl ecx, 16
add ecx, [_skinh] add ecx, [_skinh]
call sys_putimage_with_check
or ebx, ebx
jz @f
call sys_putimage.forced
;--------------------------------------
align 4
@@:
ret ret
;------------------------------------------------------------------------------
;//mike.dld, 2006-08-02 ] align 4
drawwindow_IV: drawwindow_IV:
;param1 - aw_yes ;param1 - aw_yes
pusha pusha
push edx push edx
@@ -303,8 +349,9 @@ drawwindow_IV:
cmp byte [esp+32+4+4], 0 cmp byte [esp+32+4+4], 0
jne @f jne @f
mov ebp, skin_inactive mov ebp, skin_inactive
;--------------------------------------
align 4
@@: @@:
mov eax, [edi+WDATA.box.left] mov eax, [edi+WDATA.box.left]
shl eax, 16 shl eax, 16
mov ax, word [edi+WDATA.box.left] mov ax, word [edi+WDATA.box.left]
@@ -313,32 +360,42 @@ drawwindow_IV:
shl ebx, 16 shl ebx, 16
mov bx, word [edi+WDATA.box.top] mov bx, word [edi+WDATA.box.top]
add bx, word [edi+WDATA.box.height] add bx, word [edi+WDATA.box.height]
; mov esi,[edi+24]
; shr esi,1
; and esi,0x007f7f7f
mov esi, [ebp+SKIN_DATA.colors.outer] mov esi, [ebp+SKIN_DATA.colors.outer]
or esi, 1 shl 25 ; 0x02000000 used for draw_rectangle without top line
ror ebx, 16
add ebx, [_skinh]
sub bx, 1
rol ebx, 16
call draw_rectangle call draw_rectangle
mov ecx, 3 mov ecx, 3
;--------------------------------------
align 4
_dw3l: _dw3l:
add eax, 1*65536-1 add eax, 1*65536-1
add ebx, 1*65536-1 add ebx, 0*65536-1
test ax, ax test ax, ax
js no_skin_add_button js no_skin_add_button
test bx, bx test bx, bx
js no_skin_add_button js no_skin_add_button
mov esi, [ebp+SKIN_DATA.colors.frame];[edi+24] mov esi, [ebp+SKIN_DATA.colors.frame];[edi+24]
or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
call draw_rectangle call draw_rectangle
dec ecx dec ecx
jnz _dw3l jnz _dw3l
mov esi, [ebp+SKIN_DATA.colors.inner] mov esi, [ebp+SKIN_DATA.colors.inner]
or esi, 1 shl 25; 0x02000000 used for draw_rectangle without top line
add eax, 1*65536-1 add eax, 1*65536-1
add ebx, 1*65536-1 add ebx, 0*65536-1
test ax, ax test ax, ax
js no_skin_add_button js no_skin_add_button
test bx, bx test bx, bx
js no_skin_add_button js no_skin_add_button
test [edi + WDATA.fl_wstate], WSTATE_ROLLEDUP
jnz @f
call draw_rectangle call draw_rectangle
;--------------------------------------
align 4
@@:
cmp dword[skin_data], 'SKIN' cmp dword[skin_data], 'SKIN'
je @f je @f
xor eax, eax xor eax, eax
@@ -348,15 +405,17 @@ drawwindow_IV:
inc ecx inc ecx
mov edx, [_skinh] mov edx, [_skinh]
mov edi, [common_colours+4]; standard grab color mov edi, [common_colours+4]; standard grab color
call [drawbar] ; call [drawbar]
call vesa20_drawbar
jmp draw_clientbar jmp draw_clientbar
;--------------------------------------
align 4
@@: @@:
mov al, [esp+32+4+4] mov al, [esp+32+4+4]
call drawwindow_IV_caption call drawwindow_IV_caption
;--------------------------------------
align 4
draw_clientbar: draw_clientbar:
mov esi, [esp] mov esi, [esp]
mov edx, [esi+WDATA.box.top] ; WORK AREA mov edx, [esi+WDATA.box.top] ; WORK AREA
@@ -374,12 +433,13 @@ drawwindow_IV:
mov edi, [esi+WDATA.cl_workarea] mov edi, [esi+WDATA.cl_workarea]
test edi, 0x40000000 test edi, 0x40000000
jnz _noinside2 jnz _noinside2
call [drawbar] ; call [drawbar]
call vesa20_drawbar
;--------------------------------------
align 4
_noinside2: _noinside2:
cmp dword[skin_data], 'SKIN' cmp dword[skin_data], 'SKIN'
jne no_skin_add_button jne no_skin_add_button
;* close button ;* close button
mov edi, [BTN_ADDR] mov edi, [BTN_ADDR]
movzx eax, word [edi] movzx eax, word [edi]
@@ -404,6 +464,8 @@ drawwindow_IV:
mov ebx, [esp] mov ebx, [esp]
mov ebx, [ebx+WDATA.box.width] mov ebx, [ebx+WDATA.box.width]
inc ebx inc ebx
;--------------------------------------
align 4
_bCx_at_right: _bCx_at_right:
add ebx, [skin_btn_close.left] add ebx, [skin_btn_close.left]
mov [eax], bx mov [eax], bx
@@ -418,7 +480,6 @@ drawwindow_IV:
mov ebx, [skin_btn_close.height] mov ebx, [skin_btn_close.height]
dec ebx dec ebx
mov [eax], bx mov [eax], bx
;* minimize button ;* minimize button
mov edi, [BTN_ADDR] mov edi, [BTN_ADDR]
movzx eax, word [edi] movzx eax, word [edi]
@@ -443,6 +504,8 @@ drawwindow_IV:
mov ebx, [esp] mov ebx, [esp]
mov ebx, [ebx+WDATA.box.width] mov ebx, [ebx+WDATA.box.width]
inc ebx inc ebx
;--------------------------------------
align 4
_bMx_at_right: _bMx_at_right:
add ebx, [skin_btn_minimize.left] add ebx, [skin_btn_minimize.left]
mov [eax], bx mov [eax], bx
@@ -457,10 +520,10 @@ drawwindow_IV:
mov ebx, [skin_btn_minimize.height] mov ebx, [skin_btn_minimize.height]
dec ebx dec ebx
mov [eax], bx mov [eax], bx
;--------------------------------------
align 4
no_skin_add_button: no_skin_add_button:
pop edi pop edi
popa popa
ret 4 ret 4
;------------------------------------------------------------------------------

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -22,36 +22,32 @@ $Revision$
; FCFF com1/ps2 buffer count starting from FC00 ; FCFF com1/ps2 buffer count starting from FC00
uglobal uglobal
;--------------------------------------
align 4
mousecount dd 0x0 mousecount dd 0x0
mousedata dd 0x0 mousedata dd 0x0
Y_UNDER_subtraction_CUR_hot_y:
dd 0
X_UNDER_subtraction_CUR_hot_x:
dd 0
Y_UNDER_sub_CUR_hot_y_add_curh:
dd 0
X_UNDER_sub_CUR_hot_x_add_curh:
dd 0
endg endg
iglobal iglobal
;--------------------------------------
align 4
mouse_delay dd 10 mouse_delay dd 10
mouse_speed_factor: mouse_speed_factor:
dd 3 dd 3
mouse_timer_ticks dd 0 mouse_timer_ticks dd 0
endg endg
;-----------------------------------------------------------------------------
;include 'm_com.inc' align 4
;test_mario79:
; push esi
; push eax
; mov [write_error_to],process_test_m79+43
; movzx eax,al ;[DevErrorCode]
; call writehex
; mov esi,process_test_m79
; call sys_msg_board_str
; pop eax
; pop esi
; ret
;process_test_m79 db 'K : Process - test Mario79 error 00000000',13,10,0
draw_mouse_under: draw_mouse_under:
; return old picture ; return old picture
cmp [_display.restore_cursor], 0 cmp [_display.restore_cursor], 0
je @F je @F
@@ -61,10 +57,13 @@ draw_mouse_under:
stdcall [_display.restore_cursor], eax, ebx stdcall [_display.restore_cursor], eax, ebx
popad popad
ret ret
;--------------------------------------
align 4
@@: @@:
pushad pushad
xor ecx, ecx xor ecx, ecx
xor edx, edx xor edx, edx
;--------------------------------------
align 4 align 4
mres: mres:
movzx eax, word [X_UNDER] movzx eax, word [X_UNDER]
@@ -84,7 +83,9 @@ mres:
pop ebx pop ebx
pop eax pop eax
mov edi, 1 ; force mov edi, 1 ; force
call [putpixel] or ecx, 0x04000000 ; don't save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop edx pop edx
pop ecx pop ecx
inc ecx inc ecx
@@ -96,9 +97,9 @@ mres:
jnz mres jnz mres
popad popad
ret ret
;-----------------------------------------------------------------------------
align 4
save_draw_mouse: save_draw_mouse:
cmp [_display.move_cursor], 0 cmp [_display.move_cursor], 0
je .no_hw_cursor je .no_hw_cursor
pushad pushad
@@ -110,9 +111,11 @@ save_draw_mouse:
push eax push eax
push ebx push ebx
mov ecx, [Screen_Max_X] ; mov ecx, [Screen_Max_X]
inc ecx ; inc ecx
mul ecx ; mul ecx
mov eax, [d_width_calc_area + eax*4]
add eax, [_WinMapAddress] add eax, [_WinMapAddress]
movzx edx, byte [ebx+eax] movzx edx, byte [ebx+eax]
shl edx, 8 shl edx, 8
@@ -124,17 +127,22 @@ save_draw_mouse:
push esi push esi
call [_display.select_cursor] call [_display.select_cursor]
mov [current_cursor], esi mov [current_cursor], esi
;--------------------------------------
align 4
.draw: .draw:
stdcall [_display.move_cursor], esi stdcall [_display.move_cursor], esi
popad popad
ret ret
.fail: ;--------------------------------------
mov ecx, [def_cursor] ;align 4
mov [edx+SLOT_BASE+APPDATA.cursor], ecx ;.fail:
stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax ; mov ecx, [def_cursor]
popad ; mov [edx+SLOT_BASE+APPDATA.cursor], ecx
ret ; stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax
; popad
; ret
;--------------------------------------
align 4
.no_hw_cursor: .no_hw_cursor:
pushad pushad
; save & draw ; save & draw
@@ -144,6 +152,7 @@ save_draw_mouse:
push ebx push ebx
mov ecx, 0 mov ecx, 0
mov edx, 0 mov edx, 0
;--------------------------------------
align 4 align 4
drm: drm:
push eax push eax
@@ -155,6 +164,7 @@ drm:
add eax, ecx; save picture under mouse add eax, ecx; save picture under mouse
add ebx, edx add ebx, edx
push ecx push ecx
or ecx, 0x04000000 ; don't load to mouseunder area
call getpixel call getpixel
mov [COLOR_TEMP], ecx mov [COLOR_TEMP], ecx
pop ecx pop ecx
@@ -164,6 +174,7 @@ drm:
add eax, ecx add eax, ecx
add eax, mouseunder add eax, mouseunder
mov ebx, [COLOR_TEMP] mov ebx, [COLOR_TEMP]
and ebx, 0xffffff
mov [eax], ebx mov [eax], ebx
pop ecx pop ecx
mov edi, edx ; y cycle mov edi, edx ; y cycle
@@ -178,6 +189,7 @@ drm:
push ecx push ecx
mov ecx, [COLOR_TEMP] mov ecx, [COLOR_TEMP]
call combine_colors call combine_colors
and ecx, 0xffffff
mov [MOUSE_COLOR_MEM], ecx mov [MOUSE_COLOR_MEM], ecx
pop ecx pop ecx
pop edx pop edx
@@ -188,8 +200,10 @@ drm:
add ebx, edx ; and y coord+cycle add ebx, edx ; and y coord+cycle
push ecx push ecx
mov ecx, [MOUSE_COLOR_MEM] mov ecx, [MOUSE_COLOR_MEM]
mov edi, 1 mov edi, 1 ; force
call [putpixel] or ecx, 0x04000000 ; don't save to mouseunder area
; call [putpixel]
call __sys_putpixel
pop ecx pop ecx
mov ebx, [esp+0] ; pure y coord again mov ebx, [esp+0] ; pure y coord again
mov eax, [esp+4] ; and x mov eax, [esp+4] ; and x
@@ -203,8 +217,8 @@ drm:
add esp, 8 add esp, 8
popad popad
ret ret
;-----------------------------------------------------------------------------
align 4
combine_colors: combine_colors:
; in ; in
; ecx - color ( 00 RR GG BB ) ; ecx - color ( 00 RR GG BB )
@@ -272,126 +286,187 @@ combine_colors:
pop ebx pop ebx
pop eax pop eax
ret ret
;-----------------------------------------------------------------------------
align 4
check_mouse_area_for_getpixel:
; in:
; eax = x
; ebx = y
; out:
; ecx = new color
push eax ebx
; check for Y
xor ecx, ecx
mov cx, [Y_UNDER] ; [MOUSE_Y]
__sys_disable_mouse:
cmp dword [MOUSE_VISIBLE], dword 0
je @f
ret
@@:
pushad
cmp [CURRENT_TASK], dword 1
je disable_m
mov edx, [CURRENT_TASK]
shl edx, 5
add edx, window_data
movzx eax, word [MOUSE_X]
movzx ebx, word [MOUSE_Y]
mov ecx, [Screen_Max_X]
inc ecx
imul ecx, ebx
add ecx, eax
add ecx, [_WinMapAddress]
mov eax, [CURRENT_TASK]
cmp al, [ecx]
je yes_mouse_disable
cmp al, [ecx+16]
je yes_mouse_disable
add ebx, 10
cmp ebx, [Screen_Max_Y]
jae no_mouse_disable
mov ebx, [Screen_Max_X]
inc ebx
imul ebx, 10
add ecx, ebx
cmp al, [ecx]
je yes_mouse_disable
cmp al, [ecx+16]
je yes_mouse_disable
jmp no_mouse_disable
yes_mouse_disable:
mov edx, [CURRENT_TASK]
shl edx, 5
add edx, window_data
movzx eax, word [MOUSE_X]
movzx ebx, word [MOUSE_Y]
mov ecx, [edx+0]; mouse inside the area ?
add eax, 10
cmp eax, ecx
jb no_mouse_disable
sub eax, 10
add ecx, [edx+8]
cmp eax, ecx
jg no_mouse_disable
mov ecx, [edx+4]
add ebx, 14
cmp ebx, ecx cmp ebx, ecx
jb no_mouse_disable jb .no_mouse_area
sub ebx, 14 add ecx, 23 ; mouse cursor Y size
add ecx, [edx+12]
cmp ebx, ecx cmp ebx, ecx
jg no_mouse_disable ja .no_mouse_area
disable_m: ; offset Y
cmp dword [MOUSE_VISIBLE], dword 0 sub bx, [Y_UNDER] ;[MOUSE_Y]
jne no_mouse_disable ;--------------------------------------
pushf ; check for X
cli xor ecx, ecx
call draw_mouse_under mov cx, [X_UNDER] ;[MOUSE_X]
popf cmp eax, ecx
mov [MOUSE_VISIBLE], dword 1 jb .no_mouse_area
no_mouse_disable: add ecx, 15 ; mouse cursor X size
popad cmp eax, ecx
ja .no_mouse_area
; offset X
sub ax, [X_UNDER] ;[MOUSE_X]
;--------------------------------------
; eax = offset x
; ebx = offset y
shl ebx, 6 ;y
shl eax, 2 ;x
add eax, ebx
add eax, mouseunder
mov ecx, [eax]
and ecx, 0xffffff
or ecx, 0xff000000
pop ebx eax
ret ret
;--------------------------------------
__sys_draw_pointer: align 4
cmp [mouse_pause], 0 .no_mouse_area:
je @f xor ecx, ecx
pop ebx eax
ret ret
@@: ;-----------------------------------------------------------------------------
align 4
check_mouse_area_for_putpixel:
; in:
; ecx = x shl 16 + y
; eax = color
; out:
; eax = new color
push eax push eax
mov eax, [timer_ticks] ; check for Y
sub eax, [MouseTickCounter] mov ax, [Y_UNDER] ; [MOUSE_Y]
cmp eax, 1 cmp cx, ax
ja @f jb .no_mouse_area
add ax, 23 ; mouse cursor Y size
cmp cx, ax
ja .no_mouse_area
; offset Y
sub cx, [Y_UNDER] ;[MOUSE_Y]
mov ax, cx
shl eax, 16
;--------------------------------------
; check for X
mov ax, [X_UNDER] ;[MOUSE_X]
shr ecx, 16
cmp cx, ax
jb .no_mouse_area
add ax, 15 ; mouse cursor X size
cmp cx, ax
ja .no_mouse_area
; offset X
sub cx, [X_UNDER] ;[MOUSE_X]
mov ax, cx
;--------------------------------------
; eax = (offset y) shl 16 + (offset x)
pop ecx
push eax ebx
mov ebx, eax
shr ebx, 16 ;y
and eax, 0xffff ;x
shl ebx, 6
shl eax, 2
add eax, ebx
add eax, mouseunder
and ecx, 0xFFFFFF
mov [eax], ecx
pop ebx eax
push esi edi
rol eax, 16
movzx edi, ax ; y cycle
shl edi, 4 ; *16 bytes per row
shr eax, 16
add edi, eax ; x cycle
lea edi, [edi*3]
add edi, [MOUSE_PICTURE] ; we have our str address
mov esi, edi
add esi, 16*24*3
call combine_colors
pop edi esi
;--------------------------------------
align 4
.end:
mov eax, ecx
ret
;--------------------------------------
align 4
.no_mouse_area:
pop eax pop eax
ret ret
@@: ;-----------------------------------------------------------------------------
mov eax, [timer_ticks] align 4
mov [MouseTickCounter], eax __sys_draw_pointer:
pop eax
pushad pushad
cmp dword [MOUSE_VISIBLE], dword 0; mouse visible ?
je chms00
mov [MOUSE_VISIBLE], dword 0
movzx ebx, word [MOUSE_Y]
movzx eax, word [MOUSE_X]
pushfd
cli
call save_draw_mouse
popfd
nodmu2:
popad
ret
chms00:
movzx ecx, word [X_UNDER] movzx ecx, word [X_UNDER]
movzx edx, word [Y_UNDER] movzx edx, word [Y_UNDER]
movzx ebx, word [MOUSE_Y] movzx ebx, word [MOUSE_Y]
movzx eax, word [MOUSE_X] movzx eax, word [MOUSE_X]
cmp [redrawmouse_unconditional], 0
je @f
mov [redrawmouse_unconditional], 0
jmp redrawmouse
;--------------------------------------
align 4
@@:
cmp eax, ecx cmp eax, ecx
jne redrawmouse jne redrawmouse
cmp ebx, edx cmp ebx, edx
jne redrawmouse je nodmp
jmp nodmp ;--------------------------------------
align 4
redrawmouse: redrawmouse:
pushfd pushfd
cli cli
call draw_mouse_under call draw_mouse_under
call save_draw_mouse call save_draw_mouse
; mov eax, [_display.select_cursor]
; test eax, eax
; jz @f
cmp [_display.select_cursor], select_cursor
jne @f
xor eax, eax
mov esi, [current_cursor]
mov ax, [Y_UNDER]
sub eax, [esi+CURSOR.hot_y]
mov [Y_UNDER_subtraction_CUR_hot_y], eax
add eax, [cur.h]
mov [Y_UNDER_sub_CUR_hot_y_add_curh], eax
mov ax, [X_UNDER]
sub eax, [esi+CURSOR.hot_x]
mov [X_UNDER_subtraction_CUR_hot_x], eax
add eax, [cur.w]
mov [X_UNDER_sub_CUR_hot_x_add_curh], eax
;--------------------------------------
align 4
@@:
popfd popfd
;--------------------------------------
align 4
nodmp: nodmp:
popad popad
ret ret
;-----------------------------------------------------------------------------
align 4
proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScroll:dword, HScroll:dword proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScroll:dword, HScroll:dword
mov eax, [BtnState] mov eax, [BtnState]
@@ -404,11 +479,14 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
jge @@M1 jge @@M1
mov eax, 0 mov eax, 0
jmp @@M2 jmp @@M2
;--------------------------------------
align 4
@@M1: @@M1:
cmp ax, [Screen_Max_X];ScreenLength cmp ax, [Screen_Max_X];ScreenLength
jl @@M2 jl @@M2
mov ax, [Screen_Max_X];ScreenLength-1 mov ax, [Screen_Max_X];ScreenLength-1
;--------------------------------------
align 4
@@M2: @@M2:
mov [MOUSE_X], ax;[XCoordinate] mov [MOUSE_X], ax;[XCoordinate]
@@ -421,11 +499,14 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
jge @@M3 jge @@M3
mov ax, 0 mov ax, 0
jmp @@M4 jmp @@M4
;--------------------------------------
align 4
@@M3: @@M3:
cmp ax, [Screen_Max_Y];ScreenHeigth cmp ax, [Screen_Max_Y];ScreenHeigth
jl @@M4 jl @@M4
mov ax, [Screen_Max_Y];ScreenHeigth-1 mov ax, [Screen_Max_Y];ScreenHeigth-1
;--------------------------------------
align 4
@@M4: @@M4:
mov [MOUSE_Y], ax;[YCoordinate] mov [MOUSE_Y], ax;[YCoordinate]
@@ -440,7 +521,8 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
mov [mouse_timer_ticks], eax mov [mouse_timer_ticks], eax
ret ret
endp endp
;-----------------------------------------------------------------------------
align 4
mouse_acceleration: mouse_acceleration:
push eax push eax
mov eax, [timer_ticks] mov eax, [timer_ticks]
@@ -451,6 +533,8 @@ mouse_acceleration:
;push edx ;push edx
imul eax, [mouse_speed_factor] imul eax, [mouse_speed_factor]
;pop edx ;pop edx
;--------------------------------------
align 4
@@: @@:
ret ret
;-----------------------------------------------------------------------------

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -55,6 +55,9 @@ proc init_mem
.calcmax: .calcmax:
; round all to pages ; round all to pages
mov eax, [edi] mov eax, [edi]
cmp [edi+16], byte 1
jne .unusable
test eax, 0xFFF test eax, 0xFFF
jz @f jz @f
neg eax neg eax
@@ -87,7 +90,7 @@ proc init_mem
add esi, eax add esi, eax
jmp .usable jmp .usable
.unusable: .unusable:
and dword [edi+8], 0 ; and dword [edi+8], 0
.usable: .usable:
add edi, 20 add edi, 20
loop .calcmax loop .calcmax
@@ -195,6 +198,9 @@ proc init_page_map
mov ebx, BOOT_VAR-OS_BASE + 0x9104 mov ebx, BOOT_VAR-OS_BASE + 0x9104
mov edx, [ebx-4] mov edx, [ebx-4]
.scanmap: .scanmap:
cmp [ebx+16], byte 1
jne .next
mov ecx, [ebx+8] mov ecx, [ebx+8]
shr ecx, 12; ecx = number of pages shr ecx, 12; ecx = number of pages
jz .next jz .next
@@ -432,6 +438,11 @@ proc test_cpu
ret ret
endp endp
iglobal
align 4
acpi_lapic_base dd 0xfee00000 ; default local apic base
endg
uglobal uglobal
align 4 align 4
acpi_rsdp rd 1 acpi_rsdp rd 1
@@ -443,8 +454,10 @@ acpi_dev_size rd 1
acpi_rsdt_base rd 1 acpi_rsdt_base rd 1
acpi_madt_base rd 1 acpi_madt_base rd 1
acpi_lapic_base rd 1
acpi_ioapic_base rd 1 acpi_ioapic_base rd 1
cpu_count rd 1
smpt rd 16
endg endg
ACPI_HI_RSDP_WINDOW_START equ 0x000E0000 ACPI_HI_RSDP_WINDOW_START equ 0x000E0000
@@ -493,6 +506,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
lea ebx, [ecx+36] lea ebx, [ecx+36]
mov esi, [ecx+4] mov esi, [ecx+4]
add esi, ecx add esi, ecx
align 4
.next: .next:
mov eax, [ebx] mov eax, [ebx]
cmp [eax], edx cmp [eax], edx
@@ -513,9 +527,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
pop ebx pop ebx
ret ret
align 4 align 4
check_acpi: check_acpi:
call acpi_locate call acpi_locate
@@ -533,22 +545,47 @@ check_acpi:
mov ecx, [eax+36] mov ecx, [eax+36]
mov [acpi_lapic_base-OS_BASE], ecx mov [acpi_lapic_base-OS_BASE], ecx
mov edi, smpt-OS_BASE
mov ebx, [ecx+0x20]
shr ebx, 24 ; read APIC ID
mov [edi], ebx ; bootstrap always first
inc [cpu_count-OS_BASE]
add edi, 4
lea edx, [eax+44] lea edx, [eax+44]
mov ecx, [eax+4] mov ecx, [eax+4]
add ecx, eax add ecx, eax
.check: .check:
mov eax, [edx] mov eax, [edx]
cmp al, 1 cmp al, 0
je .ioapic jne .io_apic
shr eax, 24 ; get APIC ID
cmp eax, ebx ; skip self
je .next
test [edx+4], byte 1 ; is enabled ?
jz .next
cmp [cpu_count-OS_BASE], 16
jae .next
stosd ; store APIC ID
inc [cpu_count-OS_BASE]
.next: .next:
mov eax, [edx]
movzx eax, ah movzx eax, ah
add edx, eax add edx, eax
cmp edx, ecx cmp edx, ecx
jb .check jb .check
.done: .done:
ret ret
.ioapic:
.io_apic:
cmp al, 1
jne .next
mov eax, [edx+4] mov eax, [edx+4]
mov [acpi_ioapic_base-OS_BASE], eax mov [acpi_ioapic_base-OS_BASE], eax
ret jmp .next

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; KERNEL32.INC ;; ;; KERNEL32.INC ;;
@@ -125,7 +125,8 @@ struct APPDATA
wait_param dd ? ;+100 +++ wait_param dd ? ;+100 +++
tls_base dd ? ;+104 tls_base dd ? ;+104
dlls_list_ptr dd ? ;+108 dlls_list_ptr dd ? ;+108
rb 16 ;+112 event_filter dd ? ;+112
rb 12 ;+116
wnd_shape dd ? ;+128 wnd_shape dd ? ;+128
wnd_shape_scale dd ? ;+132 wnd_shape_scale dd ? ;+132
@@ -194,7 +195,7 @@ include "sound/playnote.inc" ; player Note for Speaker PC
; display ; display
include "video/vesa12.inc" ; Vesa 1.2 functions ;include "video/vesa12.inc" ; Vesa 1.2 functions
include "video/vesa20.inc" ; Vesa 2.0 functions include "video/vesa20.inc" ; Vesa 2.0 functions
include "video/blitter.inc" ; include "video/blitter.inc" ;
include "video/vga.inc" ; VGA 16 color functions include "video/vga.inc" ; VGA 16 color functions

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@@ -1,3 +1,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__REV = 0 __REV = 0

View File

@@ -1,3 +1,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; MEMORY MAP ; MEMORY MAP
; ;
@@ -131,7 +137,7 @@
; FF00 byte 1 = system shutdown request ; FF00 byte 1 = system shutdown request
; FF01 byte task activation request? ; FF01 byte task activation request?
; FFF0 byte >0 if redraw background request from app ; FFF0 byte >0 if redraw background request from app
; FFF1 byte >0 if background changed ; FFF1 byte free
; FFF2 write and read bank in screen ; FFF2 write and read bank in screen
; FFF4 byte 0 if first mouse draw & do not return picture under ; FFF4 byte 0 if first mouse draw & do not return picture under
; FFF5 byte 1 do not draw pointer ; FFF5 byte 1 do not draw pointer
@@ -198,15 +204,18 @@
; 0x80284000 -> 28BFFF HDD DMA AREA (32k) ; 0x80284000 -> 28BFFF HDD DMA AREA (32k)
; 0x8028C000 -> 297FFF free (48k) ; 0x8028C000 -> 297FFF free (48k)
; ;
; 0x80298000 -> 29ffff auxiliary table for background smoothing code (32k) ; 0x80298000 -> 29FFFF auxiliary table for background smoothing code (32k)
; ;
; 0x802A0000 -> 2B00ff wav device buffer (64k) ; 0x802A0000 -> 2B00FF wav device buffer (64k)
; 0x802A0000 -> 2B00ff wav device status (256) ; 0x802A0000 -> 2B00FF wav device status (256)
; 0x802B0100 -> 2Bffff free (63k8)
; 0x802C0000 -> 2C3fff button info (8k)
; ;
; 0000 word number of buttons ; 0x802B0100 -> 2B3FFD free (15k7)
; first button entry at 0x10 ;
; 0x802B3FEE -> 2B3FEF button info (64K+ 16 + 2 byte)
; 2B3FEE 0000 word number of buttons
; 2B3FF0 first button entry
;
; button entry at 0x10
; +0000 word process number ; +0000 word process number
; +0002 word button id number : bits 00-15 ; +0002 word button id number : bits 00-15
; +0004 word x start ; +0004 word x start
@@ -215,7 +224,10 @@
; +000A word y size ; +000A word y size
; +000C word button id number : bits 16-31 ; +000C word button id number : bits 16-31
; ;
; 0x802C4000 -> 2CFFFF free (48k) ; 0x802C4000 -> 2C9FFF area for fast getting offset to LFB (24k)
; BPSLine_calc_area
; 0x802CA000 -> 2CFFFF area for fast getting offset to _WinMapAddress (24k)
; d_width_calc_area
; ;
; 0x802D0000 -> 2DFFFF reserved port area (64k) ; 0x802D0000 -> 2DFFFF reserved port area (64k)
; ;
@@ -225,25 +237,29 @@
; dword end port ; dword end port
; dword 0 ; dword 0
; ;
; 0x802E0000 -> 2EFFFF irq data area (64k) ; 0x802E0000 -> 2EFFFF irq data area (64k) ;BOOT_VAR
; 0x802F0000 -> 2FFFFF low memory save (64k)
; ;
; 0x80300000 -> 31FFFF tcp memory (128k) ; 0x802F0000 -> 2F3FFF tcp memory stack_data_start eth_data_start (16k)
; 0x80320000 -> 327FFF tcp memory (32k)
; ;
; 0x80328000 -> 32FFFF !vrr driver (32k) ; 0x802F4000 -> 30ffff stack_data | stack_data_end (112k)
;
; 0x80330000 -> 377FFF skin data (32k) ; 0x80310000 -> 317fff resendQ (32k)
;
; 0x80338000 -> 338FFF draw data - 256 entries (4k) ; 0x80318000 -> 31ffff skin_data (32k)
;
; 0x80320000 -> 323FF3 draw data - 256 entries (4k)
; 00 dword draw limit - x start ; 00 dword draw limit - x start
; 04 dword draw limit - y start ; 04 dword draw limit - y start
; 08 dword draw limit - x end ; 08 dword draw limit - x end
; 0C dword draw limit - y end ; 0C dword draw limit - y end
; 0x80339000 -> 3BFFF3 free (12k) ;
; 0x8033BFF4 -> 33BFFF background info ; 0x8032BFF4 -> 32BFFF background info
; 0x8033C000 page map (length b = memsize shr 15) ; 0x80323FF4 BgrDrawMode
; 0x8033C000 + b start of static pagetables ; 0x80323FF8 BgrDataWidth
; 0x80323FFC BgrDataHeight
;
; 0x80324000 page map (length b = memsize shr 15)
; 0x80324000 + b start of static pagetables
; 0x803FFFFF <- no direct address translation beyond this point ; 0x803FFFFF <- no direct address translation beyond this point
; ============================================================= ; =============================================================

View File

@@ -1,3 +1,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision $ $Revision $

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; PLAYNOTE.INC version 1.1 22 November 2003 ;; ;; PLAYNOTE.INC version 1.1 22 November 2003 ;;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,3 +1,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2011-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struct BLITTER_BLOCK struct BLITTER_BLOCK
xmin dd ? xmin dd ?
@@ -324,19 +330,26 @@ blit_32:
test eax, eax test eax, eax
jne .L57 jne .L57
inc [mouse_pause]
call [_display.disable_mouse]
mov eax, [TASK_BASE] mov eax, [TASK_BASE]
mov ebx, [esp+BLITTER.dst_x] mov ebx, [esp+BLITTER.dst_x]
mov ebp, [esp+BLITTER.dst_y] mov ebp, [esp+BLITTER.dst_y]
add ebx, [eax-twdw + WDATA.box.left] add ebx, [eax-twdw + WDATA.box.left]
add ebp, [eax-twdw + WDATA.box.top] add ebp, [eax-twdw + WDATA.box.top]
mov ecx, ebx
add ecx, [esp+BLITTER.w]
shl ecx, 16
mov cx, bp
add ecx, [esp+BLITTER.h]
mov edi, ebp mov edi, ebp
imul edi, [_display.pitch] ; imul edi, [_display.pitch]
imul ebp, [_display.width] mov edi, [BPSLine_calc_area+edi*4]
; imul ebp, [_display.width]
mov ebp, [d_width_calc_area+ebp*4]
add ebp, ebx add ebp, ebx
add ebp, [_WinMapAddress] add ebp, [_WinMapAddress]
@@ -346,6 +359,7 @@ blit_32:
lea esi, [eax+esi*4] lea esi, [eax+esi*4]
add esi, [esp+BLITTER.bitmap] add esi, [esp+BLITTER.bitmap]
mov eax, ecx
mov ecx, [esp+BLITTER.h] mov ecx, [esp+BLITTER.h]
mov edx, [esp+BLITTER.w] mov edx, [esp+BLITTER.w]
@@ -361,7 +375,6 @@ blit_32:
lea edi, [edi+ebx*4] lea edi, [edi+ebx*4]
mov ebx, [CURRENT_TASK] mov ebx, [CURRENT_TASK]
align 4 align 4
.outer32: .outer32:
xor ecx, ecx xor ecx, ecx
@@ -369,11 +382,39 @@ align 4
align 4 align 4
.inner32: .inner32:
cmp [ebp+ecx], bl cmp [ebp+ecx], bl
jne @F jne .skip
;--------------------------------------
push eax
mov eax, [esi+ecx*4] mov eax, [esi+ecx*4]
mov [LFB_BASE+edi+ecx*4], eax
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder
;--------------------------------------
align 4
@@: @@:
push ecx
mov ecx, [esp+4]
ror ecx, 16
sub ecx, edx
rol ecx, 16
sub ecx, [esp+BLITTER.h + 8]
; check mouse area for putpixel
call [_display.check_mouse]
pop ecx
;--------------------------------------
align 4
.no_mouseunder:
; store to real LFB
mov [LFB_BASE+edi+ecx*4], eax
pop eax
;--------------------------------------
align 4
.skip:
inc ecx inc ecx
dec edx dec edx
jnz .inner32 jnz .inner32
@@ -387,8 +428,8 @@ align 4
jnz .outer32 jnz .outer32
.done: .done:
dec [mouse_pause] ; call [draw_pointer]
call [draw_pointer] call __sys_draw_pointer
.L57: .L57:
add esp, 72 add esp, 72
pop ebx pop ebx
@@ -410,15 +451,43 @@ align 4
align 4 align 4
.inner24: .inner24:
cmp [ebp+ecx], bl cmp [ebp+ecx], bl
jne @F jne .skip_1
;--------------------------------------
push eax
mov eax, [esi+ecx*4] mov eax, [esi+ecx*4]
lea edi, [edi+ecx*2] lea edi, [edi+ecx*2]
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder_1
;--------------------------------------
align 4
@@:
push ecx
mov ecx, [esp+4]
ror ecx, 16
sub ecx, edx
rol ecx, 16
sub ecx, [esp+BLITTER.h + 8]
; check mouse area for putpixel
call [_display.check_mouse]
pop ecx
;--------------------------------------
align 4
.no_mouseunder_1:
mov [edi+ecx], ax mov [edi+ecx], ax
shr eax, 16 shr eax, 16
mov [edi+ecx+2], al mov [edi+ecx+2], al
@@:
pop eax
;--------------------------------------
align 4
.skip_1:
mov edi, [esp+64] mov edi, [esp+64]
inc ecx inc ecx
dec edx dec edx

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -26,7 +26,7 @@ struct BITMAPINFOHEADER
ClrUsed dd ? ClrUsed dd ?
ClrImportant dd ? ClrImportant dd ?
ends ends
;------------------------------------------------------------------------------
align 4 align 4
proc init_cursor stdcall, dst:dword, src:dword proc init_cursor stdcall, dst:dword, src:dword
locals locals
@@ -49,7 +49,8 @@ proc init_cursor stdcall, dst:dword, src:dword
je .img_8 je .img_8
cmp [esi+BITMAPINFOHEADER.BitCount], 4 cmp [esi+BITMAPINFOHEADER.BitCount], 4
je .img_4 je .img_4
;--------------------------------------
align 4
.img_2: .img_2:
add eax, [esi] add eax, [esi]
mov [pQuad], eax mov [pQuad], eax
@@ -68,6 +69,8 @@ proc init_cursor stdcall, dst:dword, src:dword
mov [rBase], edi mov [rBase], edi
mov esi, [pQuad] mov esi, [pQuad]
;--------------------------------------
align 4
.l21: .l21:
mov ebx, [pBits] mov ebx, [pBits]
mov ebx, [ebx] mov ebx, [ebx]
@@ -76,6 +79,8 @@ proc init_cursor stdcall, dst:dword, src:dword
mov eax, [eax] mov eax, [eax]
bswap eax bswap eax
mov [counter], 32 mov [counter], 32
;--------------------------------------
align 4
@@: @@:
xor edx, edx xor edx, edx
shl eax, 1 shl eax, 1
@@ -103,7 +108,8 @@ proc init_cursor stdcall, dst:dword, src:dword
sub [height], 1 sub [height], 1
jnz .l21 jnz .l21
ret ret
;--------------------------------------
align 4
.img_4: .img_4:
add eax, [esi] add eax, [esi]
mov [pQuad], eax mov [pQuad], eax
@@ -123,11 +129,15 @@ proc init_cursor stdcall, dst:dword, src:dword
mov esi, [pQuad] mov esi, [pQuad]
mov ebx, [pBits] mov ebx, [pBits]
;--------------------------------------
align 4
.l4: .l4:
mov eax, [pAnd] mov eax, [pAnd]
mov eax, [eax] mov eax, [eax]
bswap eax bswap eax
mov [counter], 16 mov [counter], 16
;--------------------------------------
align 4
@@: @@:
xor edx, edx xor edx, edx
shl eax, 1 shl eax, 1
@@ -168,6 +178,8 @@ proc init_cursor stdcall, dst:dword, src:dword
sub [height], 1 sub [height], 1
jnz .l4 jnz .l4
ret ret
;--------------------------------------
align 4
.img_8: .img_8:
add eax, [esi] add eax, [esi]
mov [pQuad], eax mov [pQuad], eax
@@ -187,11 +199,15 @@ proc init_cursor stdcall, dst:dword, src:dword
mov esi, [pQuad] mov esi, [pQuad]
mov ebx, [pBits] mov ebx, [pBits]
;--------------------------------------
align 4
.l81: .l81:
mov eax, [pAnd] mov eax, [pAnd]
mov eax, [eax] mov eax, [eax]
bswap eax bswap eax
mov [counter], 32 mov [counter], 32
;--------------------------------------
align 4
@@: @@:
xor edx, edx xor edx, edx
shl eax, 1 shl eax, 1
@@ -217,6 +233,8 @@ proc init_cursor stdcall, dst:dword, src:dword
sub [height], 1 sub [height], 1
jnz .l81 jnz .l81
ret ret
;--------------------------------------
align 4
.img_24: .img_24:
add eax, [esi] add eax, [esi]
mov [pQuad], eax mov [pQuad], eax
@@ -234,10 +252,14 @@ proc init_cursor stdcall, dst:dword, src:dword
mov esi, [pAnd] mov esi, [pAnd]
mov ebx, [pQuad] mov ebx, [pQuad]
;--------------------------------------
align 4
.row_24: .row_24:
mov eax, [esi] mov eax, [esi]
bswap eax bswap eax
mov [counter], 32 mov [counter], 32
;--------------------------------------
align 4
@@: @@:
xor edx, edx xor edx, edx
shl eax, 1 shl eax, 1
@@ -263,7 +285,7 @@ proc init_cursor stdcall, dst:dword, src:dword
jnz .row_24 jnz .row_24
ret ret
endp endp
;------------------------------------------------------------------------------
align 4 align 4
proc set_cursor stdcall, hcursor:dword proc set_cursor stdcall, hcursor:dword
mov eax, [hcursor] mov eax, [hcursor]
@@ -274,13 +296,16 @@ proc set_cursor stdcall, hcursor:dword
mov ebx, [current_slot] mov ebx, [current_slot]
xchg eax, [ebx+APPDATA.cursor] xchg eax, [ebx+APPDATA.cursor]
ret ret
;--------------------------------------
align 4
.fail: .fail:
mov eax, [def_cursor] mov eax, [def_cursor]
mov ebx, [current_slot] mov ebx, [current_slot]
xchg eax, [ebx+APPDATA.cursor] xchg eax, [ebx+APPDATA.cursor]
ret ret
endp endp
;------------------------------------------------------------------------------
align 4
; param ; param
; eax= pid ; eax= pid
; ebx= src ; ebx= src
@@ -328,6 +353,8 @@ create_cursor:
stdcall init_cursor, eax, esi stdcall init_cursor, eax, esi
align 4
.add_cursor:
mov ecx, [.hcursor] mov ecx, [.hcursor]
lea ecx, [ecx+CURSOR.list_next] lea ecx, [ecx+CURSOR.list_next]
lea edx, [_display.cr_list.next] lea edx, [_display.cr_list.next]
@@ -338,7 +365,6 @@ create_cursor:
popfd popfd
mov eax, [.hcursor] mov eax, [.hcursor]
.check_hw:
cmp [_display.init_cursor], 0 cmp [_display.init_cursor], 0
je .fail je .fail
@@ -347,22 +373,26 @@ create_cursor:
add esp, 4 add esp, 4
mov eax, [.hcursor] mov eax, [.hcursor]
;--------------------------------------
align 4
.fail: .fail:
add esp, 12 add esp, 12
ret ret
;--------------------------------------
align 4
.indirect: .indirect:
shr ebx, 16 shr ebx, 16
movzx ecx, bh movzx ecx, bh
movzx edx, bl movzx edx, bl
mov [eax+CURSOR.hot_x], ecx mov [edi+CURSOR.hot_x], ecx
mov [eax+CURSOR.hot_y], edx mov [edi+CURSOR.hot_y], edx
xchg edi, eax xchg edi, eax
mov ecx, 1024 mov ecx, 1024
cld cld
rep movsd rep movsd
jmp .check_hw jmp .add_cursor
;------------------------------------------------------------------------------
align 4 align 4
proc load_cursor stdcall, src:dword, flags:dword proc load_cursor stdcall, src:dword, flags:dword
locals locals
@@ -381,6 +411,8 @@ proc load_cursor stdcall, src:dword, flags:dword
test eax, eax test eax, eax
jz .fail jz .fail
mov [src], eax mov [src], eax
;--------------------------------------
align 4
@@: @@:
push ebx push ebx
push esi push esi
@@ -397,16 +429,22 @@ proc load_cursor stdcall, src:dword, flags:dword
cmp word [flags], LOAD_FROM_FILE cmp word [flags], LOAD_FROM_FILE
jne .exit jne .exit
stdcall kernel_free, [src] stdcall kernel_free, [src]
;--------------------------------------
align 4
.exit: .exit:
pop edi pop edi
pop esi pop esi
pop ebx pop ebx
;--------------------------------------
align 4
.fail: .fail:
mov eax, [handle] mov eax, [handle]
;--------------------------------------
align 4
.fail2: .fail2:
ret ret
endp endp
;------------------------------------------------------------------------------
align 4 align 4
proc delete_cursor stdcall, hcursor:dword proc delete_cursor stdcall, hcursor:dword
locals locals
@@ -433,17 +471,20 @@ proc delete_cursor stdcall, hcursor:dword
jne @F jne @F
mov eax, [def_cursor] mov eax, [def_cursor]
mov [ebx+APPDATA.cursor], eax mov [ebx+APPDATA.cursor], eax
;--------------------------------------
align 4
@@: @@:
mov eax, [hcursor] mov eax, [hcursor]
call [eax+APPOBJ.destroy] call [eax+APPOBJ.destroy]
;--------------------------------------
align 4
.fail: .fail:
ret ret
endp endp
;------------------------------------------------------------------------------
align 4
; param ; param
; eax= cursor ; eax= cursor
align 4
destroy_cursor: destroy_cursor:
push eax push eax
@@ -460,13 +501,13 @@ destroy_cursor:
pop eax pop eax
call destroy_kernel_object call destroy_kernel_object
ret ret
;------------------------------------------------------------------------------
align 4 align 4
select_cursor: select_cursor:
mov eax, [esp+4] mov eax, [esp+4]
mov [_display.cursor], eax mov [_display.cursor], eax
ret 4 ret 4
;------------------------------------------------------------------------------
align 4 align 4
proc restore_24 stdcall, x:dword, y:dword proc restore_24 stdcall, x:dword, y:dword
@@ -484,6 +525,8 @@ proc restore_24 stdcall, x:dword, y:dword
mov ecx, [cur.w] mov ecx, [cur.w]
lea ecx, [ecx+ecx*2] lea ecx, [ecx+ecx*2]
push ecx push ecx
;--------------------------------------
align 4
@@: @@:
mov edi, ebx mov edi, ebx
add ebx, [BytesPerScanLine] add ebx, [BytesPerScanLine]
@@ -496,11 +539,13 @@ proc restore_24 stdcall, x:dword, y:dword
pop ecx pop ecx
pop edi pop edi
pop esi pop esi
;--------------------------------------
align 4
.ret: .ret:
pop ebx pop ebx
ret ret
endp endp
;------------------------------------------------------------------------------
align 4 align 4
proc restore_32 stdcall, x:dword, y:dword proc restore_32 stdcall, x:dword, y:dword
@@ -515,6 +560,8 @@ proc restore_32 stdcall, x:dword, y:dword
push edi push edi
mov esi, cur_saved_data mov esi, cur_saved_data
;--------------------------------------
align 4
@@: @@:
mov edi, ebx mov edi, ebx
add ebx, [BytesPerScanLine] add ebx, [BytesPerScanLine]
@@ -525,12 +572,14 @@ proc restore_32 stdcall, x:dword, y:dword
jnz @B jnz @B
pop edi pop edi
;--------------------------------------
align 4
.ret: .ret:
pop esi pop esi
pop ebx pop ebx
ret ret
endp endp
;------------------------------------------------------------------------------
align 4 align 4
proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
locals locals
@@ -542,7 +591,7 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
mov esi, [hcursor] mov esi, [hcursor]
mov ecx, [x] mov ecx, [x]
mov eax, [y] mov eax, [y]
mov ebx, [BytesPerScanLine] ; mov ebx, [BytesPerScanLine]
xor edx, edx xor edx, edx
sub ecx, [esi+CURSOR.hot_x] sub ecx, [esi+CURSOR.hot_x]
@@ -568,7 +617,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
sub edx, [y] sub edx, [y]
mov [_dy], edx mov [_dy], edx
mul dword [BytesPerScanLine] ; mul dword [BytesPerScanLine]
mov eax, [BPSLine_calc_area+eax*4]
lea edx, [LFB_BASE+ecx*3] lea edx, [LFB_BASE+ecx*3]
add edx, eax add edx, eax
mov [cur_saved_base], edx mov [cur_saved_base], edx
@@ -576,10 +626,14 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
cmp ebx, [Screen_Max_X] cmp ebx, [Screen_Max_X]
jbe @F jbe @F
mov ebx, [Screen_Max_X] mov ebx, [Screen_Max_X]
;--------------------------------------
align 4
@@: @@:
cmp edi, [Screen_Max_Y] cmp edi, [Screen_Max_Y]
jbe @F jbe @F
mov edi, [Screen_Max_Y] mov edi, [Screen_Max_Y]
;--------------------------------------
align 4
@@: @@:
mov [cur.right], ebx mov [cur.right], ebx
mov [cur.bottom], edi mov [cur.bottom], edi
@@ -595,6 +649,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
mov eax, edi mov eax, edi
mov edi, cur_saved_data mov edi, cur_saved_data
;--------------------------------------
align 4
@@: @@:
mov esi, edx mov esi, edx
add edx, [BytesPerScanLine] add edx, [BytesPerScanLine]
@@ -613,12 +669,16 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
mov esi, [hcursor] mov esi, [hcursor]
mov esi, [esi+CURSOR.base] mov esi, [esi+CURSOR.base]
lea edx, [esi+eax*4] lea edx, [esi+eax*4]
;--------------------------------------
align 4
.row: .row:
mov ecx, [cur.w] mov ecx, [cur.w]
mov esi, edx mov esi, edx
mov edi, ebx mov edi, ebx
add edx, 32*4 add edx, 32*4
add ebx, [BytesPerScanLine] add ebx, [BytesPerScanLine]
;--------------------------------------
align 4
.pix: .pix:
lodsd lodsd
test eax, 0xFF000000 test eax, 0xFF000000
@@ -626,6 +686,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
mov [edi], ax mov [edi], ax
shr eax, 16 shr eax, 16
mov [edi+2], al mov [edi+2], al
;--------------------------------------
align 4
@@: @@:
add edi, 3 add edi, 3
dec ecx dec ecx
@@ -635,8 +697,7 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
jnz .row jnz .row
ret ret
endp endp
;------------------------------------------------------------------------------
align 4 align 4
proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
locals locals
@@ -673,17 +734,22 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
sub edx, [y] sub edx, [y]
mov [_dy], edx mov [_dy], edx
mul dword [BytesPerScanLine] ; mul dword [BytesPerScanLine]
mov eax, [BPSLine_calc_area+eax*4]
lea edx, [LFB_BASE+eax+ecx*4] lea edx, [LFB_BASE+eax+ecx*4]
mov [cur_saved_base], edx mov [cur_saved_base], edx
cmp ebx, [Screen_Max_X] cmp ebx, [Screen_Max_X]
jbe @F jbe @F
mov ebx, [Screen_Max_X] mov ebx, [Screen_Max_X]
;--------------------------------------
align 4
@@: @@:
cmp edi, [Screen_Max_Y] cmp edi, [Screen_Max_Y]
jbe @F jbe @F
mov edi, [Screen_Max_Y] mov edi, [Screen_Max_Y]
;--------------------------------------
align 4
@@: @@:
mov [cur.right], ebx mov [cur.right], ebx
mov [cur.bottom], edi mov [cur.bottom], edi
@@ -699,6 +765,8 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
mov eax, edi mov eax, edi
mov edi, cur_saved_data mov edi, cur_saved_data
;--------------------------------------
align 4
@@: @@:
mov esi, edx mov esi, edx
add edx, [BytesPerScanLine] add edx, [BytesPerScanLine]
@@ -716,17 +784,23 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
mov esi, [hcursor] mov esi, [hcursor]
mov esi, [esi+CURSOR.base] mov esi, [esi+CURSOR.base]
lea edx, [esi+eax*4] lea edx, [esi+eax*4]
;--------------------------------------
align 4
.row: .row:
mov ecx, [cur.w] mov ecx, [cur.w]
mov esi, edx mov esi, edx
mov edi, ebx mov edi, ebx
add edx, 32*4 add edx, 32*4
add ebx, [BytesPerScanLine] add ebx, [BytesPerScanLine]
;--------------------------------------
align 4
.pix: .pix:
lodsd lodsd
test eax, 0xFF000000 test eax, 0xFF000000
jz @F jz @F
mov [edi], eax mov [edi], eax
;--------------------------------------
align 4
@@: @@:
add edi, 4 add edi, 4
dec ecx dec ecx
@@ -736,16 +810,158 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
jnz .row jnz .row
ret ret
endp endp
;------------------------------------------------------------------------------
align 4
check_mouse_area_for_getpixel_new:
; in:
; eax = x
; ebx = y
; out:
; ecx = new color
;--------------------------------------
; check for Y
cmp bx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp bx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area
;--------------------------------------
; check for X
cmp ax, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
cmp ax, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
;--------------------------------------
push eax ebx
; offset X
mov ecx, [X_UNDER_subtraction_CUR_hot_x]
sub eax, ecx ; x1
; offset Y
mov ecx, [Y_UNDER_subtraction_CUR_hot_y]
sub ebx, ecx ; y1
;--------------------------------------
; ebx = offset y
; eax = offset x
imul ebx, [cur.w] ;y
add eax, ebx
mov ebx, eax
shl eax, 2
cmp [ScreenBPP], byte 32
je @f
sub eax, ebx
;--------------------------------------
align 4
@@:
add eax, cur_saved_data
mov ecx, [eax]
and ecx, 0xffffff
add ecx, 0xff000000
pop ebx eax
ret
;--------------------------------------
align 4
.no_mouse_area:
xor ecx, ecx
ret
;-----------------------------------------------------------------------------
align 4
check_mouse_area_for_putpixel_new:
; in:
; ecx = x shl 16 + y
; eax = color
; out:
; eax = new color
;--------------------------------------
; check for Y
cmp cx, [Y_UNDER_subtraction_CUR_hot_y]
jb .no_mouse_area
cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
jae .no_mouse_area
rol ecx, 16
;--------------------------------------
; check for X
cmp cx, [X_UNDER_subtraction_CUR_hot_x]
jb .no_mouse_area
cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh]
jae .no_mouse_area
;--------------------------------------
align 4
.1:
push eax
; offset X
mov ax, [X_UNDER_subtraction_CUR_hot_x]
sub cx, ax ; x1
ror ecx, 16
; offset Y
mov ax, [Y_UNDER_subtraction_CUR_hot_y]
sub cx, ax ; y1
;--------------------------------------
; ecx = (offset x) shl 16 + (offset y)
push ebx
mov ebx, ecx
shr ebx, 16 ; x
and ecx, 0xffff ; y
; ecx = offset y
; ebx = offset x
mov eax, [esp + 4]
push ebx ecx
imul ecx, [cur.w] ;y
add ecx, ebx
mov ebx, ecx
shl ecx, 2
cmp [ScreenBPP], byte 24
je .24
and eax, 0xFFFFFF
mov [ecx + cur_saved_data], eax ;store new color to
jmp @f
;--------------------------------------
align 4
.24:
sub ecx, ebx
mov [ecx + cur_saved_data], ax ;store new color to
shr eax, 16
mov [ecx + cur_saved_data + 2], al ;store new color to
;--------------------------------------
align 4
@@:
pop ecx ebx
shl ecx, 5
add ecx, ebx
mov eax, [current_cursor]
mov eax, [eax+CURSOR.base]
lea eax, [eax+ecx*4]
mov eax, [eax]
pop ebx
test eax, 0xFF000000
jz @f
pop ecx
ret
;--------------------------------------
align 4
@@:
pop eax
;--------------------------------------
align 4
.no_mouse_area:
ret
;------------------------------------------------------------------------------
align 4 align 4
get_display: get_display:
mov eax, _display mov eax, _display
ret ret
;------------------------------------------------------------------------------
align 4 align 4
init_display: init_display:
xor eax, eax xor eax, eax
mov edi, _display mov edi, _display
@@ -764,6 +980,7 @@ init_display:
test word [SCR_MODE], 0x4000 test word [SCR_MODE], 0x4000
jz .fail jz .fail
; jmp .fail
mov ebx, restore_32 mov ebx, restore_32
mov ecx, move_cursor_32 mov ecx, move_cursor_32
@@ -775,22 +992,47 @@ init_display:
mov ecx, move_cursor_24 mov ecx, move_cursor_24
cmp eax, 24 cmp eax, 24
jne .fail jne .fail
;--------------------------------------
align 4
@@: @@:
mov [_display.select_cursor], select_cursor mov [_display.select_cursor], select_cursor
mov [_display.move_cursor], ecx mov [_display.move_cursor], ecx
mov [_display.restore_cursor], ebx mov [_display.restore_cursor], ebx
mov [_display.check_mouse], check_mouse_area_for_putpixel_new
mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new
cmp [PUTPIXEL], dword VGA_putpixel
je @f
cmp [ScreenBPP], byte 32
je .32
mov [PUTPIXEL], dword Vesa20_putpixel24_new
jmp @f
;--------------------------------------
align 4
.32:
mov [PUTPIXEL], dword Vesa20_putpixel32_new
;--------------------------------------
align 4
@@:
stdcall load_cursor, clock_arrow, dword LOAD_FROM_MEM
mov [def_cursor_clock], eax
stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM
mov [def_cursor], eax mov [def_cursor], eax
ret ret
;--------------------------------------
align 4
.fail: .fail:
xor eax, eax xor eax, eax
mov [_display.select_cursor], eax mov [_display.select_cursor], eax
mov [_display.move_cursor], eax mov [_display.move_cursor], eax
ret ret
;------------------------------------------------------------------------------
align 4 align 4
def_arrow: def_arrow:
file 'arrow.cur' file 'arrow.cur'
;------------------------------------------------------------------------------
align 4
clock_arrow:
file 'arrow_clock.cur'
;------------------------------------------------------------------------------

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; VESA12.INC ;; ;; VESA12.INC ;;

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; VGA.INC ;; ;; VGA.INC ;;
@@ -13,7 +13,8 @@
$Revision $ $Revision $
;------------------------------------------------------------------------------
align 4
paletteVGA: paletteVGA:
;16 colour palette ;16 colour palette
@@ -24,9 +25,9 @@ paletteVGA:
mov ecx, 16 mov ecx, 16
mov dx, 0x3c9 mov dx, 0x3c9
xor eax, eax xor eax, eax
;--------------------------------------
align 4
palvganew: palvganew:
mov al, 0 mov al, 0
test ah, 4 test ah, 4
jz palvgalbl1 jz palvgalbl1
@@ -34,6 +35,8 @@ paletteVGA:
test ah, 8 test ah, 8
jz palvgalbl1 jz palvgalbl1
add al, 32 add al, 32
;--------------------------------------
align 4
palvgalbl1: palvgalbl1:
out dx, al; red 0,31 or 63 out dx, al; red 0,31 or 63
mov al, 0 mov al, 0
@@ -43,6 +46,8 @@ paletteVGA:
test ah, 8 test ah, 8
jz palvgalbl2 jz palvgalbl2
add al, 32 add al, 32
;--------------------------------------
align 4
palvgalbl2: palvgalbl2:
out dx, al; blue 0,31 or 63 out dx, al; blue 0,31 or 63
mov al, 0 mov al, 0
@@ -52,6 +57,8 @@ paletteVGA:
test ah, 8 test ah, 8
jz palvgalbl3 jz palvgalbl3
add al, 32 add al, 32
;--------------------------------------
align 4
palvgalbl3: palvgalbl3:
out dx, al; green 0,31 or 63 out dx, al; green 0,31 or 63
add ah, 1 add ah, 1
@@ -60,59 +67,76 @@ paletteVGA:
; mov ax, 0005h ; mov ax, 0005h
; out dx, ax ; out dx, ax
ret ret
;------------------------------------------------------------------------------
align 4
palette320x200: palette320x200:
mov edx, 0x3c8 mov edx, 0x3c8
xor eax, eax xor eax, eax
out dx, al out dx, al
mov ecx, 256 mov ecx, 256
mov edx, 0x3c9 mov edx, 0x3c9
xor eax, eax xor eax, eax
;--------------------------------------
align 4
palnew: palnew:
mov al, 0 mov al, 0
test ah, 64 test ah, 64
jz pallbl1 jz pallbl1
add al, 21 add al, 21
;--------------------------------------
align 4
pallbl1: pallbl1:
test ah, 128 test ah, 128
jz pallbl2 jz pallbl2
add al, 42 add al, 42
;--------------------------------------
align 4
pallbl2: pallbl2:
out dx, al out dx, al
mov al, 0 mov al, 0
test ah, 8 test ah, 8
jz pallbl3 jz pallbl3
add al, 8 add al, 8
;--------------------------------------
align 4
pallbl3: pallbl3:
test ah, 16 test ah, 16
jz pallbl4 jz pallbl4
add al, 15 add al, 15
;--------------------------------------
align 4
pallbl4: pallbl4:
test ah, 32 test ah, 32
jz pallbl5 jz pallbl5
add al, 40 add al, 40
;--------------------------------------
align 4
pallbl5: pallbl5:
out dx, al out dx, al
mov al, 0 mov al, 0
test ah, 1 test ah, 1
jz pallbl6 jz pallbl6
add al, 8 add al, 8
;--------------------------------------
align 4
pallbl6: pallbl6:
test ah, 2 test ah, 2
jz pallbl7 jz pallbl7
add al, 15 add al, 15
;--------------------------------------
align 4
pallbl7: pallbl7:
test ah, 4 test ah, 4
jz pallbl8 jz pallbl8
add al, 40 add al, 40
;--------------------------------------
align 4
pallbl8: pallbl8:
out dx, al out dx, al
add ah, 1 add ah, 1
loop palnew loop palnew
ret ret
;------------------------------------------------------------------------------
align 4 align 4
uglobal uglobal
novesachecksum dd 0x0 novesachecksum dd 0x0
@@ -123,13 +147,12 @@ uglobal
temp: temp:
.cx dd 0 .cx dd 0
endg endg
;------------------------------------------------------------------------------
align 4 align 4
checkVga_N13: checkVga_N13:
cmp [SCR_MODE], dword 0x13 cmp [SCR_MODE], dword 0x13
jne @f jne @f
; cnvl:
pushad pushad
cmp [EGA_counter], 1 cmp [EGA_counter], 1
je novesal je novesal
@@ -137,9 +160,12 @@ checkVga_N13:
cmp ecx, [novesachecksum] cmp ecx, [novesachecksum]
jne novesal jne novesal
popad popad
;--------------------------------------
align 4
@@: @@:
ret ret
;--------------------------------------
align 4
novesal: novesal:
mov [novesachecksum], ecx mov [novesachecksum], ecx
mov ecx, 0 mov ecx, 0
@@ -147,10 +173,14 @@ checkVga_N13:
cmp eax, 100 cmp eax, 100
jge m13l3 jge m13l3
mov eax, 100 mov eax, 100
;--------------------------------------
align 4
m13l3: m13l3:
cmp eax, 480-100 cmp eax, 480-100
jbe m13l4 jbe m13l4
mov eax, 480-100 mov eax, 480-100
;--------------------------------------
align 4
m13l4: m13l4:
sub eax, 100 sub eax, 100
imul eax, 640*4 imul eax, 640*4
@@ -159,10 +189,14 @@ checkVga_N13:
cmp eax, 160 cmp eax, 160
jge m13l1 jge m13l1
mov eax, 160 mov eax, 160
;--------------------------------------
align 4
m13l1: m13l1:
cmp eax, 640-160 cmp eax, 640-160
jbe m13l2 jbe m13l2
mov eax, 640-160 mov eax, 640-160
;--------------------------------------
align 4
m13l2: m13l2:
sub eax, 160 sub eax, 160
shl eax, 2 shl eax, 2
@@ -173,6 +207,8 @@ checkVga_N13:
mov edx, 200 mov edx, 200
mov ecx, 320 mov ecx, 320
cld cld
;--------------------------------------
align 4
m13pix: m13pix:
lodsd lodsd
test eax, eax test eax, eax
@@ -188,6 +224,8 @@ checkVga_N13:
and ebx, (128+64)*256*256; red and ebx, (128+64)*256*256; red
shr ebx, 8+8 shr ebx, 8+8
add eax, ebx add eax, ebx
;--------------------------------------
align 4
.save_pixel: .save_pixel:
stosb stosb
loop m13pix loop m13pix
@@ -198,16 +236,17 @@ checkVga_N13:
mov [EGA_counter], 0 mov [EGA_counter], 0
popad popad
ret ret
;------------------------------------------------------------------------------
align 4
VGA_drawbackground: VGA_drawbackground:
; draw all ; draw all
cmp [SCR_MODE], dword 0x12
jne .end
pushad pushad
mov esi, [LFBAddress] mov esi, [LFBAddress]
mov edi, VGABasePtr mov edi, VGABasePtr
mov ebx, 640/32; 640*480/(8*4) mov ebx, 640/32; 640*480/(8*4)
mov edx, 480 mov edx, 480
;--------------------------------------
align 4
@@: @@:
push ebx edx esi edi push ebx edx esi edi
shl edx, 9 shl edx, 9
@@ -221,9 +260,9 @@ VGA_drawbackground:
jnz @r jnz @r
call VGA_draw_long_line_1 call VGA_draw_long_line_1
popad popad
.end:
ret ret
;------------------------------------------------------------------------------
align 4
VGA_draw_long_line: VGA_draw_long_line:
mov dx, 3ceh mov dx, 3ceh
mov ax, 0ff08h mov ax, 0ff08h
@@ -231,6 +270,8 @@ VGA_draw_long_line:
out dx, ax out dx, ax
mov ax, 0005h mov ax, 0005h
out dx, ax out dx, ax
;--------------------------------------
align 4
m12pix: m12pix:
call VGA_draw_32_pixels call VGA_draw_32_pixels
dec ebx dec ebx
@@ -246,7 +287,8 @@ VGA_draw_long_line:
out dx, al out dx, al
sti sti
ret ret
;------------------------------------------------------------------------------
align 4
VGA_draw_32_pixels: VGA_draw_32_pixels:
xor eax, eax xor eax, eax
mov ebp, VGA_8_pixels mov ebp, VGA_8_pixels
@@ -255,8 +297,12 @@ VGA_draw_32_pixels:
mov [ebp+8], eax mov [ebp+8], eax
mov [ebp+12], eax mov [ebp+12], eax
mov ch, 4 mov ch, 4
;--------------------------------------
align 4
.main_loop: .main_loop:
mov cl, 8 mov cl, 8
;--------------------------------------
align 4
.convert_pixels_to_VGA: .convert_pixels_to_VGA:
lodsd ; eax = 24bit colour lodsd ; eax = 24bit colour
test eax, eax test eax, eax
@@ -273,6 +319,8 @@ VGA_draw_32_pixels:
cmp al, 170 cmp al, 170
jbe .p13green jbe .p13green
or [ebp+12], ch or [ebp+12], ch
;--------------------------------------
align 4
.p13green: .p13green:
cmp ah, 85 cmp ah, 85
jbe .p13red jbe .p13red
@@ -280,6 +328,8 @@ VGA_draw_32_pixels:
cmp ah, 170 cmp ah, 170
jbe .p13red jbe .p13red
or [ebp+12], ch or [ebp+12], ch
;--------------------------------------
align 4
.p13red: .p13red:
shr eax, 8 shr eax, 8
cmp ah, 85 cmp ah, 85
@@ -288,10 +338,14 @@ VGA_draw_32_pixels:
cmp ah, 170 cmp ah, 170
jbe .p13cont jbe .p13cont
or [ebp+12], ch or [ebp+12], ch
;--------------------------------------
align 4
.p13cont: .p13cont:
ror eax, 8 ror eax, 8
mov ch, ah mov ch, ah
inc cl inc cl
;--------------------------------------
align 4
.end: .end:
dec cl dec cl
jnz .convert_pixels_to_VGA jnz .convert_pixels_to_VGA
@@ -303,6 +357,8 @@ VGA_draw_32_pixels:
mov esi, ebp mov esi, ebp
mov dx, 3c4h mov dx, 3c4h
mov ah, 1h mov ah, 1h
;--------------------------------------
align 4
@@: @@:
mov al, 02h mov al, 02h
out dx, ax out dx, ax
@@ -316,12 +372,36 @@ VGA_draw_32_pixels:
add edi, 4 add edi, 4
pop esi pop esi
ret ret
;------------------------------------------------------------------------------
align 4
VGA_putpixel: VGA_putpixel:
; eax = x ; eax = x
; ebx = y ; ebx = y
mov ecx, eax mov ecx, eax
mov eax, [esp+32-8+4] ; color mov eax, [esp+32-8+4] ; color
;--------------------------------------
; check for hardware cursor
cmp [_display.select_cursor], select_cursor
je @f
cmp [_display.select_cursor], 0
jne .no_mouseunder
;--------------------------------------
align 4
@@:
push ecx
shl ecx, 16
mov cx, bx
; check mouse area for putpixel
test eax, 0x04000000
jnz @f
call [_display.check_mouse]
;--------------------------------------
align 4
@@:
pop ecx
;--------------------------------------
align 4
.no_mouseunder:
shl ebx, 9 shl ebx, 9
lea ebx, [ebx+ebx*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5 lea ebx, [ebx+ebx*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
lea edx, [ebx+ecx*4] ; + x*BytesPerPixel (Vesa2.0 32) lea edx, [ebx+ecx*4] ; + x*BytesPerPixel (Vesa2.0 32)
@@ -343,6 +423,8 @@ VGA_putpixel:
cmp al, 170 cmp al, 170
jbe .p13green jbe .p13green
or dl, 0x08 or dl, 0x08
;--------------------------------------
align 4
.p13green: .p13green:
cmp ah, 85 cmp ah, 85
jbe .p13red jbe .p13red
@@ -350,6 +432,8 @@ VGA_putpixel:
cmp ah, 170 cmp ah, 170
jbe .p13red jbe .p13red
or dl, 0x08 or dl, 0x08
;--------------------------------------
align 4
.p13red: .p13red:
shr eax, 8 shr eax, 8
cmp ah, 85 cmp ah, 85
@@ -358,6 +442,8 @@ VGA_putpixel:
cmp ah, 170 cmp ah, 170
jbe .p13cont jbe .p13cont
or dl, 0x08 or dl, 0x08
;--------------------------------------
align 4
.p13cont: .p13cont:
ror edx, 8 ror edx, 8
inc cl inc cl
@@ -371,14 +457,12 @@ VGA_putpixel:
rol edx, 8 rol edx, 8
mov [edi], dl mov [edi], dl
popfd popfd
;.end:
ret ret
;------------------------------------------------------------------------------
align 4
VGA__putimage: VGA__putimage:
; ecx = size [x|y] ; ecx = size [x|y]
; edx = coordinates [x|y] ; edx = coordinates [x|y]
cmp [SCR_MODE], dword 0x12
jne @f
pushad pushad
rol edx, 16 rol edx, 16
movzx eax, dx movzx eax, dx
@@ -389,16 +473,14 @@ VGA__putimage:
movzx ecx, cx movzx ecx, cx
call VGA_draw_bar_1 call VGA_draw_bar_1
popad popad
@@:
ret ret
;------------------------------------------------------------------------------
align 4
VGA_draw_bar: VGA_draw_bar:
; eax cx ; eax cx
; ebx cy ; ebx cy
; ecx xe ; ecx xe
; edx ye ; edx ye
cmp [SCR_MODE], dword 0x12
jne @f
pushad pushad
sub ecx, eax sub ecx, eax
sub edx, ebx sub edx, ebx
@@ -408,9 +490,9 @@ VGA_draw_bar:
and edx, 0xffff and edx, 0xffff
call VGA_draw_bar_1 call VGA_draw_bar_1
popad popad
@@:
ret ret
;------------------------------------------------------------------------------
align 4
VGA_draw_bar_1: VGA_draw_bar_1:
mov [temp.cx], eax mov [temp.cx], eax
mov eax, [TASK_BASE] mov eax, [TASK_BASE]
@@ -429,13 +511,16 @@ VGA_draw_bar_1:
mov ebx, ecx mov ebx, ecx
shr ebx, 5 shr ebx, 5
inc ebx inc ebx
;--------------------------------------
align 4
.main_loop: .main_loop:
call VGA_draw_long_line_1 call VGA_draw_long_line_1
dec edx dec edx
jnz .main_loop jnz .main_loop
call VGA_draw_long_line_1 call VGA_draw_long_line_1
ret ret
;------------------------------------------------------------------------------
align 4
VGA_draw_long_line_1: VGA_draw_long_line_1:
push ebx edx esi edi push ebx edx esi edi
shl edx, 9 shl edx, 9
@@ -446,5 +531,4 @@ VGA_draw_long_line_1:
call VGA_draw_long_line call VGA_draw_long_line
pop edi esi edx ebx pop edi esi edx ebx
ret ret
;------------------------------------------------------------------------------