forked from KolibriOS/kolibrios
1187 lines
22 KiB
NASM
1187 lines
22 KiB
NASM
|
;
|
||
|
; Vertical Refresh Rate programm
|
||
|
;
|
||
|
; Author: Trans <<< 13 >>>
|
||
|
; Date: February-May 2003 (09.05.2003)
|
||
|
; Version: 2.0
|
||
|
; Last Modification: 30.07.2003
|
||
|
; Compile with FASM for Menuet
|
||
|
;
|
||
|
use32
|
||
|
|
||
|
org 0x0
|
||
|
|
||
|
db 'MENUET01' ; 8 byte id
|
||
|
dd 0x01 ; header version
|
||
|
dd START ; start of code
|
||
|
dd I_END ; size of image
|
||
|
dd 0x5000 ; memory for app
|
||
|
dd 0x4ff0 ; esp
|
||
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||
|
|
||
|
include 'lang.inc'
|
||
|
START: ; start of execution
|
||
|
|
||
|
mov eax,14
|
||
|
int 40h
|
||
|
mov ebx,eax
|
||
|
shr ebx,16
|
||
|
mov [oldX],ebx
|
||
|
shl eax,16
|
||
|
shr eax,16
|
||
|
mov [oldY],eax
|
||
|
|
||
|
; Test on installed video driver
|
||
|
mov eax,21
|
||
|
mov ebx,13
|
||
|
mov ecx,1
|
||
|
mov edx,drvinfo
|
||
|
int 40h
|
||
|
cmp eax,0FFFFFFFFh ; = -1 - error or not installed
|
||
|
jne vrr_00
|
||
|
call warning_info
|
||
|
retn
|
||
|
;
|
||
|
|
||
|
vrr_00:
|
||
|
call get_vert_rate
|
||
|
mov eax,[currvm]
|
||
|
mov [oldvm],eax
|
||
|
call get_pid
|
||
|
call draw_window ; at first, draw the window
|
||
|
|
||
|
still:
|
||
|
|
||
|
mov eax,10 ; check here for event
|
||
|
int 0x40
|
||
|
|
||
|
cmp eax,1 ; redraw request ?
|
||
|
je red
|
||
|
cmp eax,2 ; key in buffer ?
|
||
|
je key
|
||
|
cmp eax,3 ; button in buffer ?
|
||
|
je button
|
||
|
call get_pid
|
||
|
jmp still
|
||
|
|
||
|
red: ; redraw
|
||
|
call draw_window
|
||
|
jmp still
|
||
|
|
||
|
key: ; key
|
||
|
mov eax,2 ; just read it
|
||
|
int 0x40
|
||
|
cmp ah,'1'
|
||
|
jne key_loc_00
|
||
|
call safekey
|
||
|
jmp still
|
||
|
key_loc_00:
|
||
|
cmp ah,'2'
|
||
|
jne key_loc_01
|
||
|
call safekey
|
||
|
jmp still
|
||
|
key_loc_01:
|
||
|
cmp ah,'3'
|
||
|
jne key_loc_02
|
||
|
call safekey
|
||
|
jmp still
|
||
|
key_loc_02:
|
||
|
cmp ah,'4'
|
||
|
jne key_loc_03
|
||
|
call safekey
|
||
|
jmp still
|
||
|
key_loc_03:
|
||
|
cmp ah,'5'
|
||
|
jne key_loc_04
|
||
|
call safekey
|
||
|
jmp still
|
||
|
key_loc_04:
|
||
|
cmp ah,'-'
|
||
|
jne key_loc_05
|
||
|
xor eax,eax
|
||
|
call inc_dec_rate
|
||
|
jmp still
|
||
|
key_loc_05:
|
||
|
cmp ah,'+'
|
||
|
jne key_loc_06
|
||
|
xor eax,eax
|
||
|
inc eax
|
||
|
call inc_dec_rate
|
||
|
jmp still
|
||
|
key_loc_06:
|
||
|
cmp ah,'r' ;Return in last stable mode
|
||
|
jne key_loc_07
|
||
|
call restore_mode
|
||
|
jmp red
|
||
|
key_loc_07:
|
||
|
cmp ah,13 ;Apply select mode
|
||
|
jne still
|
||
|
xor eax,eax
|
||
|
mov ax,[vmselect]
|
||
|
cmp al,0
|
||
|
je still
|
||
|
xor ebx,ebx
|
||
|
mov bl,al
|
||
|
dec bl
|
||
|
shl bx,1 ; ebx=(ebx-1)*2
|
||
|
xor edx,edx
|
||
|
mov dx,[vidmode+ebx]
|
||
|
mov ecx,ebx
|
||
|
shl ebx,2
|
||
|
add ebx,ecx ; ebx=ebx*5
|
||
|
shr ax,8
|
||
|
dec ax
|
||
|
shl ax,1
|
||
|
add ebx,eax
|
||
|
ror edx,16
|
||
|
mov dx,[_m1+ebx]
|
||
|
rol edx,16
|
||
|
call set_my_mode
|
||
|
call protect_and_return
|
||
|
xor ax,ax
|
||
|
mov [vmselect],ax
|
||
|
jmp red
|
||
|
|
||
|
button: ; button
|
||
|
mov eax,17 ; get id
|
||
|
int 0x40
|
||
|
|
||
|
cmp ah,1 ; button id=1 ?
|
||
|
jne noclose
|
||
|
mov eax,-1 ; close this program
|
||
|
int 0x40
|
||
|
noclose:
|
||
|
cmp ah,2 ;'+' screen width
|
||
|
jne button_loc_01
|
||
|
xor eax,eax
|
||
|
inc eax
|
||
|
call inc_dec_rate
|
||
|
jmp still
|
||
|
button_loc_01:
|
||
|
cmp ah,3 ;'-' screen width
|
||
|
jne button_loc_02
|
||
|
xor eax,eax
|
||
|
call inc_dec_rate
|
||
|
jmp still
|
||
|
button_loc_02:
|
||
|
cmp ah,4 ; Ok
|
||
|
jne button_loc_03
|
||
|
mov ah,13
|
||
|
jmp key_loc_07
|
||
|
button_loc_03:
|
||
|
cmp ah,5 ; Cancel
|
||
|
jne button_loc_04
|
||
|
mov [vmselect],word 00h
|
||
|
jmp red
|
||
|
button_loc_04:
|
||
|
cmp ah,6 ; Return
|
||
|
jne button_loc_05
|
||
|
mov ah,'r'
|
||
|
jmp key_loc_06
|
||
|
button_loc_05:
|
||
|
cmp ah,7 ; Default
|
||
|
jne button_loc_06
|
||
|
call restore_mode
|
||
|
button_loc_06:
|
||
|
jmp still
|
||
|
|
||
|
|
||
|
; *********************************************
|
||
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||
|
; *********************************************
|
||
|
|
||
|
|
||
|
draw_window:
|
||
|
|
||
|
dw_continue:
|
||
|
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,1 ; 1, start of draw
|
||
|
int 0x40
|
||
|
|
||
|
; DRAW WINDOW
|
||
|
mov eax,0 ; function 0 : define and draw window
|
||
|
mov ebx,100*65536+400 ; [x start] *65536 + [x size]
|
||
|
mov ecx,100*65536+200 ; [y start] *65536 + [y size]
|
||
|
mov edx,0x020020C0;0x00000040 ; color of work area RRGGBB,8->color glide
|
||
|
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color glide
|
||
|
mov edi,0x00ffffff ; color of frames RRGGBB
|
||
|
int 0x40
|
||
|
|
||
|
; WINDOW LABEL
|
||
|
call print_my_title
|
||
|
|
||
|
; CLOSE BUTTON
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov ebx,(400-19)*65536+12 ; [x start] *65536 + [x size]
|
||
|
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
||
|
mov edx,1 ; button id
|
||
|
mov esi,0x5599cc ; button color RRGGBB
|
||
|
int 0x40
|
||
|
|
||
|
; BUTTONS
|
||
|
xor eax,eax
|
||
|
mov edx,eax
|
||
|
mov al,8
|
||
|
mov ebx,330*65536+20
|
||
|
mov ecx,84*65536+48
|
||
|
mov dl,2
|
||
|
int 40h ; Button '+'Width
|
||
|
add ebx,30*65536
|
||
|
mov dl,3
|
||
|
int 40h ; Button '-'Width
|
||
|
mov ebx,22*65536+85
|
||
|
mov ecx,170*65536+15
|
||
|
inc dl ;dl=4
|
||
|
int 40h ; Button 'Ok'
|
||
|
add ebx,90*65536
|
||
|
inc dl ;dl=5
|
||
|
int 40h ; Button 'Cancel'
|
||
|
add ebx,90*65536
|
||
|
inc dl ;dl=6
|
||
|
int 40h ; Button 'Return'
|
||
|
add ebx,90*65536
|
||
|
inc dl ;dl=7
|
||
|
int 40h ; Button 'Default'
|
||
|
|
||
|
call draw_face
|
||
|
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,2 ; 2, end of draw
|
||
|
int 0x40
|
||
|
|
||
|
ret
|
||
|
|
||
|
;------------Subfunctions-----------
|
||
|
|
||
|
restore_mode:
|
||
|
push eax
|
||
|
push ebx
|
||
|
push edx
|
||
|
call kill_all
|
||
|
mov eax,21
|
||
|
mov ebx,13
|
||
|
mov ecx,4
|
||
|
int 40h
|
||
|
call ref_screen
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop eax
|
||
|
retn
|
||
|
|
||
|
|
||
|
|
||
|
; IN: edx = RefRate*65536+No.VideoMode
|
||
|
set_my_mode:
|
||
|
push ecx
|
||
|
push ebx
|
||
|
push edx
|
||
|
mov eax,[currvm]
|
||
|
mov [oldvm],eax
|
||
|
mov [currvm],edx
|
||
|
call kill_all
|
||
|
pop edx
|
||
|
push edx
|
||
|
mov eax,21
|
||
|
mov ebx,13
|
||
|
mov ecx,3
|
||
|
int 40h
|
||
|
pop edx
|
||
|
pop ebx
|
||
|
pop ecx
|
||
|
call ref_screen
|
||
|
retn
|
||
|
|
||
|
; IN: eax = 0/1 - -/+ 1Hz
|
||
|
inc_dec_rate:
|
||
|
push ebx
|
||
|
push ecx
|
||
|
push edx
|
||
|
mov edx,eax
|
||
|
mov eax,21
|
||
|
mov ebx,13
|
||
|
mov ecx,5
|
||
|
int 40h
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
retn
|
||
|
|
||
|
|
||
|
ref_screen:
|
||
|
push eax
|
||
|
push ebx
|
||
|
push ecx
|
||
|
mov eax,5
|
||
|
mov ebx,100
|
||
|
int 40h
|
||
|
mov eax,19
|
||
|
mov ebx,strt
|
||
|
xor ecx,ecx
|
||
|
int 40h
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
pop eax
|
||
|
retn
|
||
|
|
||
|
get_pid:
|
||
|
mov eax,9
|
||
|
mov ebx,buffer
|
||
|
xor ecx,ecx
|
||
|
dec ecx
|
||
|
int 40h
|
||
|
mov [totp],eax
|
||
|
mov eax,[ebx+30]
|
||
|
mov [mypid],eax
|
||
|
mov ax,[ebx+4]
|
||
|
mov [mypno],ax
|
||
|
retn
|
||
|
|
||
|
get_vert_rate:
|
||
|
xor eax,eax
|
||
|
mov ebx,eax
|
||
|
mov ecx,eax
|
||
|
mov al,21
|
||
|
mov bl,13
|
||
|
mov cl,2
|
||
|
int 40h
|
||
|
mov [initrr],ebx
|
||
|
mov [refrate],ebx
|
||
|
ror ecx,16
|
||
|
mov cx,bx
|
||
|
rol ecx,16
|
||
|
mov [currvm],ecx
|
||
|
retn
|
||
|
|
||
|
kill_all:
|
||
|
call get_pid
|
||
|
mov ecx,[totp]
|
||
|
ka_loc_00:
|
||
|
push ecx
|
||
|
push ecx
|
||
|
mov eax,9
|
||
|
mov ebx,buffer
|
||
|
int 40h
|
||
|
pop ecx
|
||
|
mov eax,[mypid]
|
||
|
cmp eax,[ebx+30]
|
||
|
je ka_loc_02
|
||
|
mov eax,18
|
||
|
mov ebx,2
|
||
|
int 40h
|
||
|
ka_loc_02:
|
||
|
pop ecx
|
||
|
loop ka_loc_00
|
||
|
retn
|
||
|
|
||
|
|
||
|
get_initial_videomode:
|
||
|
retn
|
||
|
|
||
|
|
||
|
draw_table:
|
||
|
mov eax,13
|
||
|
mov ebx,9*65536+303
|
||
|
mov ecx,59*65536+87
|
||
|
xor edx,edx
|
||
|
int 40h
|
||
|
mov ebx,10*65536+300
|
||
|
mov ecx,60*65536+24
|
||
|
mov edx,00FF00FFh
|
||
|
int 40h
|
||
|
mov ebx,10*65536+36
|
||
|
mov ecx,72*65536+72
|
||
|
mov edx,0000FFFFh
|
||
|
int 40h
|
||
|
mov eax,38
|
||
|
mov edx,00FFFFFFh
|
||
|
mov ebx,10*65536+310
|
||
|
mov edi,60*65536+60
|
||
|
mov esi,12*65536+12
|
||
|
xor ecx,ecx
|
||
|
mov cl,8
|
||
|
dt_loc_hor_line:
|
||
|
push ecx
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
add edi,esi
|
||
|
pop ecx
|
||
|
loop dt_loc_hor_line
|
||
|
mov ebx,10*65536+10
|
||
|
mov edi,60*65536+144
|
||
|
mov esi,66*65536+66
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
add ebx,36*65536+36
|
||
|
xor ecx,ecx
|
||
|
mov cl,5
|
||
|
dt_loc_vert_line:
|
||
|
push ecx
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
add ebx,esi
|
||
|
pop ecx
|
||
|
loop dt_loc_vert_line
|
||
|
mov eax,4
|
||
|
mov ebx,52*65536+75
|
||
|
mov ecx,000000FFh
|
||
|
mov edx,_m1280x1024
|
||
|
mov esi,9
|
||
|
int 40h
|
||
|
add edx,9
|
||
|
add ebx,66*65536
|
||
|
int 40h
|
||
|
add edx,9
|
||
|
add ebx,66*65536
|
||
|
int 40h
|
||
|
add edx,9
|
||
|
add ebx,66*65536
|
||
|
int 40h
|
||
|
xor eax,eax
|
||
|
mov ebx,eax
|
||
|
mov ecx,eax
|
||
|
mov al,47
|
||
|
inc ebx
|
||
|
shl ebx,16
|
||
|
inc ecx
|
||
|
mov edi,ecx
|
||
|
mov edx,22*65536+86
|
||
|
mov esi,00FF0000h
|
||
|
mov ecx,5
|
||
|
dt_loc_00:
|
||
|
push ecx
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
inc edi
|
||
|
add dx,12
|
||
|
pop ecx
|
||
|
loop dt_loc_00
|
||
|
xor ecx,ecx
|
||
|
inc ecx
|
||
|
mov edi,ecx
|
||
|
mov edx,76*65536+63
|
||
|
mov esi,000000FFh
|
||
|
mov ecx,4
|
||
|
dt_loc_01:
|
||
|
push ecx
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
inc edi
|
||
|
add edx,66*65536
|
||
|
pop ecx
|
||
|
loop dt_loc_01
|
||
|
mov eax,4
|
||
|
mov ebx,16*65536+63
|
||
|
mov ecx,000000FFh
|
||
|
mov edx,_mk
|
||
|
mov esi,4
|
||
|
int 40h
|
||
|
shl ecx,16
|
||
|
add bx,12
|
||
|
add edx,4
|
||
|
int 40h
|
||
|
retn
|
||
|
|
||
|
;IN: ah=keycode
|
||
|
safekey:
|
||
|
sub ah,30h
|
||
|
push bx
|
||
|
mov bx,word [vmselect]
|
||
|
cmp bx,0
|
||
|
jnz sk_loc_00
|
||
|
cmp ah,5
|
||
|
je sk_loc_01
|
||
|
mov bl,ah
|
||
|
mov [vmselect],bx
|
||
|
jmp sk_loc_01
|
||
|
sk_loc_00:
|
||
|
push esi
|
||
|
push edx
|
||
|
push ecx
|
||
|
push eax
|
||
|
mov bh,ah
|
||
|
xor edx,edx
|
||
|
mov esi,_m1
|
||
|
mov al,bl
|
||
|
dec al
|
||
|
xor ah,ah
|
||
|
mov cx,10
|
||
|
mul cx
|
||
|
xor ecx,ecx
|
||
|
mov cx,ax
|
||
|
xor ax,ax
|
||
|
mov al,bh
|
||
|
dec al
|
||
|
shl ax,1
|
||
|
add cx,ax
|
||
|
add esi,ecx
|
||
|
lodsw
|
||
|
cmp ax,0
|
||
|
jnz sk_loc_02
|
||
|
xor eax,eax
|
||
|
mov bh,ah
|
||
|
sk_loc_02:
|
||
|
mov [vmselect],bx
|
||
|
pop eax
|
||
|
pop ecx
|
||
|
pop edx
|
||
|
pop esi
|
||
|
sk_loc_01:
|
||
|
call draw_window
|
||
|
pop bx
|
||
|
retn
|
||
|
|
||
|
; IN: ebx=Xstart*65536+Xend
|
||
|
; ecx=Ystart*65536+Yend
|
||
|
; edx=color
|
||
|
draw_rect:
|
||
|
push eax
|
||
|
push ebx
|
||
|
push ecx
|
||
|
push edx
|
||
|
push edi
|
||
|
xor eax,eax
|
||
|
mov al,38
|
||
|
push ecx
|
||
|
mov edi,ecx
|
||
|
shr edi,16
|
||
|
mov cx,di
|
||
|
int 40h
|
||
|
pop ecx
|
||
|
push ecx
|
||
|
mov edi,ecx
|
||
|
ror ecx,16
|
||
|
mov cx,di
|
||
|
int 40h
|
||
|
pop ecx
|
||
|
push ebx
|
||
|
mov edi,ebx
|
||
|
shr edi,16
|
||
|
mov bx,di
|
||
|
int 40h
|
||
|
pop ebx
|
||
|
mov edi,ebx
|
||
|
ror ebx,16
|
||
|
mov bx,di
|
||
|
int 40h
|
||
|
pop edi
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
pop eax
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
; OUT: eax = 0 - no event
|
||
|
protect_and_return:
|
||
|
push ebx
|
||
|
push ecx
|
||
|
xor eax,eax
|
||
|
mov al,5
|
||
|
xor ebx,ebx
|
||
|
mov bx,300
|
||
|
int 40h
|
||
|
call get_pid
|
||
|
xor eax,eax
|
||
|
mov ebx,eax
|
||
|
mov ecx,eax
|
||
|
mov al,18
|
||
|
mov ebx,3
|
||
|
mov cx,[mypno]
|
||
|
int 40h
|
||
|
pop ecx
|
||
|
pusha
|
||
|
call draw_window
|
||
|
popa
|
||
|
xor eax,eax
|
||
|
mov al,5
|
||
|
xor ebx,ebx
|
||
|
mov bx,300
|
||
|
int 40h
|
||
|
xor eax,eax
|
||
|
mov al,11
|
||
|
int 40h
|
||
|
cmp eax,1
|
||
|
jne par_loc_00
|
||
|
pusha
|
||
|
call draw_window
|
||
|
popa
|
||
|
par_loc_00:
|
||
|
xor eax,eax
|
||
|
mov ebx,eax
|
||
|
mov al,23
|
||
|
mov bx,700
|
||
|
int 40h
|
||
|
cmp eax,0
|
||
|
jnz par_loc_02
|
||
|
; mov [ftr_eax],eax
|
||
|
mov edx,[oldvm]
|
||
|
call set_my_mode
|
||
|
par_loc_02:
|
||
|
pop ebx
|
||
|
retn
|
||
|
|
||
|
debug_ftr:
|
||
|
; xor eax,eax
|
||
|
; mov ebx,eax
|
||
|
; mov al,47
|
||
|
; mov bl,8
|
||
|
; shl ebx,16
|
||
|
; mov bh,1
|
||
|
; mov ecx,[ftr_eax]
|
||
|
; mov edx,20*65536+180
|
||
|
; mov esi,00FFFFFFh
|
||
|
; int 40h
|
||
|
; mov ecx,[ftr_ebx]
|
||
|
; add edx,54*65536
|
||
|
; int 40h
|
||
|
retn
|
||
|
|
||
|
print_cur_vm:
|
||
|
mov eax,4
|
||
|
mov ebx,20*65536+40
|
||
|
mov ecx,0000FF00h
|
||
|
mov edx,curmode
|
||
|
mov esi,cmlen
|
||
|
int 40h
|
||
|
mov al,14
|
||
|
int 40h
|
||
|
mov esi,00FFFFFFh
|
||
|
mov edi,eax
|
||
|
shr eax,16
|
||
|
xor ecx,ecx
|
||
|
mov cx,ax
|
||
|
inc ecx
|
||
|
xor ebx,ebx
|
||
|
mov bl,4
|
||
|
shl ebx,16
|
||
|
mov edx,104*65536+40
|
||
|
mov eax,47
|
||
|
int 40h
|
||
|
add edx,30*65536
|
||
|
mov cx,di
|
||
|
inc ecx
|
||
|
int 40h
|
||
|
add edx,30*65536
|
||
|
mov ecx,[initrr]
|
||
|
sub ebx,1*65536
|
||
|
int 40h
|
||
|
mov al,4
|
||
|
mov ebx,200*65536+40
|
||
|
mov ecx,0000FF00h
|
||
|
mov edx,selmode
|
||
|
mov esi,cmlen
|
||
|
int 40h
|
||
|
mov ax,[vmselect]
|
||
|
cmp ax,0
|
||
|
jz pcv_loc_00
|
||
|
push eax
|
||
|
xor eax,eax
|
||
|
mov al,13
|
||
|
mov ebx,284*65536+54
|
||
|
mov ecx,40*65536+10
|
||
|
mov edx,000020C0h
|
||
|
int 40h
|
||
|
pop eax
|
||
|
push eax
|
||
|
xor ecx,ecx
|
||
|
dec al
|
||
|
mov cl,al
|
||
|
shl cx,3
|
||
|
add cl,al ; cx=(al-1)*9
|
||
|
mov edx,_m1280x1024
|
||
|
add edx,ecx
|
||
|
xor eax,eax
|
||
|
mov al,4
|
||
|
mov esi,9
|
||
|
mov ebx,284*65536+40
|
||
|
mov ecx,00ff0000h
|
||
|
int 40h
|
||
|
pop eax
|
||
|
cmp ah,0
|
||
|
jz pcv_loc_00
|
||
|
push esi
|
||
|
push edx
|
||
|
push ecx
|
||
|
push eax
|
||
|
xor eax,eax
|
||
|
mov al,13
|
||
|
mov ebx,344*65536+18
|
||
|
mov ecx,40*65536+10
|
||
|
mov edx,000020C0h
|
||
|
int 40h
|
||
|
pop eax
|
||
|
push eax
|
||
|
mov bx,ax
|
||
|
xor edx,edx
|
||
|
mov esi,_m1
|
||
|
mov al,bl
|
||
|
dec al
|
||
|
xor ah,ah
|
||
|
mov cx,10
|
||
|
mul cx
|
||
|
xor ecx,ecx
|
||
|
mov cx,ax
|
||
|
xor ax,ax
|
||
|
mov al,bh
|
||
|
dec al
|
||
|
shl ax,1
|
||
|
add cx,ax
|
||
|
add esi,ecx
|
||
|
lodsw
|
||
|
xor ecx,ecx
|
||
|
mov cx,ax
|
||
|
xor ebx,ebx
|
||
|
mov bl,3
|
||
|
shl ebx,16
|
||
|
mov edx,344*65536+40
|
||
|
xor eax,eax
|
||
|
mov al,47
|
||
|
mov esi,00ff0000h
|
||
|
int 40h
|
||
|
pop eax
|
||
|
pop ecx
|
||
|
pop edx
|
||
|
pop esi
|
||
|
pcv_loc_00:
|
||
|
retn
|
||
|
|
||
|
print_all_herz:
|
||
|
push esi
|
||
|
push edi
|
||
|
push eax
|
||
|
push ebx
|
||
|
push ecx
|
||
|
push edx
|
||
|
cld
|
||
|
mov esi,_m1
|
||
|
mov ebx,(10+36+26)*65536+86
|
||
|
mov edx,66*65536
|
||
|
xor ecx,ecx
|
||
|
mov cl,4
|
||
|
pah_loc_00:
|
||
|
push ecx
|
||
|
push edx
|
||
|
push ebx
|
||
|
mov cl,5
|
||
|
xor edx,edx
|
||
|
mov dl,12
|
||
|
pah_loc_01:
|
||
|
lodsw
|
||
|
cmp ax,00h
|
||
|
jnz pah_loc_02
|
||
|
call print_noherz
|
||
|
jmp pah_loc_03
|
||
|
pah_loc_02:
|
||
|
call print_herz
|
||
|
pah_loc_03:
|
||
|
add ebx,edx
|
||
|
loop pah_loc_01
|
||
|
pop ebx
|
||
|
pop edx
|
||
|
add ebx,edx
|
||
|
pop ecx
|
||
|
loop pah_loc_00
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
pop eax
|
||
|
pop edi
|
||
|
pop esi
|
||
|
retn
|
||
|
|
||
|
; IN: ebx=X*65536+Y - coordinate
|
||
|
print_noherz:
|
||
|
push eax
|
||
|
push ebx
|
||
|
push ecx
|
||
|
push edx
|
||
|
push esi
|
||
|
xor eax,eax
|
||
|
mov al,4
|
||
|
mov ecx,00FFFFFFh
|
||
|
mov edx,noherz
|
||
|
xor esi,esi
|
||
|
mov si,3
|
||
|
int 40h
|
||
|
pop esi
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
pop eax
|
||
|
retn
|
||
|
|
||
|
; IN: eax=numer_of_herz
|
||
|
; ebx=X*65536+Y
|
||
|
print_herz:
|
||
|
push eax
|
||
|
push ebx
|
||
|
push ecx
|
||
|
push edx
|
||
|
push esi
|
||
|
mov edx,ebx
|
||
|
xor ebx,ebx
|
||
|
mov bl,3
|
||
|
shl ebx,16
|
||
|
mov ecx,eax
|
||
|
mov esi,00FFFFFFh
|
||
|
xor eax,eax
|
||
|
mov al,47
|
||
|
int 40h
|
||
|
pop esi
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
pop ebx
|
||
|
pop eax
|
||
|
retn
|
||
|
|
||
|
get_pixelclock:
|
||
|
retn
|
||
|
|
||
|
; light version of function
|
||
|
calc_refrate:
|
||
|
retn
|
||
|
|
||
|
rect_select:
|
||
|
mov ax,[vmselect]
|
||
|
; mov [ftr_ebx],eax
|
||
|
cmp ax,00h
|
||
|
je rs_loc_00
|
||
|
cmp ah,0
|
||
|
jne rs_loc_01
|
||
|
dec al
|
||
|
mov cx,66
|
||
|
mul cx
|
||
|
add ax,46
|
||
|
mov bx,ax
|
||
|
shl ebx,16
|
||
|
add ax,66
|
||
|
mov bx,ax
|
||
|
mov ecx,60*65536+144
|
||
|
mov edx,00ff0000h
|
||
|
call draw_rect
|
||
|
retn
|
||
|
rs_loc_01:
|
||
|
push ax
|
||
|
xor ah,ah
|
||
|
dec al
|
||
|
xor ebx,ebx
|
||
|
mov bx,66
|
||
|
mul bx
|
||
|
add ax,46
|
||
|
mov bx,ax
|
||
|
shl ebx,16
|
||
|
add ax,66
|
||
|
mov bx,ax
|
||
|
pop ax
|
||
|
xchg ah,al
|
||
|
xor ah,ah
|
||
|
dec al
|
||
|
xor ecx,ecx
|
||
|
mov cx,12
|
||
|
mul cx
|
||
|
add ax,84
|
||
|
mov cx,ax
|
||
|
shl ecx,16
|
||
|
add ax,12
|
||
|
mov cx,ax
|
||
|
mov edx,00ff0000h
|
||
|
call draw_rect
|
||
|
rs_loc_00:
|
||
|
retn
|
||
|
|
||
|
print_my_title:
|
||
|
pusha
|
||
|
xor eax,eax
|
||
|
mov ecx,eax
|
||
|
mov cl,labellen-labelt
|
||
|
mov al,4
|
||
|
mov edx,labelt
|
||
|
mov ebx,8*65536+8
|
||
|
mov edi,00ff0000h
|
||
|
xor esi,esi
|
||
|
inc esi
|
||
|
pmt_loc_00:
|
||
|
push ecx
|
||
|
mov ecx,edi
|
||
|
int 40h
|
||
|
inc edx
|
||
|
sub edi,4*65536
|
||
|
add edi,4*256
|
||
|
add ebx,6*65536
|
||
|
pop ecx
|
||
|
loop pmt_loc_00
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
|
||
|
draw_face:
|
||
|
call draw_table
|
||
|
;
|
||
|
;
|
||
|
mov ebx,320*65536+390
|
||
|
mov ecx,66*65536+144
|
||
|
mov edx,0000FF00h
|
||
|
call draw_rect
|
||
|
mov ebx,10*65536+390
|
||
|
mov ecx,27*65536+55
|
||
|
call draw_rect
|
||
|
add ebx,2*65536
|
||
|
sub bx,2
|
||
|
add ecx,2*65536
|
||
|
sub cx,2
|
||
|
call draw_rect
|
||
|
mov ebx,10*65536+390
|
||
|
mov ecx,155*65536+193
|
||
|
call draw_rect
|
||
|
add ebx,2*65536
|
||
|
sub bx,2
|
||
|
add ecx,2*65536
|
||
|
sub cx,2
|
||
|
call draw_rect
|
||
|
xor eax,eax
|
||
|
mov al,13
|
||
|
mov ebx,182*65536+36
|
||
|
mov ecx,26*65536+5
|
||
|
mov edx,000020C0h
|
||
|
int 40h
|
||
|
mov ebx,173*65536+54
|
||
|
mov ecx,153*65536+7
|
||
|
int 40h
|
||
|
mov ebx,337*65536+36
|
||
|
mov ecx,62*65536+10
|
||
|
int 40h
|
||
|
mov al,4
|
||
|
shr ecx,16
|
||
|
mov bx,cx
|
||
|
add ebx,3*65536
|
||
|
mov ecx,00FF0000h
|
||
|
mov edx,width
|
||
|
mov esi,5
|
||
|
int 40h
|
||
|
xor ecx,ecx
|
||
|
add edx,5
|
||
|
xor esi,esi
|
||
|
inc esi
|
||
|
mov ebx,335*65536+104
|
||
|
int 40h
|
||
|
add ebx,36*65536
|
||
|
inc edx
|
||
|
int 40h
|
||
|
mov edx,tmode
|
||
|
mov ecx,00FF0000h
|
||
|
mov ebx,182*65536+24
|
||
|
mov esi,6
|
||
|
int 40h
|
||
|
mov edx,actions
|
||
|
mov ebx,173*65536+152
|
||
|
mov esi,9
|
||
|
int 40h
|
||
|
xor ecx,ecx
|
||
|
mov edx,button1
|
||
|
mov ebx,59*65536+174
|
||
|
mov esi,2
|
||
|
int 40h
|
||
|
add edx,esi
|
||
|
mov esi,6
|
||
|
add ebx,78*65536
|
||
|
int 40h
|
||
|
add edx,esi
|
||
|
add ebx,90*65536
|
||
|
int 40h
|
||
|
add edx,esi
|
||
|
mov esi,7
|
||
|
add ebx,87*65536
|
||
|
int 40h
|
||
|
call rect_select
|
||
|
; call debug_ftr
|
||
|
call print_cur_vm
|
||
|
call print_all_herz
|
||
|
retn
|
||
|
|
||
|
warning_info:
|
||
|
call warning_window
|
||
|
call warning_loop
|
||
|
retn
|
||
|
|
||
|
warning_window:
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,1 ; 1, start of draw
|
||
|
int 0x40
|
||
|
; DRAW WARNING WINDOW
|
||
|
mov eax,0 ; function 0 : define and draw window
|
||
|
; mov ebx,100*65536+400 ; [x start] *65536 + [x size]
|
||
|
mov ebx,[oldX]
|
||
|
shr ebx,1
|
||
|
sub ebx,200
|
||
|
shl ebx,16
|
||
|
mov bx,400
|
||
|
; mov ecx,100*65536+200 ; [y start] *65536 + [y size]
|
||
|
mov ecx,[oldY]
|
||
|
shr ecx,1
|
||
|
sub ecx,100
|
||
|
shl ecx,16
|
||
|
mov cx,200
|
||
|
mov edx,0x02808080 ; color of work area RRGGBB,8->color glide
|
||
|
mov esi,0x40300010 ; color of grab bar RRGGBB,8->color glide
|
||
|
mov edi,0x00ff0000 ; color of frames RRGGBB
|
||
|
int 0x40
|
||
|
; WARNING WINDOW LABEL
|
||
|
call print_my_title
|
||
|
; CLOSE BUTTON
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov ebx,(200-36)*65536+72 ; [x start] *65536 + [x size]
|
||
|
mov ecx,(160-9)*65536+18 ; [y start] *65536 + [y size]
|
||
|
mov edx,1 ; button id
|
||
|
mov esi,0x00800010 ; button color RRGGBB
|
||
|
int 0x40
|
||
|
; WARNING TEXT
|
||
|
mov eax,4 ; function 4 : write text to window
|
||
|
mov ebx,(200-(len_warn00/2)*6)*65536+60 ; [x start] *65536 + [y
|
||
|
;]
|
||
|
mov ecx,0xf0ff0000 ; color of text RRGGBB
|
||
|
mov edx,warn00 ; pointer to text beginning
|
||
|
mov esi,len_warn00 ; text length
|
||
|
; int 0x40
|
||
|
; inc ebx
|
||
|
int 40h
|
||
|
add ebx,1*65536
|
||
|
int 40h
|
||
|
mov ebx,(200-(len_warn01/2)*6)*65536+100
|
||
|
mov edx,warn01
|
||
|
mov esi,len_warn01
|
||
|
int 40h
|
||
|
mov edx,button1
|
||
|
add ecx,0ffffh
|
||
|
mov ebx,(200-6)*65536+(160-4)
|
||
|
mov esi,2
|
||
|
int 40h
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,2 ; 2, end of draw
|
||
|
int 0x40
|
||
|
retn
|
||
|
|
||
|
warning_loop:
|
||
|
mov eax,5
|
||
|
mov ebx,13
|
||
|
int 0x40
|
||
|
mov eax,11
|
||
|
int 40h
|
||
|
cmp eax,1 ; redraw request ?
|
||
|
je warning_red
|
||
|
cmp eax,2 ; key in buffer ?
|
||
|
je warning_key
|
||
|
cmp eax,3 ; button in buffer ?
|
||
|
je warning_button
|
||
|
mov eax,4
|
||
|
mov ebx,(200-(len_warn01/2)*6)*65536+100
|
||
|
mov ecx,[blinkcol]
|
||
|
sub cl,12
|
||
|
dec cl
|
||
|
dec cl
|
||
|
dec cl
|
||
|
dec cl
|
||
|
mov [blinkcol],ecx
|
||
|
mov ch,0f0h
|
||
|
shl ecx,16
|
||
|
mov edx,warn01
|
||
|
mov esi,len_warn01
|
||
|
int 40h
|
||
|
sub ebx,1*65536
|
||
|
int 40h
|
||
|
jmp warning_loop
|
||
|
warning_red: ; redraw
|
||
|
call warning_window
|
||
|
jmp warning_loop
|
||
|
warning_key: ; key
|
||
|
mov eax,2 ; read key
|
||
|
int 0x40
|
||
|
cmp ah,01h
|
||
|
jne warning_loop
|
||
|
xor eax,eax
|
||
|
dec eax ; Terminate application
|
||
|
int 40h
|
||
|
jmp warning_loop
|
||
|
warning_button: ; button
|
||
|
mov eax,17 ; get id
|
||
|
int 0x40
|
||
|
cmp ah,1 ; button id=1 ?
|
||
|
jne warning_loop
|
||
|
xor eax,eax
|
||
|
dec eax ; close this program
|
||
|
int 0x40
|
||
|
jmp warning_loop
|
||
|
retn
|
||
|
|
||
|
;------------DATA AREA---------------
|
||
|
|
||
|
oldX dd ?
|
||
|
oldY dd ?
|
||
|
initvm dd ?
|
||
|
currvm dd 0
|
||
|
oldvm dd 0
|
||
|
refrate dd 0
|
||
|
initrr dd 0
|
||
|
mypid dd ?
|
||
|
mypno dw ?
|
||
|
totp dd ?
|
||
|
vmselect dw 0
|
||
|
ftr_eax dd ?
|
||
|
ftr_ebx dd ?
|
||
|
blinkcol dd 0ffh
|
||
|
|
||
|
; db 0,0,0,0,0,0,0,0
|
||
|
;_m1 dw 0,0,0,0,0
|
||
|
;_m2 dw 0,0,0,0,0
|
||
|
;_m3 dw 0,0,0,0,0
|
||
|
;_m4 dw 0,0,0,0,0
|
||
|
|
||
|
labelt:
|
||
|
db 'Vertical Refresh Rate, ver.2.0, Copileft 2003 ;) TRANS'
|
||
|
labellen:
|
||
|
|
||
|
_m1280x1024 db '1280x1024'
|
||
|
_m1024x768 db '1024x768 '
|
||
|
_m800x600 db ' 800x600 '
|
||
|
_m640x480 db ' 640x480 '
|
||
|
_mk db 'Key1Key2'
|
||
|
|
||
|
curmode db 'Current mode: '
|
||
|
db ' x x Hz'
|
||
|
cmlen=$-curmode
|
||
|
selmode db ' Select mode: '
|
||
|
selcans db '----x----x---Hz'
|
||
|
noherz db '---'
|
||
|
width db 'Width',11h,10h
|
||
|
tmode db ' Mode '
|
||
|
actions db ' Actions '
|
||
|
button1 db 'Ok' ;len=2
|
||
|
button2 db 'Cancel' ;len=6
|
||
|
button3 db 'Return' ;len=6
|
||
|
button4 db 'Default' ;len=7
|
||
|
|
||
|
strt db 'LAUNCHER '
|
||
|
|
||
|
warn00 db ' W A R N I N G ! '
|
||
|
len_warn00=$-warn00
|
||
|
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'
|
||
|
len_warn01=$-warn01
|
||
|
|
||
|
|
||
|
drvinfo: ; 512 bytes driver info area
|
||
|
; +0 - Full driver name
|
||
|
; +32 - Driver version
|
||
|
; +64 - Word List of support video modes (max 32 positions)
|
||
|
; +128 - 5 words list of support vertical rate to each present mode
|
||
|
org $+32
|
||
|
drvver:
|
||
|
org $+32
|
||
|
vidmode:
|
||
|
org $+64
|
||
|
_m1:
|
||
|
org drvinfo+200h
|
||
|
|
||
|
buffer:
|
||
|
I_END:
|
||
|
|
||
|
|