Subversion Repositories Kolibri OS

Rev

Rev 109 | Rev 195 | Go to most recent revision | Only display areas with differences | Regard 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: