;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; DEVICE SETUP ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; version: 1.15 ; last update: 20/04/2012 ; changed by: Marat Zakiyanov aka Mario79, aka Mario ; changes: Add the flag of speaker mute. ; Correcting setup.dat ;--------------------------------------------------------------------- ; version: 1.14 ; last update: 20/03/2012 ; changed by: Marat Zakiyanov aka Mario79, aka Mario ; changes: optimisations and code refactoring ;--------------------------------------------------------------------- ; Authors: Ville - original version ; A. Ivushkin - autostart (w launcher) ; M. Lisovin - added many feauters (apply all, save all, set time...) ; I. Poddubny - fixed russian keymap ;14/08/06 Mario79 - added regulation of mouse features ;------------------------------------------------------------------------------- format binary as "" use32 org 0x0 db 'MENUET01' ; 8 byte identifier dd 0x01 ; header version dd START ; pointer to program start dd IM_END ; size of image dd I_END ; reguired amount of memory dd stack_area ; stack pointer (esp) dd boot_param ; boot parameters dd 0x0 ; path ;------------------------------------------------------------------------------- include '..\..\..\macros.inc' ;------------------------------------------------------------------------------- LLL equ (56+3) BBB equ 25 ;------------------------------------------------------------------------------- apply_all: call _pci_acc ;12 call _syslang ;5 call _keyboard ;2 call _mouse_speed call _mouse_delay call _speaker_mute ret ;------------------------------------------------------------------------------- apply_all_and_exit: mcall 70,read_fileinfo call apply_all jmp close ;------------------------------------------------------------------------------- set_language_and_exit: mcall 26,2,9 cmp eax,1 je russian xor eax,eax ;-------------------------------------- set_lang_now: mov [keyboard],eax call _keyboard jmp close ;-------------------------------------- russian: mov eax,3 jmp set_lang_now ;------------------------------------------------------------------------------- set_syslanguage_and_exit: mcall 26,5 cmp eax,6 jne temp xor eax,eax ;-------------------------------------- temp: inc eax mov [syslang],eax call _syslang jmp close ;------------------------------------------------------------------------------- get_setup_values: mcall 26,2,9 dec eax mov [keyboard],eax mcall 26,5 mov [syslang],eax mcall 26,11 mov [lba_read],eax mcall 26,12 mov [pci_acc],eax mcall 18,19,0 mov [mouse_speed],eax mcall 18,19,2 mov [mouse_delay],eax mcall 18,8,1 mov [speaker_mute],eax ret ;------------------------------------------------------------------------------- START: mov eax,boot_param cmp [eax],dword 'SLAN' je set_syslanguage_and_exit cmp [eax],dword 'LANG' je set_language_and_exit cmp [eax],dword 'BOOT' je apply_all_and_exit call get_setup_values call loadtxt call draw_infotext ;------------------------------------------------------------------------------- red: call draw_window ;------------------------------------------------------------------------------- still: sysevent: mcall 23,8 ; wait here for event with timeout cmp eax,1 jz red cmp eax,2 jz key cmp eax,3 jz button jmp still ;------------------------------------------------------------------------------- key: mcall 2 jmp still ;------------------------------------------------------------------------------- button: mcall 17 cmp ah,99 jne nosaveall mcall 70,save_fileinfo jmp still ;-------------------------------------- nosaveall: cmp ah,100 jne no_apply_all call apply_all jmp still ;-------------------------------------- no_apply_all: cmp ah,1 ; CLOSE APPLICATION jne no_close ;-------------------------------------- close: or eax,-1 mcall ;-------------------------------------- no_close: cmp ah,4 ; SET KEYBOARD jnz nokm mov eax,[keyboard] test eax,eax je downuplbl dec eax jmp nodownup ;-------------------------------------- downuplbl: mov eax,7 ;-------------------------------------- nodownup: mov [keyboard],eax call draw_infotext ;-------------------------------------- nokm: cmp ah,5 jnz nokp mov eax,[keyboard] cmp eax,7 je updownlbl inc eax jmp noupdown ;-------------------------------------- updownlbl: xor eax,eax ;-------------------------------------- noupdown: mov [keyboard],eax call draw_infotext ;-------------------------------------- nokp: cmp ah,92 ; SET LBA READ jne no_lba_d ;-------------------------------------- slbal: btc [lba_read],0 call draw_infotext jmp still ;-------------------------------------- no_lba_d: cmp ah,93 jne no_lba_i jmp slbal ;-------------------------------------- no_lba_i: cmp ah,91 jne no_set_lba_read call _lba_read jmp still ;-------------------------------------- no_set_lba_read: cmp ah,102 ; SET PCI ACCESS jne no_pci_d ;-------------------------------------- pcip: btc [pci_acc],0 call draw_infotext jmp still ;-------------------------------------- no_pci_d: cmp ah,103 jne no_pci_i jmp pcip ;-------------------------------------- no_pci_i: cmp ah,101 jne no_set_pci_acc call _pci_acc jmp still ;-------------------------------------- no_set_pci_acc: cmp ah,42 ; SET SYSTEM LANGUAGE BASE jnz nosysm mov eax,[syslang] dec eax jz still mov [syslang],eax call draw_infotext ;-------------------------------------- nosysm: cmp ah,43 jnz nosysp mov eax,[syslang] cmp eax,6 je nosysp inc eax mov [syslang],eax call draw_infotext ;-------------------------------------- nosysp: cmp ah,41 jnz nosyss call _syslang call cleantxt call loadtxt call draw_window ;-------------------------------------- nosyss: cmp ah,132 ; SET MOUSE SPEED jnz .nominus mov eax,[mouse_speed] sub eax,2 cmp eax,9 jb @f mov eax,8 ;-------------------------------------- @@: inc eax mov [mouse_speed],eax call draw_infotext ;-------------------------------------- .nominus: cmp ah,133 jnz .noplus mov eax,[mouse_speed] cmp eax,9 jb @f mov eax,0 ;-------------------------------------- @@: inc eax mov [mouse_speed],eax call draw_infotext ;-------------------------------------- .noplus: cmp ah,131 jnz .noapply call _mouse_speed ;-------------------------------------- .noapply: mousedelay: cmp ah,142 ; SET MOUSE DELAY jnz .nominus mov eax,[mouse_delay] sub eax,2 cmp eax,0xfff jb @f mov eax,0xffe ;-------------------------------------- @@: inc eax mov [mouse_delay],eax call draw_infotext ;-------------------------------------- .nominus: cmp ah,143 jnz .noplus mov eax,[mouse_delay] cmp eax,0xfff jb @f mov eax,0 ;-------------------------------------- @@: inc eax mov [mouse_delay],eax call draw_infotext ;-------------------------------------- .noplus: cmp ah,141 jnz speakermute call _mouse_delay ;-------------------------------------- speakermute: cmp ah,152 ; SET SPEAKER jne no_speaker_d ;-------------------------------------- speaker_p: btc [speaker_mute],0 call draw_infotext jmp still ;-------------------------------------- no_speaker_d: cmp ah,153 jne no_speaker_i jmp speaker_p ;-------------------------------------- no_speaker_i: cmp ah,151 jne .noapply call _speaker_mute jmp still ;-------------------------------------- .noapply: cmp ah,3 ; SET KEYMAP jne still call _keyboard jmp still ;------------------------------------------------------------------------------- _keyboard: cmp [keyboard],0 ; english jnz nosetkeyle mcall 21,2,1,en_keymap inc ecx mcall 21,,,en_keymap_shift mcall 21,,9,1 call alt_gen ;-------------------------------------- nosetkeyle: cmp [keyboard],1 ; finnish jnz nosetkeylfi mcall 21,2,1,fi_keymap inc ecx mcall 21,,,fi_keymap_shift mcall 21,,9,2 call alt_gen ;-------------------------------------- nosetkeylfi: cmp [keyboard],2 ; german jnz nosetkeylge mcall 21,2,1,ge_keymap inc ecx mcall 21,,,ge_keymap_shift mcall 21,,9,3 call alt_gen ;-------------------------------------- nosetkeylge: cmp [keyboard],3 ; russian jnz nosetkeylru mcall 21,2,1,ru_keymap inc ecx mcall 21,,,ru_keymap_shift mcall 21,,9,4 call alt_gen ;-------------------------------------- nosetkeylru: cmp [keyboard],4 ;french jnz nosetkeylfr mcall 21,2,1,fr_keymap inc ecx mcall 21,,,fr_keymap_shift inc ecx mcall 21,,,fr_keymap_alt_gr mcall 21,,9,5 ;-------------------------------------- nosetkeylfr: cmp [keyboard],5 ; estonian jnz nosetkeylet mcall 21,2,1,et_keymap inc ecx mcall 21,,,et_keymap_shift mcall 21,,9,6 call alt_gen ;-------------------------------------- nosetkeylet: cmp [keyboard],6 ;belgian jnz nosetkeylit mcall 21,2,1,be_keymap inc ecx mcall 21,,,be_keymap_shift inc ecx mcall 21,,,be_keymap_alt_gr mcall 21,,9,7 ;-------------------------------------- nosetkeylit: cmp [keyboard],7 ;italian jnz nosetkeylbe mcall 21,2,1,it_keymap inc ecx mcall 21,,,it_keymap_shift inc ecx mcall 21,,,it_keymap_alt_gr mcall 21,,9,8 ;-------------------------------------- nosetkeylbe: ret ;------------------------------------------------------------------------------- alt_gen: mcall 21,,3,alt_general ret ;------------------------------------------------------------------------------- draw_buttons: pusha shl ecx,16 add ecx,12 mcall 8,<(350-57),(46+BBB)> inc edx mcall ,<(350-85),9> inc edx mcall ,<(350-73),9> popa ret ;------------------------------------------------------------------------------- ; ******************************************** ; ******* WINDOW DEFINITIONS AND DRAW ******* ; ******************************************** draw_window: pusha mcall 12,1 xor eax,eax ; DRAW WINDOW xor esi,esi mcall ,<40,(355+BBB)>,<40,(12*16)>,0xB4111199,,title mcall 9,procinfo,-1 mov eax,[ebx+70] ;status of window test eax,100b jne .end mcall 8,<(350-85),100>,<(5+16*8),12>,100,0x005588dd ; APPLY ALL add ecx,16*65536 ; SAVE ALL dec edx mcall mov esi,0x5580c0 mov edx,41 mov ecx,5+0*8 call draw_buttons mov edx,3 mov ecx,5+2*8 call draw_buttons mov edx,91 mov ecx,5+4*8 call draw_buttons mov edx,101 mov ecx,5+6*8 call draw_buttons mov edx,131 mov ecx,5+8*8 call draw_buttons mov edx,141 mov ecx,5+10*8 call draw_buttons mov edx,151 mov ecx,5+12*8 call draw_buttons call draw_infotext .end: mcall 12,2 popa ret ;------------------------------------------------------------------------------- draw_infotext: pusha mov eax,[keyboard] ; KEYBOARD test eax,eax jnz noen mov [text00+LLL*1+28],dword 'ENGL' mov [text00+LLL*1+32],dword 'ISH ' ;-------------------------------------- noen: cmp eax,1 jnz nofi mov [text00+LLL*1+28],dword 'FINN' mov [text00+LLL*1+32],dword 'ISH ' ;-------------------------------------- nofi: cmp eax,2 jnz noge mov [text00+LLL*1+28],dword 'GERM' mov [text00+LLL*1+32],dword 'AN ' ;-------------------------------------- noge: cmp eax,3 jnz nogr mov [text00+LLL*1+28],dword 'RUSS' mov [text00+LLL*1+32],dword 'IAN ' ;-------------------------------------- nogr: cmp eax,4 jnz nofr mov [text00+LLL*1+28],dword 'FREN' mov [text00+LLL*1+32],dword 'CH ' ;-------------------------------------- nofr: cmp eax,5 jnz noet mov [text00+LLL*1+28],dword 'ESTO' mov [text00+LLL*1+32],dword 'NIAN' ;-------------------------------------- noet: cmp eax,6 jnz nobe mov [text00+LLL*1+28],dword 'BELG' mov [text00+LLL*1+32],dword 'IAN ' ;-------------------------------------- nobe: cmp eax,7 jnz noit mov [text00+LLL*1+28],dword 'ITAL' mov [text00+LLL*1+32],dword 'IAN' ;-------------------------------------- noit: mov eax,[syslang] ; SYSTEM LANGUAGE dec eax test eax,eax jnz noen5 mov [text00+LLL*0+28],dword 'ENGL' mov [text00+LLL*0+32],dword 'ISH ' ;-------------------------------------- noen5: cmp eax,1 jnz nofi5 mov [text00+LLL*0+28],dword 'FINN' mov [text00+LLL*0+32],dword 'ISH ' ;-------------------------------------- nofi5: cmp eax,2 jnz noge5 mov [text00+LLL*0+28],dword 'GERM' mov [text00+LLL*0+32],dword 'AN ' ;-------------------------------------- noge5: cmp eax,3 jnz nogr5 mov [text00+LLL*0+28],dword 'RUSS' mov [text00+LLL*0+32],dword 'IAN ' ;-------------------------------------- nogr5: cmp eax,4 jne nofr5 mov [text00+LLL*0+28],dword 'FREN' mov [text00+LLL*0+32],dword 'CH ' ;-------------------------------------- nofr5: cmp eax,5 jne noet5 mov [text00+LLL*0+28],dword 'ESTO' mov [text00+LLL*0+32],dword 'NIAN' ;-------------------------------------- noet5: mov eax,[lba_read] call onoff ; LBA READ mov [text00+LLL*2+28],ebx mov eax,[pci_acc] call onoff ; PCI ACCESS mov [text00+LLL*3+28],ebx mov eax,[speaker_mute] call onoff ; SPEAKER mov [text00+LLL*6+28],ebx mov eax,[mouse_speed] ; MOUSE SPEED add al,48 mov [text00+LLL*4+28],al mov eax,[mouse_delay] mov esi,text00+LLL*5+32 call hexconvert ; MOUSE DELAY call text_out popa ret ;------------------------------------------------------------------------------- text_out: mcall 13,<165,85>,<0,(14*8)>,0x80111199 ;0x80111199-19 mov edx,text00 mov ebx,3*65536+7 mov eax,4 mov ecx,0xffffff mov esi,LLL mov ebp,text1_strings ;-------------------------------------- newline: mcall add ebx,8+8 add edx,esi dec ebp jnz newline mov ebp,text2_strings add ebx,8+8 ;-------------------------------------- @@: mcall add ebx,8+8 add edx,esi dec ebp jnz @b ret ;------------------------------------------------------------------------------- hexconvert: ;converting dec to hex in ascii xor ebx,ebx mov bl,al and bl,15 add ebx,hex mov cl,[ebx] mov [esi],cl shr eax,4 xor ebx,ebx mov bl,al and bl,15 add ebx,hex mov cl,[ebx] dec esi mov [esi],cl shr eax,4 xor ebx,ebx mov bl,al and bl,15 add ebx,hex mov cl,[ebx] dec esi mov [esi],cl ret ;------------------------------------------------------------------------------- onoff: cmp [syslang],4 jne norus1 mov ebx,'ДА ' cmp eax,1 je exitsub mov ebx,'НЕТ ' ret ;-------------------------------------- norus1: mov ebx,'ON ' cmp eax,1 je exitsub mov ebx,'OFF ' ;-------------------------------------- exitsub: ret ;------------------------------------------------------------------------------- _lba_read: mcall 21,11,[lba_read] ret ;------------------------------------------------------------------------------- _pci_acc: mcall 21,12,[pci_acc] ret ;------------------------------------------------------------------------------- _syslang: mcall 21,5,[syslang] ret ;------------------------------------------------------------------------------- _mouse_speed: mcall 18,19,1,[mouse_speed] ret ;------------------------------------------------------------------------------- _mouse_delay: mcall 18,19,3,[mouse_delay] ret ;------------------------------------------------------------------------------- _speaker_mute: mcall 18,8,1 cmp [speaker_mute],eax je @f inc ecx mcall 18 ;-------------------------------------- @@: ret ;------------------------------------------------------------------------------- loadtxt: mov edi,text00 mov ecx,LLL*(text1_strings + text2_strings)/4+1 cmp [syslang],4 jne norus mov esi,textrus jmp sload ;-------------------------------------- norus: mov esi,texteng ;-------------------------------------- sload: rep movsd ret ;------------------------------------------------------------------------------- cleantxt: xor eax,eax mov ecx,LLL*(text1_strings + text2_strings)/4 cld mov edi,text00 rep stosd mov [text00+1711],byte 'x' ret ;------------------------------------------------------------------------------- ; DATA AREA count: db 0x0 blinkpar: dd 0x0 time: dw 0x0 date: dd 0x0 ;------------------------------------------------------------------------------- textrus: db 'Язык системы : ENGLISH - + Применить' db 'Раскладка клавиатуры : ENGLISH - + Применить' db 'Включить LBA : OFF - + Применить' db 'Доступ к шине PCI : OFF - + Применить' db 'Скорость курсора мыши : 1 - + Применить' db 'Задержка ускорения мыши : 0x00a - + Применить' db 'Выключить SPEAKER : OFF - + Применить' db 'ВНИМАНИЕ: Применить все ' db 'НЕ ЗАБУДЬТЕ СОХРАНИТЬ НАСТРОЙКИ Сохранить все ' ;------------------------------------------------------------------------------- texteng: db 'System language : ENGLISH - + Apply ' db 'Keyboard layout : ENGLISH - + Apply ' db 'LBA read enabled : OFF - + Apply ' db 'PCI access for appl. : OFF - + Apply ' db 'Mouse pointer speed : 1 - + Apply ' db 'Mouse pointer delay : 0x00a - + Apply ' db 'SPEAKER disabled : OFF - + Apply ' text1_strings = 7 db 'NOTE: Apply all ' db 'SAVE YOUR SETTINGS BEFORE QUITING KOLIBRI Save all ' text2_strings = 2 ;------------------------------------------------------------------------------- title db 'System setup',0 hex db '0123456789ABCDEF' ;------------------------------------------------------------------------------- include 'keymaps.inc' ;------------------------------------------------------------------------------- read_fileinfo: dd 0 dd 0 dd 0 dd 28 dd keyboard db 0 dd file_name ;------------------------------------------------------------------------------- save_fileinfo: dd 2 dd 0 dd 0 dd 28 dd keyboard file_name: db '/sys/setup.dat',0 ;------------------------------------------------------------------------------- keyboard dd 0x0 syslang dd 0x4 ; 4 - rus lba_read dd 0x1 pci_acc dd 0x1 mouse_speed dd 0x2 mouse_delay dd 0xa speaker_mute dd 0 ; 0 - enable, 1 - disable ;----------------------------------------------------------------------------- IM_END: ;----------------------------------------------------------------------------- align 4 text00: rb LLL*(text1_strings + text2_strings)+4 ;----------------------------------------------------------------------------- align 4 boot_param: procinfo: rb 1024 ;----------------------------------------------------------------------------- align 4 rb 0x1000 stack_area: ;----------------------------------------------------------------------------- I_END: ;-------------------------------------------------------------------------------