1,36 → 1,27 |
|
struct BLITTER_BLOCK |
xmin dd ? |
ymin dd ? |
xmax dd ? |
ymax dd ? |
ends |
|
|
struc BLITTER |
{ |
.dc.xmin rd 1 ; 0 |
.dc.ymin rd 1 ; 4 |
.dc.xmax rd 1 ; 8 |
.dc.ymax rd 1 ; 12 |
struct BLITTER |
dc BLITTER_BLOCK |
sc BLITTER_BLOCK |
dst_x dd ? ; 32 |
dst_y dd ? ; 36 |
src_x dd ? ; 40 |
src_y dd ? ; 44 |
w dd ? ; 48 |
h dd ? ; 52 |
|
.sc: |
.sc.xmin rd 1 ; 16 |
.sc.ymin rd 1 ; 20 |
.sc.xmax rd 1 ; 24 |
.sc.ymax rd 1 ; 28 |
bitmap dd ? ; 56 |
stride dd ? ; 60 |
ends |
|
.dst_x rd 1 ; 32 |
.dst_y rd 1 ; 36 |
.src_x rd 1 ; 40 |
.src_y rd 1 ; 44 |
.w rd 1 ; 48 |
.h rd 1 ; 52 |
|
.bitmap rd 1 ; 56 |
.stride rd 1 ; 60 |
|
} |
|
virtual at 0 |
BLITTER BLITTER |
end virtual |
|
|
align 4 |
|
__L1OutCode: |
333,9 → 324,6 |
test eax, eax |
jne .L57 |
|
inc [mouse_pause] |
call [_display.disable_mouse] |
|
mov eax, [TASK_BASE] |
|
mov ebx, [esp+BLITTER.dst_x] |
342,6 → 330,13 |
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] |
355,6 → 350,7 |
lea esi, [eax+esi*4] |
add esi, [esp+BLITTER.bitmap] |
|
mov eax, ecx |
mov ecx, [esp+BLITTER.h] |
mov edx, [esp+BLITTER.w] |
|
370,7 → 366,6 |
lea edi, [edi+ebx*4] |
|
mov ebx, [CURRENT_TASK] |
|
align 4 |
.outer32: |
xor ecx, ecx |
379,9 → 374,26 |
.inner32: |
cmp [ebp+ecx], bl |
jne @F |
;-------------------------------------- |
push eax |
mov eax, [esi+ecx*4] |
|
mov eax, [esi+ecx*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 |
; store to real LFB |
mov [LFB_BASE+edi+ecx*4], eax |
pop eax |
;-------------------------------------- |
align 4 |
@@: |
inc ecx |
dec edx |
396,7 → 408,6 |
jnz .outer32 |
|
.done: |
dec [mouse_pause] |
call [draw_pointer] |
.L57: |
add esp, 72 |
420,13 → 431,31 |
.inner24: |
cmp [ebp+ecx], bl |
jne @F |
|
;-------------------------------------- |
push eax |
mov eax, [esi+ecx*4] |
|
lea edi, [edi+ecx*2] |
|
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 |
|
mov [edi+ecx], ax |
shr eax, 16 |
mov [edi+ecx+2], al |
|
pop eax |
;-------------------------------------- |
align 4 |
@@: |
mov edi, [esp+64] |
inc ecx |