Function 25 - put image area on the background layer

git-svn-id: svn://kolibrios.org@2509 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79)
2012-03-26 21:10:43 +00:00
parent 378aed908b
commit a540a71a13
4 changed files with 127 additions and 5 deletions

View File

@@ -145,7 +145,7 @@ iglobal
dd sys_settime ; 22-setting date,time,clock and alarm-clock dd sys_settime ; 22-setting date,time,clock and alarm-clock
dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent
dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist
dd undefined_syscall ; 25-reserved dd syscall_putarea_backgr ; 25-Put Area to background
dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,. dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
dd undefined_syscall ; 27-reserved dd undefined_syscall ; 27-reserved
dd undefined_syscall ; 28-reserved dd undefined_syscall ; 28-reserved

View File

@@ -1506,6 +1506,26 @@ dd 1675
* <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD> ATAPI-<2D><><EFBFBD><EFBFBD><E0AEA9><EFBFBD> (CD <20> DVD). * <20><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD> ATAPI-<2D><><EFBFBD><EFBFBD><E0AEA9><EFBFBD> (CD <20> DVD).
* <20><EFBFBD><20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CD_tray. * <20><EFBFBD><20><EFBFBD><EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CD_tray.
======================================================================
========== <20><EFBFBD><E3ADAA><EFBFBD> 25 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><><>. ===============
======================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* eax = 25 - <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨
* ebx = 㪠<><E3AAA0><EFBFBD> <20><> <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD>⥫쭮 <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
<20><><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20> <20><><EFBFBD><E0ACA0> BBGGRRTTBBGGRRTT...
* ecx = [ࠧ<><E0A0A7><EFBFBD> <20><> <20><><EFBFBD> x]*65536 + [ࠧ<><E0A0A7><EFBFBD> <20><> <20><><EFBFBD> y]
* edx = [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> x]*65536 + [<5B><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> y]
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>:
* <20><EFBFBD><E3ADAA><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
* <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E5ADA5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E2ADAE>⥫쭮 <20><><EFBFBD>.
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 4*xsize*ysize.
* TT - <20><><EFBFBD><EFBFBD><><E3AAA0><EFBFBD> <20><EFBFBD><E0AEA7><EFBFBD><E7ADAE><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><EFBFBD>:
<20><> 1 <20><> FF - <20><><EFBFBD><EFBFBD><E0AEA7>筮, <20><> 0 - <20><EFBFBD><E0AEA7>筮.
* <20><EFBFBD><E3ADAA><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20><> <20><><><E4AEAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A0A6><EFBFBD><EFBFBD> (<28>.15),
<20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> LFB. <20><><20>.15 <20><><EFBFBD> <20>. 25 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>᫠.
====================================================================== ======================================================================
===== <20><EFBFBD><E3ADAA><EFBFBD> 26, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> MPU MIDI. ===== ===== <20><EFBFBD><E3ADAA><EFBFBD> 26, <20><><EFBFBD><EFBFBD><EFBFBD><E3ADAA><EFBFBD> 1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> MPU MIDI. =====
====================================================================== ======================================================================

View File

@@ -1491,6 +1491,26 @@ Returned value:
Remarks: Remarks:
* The function is supported only for ATAPI devices (CD and DVD). * The function is supported only for ATAPI devices (CD and DVD).
* An example of usage of the function is the application CD_tray. * An example of usage of the function is the application CD_tray.
======================================================================
======= Function 25 - put image area on the background layer. ========
======================================================================
Paramters:
* eax = 25 - function number
* ebx = pointer to the previously allocated memory area,
where placed the source images in a format BBGGRRTTBBGGRRTT...
* ecx = [size on axis x]*65536 + [size on axis y]
* edx = [coordinate on axis x]*65536 + [coordinate on axis y]
Returned value:
* function does not return value
Remarks:
* Coordinates of the image are coordinates of the upper left corner
of the image relative to the screen.
* Size of the image in bytes is 4*xsize*ysize
* TT - byte pointer of transparency, at current version:
1 to FF - opaque, 0 - transparent.
* The function places the image directly to LFB. It is not for
background image f.15. Options f.15 to f.25 does not make sense.
====================================================================== ======================================================================
======== Function 26, subfunction 1 - get MPU MIDI base port. ======== ======== Function 26, subfunction 1 - get MPU MIDI base port. ========

View File

@@ -4687,9 +4687,8 @@ syscall_getpixel: ; GetPixel
call dword [GETPIXEL]; eax - x, ebx - y call dword [GETPIXEL]; eax - x, ebx - y
mov [esp + 32], ecx mov [esp + 32], ecx
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
syscall_getarea: syscall_getarea:
;eax = 36 ;eax = 36
;ebx = pointer to bufer for img BBGGRRBBGGRR... ;ebx = pointer to bufer for img BBGGRRBBGGRR...
@@ -4725,9 +4724,12 @@ syscall_getarea:
add ebp, edi add ebp, edi
add ebx, edx add ebx, edx
;--------------------------------------
align 4
.start_y: .start_y:
push ecx edx push ecx edx
;--------------------------------------
align 4
.start_x: .start_x:
push eax ebx ecx push eax ebx ecx
add eax, ecx add eax, ecx
@@ -4749,9 +4751,89 @@ syscall_getarea:
jnz .start_y jnz .start_y
popad popad
ret ret
;-----------------------------------------------------------------------------
align 4 align 4
syscall_putarea_backgr:
;eax = 25
;ebx = pointer to bufer for img BBGGRRBBGGRR...
;ecx = [size x]*65536 + [size y]
;edx = [start x]*65536 + [start y]
pushad
mov edi, ebx
mov eax, edx
shr eax, 16
mov ebx, edx
and ebx, 0xffff
dec eax
dec ebx
; eax - x, ebx - y
mov edx, ecx
shr ecx, 16
and edx, 0xffff
mov esi, ecx
; ecx - size x, edx - size y
mov ebp, edx
dec ebp
shl ebp, 2
imul ebp, esi
mov esi, ecx
dec esi
shl esi, 2
add ebp, esi
add ebp, edi
add ebx, edx
;--------------------------------------
align 4
.start_y:
push ecx edx
;--------------------------------------
align 4
.start_x:
push eax ecx
add eax, ecx
mov ecx, [ebp]
rol ecx, 8
test cl, cl ; transparensy = 0
jz .no_put
xor cl, cl
ror ecx, 8
pushad
mov edx, [d_width_calc_area + ebx*4]
add edx, [_WinMapAddress]
movzx edx, byte [eax+edx]
cmp dl, byte 1
jne @f
call dword [PUTPIXEL]; eax - x, ebx - y
;--------------------------------------
align 4
@@:
popad
;--------------------------------------
align 4
.no_put:
pop ecx eax
sub ebp, 4
dec ecx
jnz .start_x
pop edx ecx
dec ebx
dec edx
jnz .start_y
popad
ret
;-----------------------------------------------------------------------------
align 4
syscall_drawline: ; DrawLine syscall_drawline: ; DrawLine
mov edi, [TASK_BASE] mov edi, [TASK_BASE]