Rev 109 | Rev 195 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 109 | Rev 180 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; TRIANGLE SPEED TEST 3 |
2 | ; TRIANGLE SPEED TEST 3 |
3 | ; 32 triangle draw use! 12300 triangle in sec on 800Mhz processor |
3 | ; 32 triangle draw use! 12300 triangle in sec on 800Mhz processor |
4 | ; |
4 | ; |
5 | ; Pavlushin Evgeni 11.09.2004 |
5 | ; Pavlushin Evgeni 11.09.2004 |
6 | ; mail: waptap@mail.ru site: www.deck4.narod.ru |
6 | ; mail: waptap@mail.ru site: www.deck4.narod.ru |
7 | ; www.cyberdeck.fatal.ru |
7 | ; www.cyberdeck.fatal.ru |
8 | 8 | ||
9 | use32 |
9 | use32 |
10 | org 0x0 |
10 | org 0x0 |
11 | db 'MENUET01' ; 8 byte id |
11 | db 'MENUET01' ; 8 byte id |
12 | dd 0x01 ; header version |
12 | dd 0x01 ; header version |
13 | dd START ; start of code |
13 | dd START ; start of code |
14 | dd I_END ; size of image |
14 | dd I_END ; size of image |
15 | dd 0x2000000 ; memory for app |
15 | dd 0x100000 ; memory for app |
16 | dd 0x2000000 ; esp |
16 | dd 0x100000 ; esp |
17 | dd 0x0 , 0x0 ; I_Param , I_Icon |
17 | dd 0x0 , 0x0 ; I_Param , I_Icon |
18 | 18 | ||
19 | SCREEN_X equ 320 ;800 |
19 | SCREEN_X equ 320 ;800 |
20 | SCREEN_Y equ 200 ;600 |
20 | SCREEN_Y equ 200 ;600 |
21 | 21 | ||
22 | include 'lang.inc' |
22 | include 'lang.inc' |
23 | include 'ascl.inc' |
23 | include 'ascl.inc' |
24 | include 'ascgl.inc' |
24 | include 'ascgl.inc' |
25 | 25 | ||
26 | START: |
26 | START: |
- | 27 | red: |
|
27 | call draw_window |
28 | call draw_window |
28 | 29 | ||
29 | still: |
30 | still: |
30 | scevent red,key,button |
31 | scevent red,key,button |
31 | fps 280,8,cl_White,cl_Black |
32 | fps 290,8,cl_White,cl_Black |
32 | 33 | ||
33 | main_loop: |
34 | main_loop: |
34 | random SCREEN_X,eax |
35 | random SCREEN_X,eax |
35 | mov [@@tx1],eax |
36 | mov [@@tx1],eax |
36 | random SCREEN_Y,eax |
37 | random SCREEN_Y,eax |
37 | mov [@@ty1],eax |
38 | mov [@@ty1],eax |
38 | random SCREEN_X,eax |
39 | random SCREEN_X,eax |
39 | mov [@@tx2],eax |
40 | mov [@@tx2],eax |
40 | random SCREEN_Y,eax |
41 | random SCREEN_Y,eax |
41 | mov [@@ty2],eax |
42 | mov [@@ty2],eax |
42 | random SCREEN_X,eax |
43 | random SCREEN_X,eax |
43 | mov [@@tx3],eax |
44 | mov [@@tx3],eax |
44 | random SCREEN_Y,eax |
45 | random SCREEN_Y,eax |
45 | mov [@@ty3],eax |
46 | mov [@@ty3],eax |
46 | 47 | ||
47 | random 255,eax |
48 | random 255,eax |
48 | mov byte [@@rgb],al |
49 | mov byte [@@rgb],al |
49 | random 255,eax |
50 | random 255,eax |
50 | mov byte [@@rgb+1],al |
51 | mov byte [@@rgb+1],al |
51 | random 255,eax |
52 | random 255,eax |
52 | mov byte [@@rgb+2],al |
53 | mov byte [@@rgb+2],al |
53 | pushad |
54 | pushad |
54 | call filled_triangle |
55 | call filled_triangle |
55 | popad |
56 | popad |
56 | 57 | ||
57 | dec [count] ;for max speed |
58 | dec [count] ;for max speed |
58 | jnz xxx |
59 | jnz xxx |
59 | call outscr |
60 | call outscr |
60 | mov [count],100 |
61 | mov [count],100 |
61 | xxx: |
62 | xxx: |
62 | jmp still |
63 | jmp still |
63 | 64 | ||
64 | count dd 100 |
65 | count dd 100 |
65 | - | ||
66 | red: |
- | |
67 | call draw_window |
- | |
68 | jmp still |
66 | |
69 | key: |
67 | key: |
70 | mov eax,2 |
68 | mov eax,2 |
71 | int 0x40 |
69 | int 0x40 |
72 | jmp still |
70 | jmp still |
73 | button: |
71 | button: |
74 | mov eax,17 |
72 | mov eax,17 |
75 | int 0x40 |
73 | int 0x40 |
76 | cmp ah,1 |
74 | cmp ah,1 |
77 | jne still |
75 | jne still |
78 | exit: |
76 | exit: |
79 | mov eax,-1 |
77 | mov eax,-1 |
80 | int 0x40 |
78 | int 0x40 |
81 | 79 | ||
82 | ;Draw window |
80 | ;Draw window |
83 | draw_window: |
81 | draw_window: |
- | 82 | ||
84 | mov eax,12 ;Start |
83 | mov eax,12 ;Start |
85 | mov ebx,1 |
84 | mov ebx,1 |
86 | int 0x40 |
85 | int 0x40 |
87 | 86 | ||
88 | mov eax,0 ;Draw window |
87 | xor eax,eax ;Draw window |
89 | mov ebx,100*65536+(SCREEN_X+9) ;x start*65536+x size |
88 | mov ebx,100*65536+(SCREEN_X+19) ;x start*65536+x size |
90 | mov ecx,100*65536+(SCREEN_Y+26) ;y start*65536+y size |
89 | mov ecx,100*65536+(SCREEN_Y+51) ;y start*65536+y size |
91 | mov edx,0x03000000 ;0x03 use skinned window |
- | |
92 | int 0x40 |
- | |
93 | - | ||
94 | mov eax,4 ;Out Text |
- | |
95 | mov ebx,8*65536+8 ;x start*65536+y start |
- | |
96 | mov ecx,0x00ffffff ;color White |
90 | mov edx,0x33000000 ;0x33 use skinned window |
97 | mov edx,head_label |
- | |
98 | mov esi,hl_end-head_label |
91 | mov edi,header |
99 | int 0x40 |
92 | int 0x40 |
100 | 93 | ||
101 | mov eax,12 ;End |
94 | mov eax,12 ;End |
102 | mov ebx,2 |
95 | mov ebx,2 |
103 | int 0x40 |
96 | int 0x40 |
104 | ret |
97 | ret |
105 | 98 | ||
106 | head_label: db "3D TEST SAMPLE FOR MENUETOS" |
- | |
107 | hl_end: |
99 | header db '3D TEST SAMPLE',0 |
108 | 100 | ||
109 | outscr: |
101 | outscr: |
110 | 102 | ||
111 | ;outscrbuf |
103 | ;outscrbuf |
112 | mov ebx,scrbuf |
104 | mov ebx,scrbuf |
113 | mov ecx,SCREEN_X*65536+SCREEN_Y |
105 | mov ecx,SCREEN_X*65536+SCREEN_Y |
114 | mov edx,5*65536+22 |
106 | mov edx,5*65536+22 |
115 | mov ax,7 |
107 | mov ax,7 |
116 | int 0x40 |
108 | int 0x40 |
117 | 109 | ||
118 | ret |
110 | ret |
119 | 111 | ||
120 | ;filled trangle 32 bit draw procedure |
112 | ;filled trangle 32 bit draw procedure |
121 | ;from NAAG3d demo |
113 | ;from NAAG3d demo |
122 | 114 | ||
123 | @@tx1 dd 0 |
115 | @@tx1 dd 0 |
124 | @@ty1 dd 0 |
116 | @@ty1 dd 0 |
125 | @@tx2 dd 0 |
117 | @@tx2 dd 0 |
126 | @@ty2 dd 0 |
118 | @@ty2 dd 0 |
127 | @@tx3 dd 0 |
119 | @@tx3 dd 0 |
128 | @@ty3 dd 0 |
120 | @@ty3 dd 0 |
129 | @@rgb dd 0 |
121 | @@rgb dd 0 |
130 | 122 | ||
131 | @@dx12 dd 0 |
123 | @@dx12 dd 0 |
132 | @@dx13 dd 0 |
124 | @@dx13 dd 0 |
133 | @@dx23 dd 0 |
125 | @@dx23 dd 0 |
134 | 126 | ||
135 | filled_triangle: |
127 | filled_triangle: |
136 | mov eax,[@@ty1] |
128 | mov eax,[@@ty1] |
137 | cmp eax,[@@ty3] |
129 | cmp eax,[@@ty3] |
138 | jle @@ok13 |
130 | jle @@ok13 |
139 | 131 | ||
140 | xchg eax,[@@ty3] |
132 | xchg eax,[@@ty3] |
141 | mov [@@ty1],eax |
133 | mov [@@ty1],eax |
142 | 134 | ||
143 | mov eax,[@@tx1] |
135 | mov eax,[@@tx1] |
144 | xchg eax,[@@tx3] |
136 | xchg eax,[@@tx3] |
145 | mov [@@tx1],eax |
137 | mov [@@tx1],eax |
146 | @@ok13: |
138 | @@ok13: |
147 | mov eax,[@@ty2] |
139 | mov eax,[@@ty2] |
148 | cmp eax,[@@ty3] |
140 | cmp eax,[@@ty3] |
149 | jle @@ok23 |
141 | jle @@ok23 |
150 | 142 | ||
151 | xchg eax,[@@ty3] |
143 | xchg eax,[@@ty3] |
152 | mov [@@ty2],eax |
144 | mov [@@ty2],eax |
153 | 145 | ||
154 | mov eax,[@@tx2] |
146 | mov eax,[@@tx2] |
155 | xchg eax,[@@tx3] |
147 | xchg eax,[@@tx3] |
156 | mov [@@tx2],eax |
148 | mov [@@tx2],eax |
157 | @@ok23: |
149 | @@ok23: |
158 | mov eax,[@@ty1] |
150 | mov eax,[@@ty1] |
159 | cmp eax,[@@ty2] |
151 | cmp eax,[@@ty2] |
160 | jle @@ok12 |
152 | jle @@ok12 |
161 | 153 | ||
162 | xchg eax,[@@ty2] |
154 | xchg eax,[@@ty2] |
163 | mov [@@ty1],eax |
155 | mov [@@ty1],eax |
164 | 156 | ||
165 | mov eax,[@@tx1] |
157 | mov eax,[@@tx1] |
166 | xchg eax,[@@tx2] |
158 | xchg eax,[@@tx2] |
167 | mov [@@tx1],eax |
159 | mov [@@tx1],eax |
168 | @@ok12: |
160 | @@ok12: |
169 | 161 | ||
170 | mov ebx,[@@ty2] |
162 | mov ebx,[@@ty2] |
171 | sub ebx,[@@ty1] |
163 | sub ebx,[@@ty1] |
172 | jnz @@make_d12 |
164 | jnz @@make_d12 |
173 | 165 | ||
174 | mov [@@dx12],dword 0 |
166 | mov [@@dx12],dword 0 |
175 | jmp @@done_d12 |
167 | jmp @@done_d12 |
176 | @@make_d12: |
168 | @@make_d12: |
177 | mov eax,[@@tx2] |
169 | mov eax,[@@tx2] |
178 | sub eax,[@@tx1] |
170 | sub eax,[@@tx1] |
179 | shl eax,12 ;7 |
171 | shl eax,12 ;7 |
180 | cdq |
172 | cdq |
181 | idiv ebx |
173 | idiv ebx |
182 | mov [@@dx12],eax ; dx12 = (x2-x1)/(y2-y1) |
174 | mov [@@dx12],eax ; dx12 = (x2-x1)/(y2-y1) |
183 | @@done_d12: |
175 | @@done_d12: |
184 | 176 | ||
185 | mov ebx,[@@ty3] |
177 | mov ebx,[@@ty3] |
186 | sub ebx,[@@ty1] |
178 | sub ebx,[@@ty1] |
187 | jnz @@make_d13 |
179 | jnz @@make_d13 |
188 | 180 | ||
189 | mov [@@dx13],dword 0 |
181 | mov [@@dx13],dword 0 |
190 | jmp @@done_d13 |
182 | jmp @@done_d13 |
191 | @@make_d13: |
183 | @@make_d13: |
192 | mov eax,[@@tx3] |
184 | mov eax,[@@tx3] |
193 | sub eax,[@@tx1] |
185 | sub eax,[@@tx1] |
194 | shl eax,12 ;7 |
186 | shl eax,12 ;7 |
195 | cdq |
187 | cdq |
196 | idiv ebx |
188 | idiv ebx |
197 | mov [@@dx13],eax ; dx13 = (x3-x1)/(y3-y1) |
189 | mov [@@dx13],eax ; dx13 = (x3-x1)/(y3-y1) |
198 | @@done_d13: |
190 | @@done_d13: |
199 | 191 | ||
200 | mov ebx,[@@ty3] |
192 | mov ebx,[@@ty3] |
201 | sub ebx,[@@ty2] |
193 | sub ebx,[@@ty2] |
202 | jnz @@make_d23 |
194 | jnz @@make_d23 |
203 | 195 | ||
204 | mov [@@dx23],dword 0 |
196 | mov [@@dx23],dword 0 |
205 | jmp @@done_d23 |
197 | jmp @@done_d23 |
206 | @@make_d23: |
198 | @@make_d23: |
207 | mov eax,[@@tx3] |
199 | mov eax,[@@tx3] |
208 | sub eax,[@@tx2] |
200 | sub eax,[@@tx2] |
209 | shl eax,12 ;7 |
201 | shl eax,12 ;7 |
210 | cdq |
202 | cdq |
211 | idiv ebx |
203 | idiv ebx |
212 | mov [@@dx23],eax ; dx23 = (x3-x2)/(y3-y2) |
204 | mov [@@dx23],eax ; dx23 = (x3-x2)/(y3-y2) |
213 | @@done_d23: |
205 | @@done_d23: |
214 | 206 | ||
215 | mov eax,[@@tx1] |
207 | mov eax,[@@tx1] |
216 | shl eax,12 ;7 |
208 | shl eax,12 ;7 |
217 | mov ebx,eax |
209 | mov ebx,eax |
218 | 210 | ||
219 | mov ecx,[@@ty1] |
211 | mov ecx,[@@ty1] |
220 | cmp ecx,[@@ty2] |
212 | cmp ecx,[@@ty2] |
221 | jge @@end_loop12 |
213 | jge @@end_loop12 |
222 | 214 | ||
223 | @@loop12: |
215 | @@loop12: |
224 | 216 | ||
225 | call flat_line |
217 | call flat_line |
226 | 218 | ||
227 | add eax,[@@dx13] |
219 | add eax,[@@dx13] |
228 | add ebx,[@@dx12] |
220 | add ebx,[@@dx12] |
229 | inc ecx |
221 | inc ecx |
230 | cmp ecx,[@@ty2] |
222 | cmp ecx,[@@ty2] |
231 | jl @@loop12 |
223 | jl @@loop12 |
232 | @@end_loop12: |
224 | @@end_loop12: |
233 | 225 | ||
234 | mov ecx,[@@ty2] |
226 | mov ecx,[@@ty2] |
235 | cmp ecx,[@@ty3] |
227 | cmp ecx,[@@ty3] |
236 | jge @@end_loop23 |
228 | jge @@end_loop23 |
237 | 229 | ||
238 | mov ebx,[@@tx2] |
230 | mov ebx,[@@tx2] |
239 | shl ebx,12 ;7 |
231 | shl ebx,12 ;7 |
240 | @@loop23: |
232 | @@loop23: |
241 | 233 | ||
242 | call flat_line |
234 | call flat_line |
243 | 235 | ||
244 | add eax,[@@dx13] |
236 | add eax,[@@dx13] |
245 | add ebx,[@@dx23] |
237 | add ebx,[@@dx23] |
246 | inc ecx |
238 | inc ecx |
247 | cmp ecx,[@@ty3] |
239 | cmp ecx,[@@ty3] |
248 | jl @@loop23 |
240 | jl @@loop23 |
249 | @@end_loop23: |
241 | @@end_loop23: |
250 | 242 | ||
251 | ret |
243 | ret |
252 | 244 | ||
253 | ;flatline proc |
245 | ;flatline proc |
254 | 246 | ||
255 | flat_line: |
247 | flat_line: |
256 | push eax |
248 | push eax |
257 | push ebx |
249 | push ebx |
258 | push ecx |
250 | push ecx |
259 | 251 | ||
260 | or ecx,ecx |
252 | or ecx,ecx |
261 | jl @@quit |
253 | jl @@quit |
262 | cmp ecx,SCREEN_Y-1 ;199 |
254 | cmp ecx,SCREEN_Y-1 ;199 |
263 | jg @@quit |
255 | jg @@quit |
264 | 256 | ||
265 | sar eax,12 |
257 | sar eax,12 |
266 | sar ebx,12 |
258 | sar ebx,12 |
267 | 259 | ||
268 | or eax,eax |
260 | or eax,eax |
269 | jge @@ok1 |
261 | jge @@ok1 |
270 | xor eax,eax |
262 | xor eax,eax |
271 | jmp @@ok2 |
263 | jmp @@ok2 |
272 | @@ok1: |
264 | @@ok1: |
273 | cmp eax,SCREEN_X-1 ;319 |
265 | cmp eax,SCREEN_X-1 ;319 |
274 | jle @@ok2 |
266 | jle @@ok2 |
275 | mov eax,SCREEN_X-1 ;319 |
267 | mov eax,SCREEN_X-1 ;319 |
276 | @@ok2: |
268 | @@ok2: |
277 | or ebx,ebx |
269 | or ebx,ebx |
278 | jge @@ok3 |
270 | jge @@ok3 |
279 | xor ebx,ebx |
271 | xor ebx,ebx |
280 | jmp @@ok4 |
272 | jmp @@ok4 |
281 | @@ok3: |
273 | @@ok3: |
282 | cmp ebx,SCREEN_X-1 ;319 |
274 | cmp ebx,SCREEN_X-1 ;319 |
283 | jle @@ok4 |
275 | jle @@ok4 |
284 | mov ebx,SCREEN_X-1 ;319 |
276 | mov ebx,SCREEN_X-1 ;319 |
285 | @@ok4: |
277 | @@ok4: |
286 | cmp eax,ebx |
278 | cmp eax,ebx |
287 | jl @@ok |
279 | jl @@ok |
288 | je @@quit |
280 | je @@quit |
289 | 281 | ||
290 | xchg eax,ebx |
282 | xchg eax,ebx |
291 | @@ok: |
283 | @@ok: |
292 | mov edi,ecx |
284 | mov edi,ecx |
293 | 285 | ||
294 | ; shl edi,6 ;for 320 speed+ |
286 | ; shl edi,6 ;for 320 speed+ |
295 | ; shl ecx,8 |
287 | ; shl ecx,8 |
296 | ; add edi,ecx |
288 | ; add edi,ecx |
297 | 289 | ||
298 | push eax |
290 | push eax |
299 | mov eax,SCREEN_X |
291 | mov eax,SCREEN_X |
300 | mul edi |
292 | mul edi |
301 | mov edi,eax |
293 | mov edi,eax |
302 | pop eax |
294 | pop eax |
303 | 295 | ||
304 | add edi,eax |
296 | add edi,eax |
305 | 297 | ||
306 | mov ebp,edi |
298 | mov ebp,edi |
307 | shl ebp,1 |
299 | shl ebp,1 |
308 | add edi,ebp |
300 | add edi,ebp |
309 | 301 | ||
310 | add edi,scrbuf |
302 | add edi,scrbuf |
311 | 303 | ||
312 | mov ecx,ebx |
304 | mov ecx,ebx |
313 | sub ecx,eax |
305 | sub ecx,eax |
314 | 306 | ||
315 | lineout: |
307 | lineout: |
316 | mov eax,[@@rgb] |
308 | mov eax,[@@rgb] |
317 | mov byte [edi],al |
309 | mov byte [edi],al |
318 | shr eax,8 |
310 | shr eax,8 |
319 | mov byte [edi+1],al |
311 | mov byte [edi+1],al |
320 | shr eax,8 |
312 | shr eax,8 |
321 | mov byte [edi+2],al |
313 | mov byte [edi+2],al |
322 | add edi,3 |
314 | add edi,3 |
323 | dec ecx |
315 | dec ecx |
324 | jnz lineout |
316 | jnz lineout |
325 | 317 | ||
326 | @@quit: |
318 | @@quit: |
327 | pop ecx |
319 | pop ecx |
328 | pop ebx |
320 | pop ebx |
329 | pop eax |
321 | pop eax |
330 | ret |
322 | ret |
331 | 323 | ||
332 | scrbuf: |
324 | scrbuf: |
333 | I_END: |
325 | I_END: |