forked from KolibriOS/kolibrios
Sync net branch with trunk
git-svn-id: svn://kolibrios.org@2540 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f28853c51d
commit
dd88d5bff6
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;**********************************************************
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
sys_cd_audio:
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2011-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision: 2381 $
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2011-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision: 2381 $
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
iglobal
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;**********************************************************
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; Low-level driver for HDD access
|
||||
@ -888,14 +888,14 @@ bd_write_cache_chain:
|
||||
.writeerr:
|
||||
popa
|
||||
mov [hd_error], 1
|
||||
jmp hd_write_error
|
||||
|
||||
uglobal
|
||||
int13_regs_in rb sizeof.v86_regs
|
||||
int13_regs_out rb sizeof.v86_regs
|
||||
endg
|
||||
|
||||
int13_call:
|
||||
jmp hd_write_error
|
||||
|
||||
uglobal
|
||||
int13_regs_in rb sizeof.v86_regs
|
||||
int13_regs_out rb sizeof.v86_regs
|
||||
endg
|
||||
|
||||
int13_call:
|
||||
; Because this code uses fixed addresses,
|
||||
; it can not be run simultaniously by many threads.
|
||||
; In current implementation it is protected by common mutex 'hd1_status'
|
||||
@ -904,13 +904,13 @@ int13_call:
|
||||
mov dword [OS_BASE + 514h], 9A000000h ; buffer 9A00:0000
|
||||
mov dword [OS_BASE + 518h], eax
|
||||
and dword [OS_BASE + 51Ch], 0
|
||||
push ebx ecx esi edi
|
||||
mov ebx, int13_regs_in
|
||||
mov edi, ebx
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
mov byte [ebx+v86_regs.eax+1], dl
|
||||
push ebx ecx esi edi
|
||||
mov ebx, int13_regs_in
|
||||
mov edi, ebx
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
mov byte [ebx+v86_regs.eax+1], dl
|
||||
mov eax, [hdpos]
|
||||
lea eax, [BiosDisksData+(eax-80h)*4]
|
||||
mov dl, [eax]
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -21,7 +21,7 @@
|
||||
;
|
||||
;**************************************************************************
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
align 4
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; RAMDISK functions ;;
|
||||
@ -9,7 +9,7 @@
|
||||
;; LFN support by diamond ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; calculate fat chain
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
iglobal
|
||||
|
@ -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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
@ -11,7 +11,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;==========================================================================
|
||||
@ -274,7 +274,7 @@ sayerr:
|
||||
|
||||
push 0
|
||||
pop es
|
||||
and word [es:0x9031], 0
|
||||
and word [es:BOOT_IDE_BASE_ADDR], 0
|
||||
; \begin{Mario79}
|
||||
; find HDD IDE DMA PCI device
|
||||
; check for PCI BIOS
|
||||
@ -311,7 +311,7 @@ sayerr:
|
||||
int 0x1A
|
||||
jc .nopci
|
||||
and cx, 0xFFF0 ; clear address decode type
|
||||
mov [es:0x9031], cx
|
||||
mov [es:BOOT_IDE_BASE_ADDR], cx
|
||||
.nopci:
|
||||
; \end{Mario79}
|
||||
|
||||
@ -343,15 +343,15 @@ wait_loop: ; variant 2
|
||||
loopnz @b
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; --------------- 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
|
||||
xor bx, bx
|
||||
int 0x15
|
||||
jc apm_end ; APM not found
|
||||
test cx, 2
|
||||
jz apm_end ; APM 32-bit protected-mode interface not supported
|
||||
mov [es:0x9044], ax ; Save APM Version
|
||||
mov [es:0x9046], cx ; Save APM flags
|
||||
mov [es:BOOT_APM_VERSION], ax ; Save APM Version
|
||||
mov [es:BOOT_APM_FLAGS], cx ; Save APM flags
|
||||
|
||||
; Write APM ver ----
|
||||
and ax, 0xf0f
|
||||
@ -370,10 +370,10 @@ wait_loop: ; variant 2
|
||||
xor bx, bx
|
||||
int 0x15
|
||||
|
||||
mov [es:0x9040], ebx
|
||||
mov [es:0x9050], ax
|
||||
mov [es:0x9052], cx
|
||||
mov [es:0x9054], dx
|
||||
mov [es:BOOT_APM_ENTRY], ebx
|
||||
mov [es:BOOT_APM_CODE_32], ax
|
||||
mov [es:BOOT_APM_CODE_16], cx
|
||||
mov [es:BOOT_APM_DATA_16], dx
|
||||
|
||||
apm_end:
|
||||
_setcursor d80x25_top_num, 0
|
||||
@ -1151,7 +1151,7 @@ no_sys_on_floppy:
|
||||
xor ax, ax
|
||||
mov es, ax
|
||||
|
||||
mov ax, [es:0x9008] ; vga & 320x200
|
||||
mov ax, [es:BOOT_VESA_MODE] ; vga & 320x200
|
||||
mov bx, ax
|
||||
cmp ax, 0x13
|
||||
je setgr
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -11,7 +11,7 @@
|
||||
;
|
||||
;======================================================================
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
d80x25_bottom:
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;======================================================================
|
||||
;
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;======================================================================
|
||||
;
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;=================================================================
|
||||
;
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; boot data: common strings (for all languages)
|
||||
@ -30,7 +30,7 @@ macro line_space {
|
||||
db 186
|
||||
}
|
||||
d80x25_top:
|
||||
line_full_top
|
||||
line_full_top
|
||||
cur_line_pos = 75
|
||||
store byte ' ' at d80x25_top+cur_line_pos+1
|
||||
rev_var = __REV__
|
||||
@ -42,21 +42,21 @@ end while
|
||||
store byte ' ' at d80x25_top+cur_line_pos
|
||||
store dword ' SVN' at d80x25_top+cur_line_pos-4
|
||||
|
||||
space_msg: line_space
|
||||
space_msg: line_space
|
||||
verstr:
|
||||
; line_space
|
||||
; line_space
|
||||
; version string
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from version+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
db 186,32
|
||||
repeat 78
|
||||
load a byte from version+%-1
|
||||
if a = 13
|
||||
break
|
||||
end if
|
||||
db a
|
||||
end repeat
|
||||
repeat 78 - ($-verstr)
|
||||
db ' '
|
||||
end repeat
|
||||
db 32,186
|
||||
line_half
|
||||
d80x25_top_num = 4
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
struc VBE_VGAInfo {
|
||||
.VESASignature dd ? ; char
|
||||
@ -215,7 +215,7 @@ calc_vmodes_table:
|
||||
test [es:mi.ModeAttributes],10000000b ;LFB ?
|
||||
jz @f
|
||||
|
||||
cmp [es:mi.BitsPerPixel], 24 ;It show only videomodes to have support 24 and 32 bpp
|
||||
cmp [es:mi.BitsPerPixel], 24 ;It show only videomodes to have support 24 and 32 bpp
|
||||
jb @f
|
||||
|
||||
; cmp [es:mi.BitsPerPixel],16
|
||||
@ -240,11 +240,12 @@ calc_vmodes_table:
|
||||
mov ax,[es:mi.ModeAttributes]
|
||||
mov [es:bx+4],ax ; +4[2] : attributes
|
||||
|
||||
cmp [s_vesa.ver],'2'
|
||||
jb .lp1
|
||||
cmp [s_vesa.ver], '2'
|
||||
; jb .lp1
|
||||
jb @f ; We do not use Vesa 1.2 mode is now
|
||||
|
||||
or cx,0x4000 ; use LFB
|
||||
.lp1: mov [es:bx+6],cx ; +6 : mode number
|
||||
or cx, 0x4000 ; use LFB
|
||||
.lp1: mov [es:bx+6],cx ; +6 : mode number
|
||||
movzx ax,byte [es:mi.BitsPerPixel]
|
||||
mov word [es:bx+8],ax ; +8 : bits per pixel
|
||||
add bx,size_of_step ; size of record
|
||||
@ -379,7 +380,7 @@ check_first_parm:
|
||||
|
||||
|
||||
.no_zero:
|
||||
mov bp,word [number_vm]
|
||||
mov bp,word [number_vm]
|
||||
cmp bp,word [es:si+6]
|
||||
jz .ok_found_mode
|
||||
mov ax,word [x_save]
|
||||
@ -389,7 +390,7 @@ check_first_parm:
|
||||
test ax,ax
|
||||
jz .ok_found_mode
|
||||
|
||||
mov si,modes_table
|
||||
mov si,modes_table
|
||||
; cmp ax,modes_table
|
||||
; jb .zerro ;check on correct if bellow
|
||||
; cmp ax,word [end_cursor]
|
||||
@ -415,7 +416,7 @@ check_first_parm:
|
||||
@@:
|
||||
|
||||
mov word [home_cursor],ax
|
||||
mov si,[preboot_graph]
|
||||
mov si,[preboot_graph]
|
||||
mov word [cursor_pos],si
|
||||
|
||||
push word [es:si]
|
||||
@ -441,9 +442,9 @@ check_first_parm:
|
||||
je .exit
|
||||
jmp .loops
|
||||
.ok: xor ax,ax
|
||||
ret
|
||||
.exit: or ax,-1
|
||||
ret
|
||||
ret
|
||||
.exit: or ax,-1
|
||||
ret
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
@ -542,7 +543,7 @@ draw_vmodes_table:
|
||||
mov bp,long_v_table ;show rows
|
||||
.@@_next_bit:
|
||||
;clear cursor
|
||||
mov ax,' '
|
||||
mov ax,' '
|
||||
mov word[ds:_r1+21],ax
|
||||
mov word[ds:_r1+50],ax
|
||||
|
||||
@ -662,7 +663,7 @@ clear_vmodes_table:
|
||||
mov cx,70
|
||||
add di,20
|
||||
dec bp
|
||||
jns .loop_start
|
||||
jns .loop_start
|
||||
pop es
|
||||
popa
|
||||
ret
|
||||
@ -678,21 +679,21 @@ set_vmode:
|
||||
|
||||
|
||||
mov ax,word [es:si+0] ; resolution X
|
||||
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:0x900C],bx ; resolution Y
|
||||
mov word [es:0x9008],cx ; number of mode
|
||||
mov word [es:BOOT_X_RES], ax ; resolution X
|
||||
mov word [es:BOOT_Y_RES], bx ; resolution Y
|
||||
mov word [es:BOOT_VESA_MODE], cx ; number of mode
|
||||
|
||||
cmp cx,0x12
|
||||
cmp cx, 0x12
|
||||
je .mode0x12_0x13
|
||||
cmp cx,0x13
|
||||
je .mode0x12_0x13
|
||||
|
||||
|
||||
cmp byte [s_vesa.ver],'2'
|
||||
jb .vesa12
|
||||
; cmp byte [s_vesa.ver], '2'
|
||||
; jb .vesa12
|
||||
|
||||
; VESA 2 and Vesa 3
|
||||
|
||||
@ -701,54 +702,48 @@ set_vmode:
|
||||
mov di,mi;0xa000
|
||||
int 0x10
|
||||
; LFB
|
||||
mov eax,[es:mi.PhysBasePtr];di+0x28]
|
||||
mov [es:0x9018],eax
|
||||
mov eax, [es:mi.PhysBasePtr];di+0x28]
|
||||
mov [es:BOOT_LFB], eax
|
||||
; ---- vbe voodoo
|
||||
BytesPerLine equ 0x10
|
||||
mov ax, [es:di+BytesPerLine]
|
||||
mov [es:0x9001], ax
|
||||
mov [es:BOOT_PITCH], ax
|
||||
; BPP
|
||||
cmp [es:mi.BitsPerPixel],16
|
||||
cmp [es:mi.BitsPerPixel], 16
|
||||
jne .l0
|
||||
cmp [es:mi.GreenMaskSize],5
|
||||
jne .l0
|
||||
mov [es:mi.BitsPerPixel],15
|
||||
mov [es:mi.BitsPerPixel], 15
|
||||
.l0:
|
||||
mov al, byte [es:di+0x19]
|
||||
mov [es:0x9000], al
|
||||
mov [es:BOOT_BPP], al
|
||||
jmp .exit
|
||||
|
||||
.mode0x12_0x13:
|
||||
mov byte [es:0x9000], 32
|
||||
or dword [es:0x9018], 0xFFFFFFFF; 0x800000
|
||||
mov byte [es:BOOT_BPP], 32
|
||||
or dword [es:BOOT_LFB], 0xFFFFFFFF; 0x800000
|
||||
|
||||
|
||||
; VESA 1.2 PM BANK SWITCH ADDRESS
|
||||
|
||||
.vesa12:
|
||||
|
||||
|
||||
mov ax,0x4f0A
|
||||
xor bx,bx
|
||||
int 0x10
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
mov ax,es
|
||||
shl eax,4
|
||||
mov bx,di
|
||||
add eax,ebx
|
||||
movzx ebx,word[es:di]
|
||||
add eax,ebx
|
||||
push 0x0000
|
||||
pop es
|
||||
mov [es:0x9014],eax
|
||||
;.vesa12:
|
||||
; mov ax, 0x4f0A
|
||||
; xor bx, bx
|
||||
; int 0x10
|
||||
; xor eax, eax
|
||||
; xor ebx, ebx
|
||||
; mov ax, es
|
||||
; shl eax, 4
|
||||
; mov bx, di
|
||||
; add eax, ebx
|
||||
; movzx ebx, word[es:di]
|
||||
; add eax, ebx
|
||||
; push 0x0000
|
||||
; pop es
|
||||
; mov [es:0x9014], eax
|
||||
.exit:
|
||||
ret
|
||||
|
||||
|
||||
; mov dword[es:0x9018],0x000A0000
|
||||
; ret
|
||||
|
||||
;=============================================================================
|
||||
;=============================================================================
|
||||
;=============================================================================
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
|
@ -1,38 +1,38 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
display_modechg db 0 ; display mode change for text, yes/no (0 or 2)
|
||||
;
|
||||
; !! Important note !!
|
||||
;
|
||||
; Must be set to 2, to avoid two screenmode
|
||||
; changes within a very short period of time.
|
||||
display_modechg db 0 ; display mode change for text, yes/no (0 or 2)
|
||||
;
|
||||
; !! Important note !!
|
||||
;
|
||||
; Must be set to 2, to avoid two screenmode
|
||||
; changes within a very short period of time.
|
||||
|
||||
display_atboot db 0 ; show boot screen messages ( 2-no )
|
||||
display_atboot db 0 ; show boot screen messages ( 2-no )
|
||||
|
||||
preboot_graph dw 0 ; graph mode
|
||||
x_save dw 0 ; x
|
||||
y_save dw 0 ; y
|
||||
number_vm dw 0 ;
|
||||
preboot_graph dw 0 ; graph mode
|
||||
x_save dw 0 ; x
|
||||
y_save dw 0 ; y
|
||||
number_vm dw 0 ;
|
||||
;pixel_save dw 0 ; per to pixel
|
||||
preboot_gprobe db 0 ; probe vesa3 videomodes (1-no, 2-yes)
|
||||
preboot_vrrm db 0 ; use VRR_M (1-yes, 2- no)
|
||||
preboot_dma db 0 ; use DMA for access to HDD (1-always, 2-only for read, 3-never)
|
||||
preboot_device db 0 ; boot device
|
||||
; (1-floppy 2-harddisk 3-kernel restart 4-format ram disk)
|
||||
;!!!! 0 - autodetect !!!!
|
||||
preboot_gprobe db 0 ; probe vesa3 videomodes (1-no, 2-yes)
|
||||
preboot_vrrm db 0 ; use VRR_M (1-yes, 2- no)
|
||||
preboot_dma db 0 ; use DMA for access to HDD (1-always, 2-only for read, 3-never)
|
||||
preboot_device db 0 ; boot device
|
||||
; (1-floppy 2-harddisk 3-kernel restart 4-format ram disk)
|
||||
;!!!! 0 - autodetect !!!!
|
||||
preboot_blogesc = 0 ; start immediately after bootlog
|
||||
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
||||
preboot_biosdisk db 0 ; use V86 to access disks through BIOS (1-yes, 2-no)
|
||||
|
||||
if $>0x200
|
||||
ERROR: prebooting parameters must fit in first sector!!!
|
||||
end if
|
||||
hdsysimage db 'KOLIBRI IMG' ; load from
|
||||
image_save db 'KOLIBRI IMG' ; save to
|
||||
hdsysimage db 'KOLIBRI IMG' ; load from
|
||||
image_save db 'KOLIBRI IMG' ; save to
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; READ RAMDISK IMAGE FROM HD
|
||||
@ -108,17 +108,17 @@ no_sys_on_hd:
|
||||
mov edi, RAMDISK
|
||||
mov ecx, 0x1080
|
||||
xor eax,eax
|
||||
@@:
|
||||
stosd
|
||||
@@:
|
||||
stosd
|
||||
loop @b
|
||||
|
||||
mov ecx, 0x58F7F
|
||||
mov eax,0xF6F6F6F6
|
||||
@@:
|
||||
stosd
|
||||
@@:
|
||||
stosd
|
||||
loop @b
|
||||
|
||||
mov [RAMDISK+0x200],dword 0xFFFFF0 ; fat table
|
||||
mov [RAMDISK+0x200],dword 0xFFFFF0 ; fat table
|
||||
mov [RAMDISK+0x4200],dword 0xFFFFF0
|
||||
|
||||
not_format_ram_disk:
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; Shutdown for Menuet ;;
|
||||
@ -11,7 +11,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
align 4
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) 2010 KolibriOS team. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2010-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
;; PCIe.INC ;;
|
||||
;; ;;
|
||||
;; Extended PCI express services ;;
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; PCI16.INC ;;
|
||||
@ -15,7 +15,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
init_pci_16:
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
@ -21,7 +21,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
;***************************************************************************
|
||||
; Function
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
dpl0 equ 10010000b ; data read dpl0
|
||||
@ -176,12 +176,12 @@ struct TSS
|
||||
_io rw 1
|
||||
rb 24
|
||||
_io_map_0 rb 4096
|
||||
_io_map_1 rb 4096
|
||||
ends
|
||||
|
||||
OS_BASE equ 0x80000000
|
||||
|
||||
window_data equ (OS_BASE+0x0001000)
|
||||
_io_map_1 rb 4096
|
||||
ends
|
||||
|
||||
OS_BASE equ 0x80000000
|
||||
|
||||
window_data equ (OS_BASE+0x0001000)
|
||||
|
||||
CURRENT_TASK equ (OS_BASE+0x0003000)
|
||||
TASK_COUNT equ (OS_BASE+0x0003004)
|
||||
@ -210,7 +210,7 @@ BANK_SWITCH equ (OS_BASE+0x000E030)
|
||||
;unused ? store mousepointer
|
||||
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)
|
||||
KEY_COUNT equ (OS_BASE+0x000F400)
|
||||
KEY_BUFF equ (OS_BASE+0x000F401)
|
||||
@ -255,7 +255,7 @@ SYS_SHUTDOWN equ (OS_BASE+0x000FF00)
|
||||
TASK_ACTIVATE equ (OS_BASE+0x000FF01)
|
||||
|
||||
REDRAW_BACKGROUND equ (OS_BASE+0x000FFF0)
|
||||
BACKGROUND_CHANGED equ (OS_BASE+0x000FFF1)
|
||||
|
||||
BANK_RW equ (OS_BASE+0x000FFF2)
|
||||
MOUSE_BACKGROUND equ (OS_BASE+0x000FFF4)
|
||||
DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5)
|
||||
@ -289,7 +289,11 @@ BgrAuxTable equ (OS_BASE+0x0298000)
|
||||
SB16Buffer equ (OS_BASE+0x02A0000)
|
||||
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)
|
||||
BOOT_VAR equ (OS_BASE+0x02E0000)
|
||||
|
||||
@ -362,22 +366,30 @@ PG_SHARED equ 0x200
|
||||
|
||||
;;;;;;;;;;;boot time variables
|
||||
|
||||
;BOOT_BPP equ 0x9000 ;byte bits per pixel
|
||||
BOOT_SCANLINE equ 0x9001 ;word scanline length
|
||||
BOOT_BPP equ 0x9000 ;byte bits per pixel
|
||||
BOOT_PITCH equ 0x9001 ;word scanline length
|
||||
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode
|
||||
;;BOOT_X_RES equ 0x900A ;word X res
|
||||
;;BOOT_Y_RES equ 0x900C ;word Y res
|
||||
BOOT_X_RES equ 0x900A ;word X res
|
||||
BOOT_Y_RES equ 0x900C ;word Y res
|
||||
;;BOOT_MOUSE_PORT equ 0x9010 ;byte mouse port - not used
|
||||
BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch
|
||||
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address
|
||||
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_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_VRR equ 0x9030 ;byte VRR start enabled 1, 2-no
|
||||
BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr
|
||||
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_CMD_LINE equ 1024
|
||||
TMP_ICON_OFFS equ 1280
|
||||
@ -392,259 +404,262 @@ EVENT_IPC equ 0x00000040
|
||||
EVENT_NETWORK equ 0x00000080
|
||||
EVENT_DEBUG equ 0x00000100
|
||||
EVENT_EXTENDED equ 0x00000200
|
||||
|
||||
EV_INTR equ 1
|
||||
|
||||
struct THR_DATA
|
||||
rb (8192-512)
|
||||
; pl0_stack
|
||||
fpu_state rb 512
|
||||
tls_page rb 4096
|
||||
pdbr rb 4096
|
||||
ends
|
||||
|
||||
virtual at (OS_BASE-sizeof.THR_DATA)
|
||||
thr_data THR_DATA
|
||||
end virtual
|
||||
|
||||
struct SYS_VARS
|
||||
bpp dd ?
|
||||
scanline dd ?
|
||||
vesa_mode dd ?
|
||||
x_res dd ?
|
||||
y_res dd ?
|
||||
ends
|
||||
|
||||
struct APPOBJ ; common object header
|
||||
magic dd ? ;
|
||||
destroy dd ? ; internal destructor
|
||||
fd dd ? ; next object in list
|
||||
bk dd ? ; prev object in list
|
||||
pid dd ? ; owner id
|
||||
ends
|
||||
|
||||
APP_OBJ_OFFSET equ 48
|
||||
APP_EV_OFFSET equ 40
|
||||
|
||||
struct CURSOR APPOBJ
|
||||
base dd ? ;allocated memory
|
||||
hot_x dd ? ;hotspot coords
|
||||
hot_y dd ?
|
||||
|
||||
list_next dd ? ;next cursor in cursor list
|
||||
list_prev dd ? ;prev cursor in cursor list
|
||||
dev_obj dd ? ;device depended data
|
||||
ends
|
||||
|
||||
|
||||
struct EVENT APPOBJ
|
||||
id dd ? ;event uid
|
||||
state dd ? ;internal flags
|
||||
code dd ?
|
||||
rd 5
|
||||
ends
|
||||
|
||||
|
||||
struct SMEM
|
||||
bk dd ?
|
||||
fd dd ? ;+4
|
||||
base dd ? ;+8
|
||||
size dd ? ;+12
|
||||
access dd ? ;+16
|
||||
refcount dd ? ;+20
|
||||
name rb 32 ;+24
|
||||
ends
|
||||
|
||||
struct SMAP APPOBJ
|
||||
base dd ? ;mapped base
|
||||
parent dd ? ;SMEM
|
||||
ends
|
||||
|
||||
struct DLLDESCR
|
||||
bk dd ?
|
||||
fd dd ? ;+4
|
||||
data dd ? ;+8
|
||||
size dd ? ;+12
|
||||
timestamp dq ?
|
||||
refcount dd ?
|
||||
defaultbase dd ?
|
||||
coff_hdr dd ?
|
||||
symbols_ptr dd ?
|
||||
symbols_num dd ?
|
||||
symbols_lim dd ?
|
||||
exports dd ? ;export table
|
||||
name rb 260
|
||||
ends
|
||||
|
||||
struct HDLL
|
||||
fd dd ? ;next object in list
|
||||
bk dd ? ;prev object in list
|
||||
pid dd ? ;owner id
|
||||
|
||||
base dd ? ;mapped base
|
||||
size dd ? ;mapped size
|
||||
refcount dd ? ;reference counter for this process and this lib
|
||||
parent dd ? ;DLLDESCR
|
||||
ends
|
||||
|
||||
struct display_t
|
||||
x dd ?
|
||||
y dd ?
|
||||
width dd ?
|
||||
height dd ?
|
||||
bpp dd ?
|
||||
vrefresh dd ?
|
||||
pitch dd ?
|
||||
lfb dd ?
|
||||
|
||||
modes dd ?
|
||||
ddev dd ?
|
||||
connector dd ?
|
||||
crtc dd ?
|
||||
|
||||
cr_list.next dd ?
|
||||
cr_list.prev dd ?
|
||||
|
||||
cursor dd ?
|
||||
|
||||
init_cursor dd ?
|
||||
select_cursor dd ?
|
||||
show_cursor dd ?
|
||||
move_cursor dd ?
|
||||
restore_cursor dd ?
|
||||
disable_mouse dd ?
|
||||
ends
|
||||
|
||||
struct BOOT_DATA
|
||||
bpp dd ?
|
||||
scanline dd ?
|
||||
vesa_mode dd ?
|
||||
x_res dd ?
|
||||
y_res dd ?
|
||||
mouse_port dd ?
|
||||
bank_switch dd ?
|
||||
lfb dd ?
|
||||
vesa_mem dd ?
|
||||
log dd ?
|
||||
direct_lfb dd ?
|
||||
pci_data dd ?
|
||||
dd ?
|
||||
vrr dd ?
|
||||
ide_base dd ?
|
||||
mem_amount dd ?
|
||||
pages_count dd ?
|
||||
pagemap_size dd ?
|
||||
kernel_max dd ?
|
||||
kernel_pages dd ?
|
||||
kernel_tables dd ?
|
||||
|
||||
cpu_vendor dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
cpu_sign dd ?
|
||||
cpu_info dd ?
|
||||
cpu_caps dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
ends
|
||||
|
||||
struct LHEAD
|
||||
next dd ? ;next object in list
|
||||
prev dd ? ;prev object in list
|
||||
ends
|
||||
|
||||
struct MUTEX
|
||||
lhead LHEAD
|
||||
count dd ?
|
||||
ends
|
||||
|
||||
struct MEM_STATE
|
||||
mutex MUTEX
|
||||
smallmap dd ?
|
||||
treemap dd ?
|
||||
topsize dd ?
|
||||
top dd ?
|
||||
smallbins rd 4*32
|
||||
treebins rd 32
|
||||
ends
|
||||
|
||||
struct PG_DATA
|
||||
mem_amount dd ?
|
||||
vesa_mem dd ?
|
||||
pages_count dd ?
|
||||
pages_free dd ?
|
||||
pages_faults dd ?
|
||||
pagemap_size dd ?
|
||||
kernel_pages dd ?
|
||||
kernel_tables dd ?
|
||||
sys_page_dir dd ?
|
||||
mutex MUTEX
|
||||
ends
|
||||
|
||||
struct SRV
|
||||
srv_name rb 16 ;ASCIIZ string
|
||||
magic dd ? ;+0x10 ;'SRV '
|
||||
size dd ? ;+0x14 ;size of structure SRV
|
||||
fd dd ? ;+0x18 ;next SRV descriptor
|
||||
bk dd ? ;+0x1C ;prev SRV descriptor
|
||||
base dd ? ;+0x20 ;service base address
|
||||
entry dd ? ;+0x24 ;service START function
|
||||
srv_proc dd ? ;+0x28 ;user mode service handler
|
||||
srv_proc_ex dd ? ;+0x2C ;kernel mode service handler
|
||||
ends
|
||||
|
||||
DRV_ENTRY equ 1
|
||||
DRV_EXIT equ -1
|
||||
|
||||
struct COFF_HEADER
|
||||
machine dw ?
|
||||
nSections dw ?
|
||||
DataTime dd ?
|
||||
pSymTable dd ?
|
||||
nSymbols dd ?
|
||||
optHeader dw ?
|
||||
flags dw ?
|
||||
ends
|
||||
|
||||
struct COFF_SECTION
|
||||
Name rb 8
|
||||
VirtualSize dd ?
|
||||
VirtualAddress dd ?
|
||||
SizeOfRawData dd ?
|
||||
PtrRawData dd ?
|
||||
PtrReloc dd ?
|
||||
PtrLinenumbers dd ?
|
||||
NumReloc dw ?
|
||||
NumLinenum dw ?
|
||||
Characteristics dd ?
|
||||
ends
|
||||
|
||||
struct COFF_RELOC
|
||||
VirtualAddress dd ?
|
||||
SymIndex dd ?
|
||||
Type dw ?
|
||||
ends
|
||||
|
||||
struct COFF_SYM
|
||||
Name rb 8
|
||||
Value dd ?
|
||||
SectionNumber dw ?
|
||||
Type dw ?
|
||||
StorageClass db ?
|
||||
NumAuxSymbols db ?
|
||||
ends
|
||||
|
||||
struct IOCTL
|
||||
handle dd ?
|
||||
io_code dd ?
|
||||
input dd ?
|
||||
inp_size dd ?
|
||||
output dd ?
|
||||
out_size dd ?
|
||||
ends
|
||||
|
||||
struct IRQH
|
||||
list LHEAD
|
||||
handler dd ? ;handler roututine
|
||||
data dd ? ;user-specific data
|
||||
ends
|
||||
|
||||
EV_INTR equ 1
|
||||
|
||||
struct THR_DATA
|
||||
rb (8192-512)
|
||||
; pl0_stack
|
||||
fpu_state rb 512
|
||||
tls_page rb 4096
|
||||
pdbr rb 4096
|
||||
ends
|
||||
|
||||
virtual at (OS_BASE-sizeof.THR_DATA)
|
||||
thr_data THR_DATA
|
||||
end virtual
|
||||
|
||||
struct SYS_VARS
|
||||
bpp dd ?
|
||||
scanline dd ?
|
||||
vesa_mode dd ?
|
||||
x_res dd ?
|
||||
y_res dd ?
|
||||
ends
|
||||
|
||||
struct APPOBJ ; common object header
|
||||
magic dd ? ;
|
||||
destroy dd ? ; internal destructor
|
||||
fd dd ? ; next object in list
|
||||
bk dd ? ; prev object in list
|
||||
pid dd ? ; owner id
|
||||
ends
|
||||
|
||||
APP_OBJ_OFFSET equ 48
|
||||
APP_EV_OFFSET equ 40
|
||||
|
||||
struct CURSOR APPOBJ
|
||||
base dd ? ;allocated memory
|
||||
hot_x dd ? ;hotspot coords
|
||||
hot_y dd ?
|
||||
|
||||
list_next dd ? ;next cursor in cursor list
|
||||
list_prev dd ? ;prev cursor in cursor list
|
||||
dev_obj dd ? ;device depended data
|
||||
ends
|
||||
|
||||
|
||||
struct EVENT APPOBJ
|
||||
id dd ? ;event uid
|
||||
state dd ? ;internal flags
|
||||
code dd ?
|
||||
rd 5
|
||||
ends
|
||||
|
||||
|
||||
struct SMEM
|
||||
bk dd ?
|
||||
fd dd ? ;+4
|
||||
base dd ? ;+8
|
||||
size dd ? ;+12
|
||||
access dd ? ;+16
|
||||
refcount dd ? ;+20
|
||||
name rb 32 ;+24
|
||||
ends
|
||||
|
||||
struct SMAP APPOBJ
|
||||
base dd ? ;mapped base
|
||||
parent dd ? ;SMEM
|
||||
ends
|
||||
|
||||
struct DLLDESCR
|
||||
bk dd ?
|
||||
fd dd ? ;+4
|
||||
data dd ? ;+8
|
||||
size dd ? ;+12
|
||||
timestamp dq ?
|
||||
refcount dd ?
|
||||
defaultbase dd ?
|
||||
coff_hdr dd ?
|
||||
symbols_ptr dd ?
|
||||
symbols_num dd ?
|
||||
symbols_lim dd ?
|
||||
exports dd ? ;export table
|
||||
name rb 260
|
||||
ends
|
||||
|
||||
struct HDLL
|
||||
fd dd ? ;next object in list
|
||||
bk dd ? ;prev object in list
|
||||
pid dd ? ;owner id
|
||||
|
||||
base dd ? ;mapped base
|
||||
size dd ? ;mapped size
|
||||
refcount dd ? ;reference counter for this process and this lib
|
||||
parent dd ? ;DLLDESCR
|
||||
ends
|
||||
|
||||
struct display_t
|
||||
x dd ?
|
||||
y dd ?
|
||||
width dd ?
|
||||
height dd ?
|
||||
bpp dd ?
|
||||
vrefresh dd ?
|
||||
pitch dd ?
|
||||
lfb dd ?
|
||||
|
||||
modes dd ?
|
||||
ddev dd ?
|
||||
connector dd ?
|
||||
crtc dd ?
|
||||
|
||||
cr_list.next dd ?
|
||||
cr_list.prev dd ?
|
||||
|
||||
cursor dd ?
|
||||
|
||||
init_cursor dd ?
|
||||
select_cursor dd ?
|
||||
show_cursor dd ?
|
||||
move_cursor dd ?
|
||||
restore_cursor dd ?
|
||||
disable_mouse dd ?
|
||||
mask_seqno dd ?
|
||||
check_mouse dd ?
|
||||
check_m_pixel dd ?
|
||||
ends
|
||||
|
||||
struct BOOT_DATA
|
||||
bpp dd ?
|
||||
scanline dd ?
|
||||
vesa_mode dd ?
|
||||
x_res dd ?
|
||||
y_res dd ?
|
||||
mouse_port dd ?
|
||||
bank_switch dd ?
|
||||
lfb dd ?
|
||||
vesa_mem dd ?
|
||||
log dd ?
|
||||
direct_lfb dd ?
|
||||
pci_data dd ?
|
||||
dd ?
|
||||
vrr dd ?
|
||||
ide_base dd ?
|
||||
mem_amount dd ?
|
||||
pages_count dd ?
|
||||
pagemap_size dd ?
|
||||
kernel_max dd ?
|
||||
kernel_pages dd ?
|
||||
kernel_tables dd ?
|
||||
|
||||
cpu_vendor dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
cpu_sign dd ?
|
||||
cpu_info dd ?
|
||||
cpu_caps dd ?
|
||||
dd ?
|
||||
dd ?
|
||||
ends
|
||||
|
||||
struct LHEAD
|
||||
next dd ? ;next object in list
|
||||
prev dd ? ;prev object in list
|
||||
ends
|
||||
|
||||
struct MUTEX
|
||||
lhead LHEAD
|
||||
count dd ?
|
||||
ends
|
||||
|
||||
struct MEM_STATE
|
||||
mutex MUTEX
|
||||
smallmap dd ?
|
||||
treemap dd ?
|
||||
topsize dd ?
|
||||
top dd ?
|
||||
smallbins rd 4*32
|
||||
treebins rd 32
|
||||
ends
|
||||
|
||||
struct PG_DATA
|
||||
mem_amount dd ?
|
||||
vesa_mem dd ?
|
||||
pages_count dd ?
|
||||
pages_free dd ?
|
||||
pages_faults dd ?
|
||||
pagemap_size dd ?
|
||||
kernel_pages dd ?
|
||||
kernel_tables dd ?
|
||||
sys_page_dir dd ?
|
||||
mutex MUTEX
|
||||
ends
|
||||
|
||||
struct SRV
|
||||
srv_name rb 16 ;ASCIIZ string
|
||||
magic dd ? ;+0x10 ;'SRV '
|
||||
size dd ? ;+0x14 ;size of structure SRV
|
||||
fd dd ? ;+0x18 ;next SRV descriptor
|
||||
bk dd ? ;+0x1C ;prev SRV descriptor
|
||||
base dd ? ;+0x20 ;service base address
|
||||
entry dd ? ;+0x24 ;service START function
|
||||
srv_proc dd ? ;+0x28 ;user mode service handler
|
||||
srv_proc_ex dd ? ;+0x2C ;kernel mode service handler
|
||||
ends
|
||||
|
||||
DRV_ENTRY equ 1
|
||||
DRV_EXIT equ -1
|
||||
|
||||
struct COFF_HEADER
|
||||
machine dw ?
|
||||
nSections dw ?
|
||||
DataTime dd ?
|
||||
pSymTable dd ?
|
||||
nSymbols dd ?
|
||||
optHeader dw ?
|
||||
flags dw ?
|
||||
ends
|
||||
|
||||
struct COFF_SECTION
|
||||
Name rb 8
|
||||
VirtualSize dd ?
|
||||
VirtualAddress dd ?
|
||||
SizeOfRawData dd ?
|
||||
PtrRawData dd ?
|
||||
PtrReloc dd ?
|
||||
PtrLinenumbers dd ?
|
||||
NumReloc dw ?
|
||||
NumLinenum dw ?
|
||||
Characteristics dd ?
|
||||
ends
|
||||
|
||||
struct COFF_RELOC
|
||||
VirtualAddress dd ?
|
||||
SymIndex dd ?
|
||||
Type dw ?
|
||||
ends
|
||||
|
||||
struct COFF_SYM
|
||||
Name rb 8
|
||||
Value dd ?
|
||||
SectionNumber dw ?
|
||||
Type dw ?
|
||||
StorageClass db ?
|
||||
NumAuxSymbols db ?
|
||||
ends
|
||||
|
||||
struct IOCTL
|
||||
handle dd ?
|
||||
io_code dd ?
|
||||
input dd ?
|
||||
inp_size dd ?
|
||||
output dd ?
|
||||
out_size dd ?
|
||||
ends
|
||||
|
||||
struct IRQH
|
||||
list LHEAD
|
||||
handler dd ? ;handler roututine
|
||||
data dd ? ;user-specific data
|
||||
ends
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
iglobal
|
||||
@ -58,13 +58,13 @@ APIC_init:
|
||||
mov [acpi_dev_data], eax
|
||||
mov [acpi_dev_size], ebx
|
||||
|
||||
call IRQ_mask_all
|
||||
|
||||
; IOAPIC init
|
||||
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW
|
||||
mov [IOAPIC_base], eax
|
||||
|
||||
mov eax, IOAPIC_VER
|
||||
call IRQ_mask_all
|
||||
|
||||
; IOAPIC init
|
||||
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW+PG_NOCACHE
|
||||
mov [IOAPIC_base], eax
|
||||
|
||||
mov eax, IOAPIC_VER
|
||||
call IOAPIC_read
|
||||
shr eax, 16
|
||||
inc al
|
||||
@ -118,20 +118,17 @@ APIC_init:
|
||||
|
||||
ret
|
||||
|
||||
;===========================================================
|
||||
align 4
|
||||
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
|
||||
mov [LAPIC_BASE], eax
|
||||
mov esi, eax
|
||||
|
||||
;===========================================================
|
||||
align 4
|
||||
LAPIC_init:
|
||||
|
||||
cmp [LAPIC_BASE], 0
|
||||
jne .done
|
||||
|
||||
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE
|
||||
mov [LAPIC_BASE], eax
|
||||
mov esi, eax
|
||||
|
||||
; Program Destination Format Register for Flat mode.
|
||||
mov eax, [esi + APIC_DFR]
|
||||
or eax, 0xf0000000
|
||||
@ -197,12 +194,14 @@ LAPIC_init:
|
||||
xor eax, 0xffffffff ; eax = 0xffffffff - eax
|
||||
shr eax, 6 ; eax /= 64; APIC ticks per 0.01 sec
|
||||
|
||||
; Start (every 0.01 sec)
|
||||
mov dword[esi + APIC_LVT_timer], 0x30020; periodic int 0x20
|
||||
mov dword[esi + APIC_timer_init], eax
|
||||
ret
|
||||
|
||||
;===========================================================
|
||||
; Start (every 0.01 sec)
|
||||
mov dword[esi + APIC_LVT_timer], 0x30020; periodic int 0x20
|
||||
mov dword[esi + APIC_timer_init], eax
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
;===========================================================
|
||||
; IOAPIC implementation
|
||||
align 4
|
||||
IOAPIC_read:
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -10,7 +10,7 @@
|
||||
; {SPraid.simba}
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
iglobal
|
||||
conf_path_sect:
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; diamond, 2006
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
DRV_COMPAT equ 5 ;minimal required drivers version
|
||||
@ -136,13 +136,13 @@ proc srv_handler stdcall, ioctl:dword
|
||||
jz .err
|
||||
|
||||
mov edi, [esi+handle]
|
||||
cmp [edi+SRV.magic], ' SRV'
|
||||
jne .fail
|
||||
|
||||
cmp [edi+SRV.size], sizeof.SRV
|
||||
jne .fail
|
||||
|
||||
stdcall [edi+SRV.srv_proc], esi
|
||||
cmp [edi+SRV.magic], ' SRV'
|
||||
jne .fail
|
||||
|
||||
cmp [edi+SRV.size], sizeof.SRV
|
||||
jne .fail
|
||||
|
||||
stdcall [edi+SRV.srv_proc], esi
|
||||
ret
|
||||
.fail:
|
||||
xor eax, eax
|
||||
@ -168,13 +168,13 @@ srv_handlerEx:
|
||||
jae .fail
|
||||
|
||||
mov eax, [ecx+handle]
|
||||
cmp [eax+SRV.magic], ' SRV'
|
||||
jne .fail
|
||||
|
||||
cmp [eax+SRV.size], sizeof.SRV
|
||||
jne .fail
|
||||
|
||||
stdcall [eax+SRV.srv_proc], ecx
|
||||
cmp [eax+SRV.magic], ' SRV'
|
||||
jne .fail
|
||||
|
||||
cmp [eax+SRV.size], sizeof.SRV
|
||||
jne .fail
|
||||
|
||||
stdcall [eax+SRV.srv_proc], ecx
|
||||
ret
|
||||
.fail:
|
||||
or eax, -1
|
||||
@ -193,13 +193,13 @@ proc get_service stdcall, sz_name:dword
|
||||
test eax, eax
|
||||
jnz @F
|
||||
ret
|
||||
@@:
|
||||
mov edx, [srv.fd]
|
||||
@@:
|
||||
cmp edx, srv.fd-SRV.fd
|
||||
je .not_load
|
||||
|
||||
stdcall strncmp, edx, [sz_name], 16
|
||||
@@:
|
||||
mov edx, [srv.fd]
|
||||
@@:
|
||||
cmp edx, srv.fd-SRV.fd
|
||||
je .not_load
|
||||
|
||||
stdcall strncmp, edx, [sz_name], 16
|
||||
test eax, eax
|
||||
je .ok
|
||||
|
||||
@ -223,13 +223,13 @@ proc reg_service stdcall, name:dword, handler:dword
|
||||
cmp [name], eax
|
||||
je .fail
|
||||
|
||||
cmp [handler], eax
|
||||
je .fail
|
||||
|
||||
mov eax, sizeof.SRV
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail
|
||||
cmp [handler], eax
|
||||
je .fail
|
||||
|
||||
mov eax, sizeof.SRV
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail
|
||||
|
||||
push esi
|
||||
push edi
|
||||
@ -240,15 +240,15 @@ proc reg_service stdcall, name:dword, handler:dword
|
||||
movsd
|
||||
movsd
|
||||
pop edi
|
||||
pop esi
|
||||
|
||||
mov [eax+SRV.magic], ' SRV'
|
||||
mov [eax+SRV.size], sizeof.SRV
|
||||
|
||||
mov ebx, srv.fd-SRV.fd
|
||||
mov edx, [ebx+SRV.fd]
|
||||
mov [eax+SRV.fd], edx
|
||||
mov [eax+SRV.bk], ebx
|
||||
pop esi
|
||||
|
||||
mov [eax+SRV.magic], ' SRV'
|
||||
mov [eax+SRV.size], sizeof.SRV
|
||||
|
||||
mov ebx, srv.fd-SRV.fd
|
||||
mov edx, [ebx+SRV.fd]
|
||||
mov [eax+SRV.fd], edx
|
||||
mov [eax+SRV.bk], ebx
|
||||
mov [ebx+SRV.fd], eax
|
||||
mov [edx+SRV.bk], eax
|
||||
|
||||
@ -437,10 +437,19 @@ proc load_file stdcall, file_name:dword
|
||||
jz .cleanup
|
||||
|
||||
mov [file2], eax
|
||||
pushfd
|
||||
cli
|
||||
|
||||
pushad
|
||||
mov ecx, unpack_mutex
|
||||
call mutex_lock
|
||||
popad
|
||||
|
||||
stdcall unpack, [file], eax
|
||||
popfd
|
||||
|
||||
pushad
|
||||
mov ecx, unpack_mutex
|
||||
call mutex_unlock
|
||||
popad
|
||||
|
||||
stdcall kernel_free, [file]
|
||||
mov eax, [file2]
|
||||
mov ebx, [file_size]
|
||||
@ -470,6 +479,11 @@ proc load_file stdcall, file_name:dword
|
||||
ret
|
||||
endp
|
||||
|
||||
uglobal
|
||||
align 4
|
||||
unpack_mutex MUTEX
|
||||
endg
|
||||
|
||||
align 4
|
||||
proc get_proc_ex stdcall, proc_name:dword, imports:dword
|
||||
|
||||
@ -511,16 +525,16 @@ proc fix_coff_symbols stdcall uses ebx esi, sec:dword, symbols:dword,\
|
||||
retval dd ?
|
||||
endl
|
||||
|
||||
mov edi, [symbols]
|
||||
mov [retval], 1
|
||||
.fix:
|
||||
movzx ebx, [edi+COFF_SYM.SectionNumber]
|
||||
test ebx, ebx
|
||||
jnz .internal
|
||||
mov eax, dword [edi+COFF_SYM.Name]
|
||||
test eax, eax
|
||||
jnz @F
|
||||
|
||||
mov edi, [symbols]
|
||||
mov [retval], 1
|
||||
.fix:
|
||||
movzx ebx, [edi+COFF_SYM.SectionNumber]
|
||||
test ebx, ebx
|
||||
jnz .internal
|
||||
mov eax, dword [edi+COFF_SYM.Name]
|
||||
test eax, eax
|
||||
jnz @F
|
||||
|
||||
mov edi, [edi+4]
|
||||
add edi, [strings]
|
||||
@@:
|
||||
@ -539,29 +553,29 @@ proc fix_coff_symbols stdcall uses ebx esi, sec:dword, symbols:dword,\
|
||||
mov esi, msg_CR
|
||||
call sys_msg_board_str
|
||||
|
||||
mov [retval], 0
|
||||
@@:
|
||||
mov edi, [symbols]
|
||||
mov [edi+COFF_SYM.Value], eax
|
||||
jmp .next
|
||||
.internal:
|
||||
cmp bx, -1
|
||||
mov [retval], 0
|
||||
@@:
|
||||
mov edi, [symbols]
|
||||
mov [edi+COFF_SYM.Value], eax
|
||||
jmp .next
|
||||
.internal:
|
||||
cmp bx, -1
|
||||
je .next
|
||||
cmp bx, -2
|
||||
je .next
|
||||
|
||||
dec ebx
|
||||
shl ebx, 3
|
||||
lea ebx, [ebx+ebx*4]
|
||||
add ebx, [sec]
|
||||
|
||||
mov eax, [ebx+COFF_SECTION.VirtualAddress]
|
||||
add [edi+COFF_SYM.Value], eax
|
||||
.next:
|
||||
add edi, sizeof.COFF_SYM
|
||||
mov [symbols], edi
|
||||
dec [sym_count]
|
||||
jnz .fix
|
||||
lea ebx, [ebx+ebx*4]
|
||||
add ebx, [sec]
|
||||
|
||||
mov eax, [ebx+COFF_SECTION.VirtualAddress]
|
||||
add [edi+COFF_SYM.Value], eax
|
||||
.next:
|
||||
add edi, sizeof.COFF_SYM
|
||||
mov [symbols], edi
|
||||
dec [sym_count]
|
||||
jnz .fix
|
||||
mov eax, [retval]
|
||||
ret
|
||||
endp
|
||||
@ -571,53 +585,53 @@ proc fix_coff_relocs stdcall uses ebx esi, coff:dword, sym:dword, \
|
||||
delta:dword
|
||||
locals
|
||||
n_sec dd ?
|
||||
endl
|
||||
|
||||
mov eax, [coff]
|
||||
movzx ebx, [eax+COFF_HEADER.nSections]
|
||||
mov [n_sec], ebx
|
||||
lea esi, [eax+20]
|
||||
.fix_sec:
|
||||
mov edi, [esi+COFF_SECTION.PtrReloc]
|
||||
add edi, [coff]
|
||||
|
||||
movzx ecx, [esi+COFF_SECTION.NumReloc]
|
||||
test ecx, ecx
|
||||
jz .next
|
||||
.reloc_loop:
|
||||
mov ebx, [edi+COFF_RELOC.SymIndex]
|
||||
add ebx, ebx
|
||||
lea ebx, [ebx+ebx*8]
|
||||
add ebx, [sym]
|
||||
|
||||
mov edx, [ebx+COFF_SYM.Value]
|
||||
|
||||
cmp [edi+COFF_RELOC.Type], 6
|
||||
je .dir_32
|
||||
|
||||
cmp [edi+COFF_RELOC.Type], 20
|
||||
jne .next_reloc
|
||||
.rel_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
sub edx, eax
|
||||
sub edx, 4
|
||||
jmp .fix
|
||||
.dir_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
.fix:
|
||||
add eax, [delta]
|
||||
add [eax], edx
|
||||
endl
|
||||
|
||||
mov eax, [coff]
|
||||
movzx ebx, [eax+COFF_HEADER.nSections]
|
||||
mov [n_sec], ebx
|
||||
lea esi, [eax+20]
|
||||
.fix_sec:
|
||||
mov edi, [esi+COFF_SECTION.PtrReloc]
|
||||
add edi, [coff]
|
||||
|
||||
movzx ecx, [esi+COFF_SECTION.NumReloc]
|
||||
test ecx, ecx
|
||||
jz .next
|
||||
.reloc_loop:
|
||||
mov ebx, [edi+COFF_RELOC.SymIndex]
|
||||
add ebx, ebx
|
||||
lea ebx, [ebx+ebx*8]
|
||||
add ebx, [sym]
|
||||
|
||||
mov edx, [ebx+COFF_SYM.Value]
|
||||
|
||||
cmp [edi+COFF_RELOC.Type], 6
|
||||
je .dir_32
|
||||
|
||||
cmp [edi+COFF_RELOC.Type], 20
|
||||
jne .next_reloc
|
||||
.rel_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
sub edx, eax
|
||||
sub edx, 4
|
||||
jmp .fix
|
||||
.dir_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
.fix:
|
||||
add eax, [delta]
|
||||
add [eax], edx
|
||||
.next_reloc:
|
||||
add edi, 10
|
||||
dec ecx
|
||||
jnz .reloc_loop
|
||||
.next:
|
||||
add esi, sizeof.COFF_SECTION
|
||||
dec [n_sec]
|
||||
jnz .fix_sec
|
||||
.exit:
|
||||
dec ecx
|
||||
jnz .reloc_loop
|
||||
.next:
|
||||
add esi, sizeof.COFF_SECTION
|
||||
dec [n_sec]
|
||||
jnz .fix_sec
|
||||
.exit:
|
||||
ret
|
||||
endp
|
||||
|
||||
@ -626,36 +640,36 @@ proc rebase_coff stdcall uses ebx esi, coff:dword, sym:dword, \
|
||||
delta:dword
|
||||
locals
|
||||
n_sec dd ?
|
||||
endl
|
||||
|
||||
mov eax, [coff]
|
||||
movzx ebx, [eax+COFF_HEADER.nSections]
|
||||
mov [n_sec], ebx
|
||||
lea esi, [eax+20]
|
||||
mov edx, [delta]
|
||||
.fix_sec:
|
||||
mov edi, [esi+COFF_SECTION.PtrReloc]
|
||||
add edi, [coff]
|
||||
|
||||
movzx ecx, [esi+COFF_SECTION.NumReloc]
|
||||
test ecx, ecx
|
||||
jz .next
|
||||
.reloc_loop:
|
||||
cmp [edi+COFF_RELOC.Type], 6
|
||||
jne .next_reloc
|
||||
.dir_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
add [eax+edx], edx
|
||||
.next_reloc:
|
||||
add edi, 10
|
||||
dec ecx
|
||||
jnz .reloc_loop
|
||||
.next:
|
||||
add esi, sizeof.COFF_SECTION
|
||||
dec [n_sec]
|
||||
jnz .fix_sec
|
||||
.exit:
|
||||
endl
|
||||
|
||||
mov eax, [coff]
|
||||
movzx ebx, [eax+COFF_HEADER.nSections]
|
||||
mov [n_sec], ebx
|
||||
lea esi, [eax+20]
|
||||
mov edx, [delta]
|
||||
.fix_sec:
|
||||
mov edi, [esi+COFF_SECTION.PtrReloc]
|
||||
add edi, [coff]
|
||||
|
||||
movzx ecx, [esi+COFF_SECTION.NumReloc]
|
||||
test ecx, ecx
|
||||
jz .next
|
||||
.reloc_loop:
|
||||
cmp [edi+COFF_RELOC.Type], 6
|
||||
jne .next_reloc
|
||||
.dir_32:
|
||||
mov eax, [edi+COFF_RELOC.VirtualAddress]
|
||||
add eax, [esi+COFF_SECTION.VirtualAddress]
|
||||
add [eax+edx], edx
|
||||
.next_reloc:
|
||||
add edi, 10
|
||||
dec ecx
|
||||
jnz .reloc_loop
|
||||
.next:
|
||||
add esi, sizeof.COFF_SECTION
|
||||
dec [n_sec]
|
||||
jnz .fix_sec
|
||||
.exit:
|
||||
ret
|
||||
endp
|
||||
|
||||
@ -697,21 +711,21 @@ proc load_driver stdcall, driver_name:dword
|
||||
|
||||
test eax, eax
|
||||
jz .exit
|
||||
|
||||
mov [coff], eax
|
||||
|
||||
movzx ecx, [eax+COFF_HEADER.nSections]
|
||||
xor ebx, ebx
|
||||
|
||||
lea edx, [eax+20]
|
||||
@@:
|
||||
add ebx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
add ebx, 15
|
||||
and ebx, not 15
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ecx
|
||||
jnz @B
|
||||
mov [img_size], ebx
|
||||
|
||||
mov [coff], eax
|
||||
|
||||
movzx ecx, [eax+COFF_HEADER.nSections]
|
||||
xor ebx, ebx
|
||||
|
||||
lea edx, [eax+20]
|
||||
@@:
|
||||
add ebx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
add ebx, 15
|
||||
and ebx, not 15
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ecx
|
||||
jnz @B
|
||||
mov [img_size], ebx
|
||||
|
||||
stdcall kernel_alloc, ebx
|
||||
test eax, eax
|
||||
@ -725,70 +739,70 @@ proc load_driver stdcall, driver_name:dword
|
||||
and ecx, not 4095
|
||||
shr ecx, 2
|
||||
cld
|
||||
rep stosd
|
||||
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+COFF_HEADER.nSections]
|
||||
mov edi, [img_base]
|
||||
lea eax, [edx+20]
|
||||
@@:
|
||||
mov [eax+COFF_SECTION.VirtualAddress], edi
|
||||
mov esi, [eax+COFF_SECTION.PtrRawData]
|
||||
test esi, esi
|
||||
jnz .copy
|
||||
add edi, [eax+COFF_SECTION.SizeOfRawData]
|
||||
jmp .next
|
||||
.copy:
|
||||
add esi, edx
|
||||
mov ecx, [eax+COFF_SECTION.SizeOfRawData]
|
||||
cld
|
||||
rep movsb
|
||||
.next:
|
||||
add edi, 15
|
||||
and edi, not 15
|
||||
add eax, sizeof.COFF_SECTION
|
||||
dec ebx
|
||||
jnz @B
|
||||
|
||||
mov ebx, [edx+COFF_HEADER.pSymTable]
|
||||
add ebx, edx
|
||||
mov [sym], ebx
|
||||
mov ecx, [edx+COFF_HEADER.nSymbols]
|
||||
add ecx, ecx
|
||||
lea ecx, [ecx+ecx*8];ecx*=18 = nSymbols*CSYM_SIZE
|
||||
add ecx, [sym]
|
||||
rep stosd
|
||||
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+COFF_HEADER.nSections]
|
||||
mov edi, [img_base]
|
||||
lea eax, [edx+20]
|
||||
@@:
|
||||
mov [eax+COFF_SECTION.VirtualAddress], edi
|
||||
mov esi, [eax+COFF_SECTION.PtrRawData]
|
||||
test esi, esi
|
||||
jnz .copy
|
||||
add edi, [eax+COFF_SECTION.SizeOfRawData]
|
||||
jmp .next
|
||||
.copy:
|
||||
add esi, edx
|
||||
mov ecx, [eax+COFF_SECTION.SizeOfRawData]
|
||||
cld
|
||||
rep movsb
|
||||
.next:
|
||||
add edi, 15
|
||||
and edi, not 15
|
||||
add eax, sizeof.COFF_SECTION
|
||||
dec ebx
|
||||
jnz @B
|
||||
|
||||
mov ebx, [edx+COFF_HEADER.pSymTable]
|
||||
add ebx, edx
|
||||
mov [sym], ebx
|
||||
mov ecx, [edx+COFF_HEADER.nSymbols]
|
||||
add ecx, ecx
|
||||
lea ecx, [ecx+ecx*8];ecx*=18 = nSymbols*CSYM_SIZE
|
||||
add ecx, [sym]
|
||||
mov [strings], ecx
|
||||
|
||||
lea ebx, [exports]
|
||||
mov dword [ebx], kernel_export
|
||||
mov dword [ebx+4], 0
|
||||
lea eax, [edx+20]
|
||||
|
||||
stdcall fix_coff_symbols, eax, [sym], [edx+COFF_HEADER.nSymbols], \
|
||||
[strings], ebx
|
||||
test eax, eax
|
||||
jz .link_fail
|
||||
mov dword [ebx+4], 0
|
||||
lea eax, [edx+20]
|
||||
|
||||
stdcall fix_coff_symbols, eax, [sym], [edx+COFF_HEADER.nSymbols], \
|
||||
[strings], ebx
|
||||
test eax, eax
|
||||
jz .link_fail
|
||||
|
||||
mov ebx, [coff]
|
||||
stdcall fix_coff_relocs, ebx, [sym], 0
|
||||
|
||||
stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szVersion
|
||||
test eax, eax
|
||||
jz .link_fail
|
||||
|
||||
mov ebx, [coff]
|
||||
stdcall fix_coff_relocs, ebx, [sym], 0
|
||||
|
||||
stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szVersion
|
||||
test eax, eax
|
||||
jz .link_fail
|
||||
|
||||
mov eax, [eax]
|
||||
shr eax, 16
|
||||
cmp eax, DRV_COMPAT
|
||||
jb .ver_fail
|
||||
|
||||
cmp eax, DRV_CURRENT
|
||||
ja .ver_fail
|
||||
|
||||
mov ebx, [coff]
|
||||
stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szSTART
|
||||
mov [start], eax
|
||||
|
||||
stdcall kernel_free, [coff]
|
||||
ja .ver_fail
|
||||
|
||||
mov ebx, [coff]
|
||||
stdcall get_coff_sym, [sym], [ebx+COFF_HEADER.nSymbols], szSTART
|
||||
mov [start], eax
|
||||
|
||||
stdcall kernel_free, [coff]
|
||||
|
||||
mov ebx, [start]
|
||||
stdcall ebx, DRV_ENTRY
|
||||
@ -802,7 +816,7 @@ proc load_driver stdcall, driver_name:dword
|
||||
jnz @f
|
||||
cmp word [file_name+21], 'j'
|
||||
jnz @f
|
||||
mov esi, aSis
|
||||
mov esi, aHDA
|
||||
jmp .redo
|
||||
@@:
|
||||
xor eax, eax
|
||||
@ -848,13 +862,13 @@ endp
|
||||
coff_get_align:
|
||||
; Rules:
|
||||
; - if alignment is not given, use default = 4K;
|
||||
; - if alignment is given and is no more than 4K, use it;
|
||||
; - if alignment is more than 4K, revert to 4K.
|
||||
push ecx
|
||||
mov cl, byte [edx+COFF_SECTION.Characteristics+2]
|
||||
mov eax, 1
|
||||
shr cl, 4
|
||||
dec cl
|
||||
; - if alignment is given and is no more than 4K, use it;
|
||||
; - if alignment is more than 4K, revert to 4K.
|
||||
push ecx
|
||||
mov cl, byte [edx+COFF_SECTION.Characteristics+2]
|
||||
mov eax, 1
|
||||
shr cl, 4
|
||||
dec cl
|
||||
js .default
|
||||
cmp cl, 12
|
||||
jbe @f
|
||||
@ -952,13 +966,13 @@ proc load_library stdcall, file_name:dword
|
||||
; allocate DLLDESCR struct; size is DLLDESCR.sizeof plus size of DLL name
|
||||
mov esi, edi
|
||||
mov ecx, -1
|
||||
xor eax, eax
|
||||
repnz scasb
|
||||
not ecx
|
||||
lea eax, [ecx+sizeof.DLLDESCR]
|
||||
push ecx
|
||||
call malloc
|
||||
pop ecx
|
||||
xor eax, eax
|
||||
repnz scasb
|
||||
not ecx
|
||||
lea eax, [ecx+sizeof.DLLDESCR]
|
||||
push ecx
|
||||
call malloc
|
||||
pop ecx
|
||||
test eax, eax
|
||||
jz .fail_and_free_coff
|
||||
; save timestamp
|
||||
@ -976,23 +990,23 @@ proc load_library stdcall, file_name:dword
|
||||
mov [dll_list.bk], esi
|
||||
mov [esi+DLLDESCR.bk], eax
|
||||
mov [eax+DLLDESCR.fd], esi
|
||||
|
||||
; calculate size of loaded DLL
|
||||
mov edx, [coff]
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
xor ebx, ebx
|
||||
|
||||
add edx, 20
|
||||
|
||||
; calculate size of loaded DLL
|
||||
mov edx, [coff]
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
xor ebx, ebx
|
||||
|
||||
add edx, 20
|
||||
@@:
|
||||
call coff_get_align
|
||||
add ebx, eax
|
||||
not eax
|
||||
and ebx, eax
|
||||
add ebx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ecx
|
||||
jnz @B
|
||||
; it must be nonzero and not too big
|
||||
add ebx, eax
|
||||
not eax
|
||||
and ebx, eax
|
||||
add ebx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ecx
|
||||
jnz @B
|
||||
; it must be nonzero and not too big
|
||||
mov [esi+DLLDESCR.size], ebx
|
||||
test ebx, ebx
|
||||
jz .fail_and_free_dll
|
||||
@ -1016,108 +1030,108 @@ proc load_library stdcall, file_name:dword
|
||||
mov [esi+DLLDESCR.defaultbase], ecx
|
||||
mov [dll_cur_addr], edx
|
||||
|
||||
; copy sections and set correct values for VirtualAddress'es in headers
|
||||
push esi
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+COFF_HEADER.nSections]
|
||||
mov edi, eax
|
||||
add edx, 20
|
||||
cld
|
||||
; copy sections and set correct values for VirtualAddress'es in headers
|
||||
push esi
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+COFF_HEADER.nSections]
|
||||
mov edi, eax
|
||||
add edx, 20
|
||||
cld
|
||||
@@:
|
||||
call coff_get_align
|
||||
add ecx, eax
|
||||
add edi, eax
|
||||
not eax
|
||||
and ecx, eax
|
||||
and edi, eax
|
||||
mov [edx+COFF_SECTION.VirtualAddress], ecx
|
||||
add ecx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
mov esi, [edx+COFF_SECTION.PtrRawData]
|
||||
push ecx
|
||||
mov ecx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
test esi, esi
|
||||
jnz .copy
|
||||
xor eax, eax
|
||||
not eax
|
||||
and ecx, eax
|
||||
and edi, eax
|
||||
mov [edx+COFF_SECTION.VirtualAddress], ecx
|
||||
add ecx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
mov esi, [edx+COFF_SECTION.PtrRawData]
|
||||
push ecx
|
||||
mov ecx, [edx+COFF_SECTION.SizeOfRawData]
|
||||
test esi, esi
|
||||
jnz .copy
|
||||
xor eax, eax
|
||||
rep stosb
|
||||
jmp .next
|
||||
.copy:
|
||||
add esi, [coff]
|
||||
rep movsb
|
||||
.next:
|
||||
pop ecx
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ebx
|
||||
jnz @B
|
||||
pop esi
|
||||
rep movsb
|
||||
.next:
|
||||
pop ecx
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec ebx
|
||||
jnz @B
|
||||
pop esi
|
||||
|
||||
; save some additional data from COFF file
|
||||
; later we will use COFF header, headers for sections and symbol table
|
||||
; and also relocations table for all sections
|
||||
mov edx, [coff]
|
||||
mov ebx, [edx+COFF_HEADER.pSymTable]
|
||||
mov edi, dword [fileinfo+32]
|
||||
sub edi, ebx
|
||||
jc .fail_and_free_data
|
||||
mov [esi+DLLDESCR.symbols_lim], edi
|
||||
add ebx, edx
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
lea ecx, [ecx*5]
|
||||
lea edi, [edi+ecx*8+20]
|
||||
add edx, 20
|
||||
@@:
|
||||
movzx eax, [edx+COFF_SECTION.NumReloc]
|
||||
lea eax, [eax*5]
|
||||
lea edi, [edi+eax*2]
|
||||
add edx, sizeof.COFF_SECTION
|
||||
sub ecx, 5
|
||||
jnz @b
|
||||
stdcall kernel_alloc, edi
|
||||
test eax, eax
|
||||
jz .fail_and_free_data
|
||||
mov edx, [coff]
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
lea ecx, [ecx*5]
|
||||
lea ecx, [ecx*2+5]
|
||||
mov [esi+DLLDESCR.coff_hdr], eax
|
||||
; later we will use COFF header, headers for sections and symbol table
|
||||
; and also relocations table for all sections
|
||||
mov edx, [coff]
|
||||
mov ebx, [edx+COFF_HEADER.pSymTable]
|
||||
mov edi, dword [fileinfo+32]
|
||||
sub edi, ebx
|
||||
jc .fail_and_free_data
|
||||
mov [esi+DLLDESCR.symbols_lim], edi
|
||||
add ebx, edx
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
lea ecx, [ecx*5]
|
||||
lea edi, [edi+ecx*8+20]
|
||||
add edx, 20
|
||||
@@:
|
||||
movzx eax, [edx+COFF_SECTION.NumReloc]
|
||||
lea eax, [eax*5]
|
||||
lea edi, [edi+eax*2]
|
||||
add edx, sizeof.COFF_SECTION
|
||||
sub ecx, 5
|
||||
jnz @b
|
||||
stdcall kernel_alloc, edi
|
||||
test eax, eax
|
||||
jz .fail_and_free_data
|
||||
mov edx, [coff]
|
||||
movzx ecx, [edx+COFF_HEADER.nSections]
|
||||
lea ecx, [ecx*5]
|
||||
lea ecx, [ecx*2+5]
|
||||
mov [esi+DLLDESCR.coff_hdr], eax
|
||||
push esi
|
||||
mov esi, edx
|
||||
mov edi, eax
|
||||
rep movsd
|
||||
pop esi
|
||||
mov [esi+DLLDESCR.symbols_ptr], edi
|
||||
push esi
|
||||
mov ecx, [edx+COFF_HEADER.nSymbols]
|
||||
mov [esi+DLLDESCR.symbols_num], ecx
|
||||
mov ecx, [esi+DLLDESCR.symbols_lim]
|
||||
mov esi, ebx
|
||||
pop esi
|
||||
mov [esi+DLLDESCR.symbols_ptr], edi
|
||||
push esi
|
||||
mov ecx, [edx+COFF_HEADER.nSymbols]
|
||||
mov [esi+DLLDESCR.symbols_num], ecx
|
||||
mov ecx, [esi+DLLDESCR.symbols_lim]
|
||||
mov esi, ebx
|
||||
rep movsb
|
||||
pop esi
|
||||
mov ebx, [esi+DLLDESCR.coff_hdr]
|
||||
push esi
|
||||
movzx eax, [edx+COFF_HEADER.nSections]
|
||||
lea edx, [ebx+20]
|
||||
@@:
|
||||
movzx ecx, [edx+COFF_SECTION.NumReloc]
|
||||
lea ecx, [ecx*5]
|
||||
mov esi, [edx+COFF_SECTION.PtrReloc]
|
||||
mov [edx+COFF_SECTION.PtrReloc], edi
|
||||
sub [edx+COFF_SECTION.PtrReloc], ebx
|
||||
add esi, [coff]
|
||||
shr ecx, 1
|
||||
rep movsd
|
||||
adc ecx, ecx
|
||||
rep movsw
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec eax
|
||||
jnz @b
|
||||
pop esi
|
||||
|
||||
; fixup symbols
|
||||
mov edx, ebx
|
||||
mov eax, [ebx+COFF_HEADER.nSymbols]
|
||||
add edx, 20
|
||||
mov ecx, [esi+DLLDESCR.symbols_num]
|
||||
lea ecx, [ecx*9]
|
||||
pop esi
|
||||
mov ebx, [esi+DLLDESCR.coff_hdr]
|
||||
push esi
|
||||
movzx eax, [edx+COFF_HEADER.nSections]
|
||||
lea edx, [ebx+20]
|
||||
@@:
|
||||
movzx ecx, [edx+COFF_SECTION.NumReloc]
|
||||
lea ecx, [ecx*5]
|
||||
mov esi, [edx+COFF_SECTION.PtrReloc]
|
||||
mov [edx+COFF_SECTION.PtrReloc], edi
|
||||
sub [edx+COFF_SECTION.PtrReloc], ebx
|
||||
add esi, [coff]
|
||||
shr ecx, 1
|
||||
rep movsd
|
||||
adc ecx, ecx
|
||||
rep movsw
|
||||
add edx, sizeof.COFF_SECTION
|
||||
dec eax
|
||||
jnz @b
|
||||
pop esi
|
||||
|
||||
; fixup symbols
|
||||
mov edx, ebx
|
||||
mov eax, [ebx+COFF_HEADER.nSymbols]
|
||||
add edx, 20
|
||||
mov ecx, [esi+DLLDESCR.symbols_num]
|
||||
lea ecx, [ecx*9]
|
||||
add ecx, ecx
|
||||
add ecx, [esi+DLLDESCR.symbols_ptr]
|
||||
|
||||
@ -1125,17 +1139,17 @@ proc load_library stdcall, file_name:dword
|
||||
ecx, 0
|
||||
; test eax, eax
|
||||
; jnz @F
|
||||
;
|
||||
;@@:
|
||||
|
||||
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], szEXPORTS
|
||||
test eax, eax
|
||||
jnz @F
|
||||
|
||||
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], sz_EXPORTS
|
||||
@@:
|
||||
mov [esi+DLLDESCR.exports], eax
|
||||
|
||||
;
|
||||
;@@:
|
||||
|
||||
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], szEXPORTS
|
||||
test eax, eax
|
||||
jnz @F
|
||||
|
||||
stdcall get_coff_sym, [esi+DLLDESCR.symbols_ptr], [ebx+COFF_HEADER.nSymbols], sz_EXPORTS
|
||||
@@:
|
||||
mov [esi+DLLDESCR.exports], eax
|
||||
|
||||
; fix relocs in the hidden copy in kernel memory to default address
|
||||
; it is first fix; usually this will be enough, but second fix
|
||||
; can be necessary if real load address will not equal assumption
|
||||
@ -1157,13 +1171,13 @@ proc load_library stdcall, file_name:dword
|
||||
jnz @f
|
||||
stdcall user_alloc, edi
|
||||
test eax, eax
|
||||
jz .fail_and_dereference
|
||||
@@:
|
||||
mov [img_base], eax
|
||||
mov eax, sizeof.HDLL
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail_and_free_user
|
||||
jz .fail_and_dereference
|
||||
@@:
|
||||
mov [img_base], eax
|
||||
mov eax, sizeof.HDLL
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail_and_free_user
|
||||
mov ebx, [CURRENT_TASK]
|
||||
shl ebx, 5
|
||||
mov edx, [CURRENT_TASK+ebx+TASKDATA.pid]
|
||||
@ -1366,17 +1380,17 @@ destroy_all_hdlls:
|
||||
|
||||
align 4
|
||||
stop_all_services:
|
||||
push ebp
|
||||
mov edx, [srv.fd]
|
||||
.next:
|
||||
cmp edx, srv.fd-SRV.fd
|
||||
je .done
|
||||
cmp [edx+SRV.magic], ' SRV'
|
||||
jne .next
|
||||
cmp [edx+SRV.size], sizeof.SRV
|
||||
jne .next
|
||||
|
||||
mov ebx, [edx+SRV.entry]
|
||||
push ebp
|
||||
mov edx, [srv.fd]
|
||||
.next:
|
||||
cmp edx, srv.fd-SRV.fd
|
||||
je .done
|
||||
cmp [edx+SRV.magic], ' SRV'
|
||||
jne .next
|
||||
cmp [edx+SRV.size], sizeof.SRV
|
||||
jne .next
|
||||
|
||||
mov ebx, [edx+SRV.entry]
|
||||
mov edx, [edx+SRV.fd]
|
||||
test ebx, ebx
|
||||
jz .next
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
; Macroinstruction for making export section
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
iglobal
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -11,7 +11,7 @@
|
||||
;
|
||||
;============================================================================
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
if 0
|
||||
; The code currently does not work. Kill "if 0/end if" only after correcting
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
init_fpu:
|
||||
|
@ -1,31 +1,31 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
|
||||
struct MEM_BLOCK
|
||||
list LHEAD
|
||||
next_block dd ? ;+8
|
||||
prev_block dd ? ;+4
|
||||
base dd ? ;+16
|
||||
size dd ? ;+20
|
||||
flags dd ? ;+24
|
||||
handle dd ? ;+28
|
||||
ends
|
||||
|
||||
FREE_BLOCK equ 4
|
||||
USED_BLOCK equ 8
|
||||
DONT_FREE_BLOCK equ 10h
|
||||
|
||||
|
||||
block_next equ MEM_BLOCK.next_block
|
||||
block_prev equ MEM_BLOCK.prev_block
|
||||
list_fd equ MEM_BLOCK.list.next
|
||||
$Revision $
|
||||
|
||||
|
||||
struct MEM_BLOCK
|
||||
list LHEAD
|
||||
next_block dd ? ;+8
|
||||
prev_block dd ? ;+4
|
||||
base dd ? ;+16
|
||||
size dd ? ;+20
|
||||
flags dd ? ;+24
|
||||
handle dd ? ;+28
|
||||
ends
|
||||
|
||||
FREE_BLOCK equ 4
|
||||
USED_BLOCK equ 8
|
||||
DONT_FREE_BLOCK equ 10h
|
||||
|
||||
|
||||
block_next equ MEM_BLOCK.next_block
|
||||
block_prev equ MEM_BLOCK.prev_block
|
||||
list_fd equ MEM_BLOCK.list.next
|
||||
list_bk equ MEM_BLOCK.list.prev
|
||||
block_base equ MEM_BLOCK.base
|
||||
block_size equ MEM_BLOCK.size
|
||||
@ -137,60 +137,60 @@ proc init_kernel_heap
|
||||
add edi, 0x1000
|
||||
add edx, 0x1000
|
||||
dec ecx
|
||||
jnz .l1
|
||||
|
||||
mov edi, HEAP_BASE ;descriptors
|
||||
mov ebx, HEAP_BASE+sizeof.MEM_BLOCK ;free space
|
||||
mov ecx, HEAP_BASE+sizeof.MEM_BLOCK*2 ;terminator
|
||||
|
||||
xor eax, eax
|
||||
mov [edi+block_next], ebx
|
||||
jnz .l1
|
||||
|
||||
mov edi, HEAP_BASE ;descriptors
|
||||
mov ebx, HEAP_BASE+sizeof.MEM_BLOCK ;free space
|
||||
mov ecx, HEAP_BASE+sizeof.MEM_BLOCK*2 ;terminator
|
||||
|
||||
xor eax, eax
|
||||
mov [edi+block_next], ebx
|
||||
mov [edi+block_prev], eax
|
||||
mov [edi+list_fd], eax
|
||||
mov [edi+list_bk], eax
|
||||
mov [edi+block_base], HEAP_BASE
|
||||
mov [edi+block_size], 4096*sizeof.MEM_BLOCK
|
||||
mov [edi+block_flags], USED_BLOCK
|
||||
|
||||
mov [ecx+block_next], eax
|
||||
mov [edi+list_fd], eax
|
||||
mov [edi+list_bk], eax
|
||||
mov [edi+block_base], HEAP_BASE
|
||||
mov [edi+block_size], 4096*sizeof.MEM_BLOCK
|
||||
mov [edi+block_flags], USED_BLOCK
|
||||
|
||||
mov [ecx+block_next], eax
|
||||
mov [ecx+block_prev], ebx
|
||||
mov [edi+list_fd], eax
|
||||
mov [edi+list_bk], eax
|
||||
mov [edi+block_base], eax
|
||||
mov [edi+block_size], eax
|
||||
mov [edi+block_flags], USED_BLOCK
|
||||
|
||||
mov [ebx+block_next], ecx
|
||||
mov [ebx+block_prev], edi
|
||||
mov [ebx+block_base], HEAP_BASE+4096*sizeof.MEM_BLOCK
|
||||
|
||||
mov ecx, [pg_data.kernel_pages]
|
||||
shl ecx, 12
|
||||
sub ecx, HEAP_BASE-OS_BASE+4096*sizeof.MEM_BLOCK
|
||||
mov [heap_size], ecx
|
||||
mov [heap_free], ecx
|
||||
mov [ebx+block_size], ecx
|
||||
|
||||
mov [ebx+block_next], ecx
|
||||
mov [ebx+block_prev], edi
|
||||
mov [ebx+block_base], HEAP_BASE+4096*sizeof.MEM_BLOCK
|
||||
|
||||
mov ecx, [pg_data.kernel_pages]
|
||||
shl ecx, 12
|
||||
sub ecx, HEAP_BASE-OS_BASE+4096*sizeof.MEM_BLOCK
|
||||
mov [heap_size], ecx
|
||||
mov [heap_free], ecx
|
||||
mov [ebx+block_size], ecx
|
||||
mov [ebx+block_flags], FREE_BLOCK
|
||||
|
||||
mov [mem_block_mask], eax
|
||||
mov [mem_block_mask+4], 0x80000000
|
||||
|
||||
mov ecx, mem_block_list+63*8
|
||||
list_add ebx, ecx
|
||||
|
||||
mov ecx, 4096-3-1
|
||||
mov eax, HEAP_BASE+sizeof.MEM_BLOCK*4
|
||||
|
||||
mov [next_memblock], HEAP_BASE+sizeof.MEM_BLOCK *3
|
||||
@@:
|
||||
mov [eax-sizeof.MEM_BLOCK], eax
|
||||
add eax, sizeof.MEM_BLOCK
|
||||
loop @B
|
||||
|
||||
mov [eax-sizeof.MEM_BLOCK], dword 0
|
||||
|
||||
mov ecx, heap_mutex
|
||||
call mutex_init
|
||||
list_add ebx, ecx
|
||||
|
||||
mov ecx, 4096-3-1
|
||||
mov eax, HEAP_BASE+sizeof.MEM_BLOCK*4
|
||||
|
||||
mov [next_memblock], HEAP_BASE+sizeof.MEM_BLOCK *3
|
||||
@@:
|
||||
mov [eax-sizeof.MEM_BLOCK], eax
|
||||
add eax, sizeof.MEM_BLOCK
|
||||
loop @B
|
||||
|
||||
mov [eax-sizeof.MEM_BLOCK], dword 0
|
||||
|
||||
mov ecx, heap_mutex
|
||||
call mutex_init
|
||||
mov [heap_blocks], 4094
|
||||
mov [free_blocks], 4093
|
||||
ret
|
||||
@ -578,7 +578,7 @@ restore block_flags
|
||||
|
||||
;;;;;;;;;;;;;; USER ;;;;;;;;;;;;;;;;;
|
||||
|
||||
HEAP_TOP equ 0x5FC00000
|
||||
HEAP_TOP equ 0x80000000
|
||||
|
||||
align 4
|
||||
proc init_heap
|
||||
@ -848,6 +848,71 @@ proc user_free stdcall, base:dword
|
||||
ret
|
||||
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:
|
||||
; in: esi=heap_base, edi=heap_top
|
||||
; out: eax=0 <=> OK
|
||||
@ -1283,13 +1348,13 @@ align 4
|
||||
jz .fail
|
||||
|
||||
add ecx, 4095
|
||||
and ecx, -4096
|
||||
mov [size], ecx
|
||||
|
||||
mov eax, sizeof.SMEM
|
||||
call malloc
|
||||
test eax, eax
|
||||
mov esi, eax
|
||||
and ecx, -4096
|
||||
mov [size], ecx
|
||||
|
||||
mov eax, sizeof.SMEM
|
||||
call malloc
|
||||
test eax, eax
|
||||
mov esi, eax
|
||||
mov edx, E_NOMEM
|
||||
jz .fail
|
||||
|
||||
@ -1345,13 +1410,13 @@ align 4
|
||||
mov edx, E_ACCESS
|
||||
ja .fail
|
||||
|
||||
mov ebx, [CURRENT_TASK]
|
||||
shl ebx, 5
|
||||
mov ebx, [CURRENT_TASK+ebx+4]
|
||||
mov eax, sizeof.SMAP
|
||||
|
||||
call create_kernel_object
|
||||
test eax, eax
|
||||
mov ebx, [CURRENT_TASK]
|
||||
shl ebx, 5
|
||||
mov ebx, [CURRENT_TASK+ebx+4]
|
||||
mov eax, sizeof.SMAP
|
||||
|
||||
call create_kernel_object
|
||||
test eax, eax
|
||||
mov edi, eax
|
||||
mov edx, E_NOMEM
|
||||
jz .fail
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
IRQ_RESERVED equ 24
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; Small heap based on malloc/free/realloc written by Doug Lea
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
align 4
|
||||
@ -166,6 +166,7 @@ proc free_page
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc map_io_mem stdcall, base:dword, size:dword, flags:dword
|
||||
|
||||
push ebx
|
||||
@ -357,8 +358,10 @@ proc init_LFB
|
||||
|
||||
cmp dword [LFBAddress], -1
|
||||
jne @f
|
||||
mov [BOOT_VAR+0x901c], byte 2
|
||||
stdcall alloc_pages, (0x280000 / 4096)
|
||||
mov [BOOT_VAR+BOOT_MTRR], byte 2
|
||||
; max VGA=640*480*4=1228800 bytes
|
||||
; + 32*640*4=81920 bytes for mouse pointer
|
||||
stdcall alloc_pages, ((1228800+81920)/4096)
|
||||
|
||||
push eax
|
||||
call alloc_page
|
||||
@ -366,14 +369,16 @@ proc init_LFB
|
||||
pop eax
|
||||
or eax, PG_UW
|
||||
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
|
||||
mov [LFBAddress], dword LFB_BASE
|
||||
ret
|
||||
@@:
|
||||
test [SCR_MODE], word 0100000000000000b
|
||||
jnz @f
|
||||
mov [BOOT_VAR+0x901c], byte 2
|
||||
mov [BOOT_VAR+BOOT_MTRR], byte 2
|
||||
ret
|
||||
@@:
|
||||
call init_mtrr
|
||||
@ -1303,6 +1308,11 @@ f68:
|
||||
@@:
|
||||
ret
|
||||
|
||||
.26:
|
||||
stdcall user_unmap, ecx, edx, esi
|
||||
mov [esp+32], eax
|
||||
ret
|
||||
|
||||
.fail:
|
||||
xor eax, eax
|
||||
mov [esp+32], eax
|
||||
@ -1325,8 +1335,9 @@ f68call: ; keep this table closer to main code
|
||||
dd f68.21 ; load_driver
|
||||
dd f68.22 ; shmem_open
|
||||
dd f68.23 ; shmem_close
|
||||
dd f68.24
|
||||
dd f68.25
|
||||
dd f68.24 ; set exception handler
|
||||
dd f68.25 ; unmask exception
|
||||
dd f68.26 ; user_unmap
|
||||
|
||||
|
||||
align 4
|
||||
@ -1353,7 +1364,7 @@ endp
|
||||
align 4
|
||||
proc init_mtrr
|
||||
|
||||
cmp [BOOT_VAR+0x901c], byte 2
|
||||
cmp [BOOT_VAR+BOOT_MTRR], byte 2
|
||||
je .exit
|
||||
|
||||
bt [cpu_caps], CAPS_MTRR
|
||||
@ -1543,3 +1554,27 @@ proc create_ring_buffer stdcall, size:dword, flags:dword
|
||||
.fail:
|
||||
ret
|
||||
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
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
include 'export.inc'
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Author: Kees J. Bot 1 Jan 1994 ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; size_t strncat(char *s1, const char *s2, size_t n)
|
||||
|
@ -1,13 +1,13 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;; Synhronization for MenuetOS. ;;
|
||||
;; Author: Halyavin Andrey, halyavin@land.ru ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
if ~defined sync_inc
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
@ -11,7 +11,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
align 4 ;3A08
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
; Old style system call converter
|
||||
align 16
|
||||
@ -145,7 +145,7 @@ iglobal
|
||||
dd sys_settime ; 22-setting date,time,clock and alarm-clock
|
||||
dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent
|
||||
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 undefined_syscall ; 27-reserved
|
||||
dd undefined_syscall ; 28-reserved
|
||||
@ -154,7 +154,7 @@ iglobal
|
||||
dd undefined_syscall ; 31-reserved
|
||||
dd undefined_syscall ; 32-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_getarea ; 36-GetArea
|
||||
dd readmousepos ; 37-GetMousePosition_ScreenRelative,.
|
||||
|
@ -1,46 +1,46 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
GREEDY_KERNEL equ 0
|
||||
|
||||
struct APP_HEADER_00_
|
||||
banner dq ?
|
||||
version dd ? ;+8
|
||||
start dd ? ;+12
|
||||
i_end dd ? ;+16
|
||||
mem_size dd ? ;+20
|
||||
i_param dd ? ;+24
|
||||
ends
|
||||
|
||||
struct APP_HEADER_01_
|
||||
banner dq ?
|
||||
version dd ? ;+8
|
||||
start dd ? ;+12
|
||||
i_end dd ? ;+16
|
||||
mem_size dd ? ;+20
|
||||
stack_top dd ? ;+24
|
||||
i_param dd ? ;+28
|
||||
i_icon dd ? ;+32
|
||||
ends
|
||||
|
||||
|
||||
struct APP_PARAMS
|
||||
app_cmdline dd ? ;0x00
|
||||
app_path dd ? ;0x04
|
||||
app_eip dd ? ;0x08
|
||||
app_esp dd ? ;0x0C
|
||||
app_mem dd ? ;0x10
|
||||
ends
|
||||
|
||||
macro _clear_ op
|
||||
{ mov ecx, op/4
|
||||
|
||||
GREEDY_KERNEL equ 0
|
||||
|
||||
struct APP_HEADER_00_
|
||||
banner dq ?
|
||||
version dd ? ;+8
|
||||
start dd ? ;+12
|
||||
i_end dd ? ;+16
|
||||
mem_size dd ? ;+20
|
||||
i_param dd ? ;+24
|
||||
ends
|
||||
|
||||
struct APP_HEADER_01_
|
||||
banner dq ?
|
||||
version dd ? ;+8
|
||||
start dd ? ;+12
|
||||
i_end dd ? ;+16
|
||||
mem_size dd ? ;+20
|
||||
stack_top dd ? ;+24
|
||||
i_param dd ? ;+28
|
||||
i_icon dd ? ;+32
|
||||
ends
|
||||
|
||||
|
||||
struct APP_PARAMS
|
||||
app_cmdline dd ? ;0x00
|
||||
app_path dd ? ;0x04
|
||||
app_eip dd ? ;0x08
|
||||
app_esp dd ? ;0x0C
|
||||
app_mem dd ? ;0x10
|
||||
ends
|
||||
|
||||
macro _clear_ op
|
||||
{ mov ecx, op/4
|
||||
xor eax, eax
|
||||
cld
|
||||
rep stosd
|
||||
@ -72,6 +72,7 @@ proc fs_execute
|
||||
slot_base dd ?
|
||||
file_base dd ?
|
||||
file_size dd ?
|
||||
handle dd ? ;temp. for default cursor handle for curr. thread
|
||||
;app header data
|
||||
hdr_cmdline dd ? ;0x00
|
||||
hdr_path dd ? ;0x04
|
||||
@ -83,6 +84,13 @@ proc fs_execute
|
||||
|
||||
pushad
|
||||
|
||||
pushad
|
||||
stdcall set_cursor, [def_cursor_clock]
|
||||
mov [handle], eax
|
||||
mov [redrawmouse_unconditional], 1
|
||||
call __sys_draw_pointer
|
||||
popad
|
||||
|
||||
mov [flags], edx
|
||||
|
||||
; [ebp] pointer to filename
|
||||
@ -113,7 +121,8 @@ proc fs_execute
|
||||
.bigfilename:
|
||||
popad
|
||||
mov eax, -ERROR_FILE_NOT_FOUND
|
||||
ret
|
||||
|
||||
jmp .final
|
||||
|
||||
.namecopied:
|
||||
|
||||
@ -127,6 +136,7 @@ proc fs_execute
|
||||
@@:
|
||||
lea eax, [filename]
|
||||
stdcall load_file, eax
|
||||
|
||||
mov esi, -ERROR_FILE_NOT_FOUND
|
||||
test eax, eax
|
||||
jz .err_file
|
||||
@ -237,7 +247,9 @@ end if
|
||||
xor ebx, ebx
|
||||
mov [application_table_status], ebx;unlock application_table_status mutex
|
||||
mov eax, [process_number];set result
|
||||
ret
|
||||
|
||||
jmp .final
|
||||
|
||||
.failed:
|
||||
mov eax, [save_cr3]
|
||||
call set_cr3
|
||||
@ -248,19 +260,25 @@ end if
|
||||
xor eax, eax
|
||||
mov [application_table_status], eax
|
||||
mov eax, esi
|
||||
.final:
|
||||
pushad
|
||||
stdcall set_cursor, [handle]
|
||||
mov [redrawmouse_unconditional], 1
|
||||
call __sys_draw_pointer
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
test_app_header:
|
||||
virtual at eax
|
||||
APP_HEADER_00 APP_HEADER_00_
|
||||
end virtual
|
||||
virtual at eax
|
||||
APP_HEADER_01 APP_HEADER_01_
|
||||
end virtual
|
||||
|
||||
cmp dword [eax], 'MENU'
|
||||
align 4
|
||||
test_app_header:
|
||||
virtual at eax
|
||||
APP_HEADER_00 APP_HEADER_00_
|
||||
end virtual
|
||||
virtual at eax
|
||||
APP_HEADER_01 APP_HEADER_01_
|
||||
end virtual
|
||||
|
||||
cmp dword [eax], 'MENU'
|
||||
jne .fail
|
||||
cmp word [eax+4], 'ET'
|
||||
jne .fail
|
||||
|
@ -1,6 +1,13 @@
|
||||
; Tests of malloc()/free() from the kernel heap.
|
||||
; This file is not included in the kernel, it is just test application.
|
||||
use32
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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.
|
||||
; This file is not included in the kernel, it is just test application.
|
||||
use32
|
||||
db 'MENUET01'
|
||||
dd 1, start, i_end, mem, mem, 0, 0
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision: 2381 $
|
||||
|
||||
|
@ -1,39 +1,39 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
; Virtual-8086 mode manager
|
||||
; diamond, 2007, 2008
|
||||
|
||||
DEBUG_SHOW_IO = 0
|
||||
|
||||
struct V86_machine
|
||||
; page directory
|
||||
pagedir dd ?
|
||||
; translation table: V86 address -> flat linear address
|
||||
pages dd ?
|
||||
; mutex to protect all data from writing by multiple threads at one time
|
||||
mutex dd ?
|
||||
; i/o permission map
|
||||
iopm dd ?
|
||||
ends
|
||||
|
||||
; Create V86 machine
|
||||
; in: nothing
|
||||
|
||||
DEBUG_SHOW_IO = 0
|
||||
|
||||
struct V86_machine
|
||||
; page directory
|
||||
pagedir dd ?
|
||||
; translation table: V86 address -> flat linear address
|
||||
pages dd ?
|
||||
; mutex to protect all data from writing by multiple threads at one time
|
||||
mutex dd ?
|
||||
; i/o permission map
|
||||
iopm dd ?
|
||||
ends
|
||||
|
||||
; Create V86 machine
|
||||
; in: nothing
|
||||
; out: eax = handle (pointer to struc V86_machine)
|
||||
; eax = NULL => failure
|
||||
; destroys: ebx, ecx, edx (due to malloc)
|
||||
v86_create:
|
||||
; allocate V86_machine structure
|
||||
mov eax, sizeof.V86_machine
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail
|
||||
; destroys: ebx, ecx, edx (due to malloc)
|
||||
v86_create:
|
||||
; allocate V86_machine structure
|
||||
mov eax, sizeof.V86_machine
|
||||
call malloc
|
||||
test eax, eax
|
||||
jz .fail
|
||||
; initialize mutex
|
||||
and dword [eax+V86_machine.mutex], 0
|
||||
; allocate tables
|
||||
@ -237,32 +237,32 @@ if ~DEBUG_SHOW_IO
|
||||
mov ecx, 10000h/8/4
|
||||
rep stosd
|
||||
end if
|
||||
.ret:
|
||||
ret
|
||||
|
||||
struct v86_regs
|
||||
; don't change the order, it is important
|
||||
edi dd ?
|
||||
esi dd ?
|
||||
ebp dd ?
|
||||
dd ? ; ignored
|
||||
ebx dd ?
|
||||
edx dd ?
|
||||
ecx dd ?
|
||||
eax dd ?
|
||||
eip dd ?
|
||||
cs dd ?
|
||||
eflags dd ? ; VM flag must be set!
|
||||
esp dd ?
|
||||
ss dd ?
|
||||
es dd ?
|
||||
ds dd ?
|
||||
fs dd ?
|
||||
gs dd ?
|
||||
ends
|
||||
|
||||
; Run V86 machine
|
||||
; in: ebx -> registers for V86 (two structures: in and out)
|
||||
.ret:
|
||||
ret
|
||||
|
||||
struct v86_regs
|
||||
; don't change the order, it is important
|
||||
edi dd ?
|
||||
esi dd ?
|
||||
ebp dd ?
|
||||
dd ? ; ignored
|
||||
ebx dd ?
|
||||
edx dd ?
|
||||
ecx dd ?
|
||||
eax dd ?
|
||||
eip dd ?
|
||||
cs dd ?
|
||||
eflags dd ? ; VM flag must be set!
|
||||
esp dd ?
|
||||
ss dd ?
|
||||
es dd ?
|
||||
ds dd ?
|
||||
fs dd ?
|
||||
gs dd ?
|
||||
ends
|
||||
|
||||
; Run V86 machine
|
||||
; in: ebx -> registers for V86 (two structures: in and out)
|
||||
; esi = handle
|
||||
; ecx = expected end address (CS:IP)
|
||||
; edx = IRQ to hook or -1 if not required
|
||||
@ -306,16 +306,16 @@ v86_start:
|
||||
; We do not enable interrupts, because V86 IRQ redirector assumes that
|
||||
; machine is running
|
||||
; They will be enabled by IRET.
|
||||
; sti
|
||||
|
||||
mov eax, esi
|
||||
sub esp, sizeof.v86_regs
|
||||
mov esi, ebx
|
||||
mov edi, esp
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
rep movsd
|
||||
|
||||
cmp edx, -1
|
||||
; sti
|
||||
|
||||
mov eax, esi
|
||||
sub esp, sizeof.v86_regs
|
||||
mov esi, ebx
|
||||
mov edi, esp
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
rep movsd
|
||||
|
||||
cmp edx, -1
|
||||
jz .noirqhook
|
||||
uglobal
|
||||
v86_irqhooks rd IRQ_RESERVED * 2
|
||||
@ -359,13 +359,13 @@ v86_exc_c:
|
||||
; Did we all that we have wanted to do?
|
||||
cmp bl, 1
|
||||
jne @f
|
||||
xor eax, eax
|
||||
mov dr6, eax
|
||||
@@:
|
||||
mov eax, [esp+sizeof.v86_regs+10h+18h]
|
||||
cmp word [esp+v86_regs.eip], ax
|
||||
jnz @f
|
||||
shr eax, 16
|
||||
xor eax, eax
|
||||
mov dr6, eax
|
||||
@@:
|
||||
mov eax, [esp+sizeof.v86_regs+10h+18h]
|
||||
cmp word [esp+v86_regs.eip], ax
|
||||
jnz @f
|
||||
shr eax, 16
|
||||
cmp word [esp+v86_regs.cs], ax
|
||||
jz .done
|
||||
@@:
|
||||
@ -431,13 +431,13 @@ v86_exc_c:
|
||||
shl edx, 4
|
||||
push eax
|
||||
movzx eax, word [esp+4+v86_regs.esp]
|
||||
sub eax, 6
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+4+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
sub eax, 6
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+4+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14 ; #PF exception
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -479,13 +479,13 @@ v86_exc_c:
|
||||
@@:
|
||||
movzx edx, word [esp+v86_regs.ss]
|
||||
shl edx, 4
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -515,13 +515,13 @@ v86_exc_c:
|
||||
shl edx, 4
|
||||
mov eax, [esp+v86_regs.esp]
|
||||
sub eax, 2
|
||||
movzx eax, ax
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
movzx eax, ax
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14 ; #PF exception
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -547,13 +547,13 @@ v86_exc_c:
|
||||
movzx edx, word [esp+v86_regs.ss]
|
||||
shl edx, 4
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
sub eax, 4
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
sub eax, 4
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14 ; #PF exception
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -578,13 +578,13 @@ v86_exc_c:
|
||||
@@:
|
||||
movzx edx, word [esp+v86_regs.ss]
|
||||
shl edx, 4
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14 ; #PF exception
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -609,13 +609,13 @@ v86_exc_c:
|
||||
@@:
|
||||
movzx edx, word [esp+v86_regs.ss]
|
||||
shl edx, 4
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
movzx eax, word [esp+v86_regs.esp]
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jae @f
|
||||
mov bl, 14
|
||||
jmp .nogp
|
||||
@@:
|
||||
@ -735,13 +735,13 @@ end if
|
||||
call sys_msg_board_str
|
||||
mov ecx, 8
|
||||
movzx edx, word [esp+32+4]
|
||||
shl edx, 4
|
||||
add edx, [esp+32]
|
||||
@@:
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
mov eax, edx
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
shl edx, 4
|
||||
add edx, [esp+32]
|
||||
@@:
|
||||
mov esi, [esp+sizeof.v86_regs+10h+4]
|
||||
mov eax, edx
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jb .nopage
|
||||
mov esi, v86_exc_str3-2
|
||||
call sys_msg_board_str
|
||||
@ -760,27 +760,27 @@ end if
|
||||
jmp .exit
|
||||
|
||||
.done:
|
||||
xor eax, eax
|
||||
|
||||
.exit:
|
||||
mov [esp+sizeof.v86_regs+10h+1Ch], eax
|
||||
mov [esp+sizeof.v86_regs+10h+18h], ebx
|
||||
|
||||
mov edx, [esp+sizeof.v86_regs+10h+14h]
|
||||
cmp edx, -1
|
||||
jz @f
|
||||
dec [v86_irqhooks+edx*8+4]
|
||||
xor eax, eax
|
||||
|
||||
.exit:
|
||||
mov [esp+sizeof.v86_regs+10h+1Ch], eax
|
||||
mov [esp+sizeof.v86_regs+10h+18h], ebx
|
||||
|
||||
mov edx, [esp+sizeof.v86_regs+10h+14h]
|
||||
cmp edx, -1
|
||||
jz @f
|
||||
dec [v86_irqhooks+edx*8+4]
|
||||
jnz @f
|
||||
and [v86_irqhooks+edx*8], 0
|
||||
@@:
|
||||
|
||||
mov esi, esp
|
||||
mov edi, [esi+sizeof.v86_regs+10h+10h]
|
||||
add edi, sizeof.v86_regs
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
rep movsd
|
||||
mov esp, esi
|
||||
|
||||
@@:
|
||||
|
||||
mov esi, esp
|
||||
mov edi, [esi+sizeof.v86_regs+10h+10h]
|
||||
add edi, sizeof.v86_regs
|
||||
mov ecx, sizeof.v86_regs/4
|
||||
rep movsd
|
||||
mov esp, esi
|
||||
|
||||
cli
|
||||
mov ecx, [CURRENT_TASK]
|
||||
shl ecx, 8
|
||||
@ -861,18 +861,18 @@ v86_irq2:
|
||||
mov ecx, [TASK_COUNT]
|
||||
.scan:
|
||||
cmp [ebx+APPDATA.dir_table], eax
|
||||
jnz .cont
|
||||
push ecx
|
||||
mov ecx, [ebx+APPDATA.saved_esp0]
|
||||
cmp word [ecx-sizeof.v86_regs+v86_regs.esp], 6
|
||||
jb .cont2
|
||||
movzx edx, word [ecx-sizeof.v86_regs+v86_regs.ss]
|
||||
shl edx, 4
|
||||
push eax
|
||||
movzx eax, word [ecx-sizeof.v86_regs+v86_regs.esp]
|
||||
sub eax, 6
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
jnz .cont
|
||||
push ecx
|
||||
mov ecx, [ebx+APPDATA.saved_esp0]
|
||||
cmp word [ecx-sizeof.v86_regs+v86_regs.esp], 6
|
||||
jb .cont2
|
||||
movzx edx, word [ecx-sizeof.v86_regs+v86_regs.ss]
|
||||
shl edx, 4
|
||||
push eax
|
||||
movzx eax, word [ecx-sizeof.v86_regs+v86_regs.esp]
|
||||
sub eax, 6
|
||||
add edx, eax
|
||||
mov eax, edx
|
||||
call v86_get_lin_addr
|
||||
cmp eax, 0x1000
|
||||
jb .cont3
|
||||
@ -892,29 +892,29 @@ v86_irq2:
|
||||
mov ecx, edi
|
||||
call irq_eoi
|
||||
popad
|
||||
iretd
|
||||
.found:
|
||||
mov cr3, eax
|
||||
sub word [esi-sizeof.v86_regs+v86_regs.esp], 6
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.eip]
|
||||
mov word [edx], cx
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.cs]
|
||||
mov word [edx+2], cx
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.eflags]
|
||||
mov word [edx+4], cx
|
||||
lea eax, [edi+8]
|
||||
cmp al, 10h
|
||||
iretd
|
||||
.found:
|
||||
mov cr3, eax
|
||||
sub word [esi-sizeof.v86_regs+v86_regs.esp], 6
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.eip]
|
||||
mov word [edx], cx
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.cs]
|
||||
mov word [edx+2], cx
|
||||
mov ecx, [esi-sizeof.v86_regs+v86_regs.eflags]
|
||||
mov word [edx+4], cx
|
||||
lea eax, [edi+8]
|
||||
cmp al, 10h
|
||||
jb @f
|
||||
add al, 60h
|
||||
@@:
|
||||
mov cx, [eax*4]
|
||||
mov word [esi-sizeof.v86_regs+v86_regs.eip], cx
|
||||
mov cx, [eax*4+2]
|
||||
mov word [esi-sizeof.v86_regs+v86_regs.cs], cx
|
||||
and byte [esi-sizeof.v86_regs+v86_regs.eflags+1], not 3
|
||||
call update_counters
|
||||
lea edi, [ebx + 0x100000000 - SLOT_BASE]
|
||||
shr edi, 3
|
||||
add al, 60h
|
||||
@@:
|
||||
mov cx, [eax*4]
|
||||
mov word [esi-sizeof.v86_regs+v86_regs.eip], cx
|
||||
mov cx, [eax*4+2]
|
||||
mov word [esi-sizeof.v86_regs+v86_regs.cs], cx
|
||||
and byte [esi-sizeof.v86_regs+v86_regs.eflags+1], not 3
|
||||
call update_counters
|
||||
lea edi, [ebx + 0x100000000 - SLOT_BASE]
|
||||
shr edi, 3
|
||||
add edi, TASK_DATA
|
||||
call find_next_task.found
|
||||
call do_change_task
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
flm db 0
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
keymap:
|
||||
@ -107,7 +107,7 @@ msg_module db 'in module ',0
|
||||
msg_version db 'incompatible driver version',13,10,0
|
||||
msg_www db 'please visit www.kolibrios.org',13,10,0
|
||||
msg_CR db 13,10,0
|
||||
aSis db 'SIS',0
|
||||
aHDA db 'INTEL_HDA',0
|
||||
|
||||
intel_str db "GenuineIntel",0
|
||||
AMD_str db "AuthenticAMD",0
|
||||
@ -156,23 +156,25 @@ dll_list:
|
||||
.bk dd dll_list
|
||||
.fd dd dll_list
|
||||
|
||||
MAX_DEFAULT_DLL_ADDR = 0x20000000
|
||||
MIN_DEFAULT_DLL_ADDR = 0x10000000
|
||||
MAX_DEFAULT_DLL_ADDR = 0x80000000
|
||||
MIN_DEFAULT_DLL_ADDR = 0x70000000
|
||||
dll_cur_addr dd MIN_DEFAULT_DLL_ADDR
|
||||
|
||||
; supported videomodes
|
||||
|
||||
|
||||
; mike.dld {
|
||||
db 0
|
||||
dd servetable-0x10000
|
||||
draw_line dd __sys_draw_line
|
||||
draw_pointer dd __sys_draw_pointer
|
||||
;db 0
|
||||
;dd servetable-0x10000
|
||||
;align 4
|
||||
;draw_line dd __sys_draw_line
|
||||
;draw_pointer dd __sys_draw_pointer
|
||||
;//mike.dld, 2006-08-02 [
|
||||
;drawbar dd __sys_drawbar
|
||||
drawbar dd __sys_drawbar.forced
|
||||
;;drawbar dd __sys_drawbar
|
||||
;;drawbar dd __sys_drawbar.forced
|
||||
;drawbar dd vesa20_drawbar
|
||||
;//mike.dld, 2006-08-02 ]
|
||||
putpixel dd __sys_putpixel
|
||||
;putpixel dd __sys_putpixel
|
||||
; } mike.dld
|
||||
|
||||
|
||||
@ -272,13 +274,13 @@ graph_data_l:
|
||||
dw 0x7ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
tss0_l:
|
||||
dw sizeof.TSS-1
|
||||
dw tss and 0xFFFF
|
||||
db (tss shr 16) and 0xFF
|
||||
db 10001001b
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
tss0_l:
|
||||
dw sizeof.TSS-1
|
||||
dw tss and 0xFFFF
|
||||
db (tss shr 16) and 0xFF
|
||||
db 10001001b
|
||||
dw (tss shr 16) and 0xFF00
|
||||
|
||||
tls_data_l:
|
||||
@ -292,7 +294,8 @@ endofcode:
|
||||
gdte:
|
||||
|
||||
align 16
|
||||
cur_saved_data rb 4096
|
||||
cur_saved_data:
|
||||
rb 4096
|
||||
fpu_data:
|
||||
rb 512
|
||||
|
||||
@ -330,6 +333,7 @@ _WinMapAddress rd 1
|
||||
_WinMapSize rd 1
|
||||
|
||||
def_cursor rd 1
|
||||
def_cursor_clock rd 1
|
||||
current_cursor rd 1
|
||||
hw_cursor rd 1
|
||||
cur_saved_base rd 1
|
||||
@ -393,13 +397,10 @@ windowtypechanged rd 1
|
||||
|
||||
hd_entries rd 1 ;unused ? 0xfe10
|
||||
|
||||
;* start code - Mario79
|
||||
|
||||
mouse_active rd 1
|
||||
mouse_pause rd 1
|
||||
MouseTickCounter rd 1
|
||||
|
||||
;* end code - Mario79
|
||||
redrawmouse_unconditional rd 1
|
||||
|
||||
img_background rd 1
|
||||
mem_BACKGROUND rd 1
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2008. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2008-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; Detect all BIOS hard drives.
|
||||
; diamond, 2008
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2009. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2009-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; Query physical memory map from BIOS.
|
||||
; diamond, 2009
|
||||
@ -20,14 +20,14 @@
|
||||
mov edx, 0x534D4150
|
||||
int 15h
|
||||
jc no_E820
|
||||
cmp eax, 0x534D4150
|
||||
jnz no_E820
|
||||
e820_mem_loop:
|
||||
cmp byte [di+16], 1 ; ignore non-free areas
|
||||
jnz e820_mem_next
|
||||
inc byte [0x9100]
|
||||
add di, 20
|
||||
e820_mem_next:
|
||||
cmp eax, 0x534D4150
|
||||
jnz no_E820
|
||||
e820_mem_loop:
|
||||
; cmp byte [di+16], 1 ; ignore non-free areas
|
||||
; jnz e820_mem_next
|
||||
inc byte [0x9100]
|
||||
add di, 20
|
||||
e820_mem_next:
|
||||
; consequent calls to fn E820
|
||||
test ebx, ebx
|
||||
jz e820_test_done
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;***************************************************
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;******************************************************
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
include 'dev_fd.inc'
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
pusha
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;****************************************************
|
||||
|
@ -1,177 +1,173 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;driver sceletone
|
||||
|
||||
format MS COFF
|
||||
|
||||
DEBUG equ 1
|
||||
|
||||
API_VERSION equ 0 ;debug
|
||||
|
||||
include 'proc32.inc'
|
||||
include 'imports.inc'
|
||||
|
||||
OS_BASE equ 0;
|
||||
new_app_base equ 0x60400000
|
||||
PROC_BASE equ OS_BASE+0x0080000
|
||||
|
||||
struc IOCTL
|
||||
{ .handle dd ?
|
||||
.io_code dd ?
|
||||
.input dd ?
|
||||
.inp_size dd ?
|
||||
.output dd ?
|
||||
.out_size dd ?
|
||||
}
|
||||
|
||||
virtual at 0
|
||||
IOCTL IOCTL
|
||||
end virtual
|
||||
|
||||
public START
|
||||
public service_proc
|
||||
public version
|
||||
|
||||
DRV_ENTRY equ 1
|
||||
DRV_EXIT equ -1
|
||||
STRIDE equ 4 ;size of row in devices table
|
||||
|
||||
SRV_GETVERSION equ 0
|
||||
|
||||
section '.flat' code readable align 16
|
||||
|
||||
proc START stdcall, state:dword
|
||||
|
||||
cmp [state], 1
|
||||
jne .exit
|
||||
.entry:
|
||||
|
||||
if DEBUG
|
||||
mov esi, msgInit
|
||||
call SysMsgBoardStr
|
||||
end if
|
||||
|
||||
stdcall RegService, my_service, service_proc
|
||||
ret
|
||||
.fail:
|
||||
.exit:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
handle equ IOCTL.handle
|
||||
io_code equ IOCTL.io_code
|
||||
input equ IOCTL.input
|
||||
inp_size equ IOCTL.inp_size
|
||||
output equ IOCTL.output
|
||||
out_size equ IOCTL.out_size
|
||||
|
||||
align 4
|
||||
proc service_proc stdcall, ioctl:dword
|
||||
|
||||
mov ebx, [ioctl]
|
||||
mov eax, [ebx+io_code]
|
||||
cmp eax, SRV_GETVERSION
|
||||
jne @F
|
||||
|
||||
mov eax, [ebx+output]
|
||||
cmp [ebx+out_size], 4
|
||||
jne .fail
|
||||
mov [eax], dword API_VERSION
|
||||
xor eax, eax
|
||||
ret
|
||||
@@:
|
||||
.fail:
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
restore handle
|
||||
restore io_code
|
||||
restore input
|
||||
restore inp_size
|
||||
restore output
|
||||
restore out_size
|
||||
|
||||
align 4
|
||||
proc detect
|
||||
locals
|
||||
last_bus dd ?
|
||||
endl
|
||||
|
||||
xor eax, eax
|
||||
mov [bus], eax
|
||||
inc eax
|
||||
call PciApi
|
||||
cmp eax, -1
|
||||
je .err
|
||||
|
||||
mov [last_bus], eax
|
||||
|
||||
.next_bus:
|
||||
and [devfn], 0
|
||||
.next_dev:
|
||||
stdcall PciRead32, [bus], [devfn], dword 0
|
||||
test eax, eax
|
||||
jz .next
|
||||
cmp eax, -1
|
||||
je .next
|
||||
|
||||
mov edi, devices
|
||||
@@:
|
||||
mov ebx, [edi]
|
||||
test ebx, ebx
|
||||
jz .next
|
||||
|
||||
cmp eax, ebx
|
||||
je .found
|
||||
|
||||
add edi, STRIDE
|
||||
jmp @B
|
||||
.next:
|
||||
inc [devfn]
|
||||
cmp [devfn], 256
|
||||
jb .next_dev
|
||||
mov eax, [bus]
|
||||
inc eax
|
||||
mov [bus], eax
|
||||
cmp eax, [last_bus]
|
||||
jna .next_bus
|
||||
xor eax, eax
|
||||
ret
|
||||
.found:
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
.err:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
DEVICE_ID equ 1234; pci device id
|
||||
VENDOR_ID equ 5678; device vendor id
|
||||
|
||||
|
||||
;all initialized data place here
|
||||
|
||||
align 4
|
||||
devices dd (DEVICE_ID shl 16)+VENDOR_ID
|
||||
dd 0 ;terminator
|
||||
|
||||
version dd (5 shl 16) or (API_VERSION and 0xFFFF)
|
||||
|
||||
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
|
||||
|
||||
msgInit db 'detect hardware...',13,10,0
|
||||
msgPCI db 'PCI accsess not supported',13,10,0
|
||||
msgFail db 'device not found',13,10,0
|
||||
|
||||
section '.data' data readable writable align 16
|
||||
|
||||
;all uninitialized data place here
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;driver sceletone
|
||||
|
||||
format MS COFF
|
||||
|
||||
DEBUG equ 1
|
||||
|
||||
API_VERSION equ 0 ;debug
|
||||
|
||||
include 'proc32.inc'
|
||||
include 'imports.inc'
|
||||
|
||||
struc IOCTL
|
||||
{ .handle dd ?
|
||||
.io_code dd ?
|
||||
.input dd ?
|
||||
.inp_size dd ?
|
||||
.output dd ?
|
||||
.out_size dd ?
|
||||
}
|
||||
|
||||
virtual at 0
|
||||
IOCTL IOCTL
|
||||
end virtual
|
||||
|
||||
public START
|
||||
public service_proc
|
||||
public version
|
||||
|
||||
DRV_ENTRY equ 1
|
||||
DRV_EXIT equ -1
|
||||
STRIDE equ 4 ;size of row in devices table
|
||||
|
||||
SRV_GETVERSION equ 0
|
||||
|
||||
section '.flat' code readable align 16
|
||||
|
||||
proc START stdcall, state:dword
|
||||
|
||||
cmp [state], 1
|
||||
jne .exit
|
||||
.entry:
|
||||
|
||||
if DEBUG
|
||||
mov esi, msgInit
|
||||
call SysMsgBoardStr
|
||||
end if
|
||||
|
||||
stdcall RegService, my_service, service_proc
|
||||
ret
|
||||
.fail:
|
||||
.exit:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
handle equ IOCTL.handle
|
||||
io_code equ IOCTL.io_code
|
||||
input equ IOCTL.input
|
||||
inp_size equ IOCTL.inp_size
|
||||
output equ IOCTL.output
|
||||
out_size equ IOCTL.out_size
|
||||
|
||||
align 4
|
||||
proc service_proc stdcall, ioctl:dword
|
||||
|
||||
mov ebx, [ioctl]
|
||||
mov eax, [ebx+io_code]
|
||||
cmp eax, SRV_GETVERSION
|
||||
jne @F
|
||||
|
||||
mov eax, [ebx+output]
|
||||
cmp [ebx+out_size], 4
|
||||
jne .fail
|
||||
mov [eax], dword API_VERSION
|
||||
xor eax, eax
|
||||
ret
|
||||
@@:
|
||||
.fail:
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
restore handle
|
||||
restore io_code
|
||||
restore input
|
||||
restore inp_size
|
||||
restore output
|
||||
restore out_size
|
||||
|
||||
align 4
|
||||
proc detect
|
||||
locals
|
||||
last_bus dd ?
|
||||
endl
|
||||
|
||||
xor eax, eax
|
||||
mov [bus], eax
|
||||
inc eax
|
||||
call PciApi
|
||||
cmp eax, -1
|
||||
je .err
|
||||
|
||||
mov [last_bus], eax
|
||||
|
||||
.next_bus:
|
||||
and [devfn], 0
|
||||
.next_dev:
|
||||
stdcall PciRead32, [bus], [devfn], dword 0
|
||||
test eax, eax
|
||||
jz .next
|
||||
cmp eax, -1
|
||||
je .next
|
||||
|
||||
mov edi, devices
|
||||
@@:
|
||||
mov ebx, [edi]
|
||||
test ebx, ebx
|
||||
jz .next
|
||||
|
||||
cmp eax, ebx
|
||||
je .found
|
||||
|
||||
add edi, STRIDE
|
||||
jmp @B
|
||||
.next:
|
||||
inc [devfn]
|
||||
cmp [devfn], 256
|
||||
jb .next_dev
|
||||
mov eax, [bus]
|
||||
inc eax
|
||||
mov [bus], eax
|
||||
cmp eax, [last_bus]
|
||||
jna .next_bus
|
||||
xor eax, eax
|
||||
ret
|
||||
.found:
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
.err:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
DEVICE_ID equ 1234; pci device id
|
||||
VENDOR_ID equ 5678; device vendor id
|
||||
|
||||
|
||||
;all initialized data place here
|
||||
|
||||
align 4
|
||||
devices dd (DEVICE_ID shl 16)+VENDOR_ID
|
||||
dd 0 ;terminator
|
||||
|
||||
version dd (5 shl 16) or (API_VERSION and 0xFFFF)
|
||||
|
||||
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
|
||||
|
||||
msgInit db 'detect hardware...',13,10,0
|
||||
msgPCI db 'PCI accsess not supported',13,10,0
|
||||
msgFail db 'device not found',13,10,0
|
||||
|
||||
section '.data' data readable writable align 16
|
||||
|
||||
;all uninitialized data place here
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
_esp equ esp
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; 02.02.2010 turbanoff - support 70.5 ;;
|
||||
;; 23.01.2010 turbanoff - support 70.0 70.1 ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; 02.02.2010 turbanoff - support 70.5 ;;
|
||||
;; 23.01.2010 turbanoff - support 70.0 70.1 ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; FAT12.INC ;;
|
||||
@ -8,7 +8,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
n_sector dd 0 ; temporary save for sector value
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; FAT32.INC ;;
|
||||
@ -44,7 +44,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
cache_max equ 1919 ; max. is 1919*512+0x610000=0x6ffe00
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
@ -17,7 +17,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
iglobal
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
image_of_eax EQU esp+32
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
uglobal
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
ntfs_test_bootsec:
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -14,7 +14,7 @@
|
||||
;
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
iglobal
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;*************************************************************
|
||||
|
@ -1,12 +1,12 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
;==============================================================================
|
||||
;///// public functions ///////////////////////////////////////////////////////
|
||||
@ -133,7 +133,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
call button._.button_dececx
|
||||
push edi
|
||||
xor edi, edi
|
||||
call [draw_line]
|
||||
; call [draw_line]
|
||||
call __sys_draw_line
|
||||
pop edi
|
||||
add ebx, 0x00010001
|
||||
dec edx
|
||||
@ -164,7 +165,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
xor edi, edi
|
||||
mov ecx, esi
|
||||
call button._.incecx
|
||||
call [draw_line]
|
||||
; call [draw_line]
|
||||
call __sys_draw_line
|
||||
|
||||
; bottom border
|
||||
movzx edx, word[esp + 4 + 0]
|
||||
@ -173,7 +175,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
add ebx, edx
|
||||
mov ecx, esi
|
||||
call button._.dececx
|
||||
call [draw_line]
|
||||
; call [draw_line]
|
||||
call __sys_draw_line
|
||||
|
||||
; left border
|
||||
pop ebx
|
||||
@ -188,7 +191,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
pop edx
|
||||
mov ecx, esi
|
||||
call button._.incecx
|
||||
call [draw_line]
|
||||
; call [draw_line]
|
||||
call __sys_draw_line
|
||||
|
||||
; right border
|
||||
mov dx, [esp + 4]
|
||||
@ -198,7 +202,8 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
add ebx, 0x00010000
|
||||
mov ecx, esi
|
||||
call button._.dececx
|
||||
call [draw_line]
|
||||
; call [draw_line]
|
||||
call __sys_draw_line
|
||||
|
||||
pop ecx ebx
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
WINDOW_MOVE_AND_RESIZE_FLAGS = \
|
||||
mouse.WINDOW_RESIZE_N_FLAG + \
|
||||
@ -22,33 +22,38 @@ align 4
|
||||
endg
|
||||
EV_SPACE = 512
|
||||
FreeEvents = event_start-EVENT.fd ; "âèðòóàëüíûé" event, èñïîëüçóþòñÿ òîëüêî ïîëÿ:
|
||||
; FreeEvents.fd=event_start è FreeEvents.bk=event_end
|
||||
align 4
|
||||
init_events: ;; used from kernel.asm
|
||||
stdcall kernel_alloc, EV_SPACE*sizeof.EVENT
|
||||
or eax, eax
|
||||
jz .fail
|
||||
; eax - current event, ebx - previos event below
|
||||
; FreeEvents.fd=event_start è FreeEvents.bk=event_end
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
init_events: ;; used from kernel.asm
|
||||
stdcall kernel_alloc, EV_SPACE*sizeof.EVENT
|
||||
or eax, eax
|
||||
jz .fail
|
||||
; eax - current event, ebx - previos event below
|
||||
mov ecx, EV_SPACE ; current - in allocated space
|
||||
mov ebx, FreeEvents ; previos - íà÷àëî ñïèñêà
|
||||
push ebx ; îíî æå è êîíåö ïîòîì áóäåò
|
||||
@@:
|
||||
mov [ebx+EVENT.fd], eax
|
||||
mov [eax+EVENT.bk], ebx
|
||||
mov ebx, eax ; previos <- current
|
||||
add eax, sizeof.EVENT ; new current
|
||||
loop @b
|
||||
pop eax ; âîò îíî êîíöîì è ñòàëî
|
||||
mov [ebx+EVENT.fd], eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov [ebx+EVENT.fd], eax
|
||||
mov [eax+EVENT.bk], ebx
|
||||
mov ebx, eax ; previos <- current
|
||||
add eax, sizeof.EVENT ; new current
|
||||
loop @b
|
||||
pop eax ; âîò îíî êîíöîì è ñòàëî
|
||||
mov [ebx+EVENT.fd], eax
|
||||
mov [eax+EVENT.bk], ebx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
EVENT_WATCHED equ 0x10000000 ;áèò 28
|
||||
EVENT_SIGNALED equ 0x20000000 ;áèò 29
|
||||
MANUAL_RESET equ 0x40000000 ;áèò 30
|
||||
MANUAL_DESTROY equ 0x80000000 ;áèò 31
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
create_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -67,7 +72,8 @@ create_event: ;; EXPORT use
|
||||
mov edx, [edx+TASKDATA.pid]
|
||||
pushfd
|
||||
cli
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
set_event: ;; INTERNAL use !!! don't use for Call
|
||||
;info:
|
||||
; Áåðåì íîâûé event èç FreeEvents, çàïîëíÿåì åãî ïîëÿ, êàê óêàçàíî â ecx,edx,esi
|
||||
@ -89,7 +95,9 @@ set_event: ;; INTERNAL use !!! don't use
|
||||
call init_events
|
||||
popad
|
||||
jz RemoveEventTo.break ; POPF+RET
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov eax, [eax+EVENT.fd]
|
||||
mov [eax+EVENT.magic], 'EVNT'
|
||||
mov [eax+EVENT.destroy], destroy_event.internal
|
||||
@ -97,13 +105,14 @@ set_event: ;; INTERNAL use !!! don't use
|
||||
mov [eax+EVENT.pid], edx
|
||||
inc [event_uid]
|
||||
Mov [eax+EVENT.id],edx,[event_uid]
|
||||
or esi, esi
|
||||
jz RemoveEventTo
|
||||
lea edi, [eax+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT -EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
|
||||
or esi, esi
|
||||
jz RemoveEventTo
|
||||
lea edi, [eax+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT -EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
;--------------------------------------
|
||||
align 4
|
||||
RemoveEventTo: ;; INTERNAL use !!! don't use for Call
|
||||
;param:
|
||||
; eax - óêàçàòåëü íà event, ÊÎÒÎÐÛÉ âñòàâëÿåì
|
||||
@ -118,10 +127,12 @@ RemoveEventTo: ;; INTERNAL use !!! don't use
|
||||
xchg ecx, [eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight
|
||||
mov [ebx+EVENT.fd], ecx ; OldLeft.fd=OldRight
|
||||
mov [ecx+EVENT.bk], ebx ; OldRight.bk=OldLeft
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.break:
|
||||
popfd
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
NotDummyTest: ;; INTERNAL use (not returned for fail !!!)
|
||||
pop edi
|
||||
@ -129,6 +140,8 @@ NotDummyTest: ;; INTERNAL use (not returned
|
||||
mov ebx, eax
|
||||
mov eax, [ebx+EVENT.pid]
|
||||
push edi
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.small: ; êðèâî êàê-òî...
|
||||
pop edi
|
||||
pushfd
|
||||
@ -137,7 +150,7 @@ NotDummyTest: ;; INTERNAL use (not returned
|
||||
shl eax, 8
|
||||
jz RemoveEventTo.break ; POPF+RET
|
||||
jmp edi ; øòàòíûé âîçâðàò
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
raise_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -152,25 +165,29 @@ raise_event: ;; EXPORT use
|
||||
; esi - event data (=0 => skip)
|
||||
;scratched: ebx,ecx,esi,edi
|
||||
call NotDummyTest ; not returned for fail !!!
|
||||
or esi, esi
|
||||
jz @f
|
||||
lea edi, [ebx+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT -EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
@@:
|
||||
or esi, esi
|
||||
jz @f
|
||||
lea edi, [ebx+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT -EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
test byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24
|
||||
jnz RemoveEventTo.break ; POPF+RET
|
||||
bt edx, 28 ;EVENT_WATCHED
|
||||
jnc @f
|
||||
test byte[ebx+EVENT.state+3], EVENT_WATCHED shr 24
|
||||
jz RemoveEventTo.break ; POPF+RET
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
or byte[ebx+EVENT.state+3], EVENT_SIGNALED shr 24
|
||||
add eax, SLOT_BASE+APP_EV_OFFSET
|
||||
xchg eax, ebx
|
||||
jmp RemoveEventTo
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
clear_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -184,7 +201,7 @@ clear_event: ;; EXPORT use
|
||||
and byte[ebx+EVENT.state+3], not((EVENT_SIGNALED+EVENT_WATCHED)shr 24)
|
||||
xchg eax, ebx
|
||||
jmp RemoveEventTo
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
send_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -207,7 +224,7 @@ send_event: ;; EXPORT use
|
||||
lea ebx, [eax+SLOT_BASE+APP_EV_OFFSET]
|
||||
mov ecx, EVENT_SIGNALED
|
||||
jmp set_event
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
DummyTest: ;; INTERNAL use (not returned for fail !!!)
|
||||
;param:
|
||||
@ -217,16 +234,21 @@ DummyTest: ;; INTERNAL use (not returned
|
||||
jne @f
|
||||
cmp [eax+EVENT.id], ebx
|
||||
je .ret
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
pop eax
|
||||
xor eax, eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
ret
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
Wait_events:
|
||||
or ebx, -1; infinite timeout
|
||||
;--------------------------------------
|
||||
align 4
|
||||
Wait_events_ex:
|
||||
;info:
|
||||
; Îæèäàíèå "àáñòðàêòíîãî" ñîáûòèÿ ÷åðåç ïåðåâîä ñëîòà â 5-þ ïîçèöèþ.
|
||||
@ -260,9 +282,11 @@ Wait_events_ex:
|
||||
mov [eax+TASKDATA.state], 5
|
||||
call change_task
|
||||
mov eax, [esi+APPDATA.wait_param]
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
wait_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -281,7 +305,7 @@ wait_event: ;; EXPORT use
|
||||
mov edx, get_event_alone ; wait_test
|
||||
call Wait_events ; timeout ignored
|
||||
jmp wait_finish
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
get_event_ex: ;; f68:14
|
||||
;info:
|
||||
@ -296,16 +320,18 @@ get_event_ex: ;; f68:14
|
||||
;retval:
|
||||
; eax - ñîáñòâåííî EVENT (áóäåì íàçûâàòü ýòî åãî õýíäëîì)
|
||||
;scratched: ebx,ecx,edx,esi,edi
|
||||
mov edx, get_event_queue ; wait_test
|
||||
call Wait_events ; timeout ignored
|
||||
lea esi, [eax+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT-EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field
|
||||
wait_finish:
|
||||
test byte[eax+EVENT.state+3], MANUAL_RESET shr 24
|
||||
jnz get_event_queue.ret ; RET
|
||||
mov edx, get_event_queue ; wait_test
|
||||
call Wait_events ; timeout ignored
|
||||
lea esi, [eax+EVENT.code]
|
||||
mov ecx, (sizeof.EVENT-EVENT.code)/4
|
||||
cld
|
||||
rep movsd
|
||||
mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field
|
||||
;--------------------------------------
|
||||
align 4
|
||||
wait_finish:
|
||||
test byte[eax+EVENT.state+3], MANUAL_RESET shr 24
|
||||
jnz get_event_queue.ret ; RET
|
||||
and byte[eax+EVENT.state+3], not((EVENT_SIGNALED+EVENT_WATCHED)shr 24)
|
||||
test byte[eax+EVENT.state+3], MANUAL_DESTROY shr 24
|
||||
jz destroy_event.internal
|
||||
@ -314,7 +340,7 @@ wait_finish:
|
||||
pushfd
|
||||
cli
|
||||
jmp RemoveEventTo
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
destroy_event: ;; EXPORT use
|
||||
;info:
|
||||
@ -326,6 +352,8 @@ destroy_event: ;; EXPORT use
|
||||
; eax - àäðåñ îáúåêòà EVENT (=0 => fail)
|
||||
;scratched: ebx,ecx
|
||||
call DummyTest ; not returned for fail !!!
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.internal:
|
||||
xor ecx, ecx ; clear common header
|
||||
pushfd
|
||||
@ -336,7 +364,7 @@ destroy_event: ;; EXPORT use
|
||||
mov [eax+EVENT.id], ecx
|
||||
mov ebx, FreeEvents
|
||||
jmp RemoveEventTo
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
get_event_queue:
|
||||
;info:
|
||||
@ -353,9 +381,11 @@ get_event_queue:
|
||||
mov eax, [ebx+APPOBJ.bk] ; âûáèðàåì ñ êîíöà, ïî ïðèíöèïó FIFO
|
||||
cmp eax, ebx ; empty ???
|
||||
je get_event_alone.ret0
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
get_event_alone:
|
||||
;info:
|
||||
@ -372,21 +402,27 @@ get_event_alone:
|
||||
test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24
|
||||
jnz .ret
|
||||
or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret0:
|
||||
xor eax, eax; NO event!!!
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
sys_sendwindowmsg: ;; f72
|
||||
dec ebx
|
||||
jnz .ret ;subfunction==1 ?
|
||||
;pushfd ;à íàôèãà?
|
||||
pushfd
|
||||
cli
|
||||
sub ecx, 2
|
||||
je .sendkey
|
||||
dec ecx
|
||||
jnz .retf
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.sendbtn:
|
||||
cmp byte[BTN_COUNT], 1
|
||||
jae .result ;overflow
|
||||
@ -394,18 +430,27 @@ sys_sendwindowmsg: ;; f72
|
||||
shl edx, 8
|
||||
mov [BTN_BUFF], edx
|
||||
jmp .result
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.sendkey:
|
||||
movzx eax, byte[KEY_COUNT]
|
||||
cmp al, 120
|
||||
jae .result ;overflow
|
||||
inc byte[KEY_COUNT]
|
||||
mov [KEY_COUNT+1+eax], dl
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.result:
|
||||
setae byte[esp+32] ;ñ÷èòàåì, ÷òî èñõîäíî: dword[esp+32]==72
|
||||
.retf: ;popfd
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.retf:
|
||||
popfd
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
sys_getevent: ;; f11
|
||||
mov ebx, [current_slot];ïîêà ýòî âîïðîñ, ÷åãî êóäû ñóâàòü..........
|
||||
@ -415,16 +460,18 @@ sys_getevent: ;; f11
|
||||
popfd
|
||||
mov [esp+32], eax
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
sys_waitforevent: ;; f10
|
||||
or ebx, -1; infinite timeout
|
||||
;--------------------------------------
|
||||
align 4
|
||||
sys_wait_event_timeout: ;; f23
|
||||
mov edx, get_event_for_app; wait_test
|
||||
call Wait_events_ex ; ebx - timeout
|
||||
mov [esp+32], eax
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
get_event_for_app: ;; used from f10,f11,f23
|
||||
;info:
|
||||
@ -441,46 +488,78 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
shl edi, 5
|
||||
add edi, CURRENT_TASK ; edi is assumed as [TASK_BASE]
|
||||
mov ecx, [edi+TASKDATA.event_mask]
|
||||
and ecx, 0x7FFFFFFF
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.loop: ; ïîêà íå èñ÷åðïàåì âñå áèòû ìàñêè
|
||||
bsr eax, ecx ; íàõîäèì íåíóëåâîé áèò ìàñêè (31 -> 0)
|
||||
jz .no_events ; èñ÷åðïàëè âñå áèòû ìàñêè, íî íè÷åãî íå íàøëè ???
|
||||
btr ecx, eax ; ñáðàñûâàåì ïðîâåðÿåìûé áèò ìàñêè
|
||||
; ïåðåõîäèì íà îáðàáîò÷èê ýòîãî (eax) áèòà
|
||||
cmp eax, 9
|
||||
jae .loop ; eax=[9..31], ignored
|
||||
jae .loop ; eax=[9..31], ignored (event 10...32)
|
||||
|
||||
cmp eax, 3
|
||||
je .loop ; eax=3, ignored
|
||||
ja .FlagAutoReset ; eax=[4..8], retvals=eax+1
|
||||
je .loop ; eax=3, ignored (event 4)
|
||||
|
||||
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
|
||||
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
|
||||
cmp [edi-twdw+WDATA.fl_redraw], al;al==0
|
||||
jne .result
|
||||
jmp .loop
|
||||
.no_events:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.no_events:
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9
|
||||
cmp eax, 5; Mouse 5+1=6
|
||||
jne @f
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.mouse_check: ; Mouse 5+1=6
|
||||
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!!!
|
||||
mov al, [mouse.active_sys_window.action]
|
||||
and al, WINDOW_MOVE_AND_RESIZE_FLAGS
|
||||
test al, al
|
||||
pop eax
|
||||
jnz .loop
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.FlagAutoReset: ; retvals: BgrRedraw=5, IPC=7, Stack=8, Debug=9
|
||||
btr [ebx+APPDATA.event_mask], eax
|
||||
jnc .loop
|
||||
.result: ; retval = eax+1
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.result: ; retval = eax+1
|
||||
inc eax
|
||||
ret
|
||||
.BtKy:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.BtKy:
|
||||
movzx edx, bh
|
||||
movzx edx, word[WIN_STACK+edx*2]
|
||||
je .Keys ; eax=1, retval Keys=2
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.Buttons: ; eax=2, retval Buttons=3
|
||||
cmp byte[BTN_COUNT], 0
|
||||
je .loop ; empty ???
|
||||
@ -493,14 +572,20 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
mov [window_minimize], 1
|
||||
dec byte[BTN_COUNT]
|
||||
jmp .loop
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.Keys: ; eax==1
|
||||
cmp edx, [TASK_COUNT]
|
||||
jne @f ; not Top ???
|
||||
cmp [KEY_COUNT], al; al==1
|
||||
jae .result ; not empty ???
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov edx, hotkey_buffer
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
cmp [edx], bh ; bh - slot for testing
|
||||
je .result
|
||||
add edx, 8
|
||||
@ -508,3 +593,4 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
jb @b
|
||||
jmp .loop
|
||||
;end.
|
||||
;-----------------------------------------------------------------------------
|
@ -1,132 +1,231 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
; // Alver 22.06.2008 // {
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
dtext_asciiz_esi: ; for skins title out
|
||||
push eax
|
||||
xor eax, eax
|
||||
inc eax
|
||||
jmp dtext.1
|
||||
; } \\ Alver \\
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
|
||||
; ebx x & y
|
||||
; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
|
||||
; X = ABnnb:
|
||||
; nn = font
|
||||
; A = 0 <=> output esi characters; otherwise output ASCIIZ string
|
||||
; B = 1 <=> fill background with color eax
|
||||
; edx start of text
|
||||
; edi 1 force
|
||||
|
||||
; // Alver 22.06.2008 // {
|
||||
dtext:
|
||||
; ebx x & y
|
||||
; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
|
||||
; X = ABnnb:
|
||||
; nn = font
|
||||
; A = 0 <=> output esi characters; otherwise output ASCIIZ string
|
||||
; B = 1 <=> fill background with color eax
|
||||
; edx start of text
|
||||
; edi 1 force or user area for redirect
|
||||
push eax
|
||||
xor eax, eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.1:
|
||||
; } \\ Alver \\
|
||||
pushad
|
||||
call [_display.disable_mouse]
|
||||
|
||||
movsx eax, bx ; eax=y
|
||||
sar ebx, 16 ; ebx=x
|
||||
xchg eax, ebx ; eax=x, ebx=y
|
||||
cmp esi, 255
|
||||
jb .loop
|
||||
|
||||
mov esi, 255
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.loop:
|
||||
test ecx, ecx
|
||||
js .test_asciiz
|
||||
|
||||
dec esi
|
||||
js .end
|
||||
|
||||
jmp @f
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.test_asciiz:
|
||||
cmp byte [edx], 0
|
||||
jz .end
|
||||
; // Alver 22.06.2008 // {
|
||||
|
||||
cmp byte [esp+28], 1
|
||||
jne @f
|
||||
|
||||
dec esi
|
||||
js .end
|
||||
; } \\ Alver \\
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
inc edx
|
||||
pushad
|
||||
movzx edx, byte [edx-1]
|
||||
test ecx, 0x10000000
|
||||
jnz .font2
|
||||
|
||||
mov esi, 9
|
||||
lea ebp, [FONT_I+8*edx+edx]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.symloop1:
|
||||
mov dl, byte [ebp]
|
||||
or dl, 1 shl 6
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pixloop1:
|
||||
shr dl, 1
|
||||
jz .pixloop1end
|
||||
|
||||
jnc .nopix
|
||||
call [putpixel]
|
||||
|
||||
test ecx, 0x08000000 ; redirect the output to the user area
|
||||
jz @f
|
||||
|
||||
call draw_text_to_user_area
|
||||
jmp .pixloop1cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
jmp .pixloop1cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.nopix:
|
||||
test ecx, 0x40000000
|
||||
jz .pixloop1cont
|
||||
|
||||
push ecx
|
||||
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
|
||||
jmp .pixloop1cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
pop ecx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pixloop1cont:
|
||||
inc eax
|
||||
jmp .pixloop1
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pixloop1end:
|
||||
sub eax, 6
|
||||
inc ebx
|
||||
inc ebp
|
||||
dec esi
|
||||
jnz .symloop1
|
||||
|
||||
popad
|
||||
add eax, 6
|
||||
jmp .loop
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.font2:
|
||||
add edx, edx
|
||||
lea ebp, [FONT_II+4*edx+edx+1]
|
||||
push 9
|
||||
movzx esi, byte [ebp-1]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.symloop2:
|
||||
mov dl, byte [ebp]
|
||||
push esi
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pixloop2:
|
||||
shr dl, 1
|
||||
jnc .nopix2
|
||||
call [putpixel]
|
||||
|
||||
test ecx, 0x08000000 ; redirect the output to the user area
|
||||
jz @f
|
||||
|
||||
call draw_text_to_user_area
|
||||
jmp .pixloop2cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
jmp .pixloop2cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.nopix2:
|
||||
test ecx, 0x40000000
|
||||
jz .pixloop2cont
|
||||
|
||||
push ecx
|
||||
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
|
||||
jmp .pixloop2cont
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
and ecx, 0xFBFFFFFF ;negate 0x04000000 save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
pop ecx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pixloop2cont:
|
||||
inc eax
|
||||
dec esi
|
||||
jnz .pixloop2
|
||||
|
||||
pop esi
|
||||
sub eax, esi
|
||||
inc ebx
|
||||
inc ebp
|
||||
dec dword [esp]
|
||||
jnz .symloop2
|
||||
|
||||
pop eax
|
||||
add dword [esp+28], esi
|
||||
popad
|
||||
jmp .loop
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.end:
|
||||
popad
|
||||
pop eax ; << // Alver 22.06.2008 // <<
|
||||
pop eax
|
||||
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
|
||||
;------------------------------------------------------------------------------
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
include 'mousepointer.inc'
|
||||
|
||||
@ -527,9 +527,12 @@ mouse._.find_sys_window_under_cursor: ;////////////////////////////////////////
|
||||
;< esi = process slot
|
||||
;< edi = pointer to WDATA struct
|
||||
;------------------------------------------------------------------------------
|
||||
mov esi, [Screen_Max_X]
|
||||
inc esi
|
||||
imul esi, [mouse.state.pos.y]
|
||||
; mov esi, [Screen_Max_X]
|
||||
; inc esi
|
||||
; 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, [mouse.state.pos.x]
|
||||
movzx esi, byte[esi]
|
||||
@ -565,22 +568,22 @@ mouse._.find_sys_button_under_cursor: ;////////////////////////////////////////
|
||||
call mouse._.find_sys_window_under_cursor
|
||||
mov edx, esi
|
||||
|
||||
; check if any process button contains cursor
|
||||
mov eax, [BTN_ADDR]
|
||||
mov ecx, [eax]
|
||||
imul esi, ecx, sizeof.SYS_BUTTON
|
||||
add esi, eax
|
||||
inc ecx
|
||||
add esi, sizeof.SYS_BUTTON
|
||||
|
||||
.next_button:
|
||||
dec ecx
|
||||
jz .not_found
|
||||
|
||||
add esi, -sizeof.SYS_BUTTON
|
||||
|
||||
; does it belong to our process?
|
||||
cmp dx, [esi + SYS_BUTTON.pslot]
|
||||
; check if any process button contains cursor
|
||||
mov eax, [BTN_ADDR]
|
||||
mov ecx, [eax]
|
||||
imul esi, ecx, sizeof.SYS_BUTTON
|
||||
add esi, eax
|
||||
inc ecx
|
||||
add esi, sizeof.SYS_BUTTON
|
||||
|
||||
.next_button:
|
||||
dec ecx
|
||||
jz .not_found
|
||||
|
||||
add esi, -sizeof.SYS_BUTTON
|
||||
|
||||
; does it belong to our process?
|
||||
cmp dx, [esi + SYS_BUTTON.pslot]
|
||||
jne .next_button
|
||||
|
||||
; does it contain cursor coordinates?
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision: 2288 $
|
||||
|
||||
|
@ -1,17 +1,18 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
include "skindata.inc"
|
||||
|
||||
;skin_data = 0x00778000
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
read_skin_file:
|
||||
stdcall load_file, ebx
|
||||
test eax, eax
|
||||
@ -21,6 +22,8 @@ read_skin_file:
|
||||
cmp ebx, 32*1024
|
||||
jb @f
|
||||
mov ebx, 32*1024
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
lea ecx, [ebx+3]
|
||||
shr ecx, 2
|
||||
@ -32,16 +35,20 @@ read_skin_file:
|
||||
call parse_skin_data
|
||||
xor eax, eax
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.notfound:
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.noskin:
|
||||
stdcall kernel_free, eax
|
||||
push 2
|
||||
pop eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
struct SKIN_HEADER
|
||||
ident dd ?
|
||||
version dd ?
|
||||
@ -81,13 +88,15 @@ struct SKIN_BITMAPS
|
||||
type dw ?
|
||||
data dd ?
|
||||
ends
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
load_default_skin:
|
||||
mov [_skinh], 22
|
||||
mov ebx, _skin_file_default
|
||||
call read_skin_file
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
parse_skin_data:
|
||||
mov ebp, skin_data
|
||||
cmp [ebp+SKIN_HEADER.ident], 'SKIN'
|
||||
@ -127,7 +136,9 @@ parse_skin_data:
|
||||
|
||||
mov ebx, [ebp+SKIN_HEADER.bitmaps]
|
||||
add ebx, skin_data
|
||||
.lp1:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.lp1:
|
||||
cmp dword[ebx], 0
|
||||
je .end_bitmaps
|
||||
movzx eax, [ebx+SKIN_BITMAPS.kind]
|
||||
@ -139,9 +150,13 @@ parse_skin_data:
|
||||
or ecx, ecx
|
||||
jnz @f
|
||||
mov edx, skin_inactive.left.data
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
jmp .next_bitmap
|
||||
.not_left:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.not_left:
|
||||
dec eax
|
||||
jnz .not_oper
|
||||
mov esi, [ebx+SKIN_BITMAPS.data]
|
||||
@ -152,9 +167,13 @@ parse_skin_data:
|
||||
or ecx, ecx
|
||||
jnz @f
|
||||
mov edx, skin_inactive.oper.data
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
jmp .next_bitmap
|
||||
.not_oper:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.not_oper:
|
||||
dec eax
|
||||
jnz .not_base
|
||||
mov eax, [skin_active.left.width]
|
||||
@ -163,12 +182,18 @@ parse_skin_data:
|
||||
jnz @f
|
||||
mov eax, [skin_inactive.left.width]
|
||||
mov edx, skin_inactive.base.data
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
jmp .next_bitmap
|
||||
.not_base:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.not_base:
|
||||
add ebx, 8
|
||||
jmp .lp1
|
||||
.next_bitmap:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.next_bitmap:
|
||||
mov ecx, [ebx+SKIN_BITMAPS.data]
|
||||
add ecx, skin_data
|
||||
mov [edx+4], eax
|
||||
@ -178,11 +203,14 @@ parse_skin_data:
|
||||
mov [edx+0], ecx
|
||||
add ebx, 8
|
||||
jmp .lp1
|
||||
.end_bitmaps:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.end_bitmaps:
|
||||
mov ebx, [ebp+SKIN_HEADER.buttons]
|
||||
add ebx, skin_data
|
||||
.lp2:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.lp2:
|
||||
cmp dword[ebx], 0
|
||||
je .end_buttons
|
||||
mov eax, [ebx+SKIN_BUTTONS.type]
|
||||
@ -190,15 +218,21 @@ parse_skin_data:
|
||||
jnz .not_close
|
||||
mov edx, skin_btn_close
|
||||
jmp .next_button
|
||||
.not_close:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.not_close:
|
||||
dec eax
|
||||
jnz .not_minimize
|
||||
mov edx, skin_btn_minimize
|
||||
jmp .next_button
|
||||
.not_minimize:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.not_minimize:
|
||||
add ebx, 12
|
||||
jmp .lp2
|
||||
.next_button:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.next_button:
|
||||
movsx eax, [ebx+SKIN_BUTTONS.left]
|
||||
mov [edx+SKIN_BUTTON.left], eax
|
||||
movsx eax, [ebx+SKIN_BUTTONS.top]
|
||||
@ -209,26 +243,22 @@ parse_skin_data:
|
||||
mov [edx+SKIN_BUTTON.height], eax
|
||||
add ebx, 12
|
||||
jmp .lp2
|
||||
.end_buttons:
|
||||
|
||||
.exit:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.end_buttons:
|
||||
.exit:
|
||||
ret
|
||||
|
||||
sys_putimage_with_check:
|
||||
or ebx, ebx
|
||||
jz @f
|
||||
call sys_putimage.forced
|
||||
@@:
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
drawwindow_IV_caption:
|
||||
|
||||
mov ebp, skin_active
|
||||
or al, al
|
||||
jnz @f
|
||||
mov ebp, skin_inactive
|
||||
@@:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov esi, [esp+4]
|
||||
mov eax, [esi+WDATA.box.width] ; window width
|
||||
mov edx, [ebp+SKIN_DATA.left.left]
|
||||
@ -238,8 +268,12 @@ drawwindow_IV_caption:
|
||||
add ecx, [_skinh]
|
||||
|
||||
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 eax, [esi+WDATA.box.width]
|
||||
sub eax, [ebp+SKIN_DATA.left.width]
|
||||
@ -260,18 +294,28 @@ drawwindow_IV_caption:
|
||||
mov edx, [ebp+SKIN_DATA.base.left]
|
||||
sub edx, [ebp+SKIN_DATA.base.width]
|
||||
shl edx, 16
|
||||
.baseskinloop:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.baseskinloop:
|
||||
shr edx, 16
|
||||
add edx, [ebp+SKIN_DATA.base.width]
|
||||
shl edx, 16
|
||||
|
||||
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
|
||||
|
||||
dec eax
|
||||
jnz .baseskinloop
|
||||
.non_base:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.non_base:
|
||||
|
||||
mov esi, [esp+4]
|
||||
mov edx, [esi+WDATA.box.width]
|
||||
@ -283,16 +327,18 @@ drawwindow_IV_caption:
|
||||
mov ecx, [ebp+SKIN_DATA.oper.width]
|
||||
shl ecx, 16
|
||||
add ecx, [_skinh]
|
||||
call sys_putimage_with_check
|
||||
|
||||
or ebx, ebx
|
||||
jz @f
|
||||
call sys_putimage.forced
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
ret
|
||||
|
||||
;//mike.dld, 2006-08-02 ]
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
drawwindow_IV:
|
||||
;param1 - aw_yes
|
||||
|
||||
pusha
|
||||
|
||||
push edx
|
||||
@ -303,8 +349,9 @@ drawwindow_IV:
|
||||
cmp byte [esp+32+4+4], 0
|
||||
jne @f
|
||||
mov ebp, skin_inactive
|
||||
@@:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov eax, [edi+WDATA.box.left]
|
||||
shl eax, 16
|
||||
mov ax, word [edi+WDATA.box.left]
|
||||
@ -313,32 +360,42 @@ drawwindow_IV:
|
||||
shl ebx, 16
|
||||
mov bx, word [edi+WDATA.box.top]
|
||||
add bx, word [edi+WDATA.box.height]
|
||||
; mov esi,[edi+24]
|
||||
; shr esi,1
|
||||
; and esi,0x007f7f7f
|
||||
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
|
||||
mov ecx, 3
|
||||
_dw3l:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
_dw3l:
|
||||
add eax, 1*65536-1
|
||||
add ebx, 1*65536-1
|
||||
add ebx, 0*65536-1
|
||||
test ax, ax
|
||||
js no_skin_add_button
|
||||
test bx, bx
|
||||
js no_skin_add_button
|
||||
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
|
||||
dec ecx
|
||||
jnz _dw3l
|
||||
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 ebx, 1*65536-1
|
||||
add ebx, 0*65536-1
|
||||
test ax, ax
|
||||
js no_skin_add_button
|
||||
test bx, bx
|
||||
js no_skin_add_button
|
||||
test [edi + WDATA.fl_wstate], WSTATE_ROLLEDUP
|
||||
jnz @f
|
||||
call draw_rectangle
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
cmp dword[skin_data], 'SKIN'
|
||||
je @f
|
||||
xor eax, eax
|
||||
@ -348,15 +405,17 @@ drawwindow_IV:
|
||||
inc ecx
|
||||
mov edx, [_skinh]
|
||||
mov edi, [common_colours+4]; standard grab color
|
||||
call [drawbar]
|
||||
; call [drawbar]
|
||||
call vesa20_drawbar
|
||||
jmp draw_clientbar
|
||||
@@:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov al, [esp+32+4+4]
|
||||
call drawwindow_IV_caption
|
||||
|
||||
draw_clientbar:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
draw_clientbar:
|
||||
mov esi, [esp]
|
||||
|
||||
mov edx, [esi+WDATA.box.top] ; WORK AREA
|
||||
@ -374,12 +433,13 @@ drawwindow_IV:
|
||||
mov edi, [esi+WDATA.cl_workarea]
|
||||
test edi, 0x40000000
|
||||
jnz _noinside2
|
||||
call [drawbar]
|
||||
_noinside2:
|
||||
|
||||
; call [drawbar]
|
||||
call vesa20_drawbar
|
||||
;--------------------------------------
|
||||
align 4
|
||||
_noinside2:
|
||||
cmp dword[skin_data], 'SKIN'
|
||||
jne no_skin_add_button
|
||||
|
||||
;* close button
|
||||
mov edi, [BTN_ADDR]
|
||||
movzx eax, word [edi]
|
||||
@ -404,7 +464,9 @@ drawwindow_IV:
|
||||
mov ebx, [esp]
|
||||
mov ebx, [ebx+WDATA.box.width]
|
||||
inc ebx
|
||||
_bCx_at_right:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
_bCx_at_right:
|
||||
add ebx, [skin_btn_close.left]
|
||||
mov [eax], bx
|
||||
add eax, 2 ; x size
|
||||
@ -418,7 +480,6 @@ drawwindow_IV:
|
||||
mov ebx, [skin_btn_close.height]
|
||||
dec ebx
|
||||
mov [eax], bx
|
||||
|
||||
;* minimize button
|
||||
mov edi, [BTN_ADDR]
|
||||
movzx eax, word [edi]
|
||||
@ -443,7 +504,9 @@ drawwindow_IV:
|
||||
mov ebx, [esp]
|
||||
mov ebx, [ebx+WDATA.box.width]
|
||||
inc ebx
|
||||
_bMx_at_right:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
_bMx_at_right:
|
||||
add ebx, [skin_btn_minimize.left]
|
||||
mov [eax], bx
|
||||
add eax, 2 ; x size
|
||||
@ -457,10 +520,10 @@ drawwindow_IV:
|
||||
mov ebx, [skin_btn_minimize.height]
|
||||
dec ebx
|
||||
mov [eax], bx
|
||||
|
||||
no_skin_add_button:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
no_skin_add_button:
|
||||
pop edi
|
||||
popa
|
||||
|
||||
ret 4
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; check mouse
|
||||
@ -22,36 +22,32 @@ $Revision$
|
||||
; FCFF com1/ps2 buffer count starting from FC00
|
||||
|
||||
uglobal
|
||||
;--------------------------------------
|
||||
align 4
|
||||
mousecount 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
|
||||
|
||||
iglobal
|
||||
;--------------------------------------
|
||||
align 4
|
||||
mouse_delay dd 10
|
||||
mouse_speed_factor:
|
||||
dd 3
|
||||
mouse_timer_ticks dd 0
|
||||
endg
|
||||
|
||||
;include 'm_com.inc'
|
||||
|
||||
|
||||
;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
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
draw_mouse_under:
|
||||
; return old picture
|
||||
|
||||
cmp [_display.restore_cursor], 0
|
||||
je @F
|
||||
|
||||
@ -61,11 +57,14 @@ draw_mouse_under:
|
||||
stdcall [_display.restore_cursor], eax, ebx
|
||||
popad
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
pushad
|
||||
xor ecx, ecx
|
||||
xor edx, edx
|
||||
align 4
|
||||
;--------------------------------------
|
||||
align 4
|
||||
mres:
|
||||
movzx eax, word [X_UNDER]
|
||||
movzx ebx, word [Y_UNDER]
|
||||
@ -83,8 +82,10 @@ mres:
|
||||
mov ecx, [eax]
|
||||
pop ebx
|
||||
pop eax
|
||||
mov edi, 1;force
|
||||
call [putpixel]
|
||||
mov edi, 1 ; force
|
||||
or ecx, 0x04000000 ; don't save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
pop edx
|
||||
pop ecx
|
||||
inc ecx
|
||||
@ -96,9 +97,9 @@ mres:
|
||||
jnz mres
|
||||
popad
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
save_draw_mouse:
|
||||
|
||||
cmp [_display.move_cursor], 0
|
||||
je .no_hw_cursor
|
||||
pushad
|
||||
@ -110,9 +111,11 @@ save_draw_mouse:
|
||||
push eax
|
||||
push ebx
|
||||
|
||||
mov ecx, [Screen_Max_X]
|
||||
inc ecx
|
||||
mul ecx
|
||||
; mov ecx, [Screen_Max_X]
|
||||
; inc ecx
|
||||
; mul ecx
|
||||
mov eax, [d_width_calc_area + eax*4]
|
||||
|
||||
add eax, [_WinMapAddress]
|
||||
movzx edx, byte [ebx+eax]
|
||||
shl edx, 8
|
||||
@ -124,17 +127,22 @@ save_draw_mouse:
|
||||
push esi
|
||||
call [_display.select_cursor]
|
||||
mov [current_cursor], esi
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.draw:
|
||||
stdcall [_display.move_cursor], esi
|
||||
popad
|
||||
ret
|
||||
.fail:
|
||||
mov ecx, [def_cursor]
|
||||
mov [edx+SLOT_BASE+APPDATA.cursor], ecx
|
||||
stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax
|
||||
popad
|
||||
ret
|
||||
|
||||
;--------------------------------------
|
||||
;align 4
|
||||
;.fail:
|
||||
; mov ecx, [def_cursor]
|
||||
; mov [edx+SLOT_BASE+APPDATA.cursor], ecx
|
||||
; stdcall [_display.move_cursor], ecx ; stdcall: [esp]=ebx,eax
|
||||
; popad
|
||||
; ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.no_hw_cursor:
|
||||
pushad
|
||||
; save & draw
|
||||
@ -144,7 +152,8 @@ save_draw_mouse:
|
||||
push ebx
|
||||
mov ecx, 0
|
||||
mov edx, 0
|
||||
align 4
|
||||
;--------------------------------------
|
||||
align 4
|
||||
drm:
|
||||
push eax
|
||||
push ebx
|
||||
@ -155,6 +164,7 @@ drm:
|
||||
add eax, ecx; save picture under mouse
|
||||
add ebx, edx
|
||||
push ecx
|
||||
or ecx, 0x04000000 ; don't load to mouseunder area
|
||||
call getpixel
|
||||
mov [COLOR_TEMP], ecx
|
||||
pop ecx
|
||||
@ -164,6 +174,7 @@ drm:
|
||||
add eax, ecx
|
||||
add eax, mouseunder
|
||||
mov ebx, [COLOR_TEMP]
|
||||
and ebx, 0xffffff
|
||||
mov [eax], ebx
|
||||
pop ecx
|
||||
mov edi, edx ; y cycle
|
||||
@ -178,6 +189,7 @@ drm:
|
||||
push ecx
|
||||
mov ecx, [COLOR_TEMP]
|
||||
call combine_colors
|
||||
and ecx, 0xffffff
|
||||
mov [MOUSE_COLOR_MEM], ecx
|
||||
pop ecx
|
||||
pop edx
|
||||
@ -188,8 +200,10 @@ drm:
|
||||
add ebx, edx ; and y coord+cycle
|
||||
push ecx
|
||||
mov ecx, [MOUSE_COLOR_MEM]
|
||||
mov edi, 1
|
||||
call [putpixel]
|
||||
mov edi, 1 ; force
|
||||
or ecx, 0x04000000 ; don't save to mouseunder area
|
||||
; call [putpixel]
|
||||
call __sys_putpixel
|
||||
pop ecx
|
||||
mov ebx, [esp+0] ; pure y coord again
|
||||
mov eax, [esp+4] ; and x
|
||||
@ -203,8 +217,8 @@ drm:
|
||||
add esp, 8
|
||||
popad
|
||||
ret
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
combine_colors:
|
||||
; in
|
||||
; ecx - color ( 00 RR GG BB )
|
||||
@ -272,126 +286,187 @@ combine_colors:
|
||||
pop ebx
|
||||
pop eax
|
||||
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
|
||||
jb no_mouse_disable
|
||||
sub ebx, 14
|
||||
add ecx, [edx+12]
|
||||
jb .no_mouse_area
|
||||
add ecx, 23 ; mouse cursor Y size
|
||||
cmp ebx, ecx
|
||||
jg no_mouse_disable
|
||||
disable_m:
|
||||
cmp dword [MOUSE_VISIBLE], dword 0
|
||||
jne no_mouse_disable
|
||||
pushf
|
||||
cli
|
||||
call draw_mouse_under
|
||||
popf
|
||||
mov [MOUSE_VISIBLE], dword 1
|
||||
no_mouse_disable:
|
||||
popad
|
||||
ja .no_mouse_area
|
||||
; offset Y
|
||||
sub bx, [Y_UNDER] ;[MOUSE_Y]
|
||||
;--------------------------------------
|
||||
; check for X
|
||||
xor ecx, ecx
|
||||
mov cx, [X_UNDER] ;[MOUSE_X]
|
||||
cmp eax, ecx
|
||||
jb .no_mouse_area
|
||||
add ecx, 15 ; mouse cursor X size
|
||||
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
|
||||
|
||||
__sys_draw_pointer:
|
||||
cmp [mouse_pause], 0
|
||||
je @f
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.no_mouse_area:
|
||||
xor ecx, ecx
|
||||
pop ebx eax
|
||||
ret
|
||||
@@:
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
check_mouse_area_for_putpixel:
|
||||
; in:
|
||||
; ecx = x shl 16 + y
|
||||
; eax = color
|
||||
; out:
|
||||
; eax = new color
|
||||
push eax
|
||||
mov eax, [timer_ticks]
|
||||
sub eax, [MouseTickCounter]
|
||||
cmp eax, 1
|
||||
ja @f
|
||||
; check for Y
|
||||
mov ax, [Y_UNDER] ; [MOUSE_Y]
|
||||
cmp cx, ax
|
||||
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
|
||||
ret
|
||||
@@:
|
||||
mov eax, [timer_ticks]
|
||||
mov [MouseTickCounter], eax
|
||||
pop eax
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
__sys_draw_pointer:
|
||||
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 edx, word [Y_UNDER]
|
||||
movzx ebx, word [MOUSE_Y]
|
||||
movzx eax, word [MOUSE_X]
|
||||
cmp [redrawmouse_unconditional], 0
|
||||
je @f
|
||||
mov [redrawmouse_unconditional], 0
|
||||
jmp redrawmouse
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
cmp eax, ecx
|
||||
jne redrawmouse
|
||||
cmp ebx, edx
|
||||
jne redrawmouse
|
||||
jmp nodmp
|
||||
je nodmp
|
||||
;--------------------------------------
|
||||
align 4
|
||||
redrawmouse:
|
||||
pushfd
|
||||
cli
|
||||
call draw_mouse_under
|
||||
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
|
||||
;--------------------------------------
|
||||
align 4
|
||||
nodmp:
|
||||
popad
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScroll:dword, HScroll:dword
|
||||
|
||||
mov eax, [BtnState]
|
||||
@ -404,11 +479,14 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
|
||||
jge @@M1
|
||||
mov eax, 0
|
||||
jmp @@M2
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@M1:
|
||||
cmp ax, [Screen_Max_X];ScreenLength
|
||||
jl @@M2
|
||||
mov ax, [Screen_Max_X];ScreenLength-1
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@M2:
|
||||
mov [MOUSE_X], ax;[XCoordinate]
|
||||
|
||||
@ -421,11 +499,14 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
|
||||
jge @@M3
|
||||
mov ax, 0
|
||||
jmp @@M4
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@M3:
|
||||
cmp ax, [Screen_Max_Y];ScreenHeigth
|
||||
jl @@M4
|
||||
mov ax, [Screen_Max_Y];ScreenHeigth-1
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@M4:
|
||||
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
|
||||
ret
|
||||
endp
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
align 4
|
||||
mouse_acceleration:
|
||||
push eax
|
||||
mov eax, [timer_ticks]
|
||||
@ -451,6 +533,8 @@ mouse_acceleration:
|
||||
;push edx
|
||||
imul eax, [mouse_speed_factor]
|
||||
;pop edx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;setting date,time,clock and alarm-clock
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -11,7 +11,7 @@
|
||||
;
|
||||
;============================================================================
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
align 4
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
MEM_WB equ 6 ;write-back memory
|
||||
@ -55,6 +55,9 @@ proc init_mem
|
||||
.calcmax:
|
||||
; round all to pages
|
||||
mov eax, [edi]
|
||||
cmp [edi+16], byte 1
|
||||
jne .unusable
|
||||
|
||||
test eax, 0xFFF
|
||||
jz @f
|
||||
neg eax
|
||||
@ -87,7 +90,7 @@ proc init_mem
|
||||
add esi, eax
|
||||
jmp .usable
|
||||
.unusable:
|
||||
and dword [edi+8], 0
|
||||
; and dword [edi+8], 0
|
||||
.usable:
|
||||
add edi, 20
|
||||
loop .calcmax
|
||||
@ -195,6 +198,9 @@ proc init_page_map
|
||||
mov ebx, BOOT_VAR-OS_BASE + 0x9104
|
||||
mov edx, [ebx-4]
|
||||
.scanmap:
|
||||
cmp [ebx+16], byte 1
|
||||
jne .next
|
||||
|
||||
mov ecx, [ebx+8]
|
||||
shr ecx, 12; ecx = number of pages
|
||||
jz .next
|
||||
@ -432,6 +438,11 @@ proc test_cpu
|
||||
ret
|
||||
endp
|
||||
|
||||
iglobal
|
||||
align 4
|
||||
acpi_lapic_base dd 0xfee00000 ; default local apic base
|
||||
endg
|
||||
|
||||
uglobal
|
||||
align 4
|
||||
acpi_rsdp rd 1
|
||||
@ -443,8 +454,10 @@ acpi_dev_size rd 1
|
||||
|
||||
acpi_rsdt_base rd 1
|
||||
acpi_madt_base rd 1
|
||||
acpi_lapic_base rd 1
|
||||
acpi_ioapic_base rd 1
|
||||
|
||||
cpu_count rd 1
|
||||
smpt rd 16
|
||||
endg
|
||||
|
||||
ACPI_HI_RSDP_WINDOW_START equ 0x000E0000
|
||||
@ -493,6 +506,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
|
||||
lea ebx, [ecx+36]
|
||||
mov esi, [ecx+4]
|
||||
add esi, ecx
|
||||
align 4
|
||||
.next:
|
||||
mov eax, [ebx]
|
||||
cmp [eax], edx
|
||||
@ -513,9 +527,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
check_acpi:
|
||||
|
||||
call acpi_locate
|
||||
@ -533,22 +545,47 @@ check_acpi:
|
||||
mov ecx, [eax+36]
|
||||
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]
|
||||
mov ecx, [eax+4]
|
||||
add ecx, eax
|
||||
.check:
|
||||
mov eax, [edx]
|
||||
cmp al, 1
|
||||
je .ioapic
|
||||
cmp al, 0
|
||||
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:
|
||||
mov eax, [edx]
|
||||
movzx eax, ah
|
||||
add edx, eax
|
||||
cmp edx, ecx
|
||||
jb .check
|
||||
.done:
|
||||
ret
|
||||
.ioapic:
|
||||
|
||||
.io_apic:
|
||||
cmp al, 1
|
||||
jne .next
|
||||
|
||||
mov eax, [edx+4]
|
||||
mov [acpi_ioapic_base-OS_BASE], eax
|
||||
ret
|
||||
jmp .next
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 ;;
|
||||
;; ;;
|
||||
;; KERNEL32.INC ;;
|
||||
@ -13,7 +13,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
struct POINT
|
||||
x dd ?
|
||||
@ -125,7 +125,8 @@ struct APPDATA
|
||||
wait_param dd ? ;+100 +++
|
||||
tls_base dd ? ;+104
|
||||
dlls_list_ptr dd ? ;+108
|
||||
rb 16 ;+112
|
||||
event_filter dd ? ;+112
|
||||
rb 12 ;+116
|
||||
|
||||
wnd_shape dd ? ;+128
|
||||
wnd_shape_scale dd ? ;+132
|
||||
@ -145,12 +146,12 @@ struct APPDATA
|
||||
wnd_caption dd ?
|
||||
wnd_clientbox BOX
|
||||
|
||||
ends
|
||||
|
||||
|
||||
; Core functions
|
||||
include "core/sync.inc" ; macros for synhronization objects
|
||||
include "core/sys32.inc" ; process management
|
||||
ends
|
||||
|
||||
|
||||
; Core functions
|
||||
include "core/sync.inc" ; macros for synhronization objects
|
||||
include "core/sys32.inc" ; process management
|
||||
include "core/sched.inc" ; process scheduling
|
||||
include "core/syscall.inc" ; system call
|
||||
include "core/fpu.inc" ; all fpu/sse support
|
||||
@ -194,7 +195,7 @@ include "sound/playnote.inc" ; player Note for Speaker PC
|
||||
|
||||
; 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/blitter.inc" ;
|
||||
include "video/vga.inc" ; VGA 16 color functions
|
||||
|
@ -1,11 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;------------------------------------------------------------------
|
||||
|
@ -1,3 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
__REV = 0
|
||||
|
||||
@ -9,7 +15,7 @@ macro $Revision a {
|
||||
\}
|
||||
}
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
;// mike.dld, 2006-29-01 [
|
||||
|
@ -1,6 +1,12 @@
|
||||
;
|
||||
; MEMORY MAP
|
||||
;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;
|
||||
; MEMORY MAP
|
||||
;
|
||||
; Boot:
|
||||
;
|
||||
; 0:9000 byte bits per pixel
|
||||
@ -128,13 +134,13 @@
|
||||
; FE88 dword address of button list
|
||||
; FE8C dword memory to use
|
||||
; FE90 -> FEFF free (112)
|
||||
; FF00 byte 1 = system shutdown request
|
||||
; FF01 byte task activation request?
|
||||
; FFF0 byte >0 if redraw background request from app
|
||||
; FFF1 byte >0 if background changed
|
||||
; FFF2 write and read bank in screen
|
||||
; FFF4 byte 0 if first mouse draw & do not return picture under
|
||||
; FFF5 byte 1 do not draw pointer
|
||||
; FF00 byte 1 = system shutdown request
|
||||
; FF01 byte task activation request?
|
||||
; FFF0 byte >0 if redraw background request from app
|
||||
; FFF1 byte free
|
||||
; FFF2 write and read bank in screen
|
||||
; FFF4 byte 0 if first mouse draw & do not return picture under
|
||||
; FFF5 byte 1 do not draw pointer
|
||||
; FFFF byte do not change task for 1/100 sec.
|
||||
;
|
||||
; 0x80010000 -> 6CBFF kernel, 32-bit run-time code (up to 371 Kb)
|
||||
@ -195,58 +201,68 @@
|
||||
; 0x80280000 -> 281FFF ramdisk fat (8k)
|
||||
; 0x80282000 -> 283FFF floppy fat (8k)
|
||||
;
|
||||
; 0x80284000 -> 28BFFF HDD DMA AREA (32k)
|
||||
; 0x8028C000 -> 297FFF free (48k)
|
||||
;
|
||||
; 0x80298000 -> 29ffff auxiliary table for background smoothing code (32k)
|
||||
;
|
||||
; 0x802A0000 -> 2B00ff wav device buffer (64k)
|
||||
; 0x802A0000 -> 2B00ff wav device status (256)
|
||||
; 0x802B0100 -> 2Bffff free (63k8)
|
||||
; 0x802C0000 -> 2C3fff button info (8k)
|
||||
;
|
||||
; 0000 word number of buttons
|
||||
; first button entry at 0x10
|
||||
; +0000 word process number
|
||||
; +0002 word button id number : bits 00-15
|
||||
; +0004 word x start
|
||||
; 0x80284000 -> 28BFFF HDD DMA AREA (32k)
|
||||
; 0x8028C000 -> 297FFF free (48k)
|
||||
;
|
||||
; 0x80298000 -> 29FFFF auxiliary table for background smoothing code (32k)
|
||||
;
|
||||
; 0x802A0000 -> 2B00FF wav device buffer (64k)
|
||||
; 0x802A0000 -> 2B00FF wav device status (256)
|
||||
;
|
||||
; 0x802B0100 -> 2B3FFD free (15k7)
|
||||
;
|
||||
; 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
|
||||
; +0002 word button id number : bits 00-15
|
||||
; +0004 word x start
|
||||
; +0006 word x size
|
||||
; +0008 word y start
|
||||
; +000A word y size
|
||||
; +000C word button id number : bits 16-31
|
||||
;
|
||||
; 0x802C4000 -> 2CFFFF free (48k)
|
||||
;
|
||||
; 0x802D0000 -> 2DFFFF reserved port area (64k)
|
||||
;
|
||||
; +000A word y size
|
||||
; +000C word button id number : bits 16-31
|
||||
;
|
||||
; 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)
|
||||
;
|
||||
; 0000 dword no of port areas reserved
|
||||
; 0010 dword process id
|
||||
; dword start port
|
||||
; dword end port
|
||||
; dword 0
|
||||
;
|
||||
; 0x802E0000 -> 2EFFFF irq data area (64k)
|
||||
; 0x802F0000 -> 2FFFFF low memory save (64k)
|
||||
;
|
||||
; 0x80300000 -> 31FFFF tcp memory (128k)
|
||||
; 0x80320000 -> 327FFF tcp memory (32k)
|
||||
;
|
||||
; 0x80328000 -> 32FFFF !vrr driver (32k)
|
||||
|
||||
; 0x80330000 -> 377FFF skin data (32k)
|
||||
|
||||
; 0x80338000 -> 338FFF draw data - 256 entries (4k)
|
||||
; 00 dword draw limit - x start
|
||||
; 04 dword draw limit - y start
|
||||
; 08 dword draw limit - x end
|
||||
; 0C dword draw limit - y end
|
||||
; 0x80339000 -> 3BFFF3 free (12k)
|
||||
; 0x8033BFF4 -> 33BFFF background info
|
||||
; 0x8033C000 page map (length b = memsize shr 15)
|
||||
; 0x8033C000 + b start of static pagetables
|
||||
|
||||
; 0x803FFFFF <- no direct address translation beyond this point
|
||||
; =============================================================
|
||||
; dword end port
|
||||
; dword 0
|
||||
;
|
||||
; 0x802E0000 -> 2EFFFF irq data area (64k) ;BOOT_VAR
|
||||
;
|
||||
; 0x802F0000 -> 2F3FFF tcp memory stack_data_start eth_data_start (16k)
|
||||
;
|
||||
; 0x802F4000 -> 30ffff stack_data | stack_data_end (112k)
|
||||
;
|
||||
; 0x80310000 -> 317fff resendQ (32k)
|
||||
;
|
||||
; 0x80318000 -> 31ffff skin_data (32k)
|
||||
;
|
||||
; 0x80320000 -> 323FF3 draw data - 256 entries (4k)
|
||||
; 00 dword draw limit - x start
|
||||
; 04 dword draw limit - y start
|
||||
; 08 dword draw limit - x end
|
||||
; 0C dword draw limit - y end
|
||||
;
|
||||
; 0x8032BFF4 -> 32BFFF background info
|
||||
; 0x80323FF4 BgrDrawMode
|
||||
; 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
|
||||
; =============================================================
|
||||
|
||||
; 0x805FF000 -> 5FFF80 TSS
|
||||
; 0x80600000 -> 601FFF i/o maps
|
||||
|
@ -1,5 +1,11 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
; Macroinstructions for defining and calling procedures
|
||||
|
@ -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 ;;
|
||||
;; ;;
|
||||
;; PLAYNOTE.INC version 1.1 22 November 2003 ;;
|
||||
@ -16,7 +16,7 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
align 4
|
||||
sound_interface:
|
||||
|
BIN
kernel/branches/net/video/arrow_clock.cur
Normal file
BIN
kernel/branches/net/video/arrow_clock.cur
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
@ -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
|
||||
xmin dd ?
|
||||
@ -321,34 +327,42 @@ blit_32:
|
||||
|
||||
mov ecx, esp
|
||||
call blit_clip
|
||||
test eax, eax
|
||||
jne .L57
|
||||
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
|
||||
mov eax, [TASK_BASE]
|
||||
|
||||
mov ebx, [esp+BLITTER.dst_x]
|
||||
mov ebp, [esp+BLITTER.dst_y]
|
||||
add ebx, [eax-twdw + WDATA.box.left]
|
||||
add ebp, [eax-twdw + WDATA.box.top]
|
||||
mov edi, ebp
|
||||
|
||||
imul edi, [_display.pitch]
|
||||
imul ebp, [_display.width]
|
||||
add ebp, ebx
|
||||
add ebp, [_WinMapAddress]
|
||||
|
||||
test eax, eax
|
||||
jne .L57
|
||||
|
||||
mov eax, [TASK_BASE]
|
||||
|
||||
mov ebx, [esp+BLITTER.dst_x]
|
||||
mov ebp, [esp+BLITTER.dst_y]
|
||||
add ebx, [eax-twdw + WDATA.box.left]
|
||||
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
|
||||
|
||||
; imul edi, [_display.pitch]
|
||||
mov edi, [BPSLine_calc_area+edi*4]
|
||||
; imul ebp, [_display.width]
|
||||
mov ebp, [d_width_calc_area+ebp*4]
|
||||
|
||||
add ebp, ebx
|
||||
add ebp, [_WinMapAddress]
|
||||
|
||||
mov eax, [esp+BLITTER.src_y]
|
||||
imul eax, [esp+BLITTER.stride]
|
||||
mov esi, [esp+BLITTER.src_x]
|
||||
lea esi, [eax+esi*4]
|
||||
add esi, [esp+BLITTER.bitmap]
|
||||
|
||||
mov ecx, [esp+BLITTER.h]
|
||||
mov edx, [esp+BLITTER.w]
|
||||
|
||||
lea esi, [eax+esi*4]
|
||||
add esi, [esp+BLITTER.bitmap]
|
||||
|
||||
mov eax, ecx
|
||||
mov ecx, [esp+BLITTER.h]
|
||||
mov edx, [esp+BLITTER.w]
|
||||
|
||||
test ecx, ecx ;FIXME check clipping
|
||||
jz .L57
|
||||
|
||||
@ -358,25 +372,52 @@ blit_32:
|
||||
cmp [_display.bpp], 32
|
||||
jne .core_24
|
||||
|
||||
lea edi, [edi+ebx*4]
|
||||
lea edi, [edi+ebx*4]
|
||||
|
||||
mov ebx, [CURRENT_TASK]
|
||||
align 4
|
||||
.outer32:
|
||||
xor ecx, ecx
|
||||
|
||||
mov ebx, [CURRENT_TASK]
|
||||
|
||||
align 4
|
||||
.outer32:
|
||||
xor ecx, ecx
|
||||
|
||||
align 4
|
||||
.inner32:
|
||||
cmp [ebp+ecx], bl
|
||||
jne @F
|
||||
|
||||
mov eax, [esi+ecx*4]
|
||||
mov [LFB_BASE+edi+ecx*4], eax
|
||||
@@:
|
||||
inc ecx
|
||||
dec edx
|
||||
jnz .inner32
|
||||
align 4
|
||||
.inner32:
|
||||
cmp [ebp+ecx], bl
|
||||
jne .skip
|
||||
;--------------------------------------
|
||||
push eax
|
||||
mov eax, [esi+ecx*4]
|
||||
|
||||
; 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
|
||||
dec edx
|
||||
jnz .inner32
|
||||
|
||||
add esi, [esp+BLITTER.stride]
|
||||
add edi, [_display.pitch]
|
||||
@ -384,14 +425,14 @@ align 4
|
||||
|
||||
mov edx, [esp+BLITTER.w]
|
||||
dec [esp+BLITTER.h]
|
||||
jnz .outer32
|
||||
|
||||
.done:
|
||||
dec [mouse_pause]
|
||||
call [draw_pointer]
|
||||
.L57:
|
||||
add esp, 72
|
||||
pop ebx
|
||||
jnz .outer32
|
||||
|
||||
.done:
|
||||
; call [draw_pointer]
|
||||
call __sys_draw_pointer
|
||||
.L57:
|
||||
add esp, 72
|
||||
pop ebx
|
||||
pop esi
|
||||
pop edi
|
||||
pop ebp
|
||||
@ -407,21 +448,49 @@ align 4
|
||||
mov [esp+64], edi
|
||||
xor ecx, ecx
|
||||
|
||||
align 4
|
||||
.inner24:
|
||||
cmp [ebp+ecx], bl
|
||||
jne @F
|
||||
|
||||
mov eax, [esi+ecx*4]
|
||||
|
||||
lea edi, [edi+ecx*2]
|
||||
mov [edi+ecx], ax
|
||||
shr eax, 16
|
||||
mov [edi+ecx+2], al
|
||||
@@:
|
||||
mov edi, [esp+64]
|
||||
inc ecx
|
||||
dec edx
|
||||
align 4
|
||||
.inner24:
|
||||
cmp [ebp+ecx], bl
|
||||
jne .skip_1
|
||||
;--------------------------------------
|
||||
push eax
|
||||
mov eax, [esi+ecx*4]
|
||||
|
||||
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
|
||||
shr eax, 16
|
||||
mov [edi+ecx+2], al
|
||||
|
||||
pop eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.skip_1:
|
||||
mov edi, [esp+64]
|
||||
inc ecx
|
||||
dec edx
|
||||
jnz .inner24
|
||||
|
||||
add esi, [esp+BLITTER.stride]
|
||||
|
@ -1,35 +1,35 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; 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 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision $
|
||||
|
||||
|
||||
LOAD_FROM_FILE equ 0
|
||||
LOAD_FROM_MEM equ 1
|
||||
LOAD_INDIRECT equ 2
|
||||
LOAD_SYSTEM equ 3
|
||||
|
||||
struct BITMAPINFOHEADER
|
||||
Size dd ?
|
||||
Width dd ?
|
||||
Height dd ?
|
||||
Planes dw ?
|
||||
BitCount dw ?
|
||||
Compression dd ?
|
||||
SizeImage dd ?
|
||||
XPelsPerMeter dd ?
|
||||
YPelsPerMeter dd ?
|
||||
ClrUsed dd ?
|
||||
ClrImportant dd ?
|
||||
ends
|
||||
|
||||
align 4
|
||||
proc init_cursor stdcall, dst:dword, src:dword
|
||||
locals
|
||||
LOAD_INDIRECT equ 2
|
||||
LOAD_SYSTEM equ 3
|
||||
|
||||
struct BITMAPINFOHEADER
|
||||
Size dd ?
|
||||
Width dd ?
|
||||
Height dd ?
|
||||
Planes dw ?
|
||||
BitCount dw ?
|
||||
Compression dd ?
|
||||
SizeImage dd ?
|
||||
XPelsPerMeter dd ?
|
||||
YPelsPerMeter dd ?
|
||||
ClrUsed dd ?
|
||||
ClrImportant dd ?
|
||||
ends
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc init_cursor stdcall, dst:dword, src:dword
|
||||
locals
|
||||
rBase dd ?
|
||||
pQuad dd ?
|
||||
pBits dd ?
|
||||
@ -40,17 +40,18 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
endl
|
||||
|
||||
mov esi, [src]
|
||||
add esi, [esi+18]
|
||||
mov eax, esi
|
||||
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 24
|
||||
je .img_24
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 8
|
||||
je .img_8
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 4
|
||||
je .img_4
|
||||
|
||||
.img_2:
|
||||
add esi, [esi+18]
|
||||
mov eax, esi
|
||||
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 24
|
||||
je .img_24
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 8
|
||||
je .img_8
|
||||
cmp [esi+BITMAPINFOHEADER.BitCount], 4
|
||||
je .img_4
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.img_2:
|
||||
add eax, [esi]
|
||||
mov [pQuad], eax
|
||||
add eax, 8
|
||||
@ -68,6 +69,8 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
mov [rBase], edi
|
||||
|
||||
mov esi, [pQuad]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.l21:
|
||||
mov ebx, [pBits]
|
||||
mov ebx, [ebx]
|
||||
@ -76,6 +79,8 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
mov eax, [eax]
|
||||
bswap eax
|
||||
mov [counter], 32
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
xor edx, edx
|
||||
shl eax, 1
|
||||
@ -103,7 +108,8 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
sub [height], 1
|
||||
jnz .l21
|
||||
ret
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.img_4:
|
||||
add eax, [esi]
|
||||
mov [pQuad], eax
|
||||
@ -123,11 +129,15 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
|
||||
mov esi, [pQuad]
|
||||
mov ebx, [pBits]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.l4:
|
||||
mov eax, [pAnd]
|
||||
mov eax, [eax]
|
||||
bswap eax
|
||||
mov [counter], 16
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
xor edx, edx
|
||||
shl eax, 1
|
||||
@ -168,6 +178,8 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
sub [height], 1
|
||||
jnz .l4
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.img_8:
|
||||
add eax, [esi]
|
||||
mov [pQuad], eax
|
||||
@ -187,11 +199,15 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
|
||||
mov esi, [pQuad]
|
||||
mov ebx, [pBits]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.l81:
|
||||
mov eax, [pAnd]
|
||||
mov eax, [eax]
|
||||
bswap eax
|
||||
mov [counter], 32
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
xor edx, edx
|
||||
shl eax, 1
|
||||
@ -217,27 +233,33 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
sub [height], 1
|
||||
jnz .l81
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.img_24:
|
||||
add eax, [esi]
|
||||
mov [pQuad], eax
|
||||
add eax, 0xC00
|
||||
mov [pAnd], eax
|
||||
mov eax, [esi+BITMAPINFOHEADER.Width]
|
||||
mov [width], eax
|
||||
mov ebx, [esi+BITMAPINFOHEADER.Height]
|
||||
shr ebx, 1
|
||||
mov [height], ebx
|
||||
|
||||
mov [pQuad], eax
|
||||
add eax, 0xC00
|
||||
mov [pAnd], eax
|
||||
mov eax, [esi+BITMAPINFOHEADER.Width]
|
||||
mov [width], eax
|
||||
mov ebx, [esi+BITMAPINFOHEADER.Height]
|
||||
shr ebx, 1
|
||||
mov [height], ebx
|
||||
|
||||
mov edi, [dst]
|
||||
add edi, 32*31*4
|
||||
mov [rBase], edi
|
||||
|
||||
mov esi, [pAnd]
|
||||
mov ebx, [pQuad]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.row_24:
|
||||
mov eax, [esi]
|
||||
bswap eax
|
||||
mov [counter], 32
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
xor edx, edx
|
||||
shl eax, 1
|
||||
@ -263,7 +285,7 @@ proc init_cursor stdcall, dst:dword, src:dword
|
||||
jnz .row_24
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc set_cursor stdcall, hcursor:dword
|
||||
mov eax, [hcursor]
|
||||
@ -274,13 +296,16 @@ proc set_cursor stdcall, hcursor:dword
|
||||
mov ebx, [current_slot]
|
||||
xchg eax, [ebx+APPDATA.cursor]
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
mov eax, [def_cursor]
|
||||
mov ebx, [current_slot]
|
||||
xchg eax, [ebx+APPDATA.cursor]
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
; param
|
||||
; eax= pid
|
||||
; ebx= src
|
||||
@ -293,13 +318,13 @@ create_cursor:
|
||||
|
||||
sub esp, 4 ;space for .hcursor
|
||||
push ecx
|
||||
push ebx
|
||||
|
||||
mov ebx, eax
|
||||
mov eax, sizeof.CURSOR
|
||||
call create_kernel_object
|
||||
test eax, eax
|
||||
jz .fail
|
||||
push ebx
|
||||
|
||||
mov ebx, eax
|
||||
mov eax, sizeof.CURSOR
|
||||
call create_kernel_object
|
||||
test eax, eax
|
||||
jz .fail
|
||||
|
||||
mov [.hcursor], eax
|
||||
|
||||
@ -328,6 +353,8 @@ create_cursor:
|
||||
|
||||
stdcall init_cursor, eax, esi
|
||||
|
||||
align 4
|
||||
.add_cursor:
|
||||
mov ecx, [.hcursor]
|
||||
lea ecx, [ecx+CURSOR.list_next]
|
||||
lea edx, [_display.cr_list.next]
|
||||
@ -338,7 +365,6 @@ create_cursor:
|
||||
popfd
|
||||
|
||||
mov eax, [.hcursor]
|
||||
.check_hw:
|
||||
cmp [_display.init_cursor], 0
|
||||
je .fail
|
||||
|
||||
@ -347,22 +373,26 @@ create_cursor:
|
||||
add esp, 4
|
||||
|
||||
mov eax, [.hcursor]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
add esp, 12
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.indirect:
|
||||
shr ebx, 16
|
||||
movzx ecx, bh
|
||||
movzx edx, bl
|
||||
mov [eax+CURSOR.hot_x], ecx
|
||||
mov [eax+CURSOR.hot_y], edx
|
||||
mov [edi+CURSOR.hot_x], ecx
|
||||
mov [edi+CURSOR.hot_y], edx
|
||||
|
||||
xchg edi, eax
|
||||
mov ecx, 1024
|
||||
cld
|
||||
rep movsd
|
||||
jmp .check_hw
|
||||
|
||||
jmp .add_cursor
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc load_cursor stdcall, src:dword, flags:dword
|
||||
locals
|
||||
@ -381,6 +411,8 @@ proc load_cursor stdcall, src:dword, flags:dword
|
||||
test eax, eax
|
||||
jz .fail
|
||||
mov [src], eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
push ebx
|
||||
push esi
|
||||
@ -397,16 +429,22 @@ proc load_cursor stdcall, src:dword, flags:dword
|
||||
cmp word [flags], LOAD_FROM_FILE
|
||||
jne .exit
|
||||
stdcall kernel_free, [src]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.exit:
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
mov eax, [handle]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail2:
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc delete_cursor stdcall, hcursor:dword
|
||||
locals
|
||||
@ -433,17 +471,20 @@ proc delete_cursor stdcall, hcursor:dword
|
||||
jne @F
|
||||
mov eax, [def_cursor]
|
||||
mov [ebx+APPDATA.cursor], eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov eax, [hcursor]
|
||||
call [eax+APPOBJ.destroy]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
; param
|
||||
; eax= cursor
|
||||
|
||||
align 4
|
||||
destroy_cursor:
|
||||
|
||||
push eax
|
||||
@ -460,13 +501,13 @@ destroy_cursor:
|
||||
pop eax
|
||||
call destroy_kernel_object
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
select_cursor:
|
||||
mov eax, [esp+4]
|
||||
mov [_display.cursor], eax
|
||||
ret 4
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc restore_24 stdcall, x:dword, y:dword
|
||||
|
||||
@ -484,6 +525,8 @@ proc restore_24 stdcall, x:dword, y:dword
|
||||
mov ecx, [cur.w]
|
||||
lea ecx, [ecx+ecx*2]
|
||||
push ecx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov edi, ebx
|
||||
add ebx, [BytesPerScanLine]
|
||||
@ -496,11 +539,13 @@ proc restore_24 stdcall, x:dword, y:dword
|
||||
pop ecx
|
||||
pop edi
|
||||
pop esi
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
pop ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc restore_32 stdcall, x:dword, y:dword
|
||||
|
||||
@ -515,6 +560,8 @@ proc restore_32 stdcall, x:dword, y:dword
|
||||
push edi
|
||||
|
||||
mov esi, cur_saved_data
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov edi, ebx
|
||||
add ebx, [BytesPerScanLine]
|
||||
@ -525,12 +572,14 @@ proc restore_32 stdcall, x:dword, y:dword
|
||||
jnz @B
|
||||
|
||||
pop edi
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.ret:
|
||||
pop esi
|
||||
pop ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
locals
|
||||
@ -542,7 +591,7 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
mov esi, [hcursor]
|
||||
mov ecx, [x]
|
||||
mov eax, [y]
|
||||
mov ebx, [BytesPerScanLine]
|
||||
; mov ebx, [BytesPerScanLine]
|
||||
|
||||
xor edx, edx
|
||||
sub ecx, [esi+CURSOR.hot_x]
|
||||
@ -568,7 +617,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
sub edx, [y]
|
||||
mov [_dy], edx
|
||||
|
||||
mul dword [BytesPerScanLine]
|
||||
; mul dword [BytesPerScanLine]
|
||||
mov eax, [BPSLine_calc_area+eax*4]
|
||||
lea edx, [LFB_BASE+ecx*3]
|
||||
add edx, eax
|
||||
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]
|
||||
jbe @F
|
||||
mov ebx, [Screen_Max_X]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
cmp edi, [Screen_Max_Y]
|
||||
jbe @F
|
||||
mov edi, [Screen_Max_Y]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov [cur.right], ebx
|
||||
mov [cur.bottom], edi
|
||||
@ -595,6 +649,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
|
||||
mov eax, edi
|
||||
mov edi, cur_saved_data
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov esi, edx
|
||||
add edx, [BytesPerScanLine]
|
||||
@ -613,12 +669,16 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
mov esi, [hcursor]
|
||||
mov esi, [esi+CURSOR.base]
|
||||
lea edx, [esi+eax*4]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.row:
|
||||
mov ecx, [cur.w]
|
||||
mov esi, edx
|
||||
mov edi, ebx
|
||||
add edx, 32*4
|
||||
add ebx, [BytesPerScanLine]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pix:
|
||||
lodsd
|
||||
test eax, 0xFF000000
|
||||
@ -626,6 +686,8 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
mov [edi], ax
|
||||
shr eax, 16
|
||||
mov [edi+2], al
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
add edi, 3
|
||||
dec ecx
|
||||
@ -635,8 +697,7 @@ proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
||||
jnz .row
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
||||
locals
|
||||
@ -673,17 +734,22 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
||||
sub edx, [y]
|
||||
mov [_dy], edx
|
||||
|
||||
mul dword [BytesPerScanLine]
|
||||
; mul dword [BytesPerScanLine]
|
||||
mov eax, [BPSLine_calc_area+eax*4]
|
||||
lea edx, [LFB_BASE+eax+ecx*4]
|
||||
mov [cur_saved_base], edx
|
||||
|
||||
cmp ebx, [Screen_Max_X]
|
||||
jbe @F
|
||||
mov ebx, [Screen_Max_X]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
cmp edi, [Screen_Max_Y]
|
||||
jbe @F
|
||||
mov edi, [Screen_Max_Y]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov [cur.right], ebx
|
||||
mov [cur.bottom], edi
|
||||
@ -699,6 +765,8 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
||||
|
||||
mov eax, edi
|
||||
mov edi, cur_saved_data
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov esi, edx
|
||||
add edx, [BytesPerScanLine]
|
||||
@ -716,17 +784,23 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
||||
mov esi, [hcursor]
|
||||
mov esi, [esi+CURSOR.base]
|
||||
lea edx, [esi+eax*4]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.row:
|
||||
mov ecx, [cur.w]
|
||||
mov esi, edx
|
||||
mov edi, ebx
|
||||
add edx, 32*4
|
||||
add ebx, [BytesPerScanLine]
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.pix:
|
||||
lodsd
|
||||
test eax, 0xFF000000
|
||||
jz @F
|
||||
mov [edi], eax
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
add edi, 4
|
||||
dec ecx
|
||||
@ -736,16 +810,158 @@ proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
||||
jnz .row
|
||||
ret
|
||||
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
|
||||
get_display:
|
||||
mov eax, _display
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
init_display:
|
||||
|
||||
xor eax, eax
|
||||
mov edi, _display
|
||||
|
||||
@ -764,6 +980,7 @@ init_display:
|
||||
|
||||
test word [SCR_MODE], 0x4000
|
||||
jz .fail
|
||||
; jmp .fail
|
||||
|
||||
mov ebx, restore_32
|
||||
mov ecx, move_cursor_32
|
||||
@ -775,22 +992,47 @@ init_display:
|
||||
mov ecx, move_cursor_24
|
||||
cmp eax, 24
|
||||
jne .fail
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov [_display.select_cursor], select_cursor
|
||||
mov [_display.move_cursor], ecx
|
||||
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
|
||||
mov [def_cursor], eax
|
||||
ret
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.fail:
|
||||
xor eax, eax
|
||||
mov [_display.select_cursor], eax
|
||||
mov [_display.move_cursor], eax
|
||||
ret
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
def_arrow:
|
||||
file 'arrow.cur'
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
clock_arrow:
|
||||
file 'arrow_clock.cur'
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; VESA12.INC ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; VESA12.INC ;;
|
||||
;; ;;
|
||||
;; Vesa 1.2 functions for MenuetOS ;;
|
||||
;; ;;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 ;;
|
||||
;; ;;
|
||||
;; VGA.INC ;;
|
||||
@ -11,9 +11,10 @@
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
$Revision $
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
paletteVGA:
|
||||
|
||||
;16 colour palette
|
||||
@ -24,9 +25,9 @@ paletteVGA:
|
||||
mov ecx, 16
|
||||
mov dx, 0x3c9
|
||||
xor eax, eax
|
||||
|
||||
palvganew:
|
||||
|
||||
;--------------------------------------
|
||||
align 4
|
||||
palvganew:
|
||||
mov al, 0
|
||||
test ah, 4
|
||||
jz palvgalbl1
|
||||
@ -34,7 +35,9 @@ paletteVGA:
|
||||
test ah, 8
|
||||
jz palvgalbl1
|
||||
add al, 32
|
||||
palvgalbl1:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
palvgalbl1:
|
||||
out dx, al; red 0,31 or 63
|
||||
mov al, 0
|
||||
test ah, 2
|
||||
@ -43,7 +46,9 @@ paletteVGA:
|
||||
test ah, 8
|
||||
jz palvgalbl2
|
||||
add al, 32
|
||||
palvgalbl2:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
palvgalbl2:
|
||||
out dx, al; blue 0,31 or 63
|
||||
mov al, 0
|
||||
test ah, 1
|
||||
@ -52,7 +57,9 @@ paletteVGA:
|
||||
test ah, 8
|
||||
jz palvgalbl3
|
||||
add al, 32
|
||||
palvgalbl3:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
palvgalbl3:
|
||||
out dx, al; green 0,31 or 63
|
||||
add ah, 1
|
||||
loop palvganew
|
||||
@ -60,59 +67,76 @@ paletteVGA:
|
||||
; mov ax, 0005h
|
||||
; out dx, ax
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
palette320x200:
|
||||
|
||||
mov edx, 0x3c8
|
||||
xor eax, eax
|
||||
out dx, al
|
||||
mov ecx, 256
|
||||
mov edx, 0x3c9
|
||||
xor eax, eax
|
||||
|
||||
palnew:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
palnew:
|
||||
mov al, 0
|
||||
test ah, 64
|
||||
jz pallbl1
|
||||
add al, 21
|
||||
pallbl1:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl1:
|
||||
test ah, 128
|
||||
jz pallbl2
|
||||
add al, 42
|
||||
pallbl2:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl2:
|
||||
out dx, al
|
||||
mov al, 0
|
||||
test ah, 8
|
||||
jz pallbl3
|
||||
add al, 8
|
||||
pallbl3:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl3:
|
||||
test ah, 16
|
||||
jz pallbl4
|
||||
add al, 15
|
||||
pallbl4:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl4:
|
||||
test ah, 32
|
||||
jz pallbl5
|
||||
add al, 40
|
||||
pallbl5:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl5:
|
||||
out dx, al
|
||||
mov al, 0
|
||||
test ah, 1
|
||||
jz pallbl6
|
||||
add al, 8
|
||||
pallbl6:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl6:
|
||||
test ah, 2
|
||||
jz pallbl7
|
||||
add al, 15
|
||||
pallbl7:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl7:
|
||||
test ah, 4
|
||||
jz pallbl8
|
||||
add al, 40
|
||||
pallbl8:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
pallbl8:
|
||||
out dx, al
|
||||
add ah, 1
|
||||
loop palnew
|
||||
|
||||
ret
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
uglobal
|
||||
novesachecksum dd 0x0
|
||||
@ -123,13 +147,12 @@ uglobal
|
||||
temp:
|
||||
.cx dd 0
|
||||
endg
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
checkVga_N13:
|
||||
|
||||
cmp [SCR_MODE], dword 0x13
|
||||
jne @f
|
||||
|
||||
; cnvl:
|
||||
pushad
|
||||
cmp [EGA_counter], 1
|
||||
je novesal
|
||||
@ -137,21 +160,28 @@ checkVga_N13:
|
||||
cmp ecx, [novesachecksum]
|
||||
jne novesal
|
||||
popad
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
ret
|
||||
|
||||
novesal:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
novesal:
|
||||
mov [novesachecksum], ecx
|
||||
mov ecx, 0
|
||||
movzx eax, word [MOUSE_Y]
|
||||
cmp eax, 100
|
||||
jge m13l3
|
||||
mov eax, 100
|
||||
m13l3:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m13l3:
|
||||
cmp eax, 480-100
|
||||
jbe m13l4
|
||||
mov eax, 480-100
|
||||
m13l4:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m13l4:
|
||||
sub eax, 100
|
||||
imul eax, 640*4
|
||||
add ecx, eax
|
||||
@ -159,11 +189,15 @@ checkVga_N13:
|
||||
cmp eax, 160
|
||||
jge m13l1
|
||||
mov eax, 160
|
||||
m13l1:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m13l1:
|
||||
cmp eax, 640-160
|
||||
jbe m13l2
|
||||
mov eax, 640-160
|
||||
m13l2:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m13l2:
|
||||
sub eax, 160
|
||||
shl eax, 2
|
||||
add ecx, eax
|
||||
@ -173,7 +207,9 @@ checkVga_N13:
|
||||
mov edx, 200
|
||||
mov ecx, 320
|
||||
cld
|
||||
m13pix:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m13pix:
|
||||
lodsd
|
||||
test eax, eax
|
||||
jz .save_pixel
|
||||
@ -188,7 +224,9 @@ checkVga_N13:
|
||||
and ebx, (128+64)*256*256; red
|
||||
shr ebx, 8+8
|
||||
add eax, ebx
|
||||
.save_pixel:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.save_pixel:
|
||||
stosb
|
||||
loop m13pix
|
||||
mov ecx, 320
|
||||
@ -198,17 +236,18 @@ checkVga_N13:
|
||||
mov [EGA_counter], 0
|
||||
popad
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_drawbackground:
|
||||
; draw all
|
||||
cmp [SCR_MODE], dword 0x12
|
||||
jne .end
|
||||
pushad
|
||||
mov esi, [LFBAddress]
|
||||
mov edi, VGABasePtr
|
||||
mov ebx, 640/32; 640*480/(8*4)
|
||||
mov edx, 480
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
push ebx edx esi edi
|
||||
shl edx, 9
|
||||
lea edx, [edx+edx*4]
|
||||
@ -221,9 +260,9 @@ VGA_drawbackground:
|
||||
jnz @r
|
||||
call VGA_draw_long_line_1
|
||||
popad
|
||||
.end:
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_draw_long_line:
|
||||
mov dx, 3ceh
|
||||
mov ax, 0ff08h
|
||||
@ -231,7 +270,9 @@ VGA_draw_long_line:
|
||||
out dx, ax
|
||||
mov ax, 0005h
|
||||
out dx, ax
|
||||
m12pix:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
m12pix:
|
||||
call VGA_draw_32_pixels
|
||||
dec ebx
|
||||
jnz m12pix
|
||||
@ -246,7 +287,8 @@ VGA_draw_long_line:
|
||||
out dx, al
|
||||
sti
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_draw_32_pixels:
|
||||
xor eax, eax
|
||||
mov ebp, VGA_8_pixels
|
||||
@ -255,9 +297,13 @@ VGA_draw_32_pixels:
|
||||
mov [ebp+8], eax
|
||||
mov [ebp+12], eax
|
||||
mov ch, 4
|
||||
.main_loop:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.main_loop:
|
||||
mov cl, 8
|
||||
.convert_pixels_to_VGA:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.convert_pixels_to_VGA:
|
||||
lodsd ; eax = 24bit colour
|
||||
test eax, eax
|
||||
jz .end
|
||||
@ -273,14 +319,18 @@ VGA_draw_32_pixels:
|
||||
cmp al, 170
|
||||
jbe .p13green
|
||||
or [ebp+12], ch
|
||||
.p13green:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13green:
|
||||
cmp ah, 85
|
||||
jbe .p13red
|
||||
or [ebp+4], ch
|
||||
cmp ah, 170
|
||||
jbe .p13red
|
||||
or [ebp+12], ch
|
||||
.p13red:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13red:
|
||||
shr eax, 8
|
||||
cmp ah, 85
|
||||
jbe .p13cont
|
||||
@ -288,11 +338,15 @@ VGA_draw_32_pixels:
|
||||
cmp ah, 170
|
||||
jbe .p13cont
|
||||
or [ebp+12], ch
|
||||
.p13cont:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13cont:
|
||||
ror eax, 8
|
||||
mov ch, ah
|
||||
inc cl
|
||||
.end:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.end:
|
||||
dec cl
|
||||
jnz .convert_pixels_to_VGA
|
||||
inc ebp
|
||||
@ -303,7 +357,9 @@ VGA_draw_32_pixels:
|
||||
mov esi, ebp
|
||||
mov dx, 3c4h
|
||||
mov ah, 1h
|
||||
@@:
|
||||
;--------------------------------------
|
||||
align 4
|
||||
@@:
|
||||
mov al, 02h
|
||||
out dx, ax
|
||||
xchg ax, bp
|
||||
@ -316,12 +372,36 @@ VGA_draw_32_pixels:
|
||||
add edi, 4
|
||||
pop esi
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_putpixel:
|
||||
; eax = x
|
||||
; ebx = y
|
||||
mov ecx, eax
|
||||
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
|
||||
lea ebx, [ebx+ebx*4] ; óìíîæåíèå íà 5
|
||||
lea edx, [ebx+ecx*4] ; + x*BytesPerPixel (Vesa2.0 32)
|
||||
@ -343,6 +423,8 @@ VGA_putpixel:
|
||||
cmp al, 170
|
||||
jbe .p13green
|
||||
or dl, 0x08
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13green:
|
||||
cmp ah, 85
|
||||
jbe .p13red
|
||||
@ -350,6 +432,8 @@ VGA_putpixel:
|
||||
cmp ah, 170
|
||||
jbe .p13red
|
||||
or dl, 0x08
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13red:
|
||||
shr eax, 8
|
||||
cmp ah, 85
|
||||
@ -358,6 +442,8 @@ VGA_putpixel:
|
||||
cmp ah, 170
|
||||
jbe .p13cont
|
||||
or dl, 0x08
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.p13cont:
|
||||
ror edx, 8
|
||||
inc cl
|
||||
@ -371,14 +457,12 @@ VGA_putpixel:
|
||||
rol edx, 8
|
||||
mov [edi], dl
|
||||
popfd
|
||||
;.end:
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA__putimage:
|
||||
; ecx = size [x|y]
|
||||
; edx = coordinates [x|y]
|
||||
cmp [SCR_MODE], dword 0x12
|
||||
jne @f
|
||||
pushad
|
||||
rol edx, 16
|
||||
movzx eax, dx
|
||||
@ -389,16 +473,14 @@ VGA__putimage:
|
||||
movzx ecx, cx
|
||||
call VGA_draw_bar_1
|
||||
popad
|
||||
@@:
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_draw_bar:
|
||||
; eax cx
|
||||
; ebx cy
|
||||
; ecx xe
|
||||
; edx ye
|
||||
cmp [SCR_MODE], dword 0x12
|
||||
jne @f
|
||||
pushad
|
||||
sub ecx, eax
|
||||
sub edx, ebx
|
||||
@ -408,9 +490,9 @@ VGA_draw_bar:
|
||||
and edx, 0xffff
|
||||
call VGA_draw_bar_1
|
||||
popad
|
||||
@@:
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_draw_bar_1:
|
||||
mov [temp.cx], eax
|
||||
mov eax, [TASK_BASE]
|
||||
@ -429,13 +511,16 @@ VGA_draw_bar_1:
|
||||
mov ebx, ecx
|
||||
shr ebx, 5
|
||||
inc ebx
|
||||
;--------------------------------------
|
||||
align 4
|
||||
.main_loop:
|
||||
call VGA_draw_long_line_1
|
||||
dec edx
|
||||
jnz .main_loop
|
||||
call VGA_draw_long_line_1
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
align 4
|
||||
VGA_draw_long_line_1:
|
||||
push ebx edx esi edi
|
||||
shl edx, 9
|
||||
@ -446,5 +531,4 @@ VGA_draw_long_line_1:
|
||||
call VGA_draw_long_line
|
||||
pop edi esi edx ebx
|
||||
ret
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user