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