Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2474 | mario79 | 1 | ;------------------------------------------------------------------------------ |
2 | ; Display Test for KolibriOS |
||
3 | ;------------------------------------------------------------------------------ |
||
4 | ; version: 0.41 |
||
5 | ; last update: 17/03/2012 |
||
6 | ; written by: Marat Zakiyanov aka Mario79, aka Mario |
||
7 | ; changes: some optimisations and code refactoring |
||
8 | ;------------------------------------------------------------------------------ |
||
9 | ; compiler: FASM 1.50 |
||
10 | ; name: Display Test |
||
11 | ; version: 0.4 |
||
12 | ; original author: barsuk |
||
894 | barsuk | 13 | |
14 | ; <--- include all MeOS stuff ---> |
||
15 | include "lang.inc" |
||
1741 | dunkaist | 16 | include "../../../macros.inc" |
894 | barsuk | 17 | |
18 | ; <--- start of MenuetOS application ---> |
||
19 | MEOS_APP_START |
||
20 | |||
1728 | clevermous | 21 | ;include "..\..\..\debug.inc" |
894 | barsuk | 22 | |
23 | |||
24 | ; <--- start of code ---> |
||
25 | CODE |
||
2474 | mario79 | 26 | mcall 37,4,cursor,2 |
894 | barsuk | 27 | or eax, eax |
28 | jz exit |
||
29 | mov [cursorID], eax |
||
2474 | mario79 | 30 | ;------------------------------------------------------------------------------ |
31 | redraw: |
||
894 | barsuk | 32 | call draw_window ; at first create and draw the window |
2474 | mario79 | 33 | ;------------------------------------------------------------------------------ |
34 | wait_event: ; main cycle |
||
894 | barsuk | 35 | xor ebx, ebx |
2474 | mario79 | 36 | mcall 10 |
894 | barsuk | 37 | |
38 | cmp eax, 1 ; if event == 1 |
||
39 | je redraw ; jump to redraw handler |
||
40 | cmp eax, 2 ; else if event == 2 |
||
41 | je key ; jump to key handler |
||
42 | cmp eax, 3 ; else if event == 3 |
||
43 | je button ; jump to button handler |
||
44 | |||
45 | jmp wait_event ; else return to the start of main cycle |
||
2474 | mario79 | 46 | ;------------------------------------------------------------------------------ |
47 | key: ; key event handler |
||
48 | mcall 2 ; get key code |
||
894 | barsuk | 49 | |
50 | cmp ah, 27 |
||
51 | jz exit |
||
52 | |||
53 | cmp ah, 0x20 |
||
54 | jz next_test |
||
55 | |||
56 | cmp ah, 179 ; -> |
||
57 | jz next_test |
||
58 | |||
59 | cmp ah, 176 ; <- |
||
60 | jz prev_test |
||
61 | |||
62 | cmp ah, 'i' |
||
63 | jz toggle_info |
||
64 | |||
65 | cmp ah, 'I' ; а вдруг у чела КАПСЛОК )) |
||
66 | jz toggle_info |
||
67 | |||
68 | cmp ah, 'c' |
||
69 | jz toggle_cursor |
||
70 | |||
71 | cmp ah, 'C' |
||
72 | jz toggle_cursor |
||
73 | |||
74 | cmp ah, 'd' |
||
75 | jz redraw |
||
76 | |||
77 | cmp ah, 'D' |
||
78 | jz redraw |
||
79 | |||
80 | jmp wait_event |
||
2474 | mario79 | 81 | ;------------------------------------------------------------------------------ |
894 | barsuk | 82 | next_test: |
83 | cmp dword [test_done], 1 |
||
84 | jz wait_event |
||
85 | |||
86 | inc dword [test_num] |
||
87 | call draw_window |
||
88 | jmp wait_event |
||
2474 | mario79 | 89 | ;------------------------------------------------------------------------------ |
894 | barsuk | 90 | prev_test: |
91 | cmp dword [test_num], ebx |
||
92 | jz wait_event |
||
93 | |||
94 | dec dword [test_num] |
||
95 | mov dword [test_done], ebx |
||
96 | call draw_window |
||
97 | jmp wait_event |
||
2474 | mario79 | 98 | ;------------------------------------------------------------------------------ |
894 | barsuk | 99 | toggle_info: |
100 | xor dword [show_info], 1 |
||
101 | call draw_window |
||
102 | jmp wait_event |
||
2474 | mario79 | 103 | ;------------------------------------------------------------------------------ |
894 | barsuk | 104 | toggle_cursor: |
105 | mov eax, cursorVisible |
||
106 | cmp dword [eax], 0 |
||
107 | jz .no_cursor |
||
108 | |||
109 | mov dword [eax], 0 |
||
110 | mov ecx, [cursorID] |
||
111 | jmp .set |
||
2474 | mario79 | 112 | ;-------------------------------------- |
894 | barsuk | 113 | .no_cursor: |
114 | mov dword [eax], 1 |
||
115 | xor ecx, ecx |
||
2474 | mario79 | 116 | ;-------------------------------------- |
894 | barsuk | 117 | .set: |
2474 | mario79 | 118 | mcall 37,5 |
119 | mcall 18,15 ; чтобы обновился |
||
894 | barsuk | 120 | jmp wait_event |
2474 | mario79 | 121 | ;------------------------------------------------------------------------------ |
894 | barsuk | 122 | button: ; button event handler |
2474 | mario79 | 123 | mcall 17 ; get button identifier |
894 | barsuk | 124 | cmp ah, 1 |
125 | jne wait_event ; return if button id != 1 |
||
2474 | mario79 | 126 | ;-------------------------------------- |
894 | barsuk | 127 | exit: |
128 | or eax, -1 ; exit application |
||
2474 | mario79 | 129 | mcall |
130 | ;------------------------------------------------------------------------------ |
||
894 | barsuk | 131 | draw_window: |
2474 | mario79 | 132 | mcall 12,1 |
894 | barsuk | 133 | |
134 | ; курсор |
||
135 | ;mov eax, 37 |
||
136 | ;mov ebx, 5 |
||
137 | ;mov ecx, cursorID |
||
138 | ;int 0x40 |
||
139 | |||
2474 | mario79 | 140 | mcall 14 ; screen size |
141 | |||
894 | barsuk | 142 | mov ebx, eax |
143 | shr ebx, 16 |
||
144 | mov ecx, eax |
||
145 | and ecx, 0xffff |
||
146 | mov [screenx], ebx |
||
147 | mov [screeny], ecx |
||
148 | |||
149 | inc ebx |
||
150 | inc ecx |
||
2474 | mario79 | 151 | xor eax, eax ; create and draw the window |
894 | barsuk | 152 | mov edx, 0x01000000 |
153 | mov esi, edx |
||
2474 | mario79 | 154 | mcall |
894 | barsuk | 155 | ; стереть границы окна |
2474 | mario79 | 156 | xor edx, edx |
157 | mcall 13 ; грубо так |
||
894 | barsuk | 158 | |
159 | dec ebx |
||
160 | dec ecx |
||
161 | |||
162 | mov eax, [test_num] |
||
163 | mov eax, [test_proc + eax*4] |
||
164 | or eax, eax |
||
165 | jz end_of_test |
||
166 | call eax |
||
167 | jmp exit_draw |
||
2474 | mario79 | 168 | ;-------------------------------------- |
894 | barsuk | 169 | end_of_test: |
2474 | mario79 | 170 | mcall 4,<8,8>,0xffffff,test_finish,test_finish.size |
894 | barsuk | 171 | mov dword [test_done], 1 |
172 | jmp no_info |
||
2474 | mario79 | 173 | ;-------------------------------------- |
894 | barsuk | 174 | exit_draw: |
175 | cmp dword [show_info], 1 |
||
176 | jnz no_info |
||
177 | ; снова размеры экрана |
||
178 | mov ebx, [screenx] |
||
179 | mov ecx, [screeny] |
||
180 | ; сгенерить строчку с разрешением экрана. НЕ нужно, потому что ппц |
||
181 | ; прямоугольник 200х40 с инфой |
||
182 | mov edx, 200 |
||
183 | sub ebx, edx |
||
184 | shl ebx, 15 |
||
185 | mov bx, dx |
||
186 | mov edx, 40 |
||
187 | sub ecx, edx |
||
188 | shl ecx, 15 |
||
189 | mov cx, dx |
||
2474 | mario79 | 190 | mcall 13,,,0xffffff |
191 | |||
894 | barsuk | 192 | xor edx, edx |
193 | add ebx, 0x0000fffe ; очень удобно :)))) |
||
194 | add ecx, 0x0000fffe |
||
2474 | mario79 | 195 | mcall |
894 | barsuk | 196 | ; текст |
197 | shr ecx, 16 |
||
198 | mov bx, cx |
||
199 | add ebx, 0x00010001 |
||
200 | mov ecx, 0x80ffffff |
||
201 | mov edx, [test_num] |
||
202 | mov edx, [test_info + edx*4] |
||
2474 | mario79 | 203 | mcall 4 |
204 | |||
7534 | leency | 205 | add ebx, 12 |
2474 | mario79 | 206 | mcall ,,,press_space |
207 | |||
894 | barsuk | 208 | add ebx, 8 |
2474 | mario79 | 209 | mcall ,,,press_i |
210 | |||
894 | barsuk | 211 | add ebx, 8 |
2474 | mario79 | 212 | mcall ,,,press_c |
213 | ;-------------------------------------- |
||
894 | barsuk | 214 | no_info: |
2474 | mario79 | 215 | mcall 12,2 |
216 | ret |
||
217 | ;------------------------------------------------------------------------------ |
||
894 | barsuk | 218 | ; <---- procedures for various tests of display -----> |
219 | ; in: ebx = screen_width, ecx = screen_height |
||
2474 | mario79 | 220 | ;------------------------------------------------------------------------------ |
7534 | leency | 221 | lsz i_image_size,\ |
222 | ru, "Размер изображения и размещение",\ |
||
223 | en, "Image Size and Placement" |
||
894 | barsuk | 224 | db 0 |
2474 | mario79 | 225 | ;------------------------------------------------------------------------------ |
894 | barsuk | 226 | t_image_size: |
227 | mov esi, ebx |
||
228 | mov edi, ecx |
||
229 | ; 6 отрезков |
||
230 | xor ecx, ecx |
||
2474 | mario79 | 231 | mcall 38,,,0xffffff |
232 | |||
894 | barsuk | 233 | mov ecx, edi |
234 | shl ecx, 16 |
||
235 | xor ebx, ebx |
||
2474 | mario79 | 236 | mcall |
237 | |||
894 | barsuk | 238 | mov ebx, esi |
239 | shl ebx, 16 |
||
240 | add ecx, edi |
||
2474 | mario79 | 241 | mcall |
242 | |||
894 | barsuk | 243 | sub ecx, edi |
244 | add ebx, esi |
||
2474 | mario79 | 245 | mcall |
894 | barsuk | 246 | ; рамка готова |
247 | mov ebx, esi |
||
248 | shl ebx, 16 |
||
249 | mov ecx, edi |
||
250 | shl ecx, 15 |
||
251 | mov cx, di |
||
252 | shr cx, 1 |
||
2474 | mario79 | 253 | mcall |
254 | |||
894 | barsuk | 255 | shr ebx, 1 |
256 | mov bx, si |
||
257 | shr bx, 1 |
||
258 | mov ecx, edi |
||
259 | shl ecx, 16 |
||
2474 | mario79 | 260 | mcall |
894 | barsuk | 261 | ret |
2474 | mario79 | 262 | ;------------------------------------------------------------------------------ |
7534 | leency | 263 | lsz i_grid,\ |
264 | ru, "Сетка",\ |
||
265 | en, "Grid" |
||
894 | barsuk | 266 | db 0 |
2474 | mario79 | 267 | ;------------------------------------------------------------------------------ |
894 | barsuk | 268 | t_grid: |
269 | ; сетка размером в 64 пиксела |
||
270 | mov eax, 38 |
||
271 | inc ebx |
||
272 | inc ecx |
||
273 | mov esi, ebx |
||
274 | mov edi, ecx |
||
275 | mov edx, 0xffffff |
||
276 | mov ebp, 0x00400040 |
||
277 | ; горизонтальные линии |
||
278 | shl ebx, 16 |
||
279 | xor ecx, ecx |
||
2474 | mario79 | 280 | ;-------------------------------------- |
894 | barsuk | 281 | grid_next_y: |
2474 | mario79 | 282 | mcall |
283 | |||
894 | barsuk | 284 | add ecx, ebp |
285 | cmp cx, di |
||
286 | jnae grid_next_y |
||
287 | sub ecx, 0x00010001 |
||
2474 | mario79 | 288 | mcall |
894 | barsuk | 289 | ; вертикальные линии |
290 | mov ecx, edi |
||
291 | shl ecx, 16 |
||
292 | xor ebx, ebx |
||
2474 | mario79 | 293 | ;-------------------------------------- |
894 | barsuk | 294 | grid_next_x: |
2474 | mario79 | 295 | mcall |
894 | barsuk | 296 | add ebx, ebp |
297 | cmp bx, si |
||
298 | jnae grid_next_x |
||
299 | sub ebx, 0x00010001 |
||
2474 | mario79 | 300 | mcall |
894 | barsuk | 301 | ret |
2474 | mario79 | 302 | ;------------------------------------------------------------------------------ |
7534 | leency | 303 | lsz i_horstr,\ |
304 | ru, "Горизонтальные прямые линии",\ |
||
305 | en, "Horizontal Straightness" |
||
894 | barsuk | 306 | db 0 |
2474 | mario79 | 307 | ;------------------------------------------------------------------------------ |
894 | barsuk | 308 | t_horstr: |
309 | mov eax, 38 |
||
310 | mov edi, ecx |
||
311 | mov edx, 0xffffff |
||
312 | mov esi, ecx |
||
313 | inc esi |
||
314 | shr esi, 3 |
||
315 | mov ebp, esi |
||
316 | shl ebp, 16 |
||
317 | mov bp, si |
||
318 | ; горизонтальные линии |
||
319 | shl ebx, 16 |
||
320 | mov ecx, ebp |
||
321 | shr ecx, 1 |
||
322 | mov cx, bp |
||
323 | shr cx, 1 |
||
2474 | mario79 | 324 | ;-------------------------------------- |
894 | barsuk | 325 | hor_next_y: |
2474 | mario79 | 326 | mcall |
894 | barsuk | 327 | add ecx, ebp |
328 | cmp cx, di |
||
329 | jnae hor_next_y |
||
330 | ret |
||
2474 | mario79 | 331 | ;------------------------------------------------------------------------------ |
7534 | leency | 332 | lsz i_vertstr,\ |
333 | ru, "Вертикальные прямые линии",\ |
||
334 | en, "Vertical Straightness" |
||
894 | barsuk | 335 | db 0 |
2474 | mario79 | 336 | ;------------------------------------------------------------------------------ |
894 | barsuk | 337 | t_vertstr: |
338 | mov eax, 38 |
||
339 | mov edx, 0xffffff |
||
340 | mov esi, ebx |
||
341 | shl ecx, 16 |
||
342 | mov edi, esi |
||
343 | shr edi, 3 |
||
344 | mov ebp, edi |
||
345 | shl ebp, 16 |
||
346 | mov bp, di |
||
347 | mov ebx, ebp |
||
348 | shr ebx, 1 |
||
349 | mov bx, bp |
||
350 | shr bx, 1 |
||
2474 | mario79 | 351 | ;-------------------------------------- |
894 | barsuk | 352 | vert_next_x: |
2474 | mario79 | 353 | mcall |
894 | barsuk | 354 | add ebx, ebp |
355 | cmp bx, si |
||
356 | jnae vert_next_x |
||
357 | ret |
||
2474 | mario79 | 358 | ;------------------------------------------------------------------------------ |
7534 | leency | 359 | lsz i_distort,\ |
360 | ru, "Проверка на искажения",\ |
||
361 | en, "Distortion", |
||
894 | barsuk | 362 | db 0 |
2474 | mario79 | 363 | ;------------------------------------------------------------------------------ |
894 | barsuk | 364 | t_distort: |
365 | mov edx, 0xffffff |
||
366 | mov esi, ebx |
||
367 | mov edi, ecx |
||
368 | mov ebp, 3 |
||
369 | xor ebx, ebx |
||
2474 | mario79 | 370 | ;-------------------------------------- |
894 | barsuk | 371 | dist_next: |
372 | push ebp |
||
373 | mov ebp, ebx |
||
374 | shl ebx, 16 |
||
375 | or ebx, ebp |
||
376 | |||
377 | mov ecx, edi |
||
378 | shl ecx, 16 |
||
379 | or ecx, ebp |
||
2474 | mario79 | 380 | mcall 38 |
894 | barsuk | 381 | |
382 | mov ebx, esi |
||
383 | shl ebx, 16 |
||
384 | mov bx, si |
||
2474 | mario79 | 385 | mcall |
894 | barsuk | 386 | |
387 | mov bx, bp |
||
388 | mov ecx, ebp |
||
389 | shl ecx, 16 |
||
390 | or ecx, ebp |
||
2474 | mario79 | 391 | mcall |
894 | barsuk | 392 | |
393 | mov ecx, edi |
||
394 | shl ecx, 16 |
||
395 | mov cx, di |
||
2474 | mario79 | 396 | mcall |
894 | barsuk | 397 | |
398 | mov eax, 30 |
||
399 | sub esi, eax |
||
400 | sub edi, eax |
||
401 | mov ebx, ebp |
||
402 | add ebx, eax |
||
403 | pop ebp |
||
404 | dec ebp |
||
405 | jnz dist_next |
||
406 | ret |
||
2474 | mario79 | 407 | ;------------------------------------------------------------------------------ |
7534 | leency | 408 | lsz i_horres,\ |
409 | ru, "Разрешение по горизонтали",\ |
||
410 | en, "Horizontal Resolution", |
||
894 | barsuk | 411 | db 0 |
2474 | mario79 | 412 | ;------------------------------------------------------------------------------ |
894 | barsuk | 413 | t_horres: |
414 | mov eax, 38 |
||
415 | mov edx, 0xffffff |
||
416 | mov edi, ecx |
||
417 | shl ecx, 16 |
||
418 | mov esi, ebx |
||
419 | xor ebx, ebx |
||
420 | mov edi, 0x003A003A |
||
421 | mov ebp, 0x00030003 |
||
2474 | mario79 | 422 | ;-------------------------------------- |
894 | barsuk | 423 | horres_next: |
424 | add ebx, edi |
||
2474 | mario79 | 425 | mcall |
426 | |||
894 | barsuk | 427 | add ebx, ebp |
2474 | mario79 | 428 | mcall |
429 | |||
894 | barsuk | 430 | add ebx, ebp |
2474 | mario79 | 431 | mcall |
432 | |||
894 | barsuk | 433 | add ebx, ebp |
2474 | mario79 | 434 | mcall |
435 | |||
894 | barsuk | 436 | add ebx, ebp |
2474 | mario79 | 437 | mcall |
438 | |||
894 | barsuk | 439 | cmp bx, si |
440 | jna horres_next |
||
441 | ret |
||
2474 | mario79 | 442 | ;------------------------------------------------------------------------------ |
7534 | leency | 443 | lsz i_vertres,\ |
444 | ru, "Разрешение по вертикали",\ |
||
445 | en, "Vertical Resolution", |
||
894 | barsuk | 446 | db 0 |
2474 | mario79 | 447 | ;------------------------------------------------------------------------------ |
894 | barsuk | 448 | t_vertres: |
449 | mov eax, 38 |
||
450 | mov edx, 0xffffff |
||
451 | ; mov esi, ebx |
||
452 | shl ebx, 16 |
||
453 | mov edi, ecx |
||
454 | xor ecx, ecx |
||
455 | mov ebp, 0x00030003 |
||
456 | mov esi, 0x002A002A |
||
2474 | mario79 | 457 | ;-------------------------------------- |
894 | barsuk | 458 | vertres_next: |
459 | add ecx, esi |
||
2474 | mario79 | 460 | mcall |
461 | |||
894 | barsuk | 462 | add ecx, ebp |
2474 | mario79 | 463 | mcall |
464 | |||
894 | barsuk | 465 | add ecx, ebp |
2474 | mario79 | 466 | mcall |
467 | |||
894 | barsuk | 468 | add ecx, ebp |
2474 | mario79 | 469 | mcall |
470 | |||
894 | barsuk | 471 | add ecx, ebp |
2474 | mario79 | 472 | mcall |
473 | |||
894 | barsuk | 474 | add ecx, 0x00540054 |
475 | cmp cx, di |
||
476 | jna vertres_next |
||
477 | ret |
||
2474 | mario79 | 478 | ;------------------------------------------------------------------------------ |
7534 | leency | 479 | lsz i_moire,\ |
480 | ru, "Шаблоны Муара",\ |
||
481 | en, "Moire Patterns", |
||
894 | barsuk | 482 | db 0 |
2474 | mario79 | 483 | ;------------------------------------------------------------------------------ |
894 | barsuk | 484 | t_moire: |
485 | mov eax, 38 |
||
486 | mov edx, 0xffffff |
||
487 | mov edi, ecx |
||
488 | shl ecx, 16 |
||
489 | mov esi, ebx |
||
490 | xor ebx, ebx |
||
491 | mov ebp, 0x00030003 |
||
2474 | mario79 | 492 | ;-------------------------------------- |
894 | barsuk | 493 | moire_next: |
2474 | mario79 | 494 | mcall |
894 | barsuk | 495 | add ebx, ebp |
496 | cmp bx, si |
||
497 | jna moire_next |
||
498 | ret |
||
2474 | mario79 | 499 | ;------------------------------------------------------------------------------ |
7534 | leency | 500 | lsz i_revsharp,\ |
501 | ru, "Реверсивная резкость видео",\ |
||
502 | en, "Reverse Video Sharpness", |
||
894 | barsuk | 503 | db 0 |
2474 | mario79 | 504 | ;------------------------------------------------------------------------------ |
894 | barsuk | 505 | t_revsharp: |
506 | mov esi, ebx |
||
507 | mov edi, ecx |
||
508 | shr ecx, 1 |
||
2474 | mario79 | 509 | mcall 13,,,0xffffff |
894 | barsuk | 510 | ; а теперь - инверсные линии |
511 | mov eax, 38 |
||
512 | mov ecx, edi |
||
513 | mov edx, 0x01000000 |
||
514 | xor ebx, ebx |
||
515 | mov ebp, 0x00010001 |
||
516 | mov edi, 0x003F003F |
||
2474 | mario79 | 517 | ;-------------------------------------- |
894 | barsuk | 518 | revsharp_next: |
519 | add ebx, edi |
||
2474 | mario79 | 520 | mcall |
521 | |||
894 | barsuk | 522 | add ebx, ebp |
2474 | mario79 | 523 | mcall |
524 | |||
894 | barsuk | 525 | add ebx, ebp |
2474 | mario79 | 526 | mcall |
527 | |||
894 | barsuk | 528 | add ebx, edi |
529 | sub ebx, ebp |
||
2474 | mario79 | 530 | mcall |
531 | |||
894 | barsuk | 532 | cmp bx, si |
533 | jna revsharp_next |
||
534 | ret |
||
2474 | mario79 | 535 | ;------------------------------------------------------------------------------ |
7534 | leency | 536 | lsz i_flicker,\ |
537 | ru, "Уровень мерцания",\ |
||
538 | en, "Flicker Severity", |
||
894 | barsuk | 539 | db 0 |
2474 | mario79 | 540 | ;------------------------------------------------------------------------------ |
894 | barsuk | 541 | t_flicker: |
2474 | mario79 | 542 | mcall 13,,,0xffffff |
894 | barsuk | 543 | ret |
2474 | mario79 | 544 | ;------------------------------------------------------------------------------ |
7534 | leency | 545 | lsz i_glare,\ |
546 | ru, "Уровень бликов подсветки",\ |
||
547 | en, "Glare Severity", |
||
894 | barsuk | 548 | db 0 |
2474 | mario79 | 549 | ;------------------------------------------------------------------------------ |
894 | barsuk | 550 | t_glare: ; оптимизировать нечего |
551 | ret |
||
2474 | mario79 | 552 | ;------------------------------------------------------------------------------ |
7534 | leency | 553 | lsz i_interlace,\ |
554 | ru, "Обнаружение интерлейсинга",\ |
||
555 | en, "Interlacing Detection", |
||
894 | barsuk | 556 | db 0 |
2474 | mario79 | 557 | ;------------------------------------------------------------------------------ |
894 | barsuk | 558 | t_interlace: |
559 | mov edi, ecx |
||
560 | mov eax, 38 |
||
561 | mov edx, 0xffffff |
||
562 | xor ecx, ecx |
||
563 | mov ebp, 0x00020002 |
||
2474 | mario79 | 564 | ;-------------------------------------- |
894 | barsuk | 565 | interlace_next: |
566 | add ecx, ebp |
||
2474 | mario79 | 567 | mcall |
894 | barsuk | 568 | cmp cx, di |
569 | jna interlace_next |
||
570 | ret |
||
2474 | mario79 | 571 | ;------------------------------------------------------------------------------ |
7534 | leency | 572 | lsz i_scrreg,\ |
573 | ru, "Регулировка экрана",\ |
||
574 | en, "Screen Regulation", |
||
894 | barsuk | 575 | db 0 |
2474 | mario79 | 576 | ;------------------------------------------------------------------------------ |
894 | barsuk | 577 | t_scrreg: |
578 | add ebx, 0x0018FFCD ; +25 к началу и -50 от длины |
||
579 | shr ecx, 1 |
||
580 | add ecx, 0x0013FFEC ; +19 к началу и -19 от длины |
||
2474 | mario79 | 581 | mcall 13,,,0xffffff |
894 | barsuk | 582 | ret |
2474 | mario79 | 583 | ;------------------------------------------------------------------------------ |
7534 | leency | 584 | lsz i_pricol,\ |
585 | ru, "Чистота основных цветов",\ |
||
586 | en, "Primary Color Purity", |
||
894 | barsuk | 587 | db 0 |
2474 | mario79 | 588 | ;------------------------------------------------------------------------------ |
894 | barsuk | 589 | t_pricol: |
590 | mov esi, ebx |
||
591 | mov edi, ecx |
||
592 | |||
593 | shr ebx, 4 ; /16 |
||
594 | mov ebp, ebx |
||
595 | shl ebx, 16 |
||
596 | mov bx, bp |
||
597 | shl ebp, 16 |
||
598 | lea ebp, [ebp + ebp * 4] ; ebp *= 5 |
||
599 | |||
600 | mov ecx, 0x00280000 |
||
601 | mov cx, di |
||
602 | sub cx, 80 |
||
603 | ;shr cx, 1 |
||
604 | |||
605 | shl bx, 2 |
||
2474 | mario79 | 606 | mcall 13,,,0xff0000 |
894 | barsuk | 607 | |
608 | add ebx, ebp |
||
609 | shr edx, 8 |
||
2474 | mario79 | 610 | mcall |
894 | barsuk | 611 | |
612 | add ebx, ebp |
||
613 | shr edx, 8 |
||
2474 | mario79 | 614 | mcall |
894 | barsuk | 615 | ret |
2474 | mario79 | 616 | ;------------------------------------------------------------------------------ |
7534 | leency | 617 | lsz i_colint,\ |
618 | ru, "Градиент интенсивности цвета",\ |
||
619 | en, "Color Intensity Gradient", |
||
894 | barsuk | 620 | db 0 |
2474 | mario79 | 621 | ;------------------------------------------------------------------------------ |
894 | barsuk | 622 | t_colint: |
623 | |||
624 | mov esi, ebx |
||
625 | mov edi, ecx |
||
626 | |||
627 | ; mov eax, ecx |
||
628 | ; shr ecx, 2 ; end y coord |
||
629 | ; and ecx, 0xffffff80 ; это not 7F |
||
630 | ; shr eax, 7 ; / 128 |
||
631 | ; mov ebp, eax |
||
632 | ; mov edx, eax |
||
633 | ; lea eax, [eax + eax * 2] ; eax *= 5 |
||
634 | ; shl ebp, 4 |
||
635 | ; add eax, ebp |
||
636 | |||
637 | ; shl eax, 16 |
||
638 | ; add ecx, eax |
||
639 | ; mov edx, ebp |
||
640 | ; shl ebp, 16 |
||
641 | ; mov bp, dx ; йа больной |
||
642 | |||
643 | ; я не понял, что там делалось, и решил написать снова о_О |
||
644 | |||
645 | ; надо здесь сгенерить ecx (начальный сдвиг) и ebp (шаг по у) |
||
646 | |||
647 | mov eax, edi |
||
648 | lea eax, [eax + 2 * eax] |
||
649 | shr eax, 5 ; eax = 3/32 высоты |
||
650 | mov ebp, eax |
||
651 | shl ebp, 16 |
||
652 | mov bp, ax ; ebp = ax в обоих словах |
||
653 | |||
654 | mov ebx, eax ; сохраним это значение |
||
655 | |||
656 | mov eax, edi |
||
657 | inc eax |
||
658 | shr eax, 4 ; 3/16 высоты - начальное значение |
||
659 | ; всего полосы займут 3/4 высоты, итого по 3/32 высоты на полосу (для ровного счета) |
||
660 | lea eax, [eax + eax * 2] |
||
661 | mov ecx, eax |
||
662 | shl ecx, 16 |
||
663 | shr ebx, 2 |
||
664 | lea ebx, [ebx + ebx * 2] ; ebx = 3/4 ebx, т.е. 3/4 высоты полосы |
||
665 | add eax, ebx |
||
666 | mov cx, ax |
||
667 | |||
668 | xor edx, edx |
||
669 | mov eax, 0xffff |
||
670 | div esi |
||
671 | mov edi, eax ; edi = 64K/width |
||
672 | |||
673 | mov dword [color_index], 0 |
||
674 | jmp colint_next |
||
2474 | mario79 | 675 | ;------------------------------------------------------------------------------ |
894 | barsuk | 676 | color_table dd 0x00ff0000, 0x0000ff00, 0x00ffff00, \ |
677 | 0x000000ff, 0x00ff00ff, 0x0000ffff, 0x00ffffff |
||
678 | color_index dd 0 |
||
2474 | mario79 | 679 | ;------------------------------------------------------------------------------ |
894 | barsuk | 680 | colint_next: |
681 | xor edx, edx |
||
682 | xor ebx, ebx |
||
683 | mov eax, 38 |
||
2474 | mario79 | 684 | ;-------------------------------------- |
894 | barsuk | 685 | colint_next_line: |
686 | push edx |
||
687 | push eax |
||
688 | movzx eax, dh |
||
689 | shl eax, 16 |
||
690 | mov dl, dh |
||
691 | or edx, eax |
||
692 | mov eax, [color_index] |
||
693 | mov eax, [color_table + eax * 4] |
||
694 | and edx, eax |
||
695 | pop eax |
||
2474 | mario79 | 696 | mcall |
894 | barsuk | 697 | pop edx |
698 | add ebx, 0x00010001 |
||
699 | add edx, edi |
||
700 | cmp bx, si |
||
701 | jna colint_next_line |
||
702 | |||
703 | add ecx, ebp |
||
704 | inc dword [color_index] |
||
705 | cmp dword [color_index], 7 |
||
706 | jb colint_next |
||
707 | ret |
||
2474 | mario79 | 708 | ;------------------------------------------------------------------------------ |
7534 | leency | 709 | lsz i_colalign,\ |
710 | ru, "Цветовое выравнивание",\ |
||
711 | en, "Color Alignment Grid", |
||
894 | barsuk | 712 | db 0 |
2474 | mario79 | 713 | ;------------------------------------------------------------------------------ |
894 | barsuk | 714 | t_colalign: |
715 | ; красная сетка |
||
716 | inc ebx ; так нужно |
||
717 | inc ecx |
||
718 | mov esi, ebx |
||
719 | mov edi, ecx |
||
720 | mov edx, 0xff0000 |
||
721 | ; горизонтальные линии |
||
722 | shl ebx, 16 |
||
723 | xor ecx, ecx |
||
724 | push edi |
||
725 | shr edi, 3 |
||
726 | mov ebp, edi |
||
727 | shl ebp, 16 |
||
728 | mov bp, di |
||
729 | pop edi |
||
730 | mov [yshift], ebp |
||
731 | mov eax, 38 |
||
2474 | mario79 | 732 | ;-------------------------------------- |
894 | barsuk | 733 | cgrid_next_y: |
2474 | mario79 | 734 | mcall |
894 | barsuk | 735 | add ecx, ebp |
736 | cmp cx, di |
||
737 | jnae cgrid_next_y |
||
738 | ; последняя линия: |
||
739 | sub ecx, 0x00010001 |
||
2474 | mario79 | 740 | mcall |
894 | barsuk | 741 | |
742 | ; вертикальные линии |
||
743 | mov ecx, edi |
||
744 | shl ecx, 16 |
||
745 | xor ebx, ebx |
||
746 | push esi |
||
747 | shr esi, 3 |
||
748 | mov ebp, esi |
||
749 | shl ebp, 16 |
||
750 | mov bp, si |
||
751 | mov [xshift], ebp |
||
752 | pop esi |
||
753 | mov eax, 38 |
||
2474 | mario79 | 754 | ;-------------------------------------- |
894 | barsuk | 755 | cgrid_next_x: |
2474 | mario79 | 756 | mcall |
894 | barsuk | 757 | add ebx, ebp |
758 | cmp bx, si |
||
759 | jnae cgrid_next_x |
||
760 | ; последняя линия |
||
761 | sub ebx, 0x00010001 |
||
2474 | mario79 | 762 | mcall |
894 | barsuk | 763 | jmp cgrid_green |
2474 | mario79 | 764 | ;------------------------------------------------------------------------------ |
894 | barsuk | 765 | xshift dd 0 |
766 | yshift dd 0 |
||
767 | shift dd 0 |
||
2474 | mario79 | 768 | ;------------------------------------------------------------------------------ |
894 | barsuk | 769 | cgrid_green: |
770 | ; зеленые линии: горизонтальные |
||
771 | mov edx, esi |
||
772 | shr edx, 5 |
||
773 | lea eax, [edx + edx * 2] |
||
774 | shl edx, 16 |
||
775 | or edx, eax |
||
776 | mov [shift], edx |
||
777 | mov eax, 38 |
||
778 | mov edx, 0x00ff00 |
||
779 | xor ecx, ecx |
||
780 | mov ebp, [xshift] |
||
2474 | mario79 | 781 | ;-------------------------------------- |
894 | barsuk | 782 | ggrid_next_yy: |
783 | mov ebx, [shift] |
||
2474 | mario79 | 784 | ;-------------------------------------- |
894 | barsuk | 785 | ggrid_next_yx: |
2474 | mario79 | 786 | mcall |
894 | barsuk | 787 | add ebx, ebp |
788 | cmp bx, si |
||
789 | jnae ggrid_next_yx |
||
790 | sub ebx, 0x00010001 |
||
2474 | mario79 | 791 | mcall |
894 | barsuk | 792 | |
793 | add ecx, [yshift] |
||
794 | cmp cx, di |
||
795 | jnae ggrid_next_yy |
||
796 | ; last row of lines |
||
797 | mov ebx, [shift] |
||
798 | dec ecx |
||
2474 | mario79 | 799 | ;-------------------------------------- |
894 | barsuk | 800 | ggrid_last_yx: |
2474 | mario79 | 801 | mcall |
894 | barsuk | 802 | add ebx, ebp |
803 | cmp bx, si |
||
804 | jnae ggrid_last_yx |
||
805 | |||
806 | ; и вертикальные |
||
807 | mov edx, edi |
||
808 | shr edx, 5 |
||
809 | lea eax, [edx + edx * 2] |
||
810 | shl edx, 16 |
||
811 | or edx, eax |
||
812 | mov [shift], edx |
||
813 | |||
814 | mov eax, 38 |
||
815 | mov edx, 0x00ff00 |
||
816 | mov ecx, [shift] |
||
817 | mov ebp, [xshift] |
||
2474 | mario79 | 818 | ;-------------------------------------- |
894 | barsuk | 819 | ggrid_next_xy: |
820 | xor ebx, ebx |
||
2474 | mario79 | 821 | ;-------------------------------------- |
894 | barsuk | 822 | ggrid_next_xx: |
2474 | mario79 | 823 | mcall |
824 | |||
894 | barsuk | 825 | add ebx, ebp |
826 | cmp bx, si |
||
827 | jnae ggrid_next_xx |
||
828 | sub ebx, 0x00010001 |
||
2474 | mario79 | 829 | mcall |
894 | barsuk | 830 | |
831 | add ecx, [yshift] |
||
832 | cmp cx, di |
||
833 | jnae ggrid_next_xy |
||
834 | xor ebx, ebx |
||
835 | dec ecx |
||
2474 | mario79 | 836 | ;-------------------------------------- |
894 | barsuk | 837 | ggrid_last_xy: |
838 | ;int 0x40 |
||
839 | ;add ebx, ebp |
||
840 | ;cmp bx, si |
||
841 | ;jnae ggrid_last_xy |
||
842 | ret |
||
2474 | mario79 | 843 | ;------------------------------------------------------------------------------ |
7534 | leency | 844 | lsz i_colsyn,\ |
845 | ru, "Синхронизация цвета",\ |
||
846 | en, "Color Synchronization", |
||
894 | barsuk | 847 | db 0 |
2474 | mario79 | 848 | ;------------------------------------------------------------------------------ |
894 | barsuk | 849 | t_colsyn: |
850 | inc ebx |
||
851 | inc ecx |
||
852 | mov esi, ebx |
||
853 | mov edi, ecx |
||
854 | |||
855 | shr ebx, 5 |
||
856 | mov eax, ebx |
||
857 | lea ebx, [ebx + ebx * 4] |
||
858 | shl ebx, 1 ; 10/32 |
||
859 | mov ebp, ebx |
||
860 | shl eax, 16 |
||
861 | or ebx, eax |
||
862 | shl ebp, 16 |
||
863 | |||
864 | mov edi, 0x0000ffff |
||
865 | add ecx, 0x003FFF7F |
||
866 | mov edx, edi |
||
2474 | mario79 | 867 | mcall 13 |
894 | barsuk | 868 | |
869 | mov edx, 0x00ff0000 |
||
870 | add ebx, ebp |
||
2474 | mario79 | 871 | mcall |
894 | barsuk | 872 | |
873 | mov edx, edi |
||
874 | add ebx, ebp |
||
2474 | mario79 | 875 | mcall |
894 | barsuk | 876 | ret |
2474 | mario79 | 877 | ;------------------------------------------------------------------------------ |
894 | barsuk | 878 | ; <--- initialised data ---> |
879 | DATA |
||
880 | screenx dd 0 |
||
881 | screeny dd 0 |
||
882 | |||
883 | test_num dd 0 |
||
884 | test_done dd 0 |
||
885 | show_info dd 1 |
||
886 | test_proc dd t_image_size, t_grid, t_horstr, t_vertstr,\ |
||
887 | t_distort, t_horres, t_vertres, t_moire, t_revsharp, \ |
||
888 | t_flicker, t_glare, t_interlace, t_scrreg, t_pricol, \ |
||
889 | t_colint, t_colalign, t_colsyn, 0 |
||
890 | test_info dd i_image_size, i_grid, i_horstr, i_vertstr, \ |
||
891 | i_distort, i_horres, i_vertres, i_moire, i_revsharp, \ |
||
892 | i_flicker, i_glare, i_interlace, i_scrreg, i_pricol, \ |
||
893 | i_colint, i_colalign, i_colsyn, 0 |
||
894 | |||
7534 | leency | 895 | lsz press_space,\ |
896 | ru, "Нажмите пробел для продолжения,",\ |
||
897 | en, "Press 'Space' key to continue", |
||
894 | barsuk | 898 | db 0 |
7534 | leency | 899 | |
900 | lsz press_i,\ |
||
901 | ru, "I для переключения сведений,",\ |
||
902 | en, "I to turn details on and off ", |
||
894 | barsuk | 903 | db 0 |
7534 | leency | 904 | |
905 | lsz press_c,\ |
||
906 | ru, "и C для переключения курсора",\ |
||
907 | en, "and C to show and hide cursor", |
||
894 | barsuk | 908 | db 0 |
909 | |||
7534 | leency | 910 | lsz header,\ |
911 | ru, "Тест монитора",\ |
||
912 | en, "Display test", |
||
913 | db 0 |
||
914 | |||
915 | lsz test_finish,\ |
||
916 | ru, "Конец теста. Нажмите ESC.",\ |
||
917 | en, "Test has been finished. Press ESC.", |
||
918 | db 0 |
||
919 | |||
894 | barsuk | 920 | cursor dd 32*32 dup(0x00000000) ; все равно сожмется |
921 | |||
922 | cursorVisible dd 1 |
||
923 | cursorID dd 0 |
||
2474 | mario79 | 924 | ;------------------------------------------------------------------------------ |
894 | barsuk | 925 | ; <--- uninitialised data ---> |
926 | UDATA |
||
2474 | mario79 | 927 | ;------------------------------------------------------------------------------ |
894 | barsuk | 928 | MEOS_APP_END |
1741 | dunkaist | 929 | ; <--- end of MenuetOS application ---> |
2474 | mario79 | 930 | ;--------------------------------------------------------------------------------->--->--->---->8,8>- |