mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-11-25 02:09:36 +03:00
changed background handling
git-svn-id: svn://kolibrios.org@546 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b5bc8a7c09
commit
925adfd15a
@ -20,6 +20,7 @@ struc MEM_BLOCK
|
||||
MEM_LIST_OFFSET equ 8
|
||||
FREE_BLOCK equ 4
|
||||
USED_BLOCK equ 8
|
||||
DONT_FREE_BLOCK equ 10h
|
||||
|
||||
virtual at 0
|
||||
MEM_BLOCK MEM_BLOCK
|
||||
@ -728,8 +729,10 @@ proc user_free stdcall, base:dword
|
||||
sub esi, 4096
|
||||
shr esi, 12
|
||||
mov eax, [page_tabs+esi*4]
|
||||
test eax, USED_BLOCK
|
||||
test al, USED_BLOCK
|
||||
jz .not_used
|
||||
test al, DONT_FREE_BLOCK
|
||||
jnz .cantfree
|
||||
|
||||
and eax, not 4095
|
||||
mov ecx, eax
|
||||
@ -765,6 +768,9 @@ proc user_free stdcall, base:dword
|
||||
xor eax, eax
|
||||
inc eax
|
||||
ret
|
||||
.cantfree:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
user_normalize:
|
||||
@ -836,6 +842,8 @@ user_realloc:
|
||||
xor eax, eax
|
||||
ret
|
||||
@@:
|
||||
test edx, DONT_FREE_BLOCK
|
||||
jnz .ret0
|
||||
add ebx, 0x1FFF
|
||||
shr edx, 12
|
||||
shr ebx, 12
|
||||
|
@ -720,6 +720,11 @@ term9:
|
||||
mov [flp_status], 0
|
||||
@@:
|
||||
pop esi
|
||||
cmp [bgrlockpid], esi
|
||||
jnz @f
|
||||
and [bgrlockpid], 0
|
||||
mov [bgrlock], 0
|
||||
@@:
|
||||
|
||||
pusha ; remove all irq reservations
|
||||
mov eax,esi
|
||||
|
@ -1,4 +1,4 @@
|
||||
‘<EFBFBD>‘’…<EFBFBD><EFBFBD>›… ”“<E2809D><E2809C>–<EFBFBD><E28093> <20><>…<EFBFBD>€–<E282AC><E28093><EFBFBD><EFBFBD><EFBFBD>‰ ‘<>‘’…<E28099>› Kolibri 0.6.5.0
|
||||
‘ˆ‘’…Œ<EFBFBD>›… ”“<E2809D>Š–ˆˆ Ž<>…<EFBFBD>€–ˆŽ<CB86><C5BD>Ž‰ ‘ˆ‘’…Œ› Kolibri 0.7.0.0
|
||||
|
||||
<EFBFBD>®¬¥à äãªæ¨¨ ¯®¬¥é ¥âáï ¢ ॣ¨áâà eax.
|
||||
‚맮¢ á¨á⥬®© äãªæ¨¨ ®áãé¥á⢫ï¥âáï ª®¬ ¤®© "int 0x40".
|
||||
@ -574,6 +574,34 @@
|
||||
* „«ï ®¡®¢«¥¨ï íªà (¯®á«¥ § ¢¥à襨ï á¥à¨¨ ª®¬ ¤, à ¡®â îé¨å á
|
||||
ä®®¬) ¢ë§ë¢ ©â¥ ¯®¤äãªæ¨î 3 ¯¥à¥à¨á®¢ª¨ ä® .
|
||||
|
||||
======================================================================
|
||||
====================== ”ãªæ¨ï 15, ¯®¤äãªæ¨ï 6 ======================
|
||||
==== ‘¯à®¥æ¨à®¢ âì ¤ ë¥ ä® ¤à¥á®¥ ¯à®áâà á⢮ ¯à®æ¥áá . ====
|
||||
======================================================================
|
||||
<EFBFBD> à ¬¥âàë:
|
||||
* eax = 15 - ®¬¥à äãªæ¨¨
|
||||
* ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨
|
||||
‚®§¢à é ¥¬®¥ § 票¥:
|
||||
* eax = 㪠§ â¥«ì ¤ ë¥ ä® , 0 ¯à¨ ®è¨¡ª¥
|
||||
‡ ¬¥ç ¨ï:
|
||||
* ‘¯à®¥æ¨à®¢ ë¥ ¤ ë¥ ¤®áâã¯ë ç⥨¥ ¨ § ¯¨áì.
|
||||
* <20> §¬¥à ¤ ëå ä® à ¢¥ 3*xsize*ysize. ˆ§¬¥¥¨¥ à §¬¥à®¢ ä®
|
||||
¡«®ª¨àã¥âáï ¢à¥¬ï à ¡®âë á á¯à®¥æ¨à®¢ 묨 ¤ 묨.
|
||||
* –¢¥â ª ¦¤®£® ¯¨ªá¥«ï åà ¨âáï ª ª 3-¡ ©â®¢ ï ¢¥«¨ç¨ BBGGRR.
|
||||
* <20>¨ªá¥«¨ ä®®¢®£® ¨§®¡à ¦¥¨ï § ¯¨áë¢ îâáï ¯®á«¥¤®¢ ⥫ì®
|
||||
á«¥¢ ¯à ¢®, ᢥàåã ¢¨§.
|
||||
|
||||
======================================================================
|
||||
====================== ”ãªæ¨ï 15, ¯®¤äãªæ¨ï 7 ======================
|
||||
=== ‡ ªàëâì ¯à®¥ªæ¨î ¤ ëå ä® ¤à¥á®¥ ¯à®áâà á⢮ ¯à®æ¥áá . ==
|
||||
======================================================================
|
||||
<EFBFBD> à ¬¥âàë:
|
||||
* eax = 15 - ®¬¥à äãªæ¨¨
|
||||
* ebx = 7 - ®¬¥à ¯®¤äãªæ¨¨
|
||||
* ecx = 㪠§ â¥«ì ¤ ë¥ ä®
|
||||
‚®§¢à é ¥¬®¥ § 票¥:
|
||||
* eax = 1 ¯à¨ ãᯥå¥, 0 ¯à¨ ®è¨¡ª¥
|
||||
|
||||
======================================================================
|
||||
============= ”ãªæ¨ï 16 - á®åà ¨âì à ¬¤¨áª ¤¨áª¥âã. =============
|
||||
======================================================================
|
||||
@ -839,7 +867,7 @@
|
||||
‘âàãªâãà ¡ãä¥à :
|
||||
db a,b,c,d ¤«ï ¢¥àᨨ a.b.c.d
|
||||
db UID_xxx: ®¤® ¨§ UID_NONE=0, UID_MENUET=1, UID_KOLIBRI=2
|
||||
dd REV - ®¬¥ΰ svn ΰ¥Ά¨§¨¨ ο¤ΰ
|
||||
dd REV - ®¬¥à svn-ॢ¨§¨¨ ï¤à
|
||||
„«ï ï¤à Kolibri 0.7.0.0:
|
||||
db 0,7,0,0
|
||||
db 2
|
||||
@ -2305,12 +2333,11 @@ dword-
|
||||
<EFBFBD> à ¬¥âàë:
|
||||
* eax = 48 - ®¬¥à äãªæ¨¨
|
||||
* ebx = 8 - ®¬¥à ¯®¤äãªæ¨¨
|
||||
* ecx = γ<> § β¥«μ ΅«®<C2AB> ¤«ο δγ<CEB3>樨 58, Ά <20>®β®ΰ®¬ γαβ ®Ά«¥®
|
||||
―®«¥ ―஬¥¦γβ®η®£® ΅γδ¥ΰ ¨ γ<> § ® ¨¬ο δ ©«
|
||||
* ecx = 㪠§ â¥«ì ¨¬ï ä ©« ᪨
|
||||
‚®§¢à é ¥¬®¥ § 票¥:
|
||||
* eax = 0 - ãᯥè®
|
||||
* ¨ η¥ eax = <20>®¤ ®θ¨΅<C2A8>¨ δ ©«®Ά®© α¨α⥬λ; ¥α«¨ δ ©« ¥ § ¤ ρβ α<>¨,
|
||||
β® Ά®§Άΰ ι ¥βαο ®θ¨΅<C2A8> 3 (¥¨§Ά¥αβ ο δ ©«®Ά ο α¨α⥬ ).
|
||||
* eax = 1 - ¥ 㤠«®áì § £à㧨âì ä ©«
|
||||
* eax = 2 - ä ©« ¥ ï¥âáï ä ©«®¬ ᪨
|
||||
‡ ¬¥ç ¨ï:
|
||||
* <20>ਠãᯥ让 § £à㧪¥ ᪨ ¢á¥ ®ª ¨§¢¥é îâáï ® ¥®¡å®¤¨¬®áâ¨
|
||||
¯¥à¥à¨á®¢ª¨ (ᮡë⨥ 1).
|
||||
@ -4064,11 +4091,14 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
||||
* /CD0/1, /CD1/1, /CD2/1, /CD3/1 ¤«ï ¤®áâ㯠ᮮ⢥âá⢥®
|
||||
ª CD IDE0 (Primary Master), IDE1 (Primary Slave),
|
||||
IDE2 (Secondary Master), IDE3 (Secondary Slave)
|
||||
* /SYS - ®¯à¥¤¥«ï¥â á¨á⥬ãî ¯ ¯ªã; ¯à¨ ®¡ë箩 § £à㧪¥ á¨á⥬ë
|
||||
á ¤¨áª¥âë íª¢¨¢ «¥â® /RD/1
|
||||
<EFBFBD>ਬ¥àë:
|
||||
* '/rd/1/kernel.asm',0
|
||||
* '/HD0/1/kernel.asm',0
|
||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
||||
* '/sys/MySuperApp.ini',0
|
||||
„®áâã¯ë¥ ¯®¤äãªæ¨¨:
|
||||
* ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©«
|
||||
* ¯®¤äãªæ¨ï 1 - ç⥨¥ ¯ ¯ª¨
|
||||
|
@ -1,4 +1,4 @@
|
||||
SYSTEM FUNCTIONS of OS Kolibri 0.6.5.0
|
||||
SYSTEM FUNCTIONS of OS Kolibri 0.7.0.0
|
||||
|
||||
Number of the function is located in the register eax.
|
||||
The call of the system function is executed by "int 0x40" command.
|
||||
@ -567,6 +567,33 @@ Remarks:
|
||||
* For update of the screen (after completion of a series of commands
|
||||
working with a background) call subfunction 3.
|
||||
|
||||
======================================================================
|
||||
===================== Function 15, subfunction 6 =====================
|
||||
======== Map background data to the address space of process. ========
|
||||
======================================================================
|
||||
Parameters:
|
||||
* eax = 15 - function number
|
||||
* ebx = 6 - subfunction number
|
||||
Returned value:
|
||||
* eax = pointer to background data, 0 if error
|
||||
Remarks:
|
||||
* Mapped data are available for read and write.
|
||||
* Size of background data is 3*xsize*ysize. The system blocks
|
||||
changes of background sizes while process works with mapped data.
|
||||
* Color of each pixel is stored as 3-bytes value BBGGRR.
|
||||
* Pixels of the background image are written sequentially
|
||||
from left to right, from up to down.
|
||||
|
||||
======================================================================
|
||||
===== Function 15, subfunction 7 - close mapped background data. =====
|
||||
======================================================================
|
||||
Parameters:
|
||||
* eax = 15 - function number
|
||||
* ebx = 7 - subfunction number
|
||||
* ecx = pointer to mapped data
|
||||
Returned value:
|
||||
* eax = 1 - success, 0 - error
|
||||
|
||||
======================================================================
|
||||
=============== Function 16 - save ramdisk on a floppy. ==============
|
||||
======================================================================
|
||||
@ -4025,11 +4052,14 @@ one of
|
||||
* /CD0/1, /CD1/1, /CD2/1, /CD3/1 to access accordingly to
|
||||
CD on IDE0 (Primary Master), IDE1 (Primary Slave),
|
||||
IDE2 (Secondary Master), IDE3 (Secondary Slave)
|
||||
* /SYS means system folder; with the usual boot (from floppy)
|
||||
is equivalent to /RD/1
|
||||
Examples:
|
||||
* '/rd/1/kernel.asm',0
|
||||
* '/HD0/1/kernel.asm',0
|
||||
* '/hd0/2/menuet/pics/tanzania.bmp',0
|
||||
* '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0
|
||||
* '/sys/MySuperApp.ini',0
|
||||
Available subfunctions:
|
||||
* subfunction 0 - read file
|
||||
* subfunction 1 - read folder
|
||||
|
@ -2346,6 +2346,8 @@ sys_cachetodiskette:
|
||||
|
||||
uglobal
|
||||
; bgrchanged dd 0x0
|
||||
bgrlock db 0
|
||||
bgrlockpid dd 0
|
||||
endg
|
||||
|
||||
sys_background:
|
||||
@ -2356,6 +2358,14 @@ sys_background:
|
||||
je sbgrr
|
||||
cmp ecx,0
|
||||
je sbgrr
|
||||
@@:
|
||||
mov al, 1
|
||||
xchg [bgrlock], al
|
||||
test al, al
|
||||
jz @f
|
||||
call change_task
|
||||
jmp @b
|
||||
@@:
|
||||
mov [BgrDataWidth],ebx
|
||||
mov [BgrDataHeight],ecx
|
||||
; mov [bgrchanged],1
|
||||
@ -2379,12 +2389,13 @@ sys_background:
|
||||
lea eax,[eax*3]
|
||||
mov [mem_BACKGROUND],eax
|
||||
; get memory for new background
|
||||
stdcall kernel_alloc, [mem_BACKGROUND]
|
||||
stdcall kernel_alloc, eax
|
||||
test eax, eax
|
||||
jz .exit_mem
|
||||
mov [img_background], eax
|
||||
.exit_mem:
|
||||
popad
|
||||
mov [bgrlock], 0
|
||||
|
||||
sbgrr:
|
||||
ret
|
||||
@ -2444,6 +2455,84 @@ draw_background_temp:
|
||||
ret
|
||||
nosb5:
|
||||
|
||||
cmp eax, 6
|
||||
jnz nosb6
|
||||
@@:
|
||||
mov al, 1
|
||||
xchg [bgrlock], al
|
||||
test al, al
|
||||
jz @f
|
||||
call change_task
|
||||
jmp @b
|
||||
@@:
|
||||
mov eax, [CURRENT_TASK]
|
||||
mov [bgrlockpid], eax
|
||||
stdcall user_alloc, [mem_BACKGROUND]
|
||||
mov [esp+36], eax
|
||||
test eax, eax
|
||||
jz .nomem
|
||||
mov ebx, eax
|
||||
shr ebx, 12
|
||||
or dword [page_tabs+(ebx-1)*4], DONT_FREE_BLOCK
|
||||
mov esi, [img_background]
|
||||
shr esi, 12
|
||||
mov ecx, [mem_BACKGROUND]
|
||||
add ecx, 0xFFF
|
||||
shr ecx, 12
|
||||
.z:
|
||||
mov eax, [page_tabs+ebx*4]
|
||||
test al, 1
|
||||
jz @f
|
||||
call free_page
|
||||
@@:
|
||||
mov eax, [page_tabs+esi*4]
|
||||
or al, PG_UW
|
||||
mov [page_tabs+ebx*4], eax
|
||||
mov eax, ebx
|
||||
shl eax, 12
|
||||
invlpg [eax]
|
||||
inc ebx
|
||||
inc esi
|
||||
loop .z
|
||||
ret
|
||||
.nomem:
|
||||
and [bgrlockpid], 0
|
||||
mov [bgrlock], 0
|
||||
nosb6:
|
||||
cmp eax, 7
|
||||
jnz nosb7
|
||||
cmp [bgrlock], 0
|
||||
jz .err
|
||||
mov eax, [CURRENT_TASK]
|
||||
cmp [bgrlockpid], eax
|
||||
jnz .err
|
||||
mov eax, ebx
|
||||
shr eax, 12
|
||||
mov ecx, [page_tabs+(eax-1)*4]
|
||||
test cl, USED_BLOCK+DONT_FREE_BLOCK
|
||||
jz .err
|
||||
jnp .err
|
||||
push eax
|
||||
shr ecx, 12
|
||||
@@:
|
||||
and dword [page_tabs+eax*4], 0
|
||||
mov edx, eax
|
||||
shl edx, 12
|
||||
invlpg [edx]
|
||||
inc eax
|
||||
loop @b
|
||||
pop eax
|
||||
and dword [page_tabs+(eax-1)*4], not DONT_FREE_BLOCK
|
||||
stdcall user_free, ebx
|
||||
mov [esp+36], eax
|
||||
and [bgrlockpid], 0
|
||||
mov [bgrlock], 0
|
||||
ret
|
||||
.err:
|
||||
and dword [esp+36], 0
|
||||
ret
|
||||
|
||||
nosb7:
|
||||
ret
|
||||
|
||||
|
||||
|
@ -862,20 +862,24 @@ vesa20_drawbackground_stretch:
|
||||
call [disable_mouse]
|
||||
pushad
|
||||
; Helper variables
|
||||
; calculate 2^32*(BgrDataWidth-1) mod (ScreenWidth-1)
|
||||
mov eax, [BgrDataWidth]
|
||||
dec eax
|
||||
xor edx, edx
|
||||
mov ecx, [ScreenWidth]
|
||||
inc ecx
|
||||
div ecx
|
||||
push eax ; quo
|
||||
push edx ; rem
|
||||
div dword [ScreenWidth]
|
||||
push eax ; high
|
||||
xor eax, eax
|
||||
div dword [ScreenWidth]
|
||||
push eax ; low
|
||||
; the same for height
|
||||
mov eax, [BgrDataHeight]
|
||||
dec eax
|
||||
xor edx, edx
|
||||
mov ecx, [ScreenHeight]
|
||||
inc ecx
|
||||
div ecx
|
||||
push eax
|
||||
push edx
|
||||
div dword [ScreenHeight]
|
||||
push eax ; high
|
||||
xor eax, eax
|
||||
div dword [ScreenHeight]
|
||||
push eax ; low
|
||||
; External loop for all y from start to end
|
||||
mov ebx, [draw_data+32+RECT.top] ; y start
|
||||
mov ebp, [draw_data+32+RECT.left] ; x start
|
||||
@ -897,83 +901,76 @@ vesa20_drawbackground_stretch:
|
||||
xchg edi, ebp
|
||||
; Now eax=x, ebx=y, edi->output, ebp=offset in WinMapAddress
|
||||
push ebx
|
||||
push eax
|
||||
; 2) Calculate offset in background memory block
|
||||
push eax
|
||||
mov eax, ebx
|
||||
mul dword [BgrDataHeight]
|
||||
mov ecx, [ScreenHeight]
|
||||
inc ecx
|
||||
div ecx ; eax := y * BgrDataHeight / ScreenHeight
|
||||
; edx := (y * BgrDataHeight) mod ScreenHeight
|
||||
mov esi, eax
|
||||
pop eax
|
||||
push edx ; dword [esp] = (y * BgrDataHeight) mod ScreenHeight
|
||||
; dword [esp+4] = y * BgrDataHeight / ScreenHeight
|
||||
push eax
|
||||
mov ecx, [BgrDataWidth]
|
||||
lea edx, [ecx*3]
|
||||
imul edx, [BgrDataHeight]
|
||||
add edx, [img_background]
|
||||
imul ebx, dword [esp+12]
|
||||
mul dword [esp+8]
|
||||
add edx, ebx ; edx:eax = y * 2^32*(BgrDataHeight-1)/(ScreenHeight-1)
|
||||
mov esi, edx
|
||||
imul esi, [BgrDataWidth]
|
||||
push edx
|
||||
mul ecx
|
||||
imul esi, ecx
|
||||
dec ecx
|
||||
push ecx
|
||||
mov ecx, [ScreenWidth]
|
||||
inc ecx
|
||||
div ecx ; eax := x * BgrDataWidth / ScreenWidth
|
||||
; edx := (x * BgrDataWidth) mod ScreenWidth
|
||||
add esi, eax
|
||||
push eax
|
||||
mov eax, [esp+8]
|
||||
mul dword [esp+28]
|
||||
push eax
|
||||
mov eax, [esp+12]
|
||||
mul dword [esp+28]
|
||||
add [esp], edx
|
||||
pop edx ; edx:eax = x * 2^32*(BgrDataWidth-1)/(ScreenWidth-1)
|
||||
add esi, edx
|
||||
lea esi, [esi*3]
|
||||
add esi, [img_background]
|
||||
push ecx edx esi
|
||||
mov ecx, eax
|
||||
push eax edx esi
|
||||
; 3) Loop through redraw rectangle and copy background data
|
||||
; Registers meaning:
|
||||
; ecx = (x * BgrDataWidth) / ScreenWidth
|
||||
; edx = (x * BgrDataWidth) mod ScreenWidth (used to fast recalculating of ecx,esi)
|
||||
; edx:ecx = x * 2^32 * (BgrDataWidth-1) / (ScreenWidth-1)
|
||||
; esi -> bgr memory, edi -> output
|
||||
; ebp = offset in WinMapAddress
|
||||
; dword [esp] = saved esi
|
||||
; dword [esp+4] = saved edx
|
||||
; dword [esp+8] = saved ecx
|
||||
; dword [esp+12] = BgrDataWidth-1, x-limit for overlapping of points
|
||||
; dword [esp+16] = end of bgr memory (defines y-limit for overlapping of points)
|
||||
; qword [esp+12] = y * 2^32 * (BgrDataHeight-1) / (ScreenHeight-1)
|
||||
; dword [esp+20] = x
|
||||
; dword [esp+24] = (y * BgrDataHeight) mod ScreenHeight (used to fast recalculating of esi)
|
||||
; dword [esp+28] = y
|
||||
; dword [esp+24] = y
|
||||
; precalculated constants:
|
||||
; dword [esp+32] = BgrDataHeight mod ScreenHeight
|
||||
; dword [esp+36] = BgrDataHeight div ScreenHeight
|
||||
; dword [esp+40] = BgrDataWidth mod ScreenWidth
|
||||
; dword [esp+44] = BgrDataWidth div ScreenWidth
|
||||
; qword [esp+28] = 2^32*(BgrDataHeight-1)/(ScreenHeight-1)
|
||||
; qword [esp+36] = 2^32*(BgrDataWidth-1)/(ScreenWidth-1)
|
||||
sdp3:
|
||||
add edx, [esp+40]
|
||||
cmp [ebp+WinMapAddress], byte 1
|
||||
jnz snbgp
|
||||
mov al, [esi+2]
|
||||
shl eax, 16
|
||||
mov ax, [esi]
|
||||
cmp ecx, [esp+12]
|
||||
jae @f
|
||||
cmp edx, [ScreenWidth]
|
||||
jb @f
|
||||
test ecx, ecx
|
||||
jz @f
|
||||
mov ebx, [esi+2]
|
||||
shr ebx, 8
|
||||
call overlapping_of_points
|
||||
@@:
|
||||
mov ebx, [esp+24]
|
||||
add ebx, [esp+32]
|
||||
cmp ebx, [ScreenHeight]
|
||||
jbe @f
|
||||
cmp dword [esp+12], 0
|
||||
jz .novert
|
||||
mov ebx, [BgrDataWidth]
|
||||
lea ebx, [ebx*3]
|
||||
add ebx, esi
|
||||
cmp ebx, [esp+16]
|
||||
jae @f
|
||||
mov ebx, [ebx-1]
|
||||
push eax
|
||||
mov al, [ebx+2]
|
||||
shl eax, 16
|
||||
mov ax, [ebx]
|
||||
test ecx, ecx
|
||||
jz .nohorz
|
||||
mov ebx, [ebx+2]
|
||||
shr ebx, 8
|
||||
call overlapping_of_points
|
||||
@@:
|
||||
.nohorz:
|
||||
mov ebx, eax
|
||||
pop eax
|
||||
push ecx
|
||||
mov ecx, [esp+4+12]
|
||||
call overlapping_of_points
|
||||
pop ecx
|
||||
.novert:
|
||||
mov [edi], ax
|
||||
shr eax, 16
|
||||
mov [edi+2], al
|
||||
@ -986,23 +983,18 @@ snbgp:
|
||||
mov [esp+20], eax
|
||||
cmp eax, [draw_data+32+RECT.right]
|
||||
ja sdp4
|
||||
mov eax, [esp+44]
|
||||
add ecx, eax
|
||||
add ecx, [esp+36]
|
||||
mov eax, edx
|
||||
adc edx, [esp+40]
|
||||
sub eax, edx
|
||||
lea eax, [eax*3]
|
||||
add esi, eax
|
||||
; add edx, [esp+40]
|
||||
cmp edx, [ScreenWidth]
|
||||
jbe sdp3
|
||||
sub edx, [ScreenWidth]
|
||||
add ecx, 1
|
||||
add esi, 3
|
||||
sub edx, 1
|
||||
sub esi, eax
|
||||
jmp sdp3
|
||||
sdp4:
|
||||
; next y
|
||||
mov ebx, [esp+28]
|
||||
mov ebx, [esp+24]
|
||||
add ebx, 1
|
||||
mov [esp+28], ebx
|
||||
mov [esp+24], ebx
|
||||
cmp ebx, [draw_data+32+RECT.bottom]
|
||||
ja sdpdone
|
||||
; advance edi, ebp to next scan line
|
||||
@ -1019,56 +1011,55 @@ sdp4:
|
||||
@@:
|
||||
add edi, [BytesPerScanLine]
|
||||
; restore ecx,edx; advance esi to next background line
|
||||
mov eax, [esp+28]
|
||||
mov ebx, [esp+32]
|
||||
add [esp+12], eax
|
||||
mov eax, [esp+16]
|
||||
adc [esp+16], ebx
|
||||
pop esi edx ecx
|
||||
push ecx edx
|
||||
xor ebx, ebx
|
||||
mov eax, [esp+24-4]
|
||||
add eax, [esp+32-4]
|
||||
cmp eax, [ScreenHeight]
|
||||
jbe @f
|
||||
sub eax, [ScreenHeight]
|
||||
mov ebx, 1
|
||||
sub eax, ebx
|
||||
@@:
|
||||
mov [esp+24-4], eax
|
||||
add ebx, [esp+36-4]
|
||||
lea ebx, [ebx*3]
|
||||
imul ebx, [BgrDataWidth]
|
||||
add esi, ebx
|
||||
sub eax, [esp+16-4]
|
||||
lea eax, [eax*3]
|
||||
imul eax, [BgrDataWidth]
|
||||
sub esi, eax
|
||||
push esi
|
||||
mov eax, [draw_data+32+RECT.left]
|
||||
mov [esp+20], eax
|
||||
jmp sdp3
|
||||
sdpdone:
|
||||
add esp, 48
|
||||
add esp, 44
|
||||
popad
|
||||
mov [EGA_counter],1
|
||||
call VGA_drawbackground
|
||||
ret
|
||||
|
||||
overlapping_of_points:
|
||||
push ecx edx edi
|
||||
mov ecx, eax
|
||||
mov edx, ebx
|
||||
push ecx edx
|
||||
mov edx, eax
|
||||
push esi
|
||||
shr ecx, 24
|
||||
mov esi, ecx
|
||||
mov ecx, ebx
|
||||
movzx ebx, dl
|
||||
movzx eax, cl
|
||||
sub eax, ebx
|
||||
movzx ebx, dh
|
||||
imul eax, esi
|
||||
add dl, ah
|
||||
movzx eax, ch
|
||||
sub eax, ebx
|
||||
imul eax, esi
|
||||
add dh, ah
|
||||
ror ecx, 16
|
||||
ror edx, 16
|
||||
movzx eax, cl
|
||||
movzx ebx, dl
|
||||
add eax, ebx
|
||||
rcr eax, 1
|
||||
movzx edi, ax
|
||||
movzx eax, ch
|
||||
movzx ebx, dh
|
||||
add eax, ebx
|
||||
rcr eax, 1
|
||||
ror edi, 8
|
||||
add edi, eax
|
||||
shr ecx, 8
|
||||
shr edx, 8
|
||||
movzx eax, ch
|
||||
movzx ebx, dh
|
||||
add eax, ebx
|
||||
rcr eax, 1
|
||||
ror edi, 8
|
||||
add eax, edi
|
||||
sub eax, ebx
|
||||
imul eax, esi
|
||||
pop esi
|
||||
add dl, ah
|
||||
mov eax, edx
|
||||
pop edx
|
||||
ror eax, 16
|
||||
pop edi edx ecx
|
||||
pop ecx
|
||||
ret
|
||||
|
Loading…
Reference in New Issue
Block a user