Subversion Repositories Kolibri OS

Rev

Rev 2465 | Rev 2987 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2465 Rev 2467
Line 12... Line 12...
12
        ymax            dd ?
12
        ymax            dd ?
13
ends
13
ends
Line 14... Line 14...
14
 
14
 
15
 
15
 
16
struct  BLITTER
16
struct  BLITTER
17
        dc              BLITTER_BLOCK
17
        dc              RECT
18
        sc              BLITTER_BLOCK
18
        sc              RECT
19
        dst_x           dd ?            ;  32
19
        dst_x           dd ?            ;  32
20
        dst_y           dd ?            ;  36
20
        dst_y           dd ?            ;  36
21
        src_x           dd ?            ;  40
21
        src_x           dd ?            ;  40
Line 26... Line 26...
26
        bitmap          dd ?            ;  56
26
        bitmap          dd ?            ;  56
27
        stride          dd ?            ;  60
27
        stride          dd ?            ;  60
28
ends
28
ends
Line 29... Line -...
29
 
-
 
30
 
-
 
31
align 4
-
 
32
 
-
 
33
__L1OutCode:
-
 
34
        push    ebx
-
 
35
        mov     ebx, 8
-
 
36
        cmp     edx, [eax]
-
 
37
        jl      .L2
-
 
38
        xor     ebx, ebx
-
 
39
        cmp     edx, [eax+8]
-
 
40
        setg    bl
-
 
41
        sal     ebx, 2
-
 
42
.L2:
-
 
43
        cmp     ecx, [eax+4]
-
 
44
        jge     .L3
-
 
45
        or      ebx, 1
-
 
46
        jmp     .L4
-
 
47
 
-
 
48
.L3:
-
 
49
        cmp     ecx, [eax+12]
-
 
50
        jle     .L4
-
 
51
        or      ebx, 2
-
 
52
.L4:
-
 
53
        mov     eax, ebx
-
 
Line 54... Line 29...
54
        pop     ebx
29
 
55
        ret
30
 
56
 
31
 
-
 
32
align 4
57
align 4
33
block_clip:
58
block_clip:
34
;esi= clip RECT ptr
-
 
35
;edi= RECT ptr
59
        push    ebp
36
;return code:
60
        push    edi
-
 
Line 61... Line 37...
61
        push    esi
37
;eax= 0 - draw, 1 - don't draw
62
        push    ebx
-
 
63
        sub     esp, 4
38
 
64
 
39
        push    ebx
65
        mov     ebx, eax
40
 
66
        mov     [esp], edx
-
 
67
        mov     ebp, ecx
41
        mov     eax, [edi+RECT.left]
68
        mov     ecx, [ecx]
-
 
69
        mov     edx, [edx]
42
        mov     ebx, [edi+RECT.right]
70
        call    __L1OutCode
43
        mov     ecx, [esi+RECT.left]    ;clip.left
71
 
44
        mov     edx, [esi+RECT.right]   ;clip.right
72
        mov     esi, eax
45
 
73
        mov     edx, [esp+28]
46
        cmp     eax, edx                ;left >= clip.right
74
        mov     ecx, [edx]
-
 
75
.L21:
-
 
76
        mov     eax, [esp+24]
47
        jge     .fail
77
        mov     edx, [eax]
-
 
78
        mov     eax, ebx
-
 
79
        call    __L1OutCode
-
 
80
 
48
 
81
        mov     edi, eax
49
        cmp     ebx, ecx                ;right < clip.left
82
.L20:
-
 
83
        mov     eax, edi
-
 
84
        and     eax, esi
-
 
85
        jne     .L9
-
 
86
        cmp     esi, edi
-
 
87
        je      .L9
-
 
88
        test    esi, esi
-
 
89
        jne     .L10
-
 
90
        test    edi, 1
50
        jl      .fail
91
        je      .L11
-
 
92
        mov     eax, [ebx+4]
-
 
93
        jmp     .L25
51
 
94
.L11:
52
        cmp     eax, ecx                ;left >= clip.left
95
        test    edi, 2
53
        jae     @F
96
        je      .L13
-
 
97
        mov     eax, [ebx+12]
54
 
98
.L25:
55
        mov     eax, ecx
99
        mov     edx, [esp+28]
56
@@:
100
        jmp     .L22
57
        mov     [edi+RECT.left], eax
101
.L13:
-
 
102
        test    edi, 4
58
 
103
        je      .L14
-
 
104
        mov     eax, [ebx+8]
-
 
105
        jmp     .L26
59
        cmp     ebx, edx                ;right <= clip.right
106
.L14:
60
        jle     @f
107
        and     edi, 8
61
        mov     ebx, edx
108
        je      .L12
-
 
109
        mov     eax, [ebx]
62
@@:
110
.L26:
-
 
111
        mov     edx, [esp+24]
63
        mov     [edi+RECT.right], ebx
112
.L22:
64
 
113
        mov     [edx], eax
-
 
114
.L12:
65
        mov     eax, [edi+RECT.top]
115
        mov     eax, [esp+28]
-
 
116
        mov     ecx, [eax]
-
 
117
        jmp     .L21
66
        mov     ebx, [edi+RECT.bottom]
118
.L10:
67
        mov     ecx, [esi+RECT.top]     ;clip.top
119
        test    esi, 1
68
        mov     edx, [esi+RECT.bottom]  ;clip.bottom
120
        je      .L16
-
 
121
        mov     eax, [ebx+4]
-
 
122
        jmp     .L23
69
 
123
.L16:
-
 
124
        test    esi, 2
-
 
125
        je      .L18
70
        cmp     eax, edx                ;top >= clip.bottom
126
        mov     eax, [ebx+12]
71
        jge     .fail
127
.L23:
-
 
128
        mov     [ebp+0], eax
-
 
129
        jmp     .L17
72
 
130
.L18:
73
        cmp     ebx, ecx                ;bottom < clip.top
131
        test    esi, 4
74
        jl      .fail
132
        je      .L19
-
 
133
        mov     eax, [ebx+8]
-
 
134
        jmp     .L24
75
 
135
.L19:
76
        cmp     eax, ecx                ;top >= clip.top
136
        and     esi, 8
-
 
137
        je      .L17
77
        jae     @F
138
        mov     eax, [ebx]
78
 
139
.L24:
79
        mov     eax, ecx
140
        mov     edx, [esp]
-
 
141
        mov     [edx], eax
-
 
142
.L17:
80
@@:
143
        mov     ecx, [ebp+0]
-
 
144
        mov     eax, [esp]
81
        mov     [edi+RECT.top], eax
145
        mov     edx, [eax]
-
 
146
        mov     eax, ebx
82
 
147
        call    __L1OutCode
83
        cmp     ebx, edx                ;bottom <= clip.bottom
148
        mov     esi, eax
84
        jle     @f
149
        jmp     .L20
85
        mov     ebx, edx
-
 
86
@@:
-
 
87
        mov     [edi+RECT.bottom], ebx
150
.L9:
88
        pop     ebx
151
        add     esp, 4
89
        xor     eax, eax
152
        pop     ebx
90
        ret
Line -... Line 91...
-
 
91
.fail:
153
        pop     esi
92
        pop     ebx
154
        pop     edi
93
        mov     eax, 1
Line 155... Line 94...
155
        pop     ebp
94
        ret
156
        ret
95
 
157
 
96
 
158
align 4
97
align 4
159
blit_clip:
98
blit_clip:
160
 
99
 
161
.sx0   equ 36
100
.sx0   equ 8
162
.sy0   equ 32
101
.sy0   equ 12
163
.sx1   equ 28
102
.sx1   equ 16
Line 164... Line 103...
164
.sy1   equ 24
103
.sy1   equ 20
165
 
104
 
166
.dx0   equ 20
105
.dx0   equ 24
Line 178... Line 117...
178
        mov     edx, [ecx+BLITTER.src_x]
117
        mov     edx, [ecx+BLITTER.src_x]
179
        mov     [esp+.sx0], edx
118
        mov     [esp+.sx0], edx
180
        mov     eax, [ecx+BLITTER.src_y]
119
        mov     eax, [ecx+BLITTER.src_y]
181
        mov     [esp+.sy0], eax
120
        mov     [esp+.sy0], eax
182
        add     edx, [ecx+BLITTER.w]
121
        add     edx, [ecx+BLITTER.w]
183
        dec     edx
-
 
184
        mov     [esp+.sx1], edx
-
 
185
        add     eax, [ecx+BLITTER.h]
122
        add     eax, [ecx+BLITTER.h]
186
        dec     eax
123
        mov     [esp+.sx1], edx
187
        mov     [esp+.sy1], eax
124
        mov     [esp+.sy1], eax
Line 188... Line -...
188
 
-
 
189
        lea     ecx, [esp+.sy0]
125
 
190
        lea     edx, [esp+.sx0]
126
        lea     edi, [esp+.sx0]
191
        lea     eax, [ebx+BLITTER.sc]
-
 
192
        lea     esi, [esp+.sy1]
-
 
193
 
-
 
194
        mov     [esp+4], esi
-
 
195
        lea     esi, [esp+.sx1]
-
 
196
        mov     [esp], esi
-
 
Line 197... Line 127...
197
        call    block_clip
127
        lea     esi, [ebx+BLITTER.sc]
198
 
128
 
-
 
129
        call    block_clip
199
        mov     esi, 1
130
        test    eax, eax
Line 200... Line 131...
200
        test    eax, eax
131
        mov     esi, 1
201
        jne     .L28
132
        jnz     .done
202
 
133
 
203
        mov     edi, [esp+.sx0]
134
        mov     edi, [esp+.sx0]
Line 209... Line 140...
209
        mov     ecx, [esp+.sy0]
140
        mov     ecx, [esp+.sy0]
210
        mov     eax, [ebx+BLITTER.dst_y]
141
        mov     eax, [ebx+BLITTER.dst_y]
211
        add     eax, ecx
142
        add     eax, ecx
212
        sub     eax, [ebx+BLITTER.src_y]
143
        sub     eax, [ebx+BLITTER.src_y]
213
        mov     [esp+.dy0], eax
144
        mov     [esp+.dy0], eax
-
 
145
 
214
        sub     edx, edi
146
        sub     edx, edi
215
        add     edx, [esp+.sx1]
147
        add     edx, [esp+.sx1]
216
        mov     [esp+.dx1], edx
148
        mov     [esp+.dx1], edx
Line 217... Line 149...
217
 
149
 
218
        sub     eax, ecx
150
        sub     eax, ecx
219
        add     eax, [esp+.sy1]
151
        add     eax, [esp+.sy1]
Line 220... Line -...
220
        mov     [esp+.dy1], eax
-
 
221
 
152
        mov     [esp+.dy1], eax
222
        lea     ecx, [esp+.dy0]
-
 
223
        lea     edx, [esp+.dx0]
-
 
224
        lea     eax, [esp+.dy1]
153
 
225
        mov     [esp+4], eax
-
 
226
        lea     eax, [esp+.dx1]
-
 
227
        mov     [esp], eax
154
        lea     edi, [esp+.dx0]
228
        mov     eax, ebx
155
        lea     esi, [ebx+BLITTER.dc]
-
 
156
        call    block_clip
229
        call    block_clip
157
        test    eax, eax
Line 230... Line 158...
230
        test    eax, eax
158
        mov     esi, 1
231
        jne     .L28
159
        jnz     .done
232
 
-
 
233
        mov     edx, [esp+.dx0]
160
 
234
        mov     eax, [esp+.dx1]
161
        mov     edx, [esp+.dx0]
Line 235... Line 162...
235
        inc     eax
162
        mov     eax, [esp+.dx1]
236
        sub     eax, edx
163
        sub     eax, edx
237
        mov     [ebx+BLITTER.w], eax
-
 
238
 
164
        mov     [ebx+BLITTER.w], eax
239
        mov     eax, [esp+.dy0]
165
 
Line 240... Line 166...
240
        mov     ecx, [esp+.dy1]
166
        mov     eax, [esp+.dy0]
241
        inc     ecx
167
        mov     ecx, [esp+.dy1]
Line 252... Line 178...
252
        sub     ecx, [ebx+BLITTER.dst_y]
178
        sub     ecx, [ebx+BLITTER.dst_y]
253
        mov     [ebx+BLITTER.src_y], ecx
179
        mov     [ebx+BLITTER.src_y], ecx
254
        mov     [ebx+BLITTER.dst_x], edx
180
        mov     [ebx+BLITTER.dst_x], edx
255
        mov     [ebx+BLITTER.dst_y], eax
181
        mov     [ebx+BLITTER.dst_y], eax
256
        xor     esi, esi
182
        xor     esi, esi
257
.L28:
183
.done:
258
        mov     eax, esi
184
        mov     eax, esi
259
        add     esp, 40
185
        add     esp, 40
260
        pop     ebx
186
        pop     ebx
261
        pop     esi
187
        pop     esi
262
        pop     edi
188
        pop     edi
Line 272... Line 198...
272
purge .dx1
198
purge .dx1
273
purge .dy1
199
purge .dy1
Line 274... Line 200...
274
 
200
 
Line 275... Line -...
275
        ret
-
 
276
 
-
 
277
 
201
        ret
278
 
-
 
279
align 4
202
 
280
 
203
align 4
281
blit_32:
204
blit_32:
282
        push    ebp
205
        push    ebp
283
        push    edi
206
        push    edi
284
        push    esi
207
        push    esi
Line 285... Line 208...
285
        push    ebx
208
        push    ebx
286
        sub     esp, 72
209
        sub     esp, 72
287
 
210
 
-
 
211
        mov     eax, [TASK_BASE]
-
 
212
        mov     ebx, [eax-twdw + WDATA.box.width]
Line 288... Line 213...
288
        mov     eax, [TASK_BASE]
213
        mov     edx, [eax-twdw + WDATA.box.height]
Line 289... Line 214...
289
        mov     ebx, [eax-twdw + WDATA.box.width]
214
        inc     ebx
290
        mov     edx, [eax-twdw + WDATA.box.height]
215
        inc     edx
291
 
216
 
292
        xor     eax, eax
217
        xor     eax, eax
Line 293... Line 218...
293
 
218
 
294
        mov     [esp+BLITTER.dc.xmin], eax
219
        mov     [esp+BLITTER.dc.left], eax
295
        mov     [esp+BLITTER.dc.ymin], eax
220
        mov     [esp+BLITTER.dc.top], eax
296
        mov     [esp+BLITTER.dc.xmax], ebx
-
 
-
 
221
        mov     [esp+BLITTER.dc.right], ebx
297
        mov     [esp+BLITTER.dc.ymax], edx
222
        mov     [esp+BLITTER.dc.bottom], edx
298
 
223
 
299
        mov     [esp+BLITTER.sc.xmin], eax
-
 
-
 
224
        mov     [esp+BLITTER.sc.left], eax
300
        mov     [esp+BLITTER.sc.ymin], eax
225
        mov     [esp+BLITTER.sc.top], eax
Line 301... Line 226...
301
        mov     eax, [ecx+24]
226
        mov     eax, [ecx+24]
302
        dec     eax
227
 
303
        mov     [esp+BLITTER.sc.xmax], eax
228
        mov     [esp+BLITTER.sc.right], eax
304
        mov     eax, [ecx+28]
229
        mov     eax, [ecx+28]
Line 426... Line 351...
426
        dec     [esp+BLITTER.h]
351
        dec     [esp+BLITTER.h]
427
        jnz     .outer32
352
        jnz     .outer32
Line 428... Line 353...
428
 
353
 
429
.done:
354
.done:
430
;        call    [draw_pointer]
355
;        call    [draw_pointer]
431
        call    __sys_draw_pointer
356
;        call    __sys_draw_pointer
432
.L57:
357
.L57:
433
        add     esp, 72
358
        add     esp, 72
434
        pop     ebx
359
        pop     ebx
435
        pop     esi
360
        pop     esi