Subversion Repositories Kolibri OS

Rev

Rev 31 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;
2
;   Vertical Refresh Rate programm
3
;
4
;   Author:  Trans <<< 13 >>>
5
;   Date:    February-May 2003 (09.05.2003)
6
;   Version: 2.0
7
;   Last Modification: 30.07.2003
8
;   Compile with FASM for Menuet
9
;
10
use32
11
 
12
        org    0x0
13
 
14
        db     'MENUET01'       ; 8 byte id
15
        dd     0x01        ; header version
16
        dd     START        ; start of code
17
        dd     I_END        ; size of image
18
        dd     0x5000      ; memory for app
19
        dd     0x4ff0       ; esp
20
        dd     0x0 , 0x0        ; I_Param , I_Icon
21
 
22
include 'lang.inc'
23
START:    ; start of execution
24
 
25
    mov eax,14
26
    int 40h
27
    mov ebx,eax
28
    shr ebx,16
29
    mov [oldX],ebx
30
    shl eax,16
31
    shr eax,16
32
    mov [oldY],eax
33
 
34
; Test on installed video driver
35
    mov eax,21
36
    mov ebx,13
37
    mov ecx,1
38
    mov edx,drvinfo
39
    int 40h
40
    cmp eax,0FFFFFFFFh ; = -1 - error or not installed
41
    jne vrr_00
42
    call warning_info
43
    retn
44
;
45
 
46
vrr_00:
47
    call get_vert_rate
48
    mov eax,[currvm]
49
    mov [oldvm],eax
50
    call get_pid
51
    call draw_window  ; at first, draw the window
52
 
53
still:
54
 
55
    mov  eax,10   ; check here for event
56
    int  0x40
57
 
58
    cmp  eax,1   ; redraw request ?
59
    je  red
60
    cmp  eax,2   ; key in buffer ?
61
    je  key
62
    cmp  eax,3   ; button in buffer ?
63
    je  button
64
    call get_pid
65
    jmp  still
66
 
67
  red:    ; redraw
68
    call draw_window
69
    jmp  still
70
 
71
  key:    ; key
72
    mov  eax,2   ; just read it
73
    int  0x40
74
    cmp ah,'1'
75
    jne key_loc_00
76
    call safekey
77
    jmp still
78
key_loc_00:
79
    cmp ah,'2'
80
    jne key_loc_01
81
    call safekey
82
    jmp still
83
key_loc_01:
84
    cmp ah,'3'
85
    jne key_loc_02
86
    call safekey
87
    jmp still
88
key_loc_02:
89
    cmp ah,'4'
90
    jne key_loc_03
91
    call safekey
92
    jmp still
93
key_loc_03:
94
    cmp ah,'5'
95
    jne key_loc_04
96
    call safekey
97
    jmp still
98
key_loc_04:
99
    cmp ah,'-'
100
    jne key_loc_05
101
    xor eax,eax
102
    call inc_dec_rate
103
    jmp still
104
key_loc_05:
105
    cmp ah,'+'
106
    jne key_loc_06
107
    xor eax,eax
108
    inc eax
109
    call inc_dec_rate
110
    jmp  still
111
key_loc_06:
112
    cmp ah,'r'         ;Return in last stable mode
113
    jne key_loc_07
114
    call restore_mode
115
    jmp red
116
key_loc_07:
117
    cmp ah,13          ;Apply select mode
118
    jne still
119
    xor eax,eax
120
    mov ax,[vmselect]
121
    cmp al,0
122
    je still
123
    xor ebx,ebx
124
    mov bl,al
125
    dec bl
126
    shl bx,1      ; ebx=(ebx-1)*2
127
    xor edx,edx
128
    mov dx,[vidmode+ebx]
129
    mov ecx,ebx
130
    shl ebx,2
131
    add ebx,ecx   ; ebx=ebx*5
132
    shr ax,8
133
    dec ax
134
    shl ax,1
135
    add ebx,eax
136
    ror edx,16
137
    mov dx,[_m1+ebx]
138
    rol edx,16
139
    call set_my_mode
140
    call protect_and_return
141
    xor ax,ax
142
    mov [vmselect],ax
143
    jmp red
144
 
145
button:   ; button
146
    mov  eax,17   ; get id
147
    int  0x40
148
 
149
    cmp  ah,1   ; button id=1 ?
150
    jne  noclose
151
    mov  eax,-1           ; close this program
152
    int  0x40
153
  noclose:
154
    cmp ah,2              ;'+' screen width
155
    jne button_loc_01
156
    xor eax,eax
157
    inc eax
158
    call inc_dec_rate
159
    jmp still
160
button_loc_01:
161
    cmp ah,3              ;'-' screen width
162
    jne button_loc_02
163
    xor eax,eax
164
    call inc_dec_rate
165
    jmp still
166
button_loc_02:
167
    cmp ah,4              ; Ok
168
    jne button_loc_03
169
    mov ah,13
170
    jmp key_loc_07
171
button_loc_03:
172
    cmp ah,5              ; Cancel
173
    jne button_loc_04
174
    mov [vmselect],word 00h
175
    jmp red
176
button_loc_04:
177
    cmp ah,6              ; Return
178
    jne button_loc_05
179
    mov ah,'r'
180
    jmp key_loc_06
181
button_loc_05:
182
    cmp ah,7              ; Default
183
    jne button_loc_06
184
    call restore_mode
185
button_loc_06:
186
    jmp  still
187
 
188
 
189
;   *********************************************
190
;   *******  WINDOW DEFINITIONS AND DRAW ********
191
;   *********************************************
192
 
193
 
194
draw_window:
195
 
196
dw_continue:
197
 
198
    mov  eax,12      ; function 12:tell os about windowdraw
199
    mov  ebx,1      ; 1, start of draw
200
    int  0x40
201
 
202
       ; DRAW WINDOW
203
    mov  eax,0      ; function 0 : define and draw window
204
    mov  ebx,100*65536+400    ; [x start] *65536 + [x size]
205
    mov  ecx,100*65536+200    ; [y start] *65536 + [y size]
206
    mov  edx,0x020020C0;0x00000040 ; color of work area RRGGBB,8->color glide
207
    mov  esi,0x805080d0     ; color of grab bar RRGGBB,8->color glide
208
    mov  edi,0x00ffffff     ; color of frames RRGGBB
209
    int  0x40
210
 
211
       ; WINDOW LABEL
212
     call print_my_title
213
 
214
       ; CLOSE BUTTON
215
    mov  eax,8      ; function 8 : define and draw button
216
    mov  ebx,(400-19)*65536+12    ; [x start] *65536 + [x size]
217
    mov  ecx,5*65536+12     ; [y start] *65536 + [y size]
218
    mov  edx,1      ; button id
219
    mov  esi,0x5599cc     ; button color RRGGBB
220
    int  0x40
221
 
222
       ; BUTTONS
223
    xor eax,eax
224
    mov edx,eax
225
    mov al,8
226
    mov ebx,330*65536+20
227
    mov ecx,84*65536+48
228
    mov dl,2
229
    int 40h               ; Button '+'Width
230
    add ebx,30*65536
231
    mov dl,3
232
    int 40h               ; Button '-'Width
233
    mov ebx,22*65536+85
234
    mov ecx,170*65536+15
235
    inc dl ;dl=4
236
    int 40h               ; Button 'Ok'
237
    add ebx,90*65536
238
    inc dl ;dl=5
239
    int 40h               ; Button 'Cancel'
240
    add ebx,90*65536
241
    inc dl ;dl=6
242
    int 40h               ; Button 'Return'
243
    add ebx,90*65536
244
    inc dl ;dl=7
245
    int 40h               ; Button 'Default'
246
 
247
    call draw_face
248
 
249
    mov  eax,12      ; function 12:tell os about windowdraw
250
    mov  ebx,2      ; 2, end of draw
251
    int  0x40
252
 
253
    ret
254
 
255
;------------Subfunctions-----------
256
 
257
restore_mode:
258
    push eax
259
    push ebx
260
    push edx
261
    mov eax,21
262
    mov ebx,13
263
    mov ecx,4
264
    int 40h
265
    pop edx
266
    pop ecx
267
    pop eax
268
    retn
269
 
270
 
271
 
272
; IN: edx = RefRate*65536+No.VideoMode
273
set_my_mode:
274
    push ecx
275
    push ebx
276
    push edx
277
    mov eax,[currvm]
278
    mov [oldvm],eax
279
    mov [currvm],edx
280
    pop edx
281
    push edx
282
    mov eax,21
283
    mov ebx,13
284
    mov ecx,3
285
    int 40h
286
    pop edx
287
    pop ebx
288
    pop ecx
289
    retn
290
 
291
; IN: eax = 0/1  -  -/+ 1Hz
292
inc_dec_rate:
293
    push ebx
294
    push ecx
295
    push edx
296
    mov edx,eax
297
    mov eax,21
298
    mov ebx,13
299
    mov ecx,5
300
    int 40h
301
    pop edx
302
    pop ecx
303
    pop ebx
304
    retn
305
 
306
get_pid:
307
    mov eax,9
308
    mov ebx,buffer
309
    xor ecx,ecx
310
    dec ecx
311
    int 40h
312
    mov [totp],eax
313
    mov eax,[ebx+30]
314
    mov [mypid],eax
315
    mov ax,[ebx+4]
316
    mov [mypno],ax
317
    retn
318
 
319
get_vert_rate:
320
    xor eax,eax
321
    mov ebx,eax
322
    mov ecx,eax
323
    mov al,21
324
    mov bl,13
325
    mov cl,2
326
    int 40h
327
    mov [initrr],ebx
328
    mov [refrate],ebx
329
    ror ecx,16
330
    mov cx,bx
331
    rol ecx,16
332
    mov [currvm],ecx
333
    retn
334
 
335
get_initial_videomode:
336
    retn
337
 
338
 
339
draw_table:
340
    mov eax,13
341
    mov ebx,9*65536+303
342
    mov ecx,59*65536+87
343
    xor edx,edx
344
    int 40h
345
    mov ebx,10*65536+300
346
    mov ecx,60*65536+24
347
    mov edx,00FF00FFh
348
    int 40h
349
    mov ebx,10*65536+36
350
    mov ecx,72*65536+72
351
    mov edx,0000FFFFh
352
    int 40h
353
    mov eax,38
354
    mov edx,00FFFFFFh
355
    mov ebx,10*65536+310
356
    mov edi,60*65536+60
357
    mov esi,12*65536+12
358
    xor ecx,ecx
359
    mov cl,8
360
dt_loc_hor_line:
361
    push ecx
362
    mov ecx,edi
363
    int 40h
364
    add edi,esi
365
    pop ecx
366
    loop dt_loc_hor_line
367
    mov ebx,10*65536+10
368
    mov edi,60*65536+144
369
    mov esi,66*65536+66
370
    mov ecx,edi
371
    int 40h
372
    add ebx,36*65536+36
373
    xor ecx,ecx
374
    mov cl,5
375
dt_loc_vert_line:
376
    push ecx
377
    mov ecx,edi
378
    int 40h
379
    add ebx,esi
380
    pop ecx
381
    loop dt_loc_vert_line
382
    mov eax,4
383
    mov ebx,52*65536+75
384
    mov ecx,000000FFh
385
    mov edx,_m1280x1024
386
    mov esi,9
387
    int 40h
388
    add edx,9
389
    add ebx,66*65536
390
    int 40h
391
    add edx,9
392
    add ebx,66*65536
393
    int 40h
394
    add edx,9
395
    add ebx,66*65536
396
    int 40h
397
    xor eax,eax
398
    mov ebx,eax
399
    mov ecx,eax
400
    mov al,47
401
    inc ebx
402
    shl ebx,16
403
    inc ecx
404
    mov edi,ecx
405
    mov edx,22*65536+86
406
    mov esi,00FF0000h
407
    mov ecx,5
408
dt_loc_00:
409
    push ecx
410
    mov ecx,edi
411
    int 40h
412
    inc edi
413
    add dx,12
414
    pop ecx
415
    loop dt_loc_00
416
    xor ecx,ecx
417
    inc ecx
418
    mov edi,ecx
419
    mov edx,76*65536+63
420
    mov esi,000000FFh
421
    mov ecx,4
422
dt_loc_01:
423
    push ecx
424
    mov ecx,edi
425
    int 40h
426
    inc edi
427
    add edx,66*65536
428
    pop ecx
429
    loop dt_loc_01
430
    mov eax,4
431
    mov ebx,16*65536+63
432
    mov ecx,000000FFh
433
    mov edx,_mk
434
    mov esi,4
435
    int 40h
436
    shl ecx,16
437
    add bx,12
438
    add edx,4
439
    int 40h
440
    retn
441
 
442
;IN: ah=keycode
443
safekey:
444
    sub ah,30h
445
    push bx
446
    mov bx,word [vmselect]
447
    cmp bx,0
448
    jnz sk_loc_00
449
    cmp ah,5
450
    je sk_loc_01
451
    mov bl,ah
452
    mov [vmselect],bx
453
    jmp sk_loc_01
454
sk_loc_00:
455
    push esi
456
    push edx
457
    push ecx
458
    push eax
459
    mov bh,ah
460
    xor edx,edx
461
    mov esi,_m1
462
    mov al,bl
463
    dec al
464
    xor ah,ah
465
    mov cx,10
466
    mul cx
467
    xor ecx,ecx
468
    mov cx,ax
469
    xor ax,ax
470
    mov al,bh
471
    dec al
472
    shl ax,1
473
    add cx,ax
474
    add esi,ecx
475
    lodsw
476
    cmp ax,0
477
    jnz sk_loc_02
478
    xor eax,eax
479
    mov bh,ah
480
sk_loc_02:
481
    mov [vmselect],bx
482
    pop eax
483
    pop ecx
484
    pop edx
485
    pop esi
486
sk_loc_01:
487
    call draw_window
488
    pop bx
489
    retn
490
 
491
; IN: ebx=Xstart*65536+Xend
492
;     ecx=Ystart*65536+Yend
493
;     edx=color
494
draw_rect:
495
    push eax
496
    push ebx
497
    push ecx
498
    push edx
499
    push edi
500
    xor eax,eax
501
    mov al,38
502
    push ecx
503
    mov edi,ecx
504
    shr edi,16
505
    mov cx,di
506
    int 40h
507
    pop ecx
508
    push ecx
509
    mov edi,ecx
510
    ror ecx,16
511
    mov cx,di
512
    int 40h
513
    pop ecx
514
    push ebx
515
    mov edi,ebx
516
    shr edi,16
517
    mov bx,di
518
    int 40h
519
    pop ebx
520
    mov edi,ebx
521
    ror ebx,16
522
    mov bx,di
523
    int 40h
524
    pop edi
525
    pop edx
526
    pop ecx
527
    pop ebx
528
    pop eax
529
    retn
530
 
531
;
532
; OUT: eax = 0 - no event
533
protect_and_return:
534
    push ebx
535
    push ecx
536
    xor eax,eax
537
    mov al,5
538
    xor ebx,ebx
539
    mov bx,300
540
    int 40h
541
    call get_pid
542
    xor eax,eax
543
    mov ebx,eax
544
    mov ecx,eax
545
    mov al,18
546
    mov ebx,3
547
    mov cx,[mypno]
548
    int 40h
549
    pop ecx
550
    pusha
551
    call draw_window
552
    popa
553
    xor eax,eax
554
    mov al,5
555
    xor ebx,ebx
556
    mov bx,300
557
    int 40h
558
    xor eax,eax
559
    mov al,11
560
    int 40h
561
    cmp eax,1
562
    jne par_loc_00
563
    pusha
564
    call draw_window
565
    popa
566
par_loc_00:
567
    xor eax,eax
568
    mov ebx,eax
569
    mov al,23
570
    mov bx,700
571
    int 40h
572
    cmp eax,0
573
    jnz par_loc_02
574
; mov [ftr_eax],eax
575
    mov edx,[oldvm]
576
    call set_my_mode
577
par_loc_02:
578
    pop ebx
579
    retn
580
 
581
debug_ftr:
582
;    xor eax,eax
583
;    mov ebx,eax
584
;    mov al,47
585
;    mov bl,8
586
;    shl ebx,16
587
;    mov bh,1
588
;    mov ecx,[ftr_eax]
589
;    mov edx,20*65536+180
590
;    mov esi,00FFFFFFh
591
;    int 40h
592
;    mov ecx,[ftr_ebx]
593
;    add edx,54*65536
594
;    int 40h
595
    retn
596
 
597
print_cur_vm:
598
    mov eax,4
599
    mov ebx,20*65536+40
600
    mov ecx,0000FF00h
601
    mov edx,curmode
602
    mov esi,cmlen
603
    int 40h
604
    mov al,14
605
    int 40h
606
    mov esi,00FFFFFFh
607
    mov edi,eax
608
    shr eax,16
609
    xor ecx,ecx
610
    mov cx,ax
611
    inc ecx
612
    xor ebx,ebx
613
    mov bl,4
614
    shl ebx,16
615
    mov edx,104*65536+40
616
    mov eax,47
617
    int 40h
618
    add edx,30*65536
619
    mov cx,di
620
    inc ecx
621
    int 40h
622
    add edx,30*65536
623
    mov ecx,[initrr]
624
    sub ebx,1*65536
625
    int 40h
626
    mov al,4
627
    mov ebx,200*65536+40
628
    mov ecx,0000FF00h
629
    mov edx,selmode
630
    mov esi,cmlen
631
    int 40h
632
    mov ax,[vmselect]
633
    cmp ax,0
634
    jz pcv_loc_00
635
    push eax
636
    xor eax,eax
637
    mov al,13
638
    mov ebx,284*65536+54
639
    mov ecx,40*65536+10
640
    mov edx,000020C0h
641
    int 40h
642
    pop eax
643
    push eax
644
    xor ecx,ecx
645
    dec al
646
    mov cl,al
647
    shl cx,3
648
    add cl,al   ; cx=(al-1)*9
649
    mov edx,_m1280x1024
650
    add edx,ecx
651
    xor eax,eax
652
    mov al,4
653
    mov esi,9
654
    mov ebx,284*65536+40
655
    mov ecx,00ff0000h
656
    int 40h
657
    pop eax
658
    cmp ah,0
659
    jz pcv_loc_00
660
    push esi
661
    push edx
662
    push ecx
663
    push eax
664
    xor eax,eax
665
    mov al,13
666
    mov ebx,344*65536+18
667
    mov ecx,40*65536+10
668
    mov edx,000020C0h
669
    int 40h
670
    pop eax
671
    push eax
672
    mov bx,ax
673
    xor edx,edx
674
    mov esi,_m1
675
    mov al,bl
676
    dec al
677
    xor ah,ah
678
    mov cx,10
679
    mul cx
680
    xor ecx,ecx
681
    mov cx,ax
682
    xor ax,ax
683
    mov al,bh
684
    dec al
685
    shl ax,1
686
    add cx,ax
687
    add esi,ecx
688
    lodsw
689
    xor ecx,ecx
690
    mov cx,ax
691
    xor ebx,ebx
692
    mov bl,3
693
    shl ebx,16
694
    mov edx,344*65536+40
695
    xor eax,eax
696
    mov al,47
697
    mov esi,00ff0000h
698
    int 40h
699
    pop eax
700
    pop ecx
701
    pop edx
702
    pop esi
703
 pcv_loc_00:
704
     retn
705
 
706
print_all_herz:
707
        push esi
708
        push edi
709
        push eax
710
        push ebx
711
        push ecx
712
        push edx
713
        cld
714
        mov esi,_m1
715
        mov ebx,(10+36+26)*65536+86
716
        mov edx,66*65536
717
        xor ecx,ecx
718
        mov cl,4
719
pah_loc_00:
720
        push ecx
721
        push edx
722
        push ebx
723
        mov cl,5
724
        xor edx,edx
725
        mov dl,12
726
pah_loc_01:
727
        lodsw
728
        cmp ax,00h
729
        jnz pah_loc_02
730
        call print_noherz
731
        jmp pah_loc_03
732
pah_loc_02:
733
        call print_herz
734
pah_loc_03:
735
        add ebx,edx
736
        loop pah_loc_01
737
        pop ebx
738
        pop edx
739
        add ebx,edx
740
        pop ecx
741
        loop pah_loc_00
742
        pop edx
743
        pop ecx
744
        pop ebx
745
        pop eax
746
        pop edi
747
        pop esi
748
        retn
749
 
750
; IN: ebx=X*65536+Y - coordinate
751
print_noherz:
752
        push eax
753
        push ebx
754
        push ecx
755
        push edx
756
        push esi
757
        xor eax,eax
758
        mov al,4
759
        mov ecx,00FFFFFFh
760
        mov edx,noherz
761
        xor esi,esi
762
        mov si,3
763
        int 40h
764
        pop esi
765
        pop edx
766
        pop ecx
767
        pop ebx
768
        pop eax
769
        retn
770
 
771
; IN: eax=numer_of_herz
772
;     ebx=X*65536+Y
773
print_herz:
774
        push eax
775
        push ebx
776
        push ecx
777
        push edx
778
        push esi
779
        mov edx,ebx
780
        xor ebx,ebx
781
        mov bl,3
782
        shl ebx,16
783
        mov ecx,eax
784
        mov esi,00FFFFFFh
785
        xor eax,eax
786
        mov al,47
787
        int 40h
788
        pop esi
789
        pop edx
790
        pop ecx
791
        pop ebx
792
        pop eax
793
        retn
794
 
795
get_pixelclock:
796
        retn
797
 
798
 ; light version of function
799
calc_refrate:
800
        retn
801
 
802
rect_select:
803
        mov ax,[vmselect]
804
;     mov [ftr_ebx],eax
805
        cmp ax,00h
806
        je rs_loc_00
807
        cmp ah,0
808
        jne rs_loc_01
809
        dec al
810
        mov cx,66
811
        mul cx
812
        add ax,46
813
        mov bx,ax
814
        shl ebx,16
815
        add ax,66
816
        mov bx,ax
817
        mov ecx,60*65536+144
818
        mov edx,00ff0000h
819
        call draw_rect
820
        retn
821
rs_loc_01:
822
        push ax
823
        xor ah,ah
824
        dec al
825
        xor ebx,ebx
826
        mov bx,66
827
        mul bx
828
        add ax,46
829
        mov bx,ax
830
        shl ebx,16
831
        add ax,66
832
        mov bx,ax
833
        pop ax
834
        xchg ah,al
835
        xor ah,ah
836
        dec al
837
        xor ecx,ecx
838
        mov cx,12
839
        mul cx
840
        add ax,84
841
        mov cx,ax
842
        shl ecx,16
843
        add ax,12
844
        mov cx,ax
845
        mov edx,00ff0000h
846
        call draw_rect
847
rs_loc_00:
848
        retn
849
 
850
print_my_title:
851
        pusha
852
        xor eax,eax
853
        mov ecx,eax
854
        mov cl,labellen-labelt
855
        mov al,4
856
        mov edx,labelt
857
        mov ebx,8*65536+8
858
        mov edi,00ff0000h
859
        xor esi,esi
860
        inc esi
861
pmt_loc_00:
862
        push ecx
863
        mov ecx,edi
864
        int 40h
865
        inc edx
866
        sub edi,4*65536
867
        add edi,4*256
868
        add ebx,6*65536
869
        pop ecx
870
        loop pmt_loc_00
871
        popa
872
        retn
873
 
874
 
875
draw_face:
876
        call draw_table
877
;
878
;
879
        mov ebx,320*65536+390
880
        mov ecx,66*65536+144
881
        mov edx,0000FF00h
882
        call draw_rect
883
        mov ebx,10*65536+390
884
        mov ecx,27*65536+55
885
        call draw_rect
886
        add ebx,2*65536
887
        sub bx,2
888
        add ecx,2*65536
889
        sub cx,2
890
        call draw_rect
891
        mov ebx,10*65536+390
892
        mov ecx,155*65536+193
893
        call draw_rect
894
        add ebx,2*65536
895
        sub bx,2
896
        add ecx,2*65536
897
        sub cx,2
898
        call draw_rect
899
        xor eax,eax
900
        mov al,13
901
        mov ebx,182*65536+36
902
        mov ecx,26*65536+5
903
        mov edx,000020C0h
904
        int 40h
905
        mov ebx,173*65536+54
906
        mov ecx,153*65536+7
907
        int 40h
908
        mov ebx,337*65536+36
909
        mov ecx,62*65536+10
910
        int 40h
911
        mov al,4
912
        shr ecx,16
913
        mov bx,cx
914
        add ebx,3*65536
915
        mov ecx,00FF0000h
916
        mov edx,width
917
        mov esi,5
918
        int 40h
919
        xor ecx,ecx
920
        add edx,5
921
        xor esi,esi
922
        inc esi
923
        mov ebx,335*65536+104
924
        int 40h
925
        add ebx,36*65536
926
        inc edx
927
        int 40h
928
        mov edx,tmode
929
        mov ecx,00FF0000h
930
        mov ebx,182*65536+24
931
        mov esi,6
932
        int 40h
933
        mov edx,actions
934
        mov ebx,173*65536+152
935
        mov esi,9
936
        int 40h
937
        xor ecx,ecx
938
        mov edx,button1
939
        mov ebx,59*65536+174
940
        mov esi,2
941
        int 40h
942
        add edx,esi
943
        mov esi,6
944
        add ebx,78*65536
945
        int 40h
946
        add edx,esi
947
        add ebx,90*65536
948
        int 40h
949
        add edx,esi
950
        mov esi,7
951
        add ebx,87*65536
952
        int 40h
953
        call rect_select
954
;        call debug_ftr
955
        call print_cur_vm
956
        call print_all_herz
957
        retn
958
 
959
warning_info:
960
        call warning_window
961
        call warning_loop
962
        retn
963
 
964
warning_window:
965
        mov  eax,12      ; function 12:tell os about windowdraw
966
        mov  ebx,1      ; 1, start of draw
967
        int  0x40
968
   ; DRAW WARNING WINDOW
969
        mov  eax,0      ; function 0 : define and draw window
970
;        mov  ebx,100*65536+400    ; [x start] *65536 + [x size]
971
        mov ebx,[oldX]
972
        shr ebx,1
973
        sub ebx,200
974
        shl ebx,16
975
        mov bx,400
976
;        mov  ecx,100*65536+200    ; [y start] *65536 + [y size]
977
        mov ecx,[oldY]
978
        shr ecx,1
979
        sub ecx,100
980
        shl ecx,16
981
        mov cx,200
982
        mov  edx,0x02808080     ; color of work area RRGGBB,8->color glide
983
        mov  esi,0x40300010     ; color of grab bar RRGGBB,8->color glide
984
        mov  edi,0x00ff0000     ; color of frames RRGGBB
985
        int  0x40
986
   ; WARNING WINDOW LABEL
987
        call print_my_title
988
   ; CLOSE BUTTON
989
        mov  eax,8      ; function 8 : define and draw button
990
        mov  ebx,(200-36)*65536+72    ; [x start] *65536 + [x size]
991
        mov  ecx,(160-9)*65536+18     ; [y start] *65536 + [y size]
992
        mov  edx,1      ; button id
993
        mov  esi,0x00800010     ; button color RRGGBB
994
        int  0x40
995
   ; WARNING TEXT
996
        mov  eax,4      ; function 4 : write text to window
997
            mov  ebx,(200-(len_warn00/2)*6)*65536+60    ; [x start] *65536 + [y
998
   ;]
999
        mov  ecx,0xf0ff0000     ; color of text RRGGBB
1000
        mov  edx,warn00        ; pointer to text beginning
1001
        mov  esi,len_warn00     ; text length
1002
;        int  0x40
1003
;        inc  ebx
1004
        int  40h
1005
        add  ebx,1*65536
1006
        int  40h
1007
        mov  ebx,(200-(len_warn01/2)*6)*65536+100
1008
        mov  edx,warn01
1009
        mov  esi,len_warn01
1010
        int  40h
1011
        mov  edx,button1
1012
        add  ecx,0ffffh
1013
        mov  ebx,(200-6)*65536+(160-4)
1014
        mov  esi,2
1015
        int 40h
1016
        mov  eax,12      ; function 12:tell os about windowdraw
1017
        mov  ebx,2      ; 2, end of draw
1018
        int  0x40
1019
        retn
1020
 
1021
warning_loop:
1022
        mov  eax,5
1023
        mov ebx,13
1024
        int  0x40
1025
        mov eax,11
1026
        int 40h
1027
        cmp  eax,1      ; redraw request ?
1028
        je  warning_red
1029
        cmp  eax,2      ; key in buffer ?
1030
        je  warning_key
1031
        cmp  eax,3      ; button in buffer ?
1032
        je  warning_button
1033
        mov  eax,4
1034
        mov  ebx,(200-(len_warn01/2)*6)*65536+100
1035
        mov  ecx,[blinkcol]
1036
        sub cl,12
1037
        dec cl
1038
        dec cl
1039
        dec cl
1040
        dec cl
1041
        mov [blinkcol],ecx
1042
        mov ch,0f0h
1043
        shl ecx,16
1044
        mov  edx,warn01
1045
        mov  esi,len_warn01
1046
        int  40h
1047
        sub ebx,1*65536
1048
        int 40h
1049
        jmp  warning_loop
1050
  warning_red:      ; redraw
1051
        call warning_window
1052
        jmp  warning_loop
1053
  warning_key:      ; key
1054
        mov  eax,2      ;  read key
1055
        int  0x40
1056
        cmp ah,01h
1057
        jne warning_loop
1058
        xor eax,eax
1059
        dec eax         ; Terminate application
1060
        int 40h
1061
        jmp warning_loop
1062
  warning_button:   ; button
1063
        mov  eax,17     ; get id
1064
        int  0x40
1065
        cmp  ah,1   ; button id=1 ?
1066
        jne  warning_loop
1067
        xor eax,eax
1068
        dec eax         ; close this program
1069
        int  0x40
1070
        jmp warning_loop
1071
        retn
1072
 
1073
;------------DATA AREA---------------
1074
 
1075
oldX       dd ?
1076
oldY       dd ?
1077
initvm     dd ?
1078
currvm     dd 0
1079
oldvm      dd 0
1080
refrate    dd 0
1081
initrr     dd 0
1082
mypid      dd ?
1083
mypno      dw ?
1084
totp       dd ?
1085
vmselect   dw 0
1086
ftr_eax    dd ?
1087
ftr_ebx    dd ?
1088
blinkcol   dd 0ffh
1089
 
1090
;  db 0,0,0,0,0,0,0,0
1091
;_m1        dw 0,0,0,0,0
1092
;_m2        dw 0,0,0,0,0
1093
;_m3        dw 0,0,0,0,0
1094
;_m4        dw 0,0,0,0,0
1095
 
1096
labelt:
1097
     db   'Vertical Refresh Rate, ver.2.0,  Copileft 2003 ;) TRANS'
1098
labellen:
1099
 
1100
_m1280x1024 db '1280x1024'
1101
_m1024x768  db '1024x768 '
1102
_m800x600   db ' 800x600 '
1103
_m640x480   db ' 640x480 '
1104
_mk         db 'Key1Key2'
1105
 
1106
curmode     db 'Current mode: '
1107
            db '    x    x   Hz'
1108
cmlen=$-curmode
1109
selmode     db ' Select mode: '
1110
selcans     db '----x----x---Hz'
1111
noherz      db '---'
1112
width       db 'Width',11h,10h
1113
tmode       db ' Mode '
1114
actions     db ' Actions '
1115
button1     db 'Ok'      ;len=2
1116
button2     db 'Cancel'  ;len=6
1117
button3     db 'Return'  ;len=6
1118
button4     db 'Default' ;len=7
1119
 
1120
strt  db 'LAUNCHER    '
1121
 
1122
warn00      db ' W  A  R  N  I  N  G  ! '
1123
len_warn00=$-warn00
1124
warn01      db 'V i d e o  D r i v e r  N O T  I n s t a l l e d'
1125
len_warn01=$-warn01
1126
 
1127
 
1128
drvinfo:   ; 512 bytes driver info area
1129
; +0   - Full driver name
1130
; +32  - Driver version
1131
; +64  - Word List of support video modes (max 32 positions)
1132
; +128 - 5 words list of support vertical rate to each present mode
1133
      org $+32
1134
drvver:
1135
      org $+32
1136
vidmode:
1137
      org $+64
1138
_m1:
1139
      org drvinfo+200h
1140
 
1141
buffer:
1142
I_END:
1143