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 |