;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; DEVICE SETUP ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; version: 1.17 ; last update: 30/07/2015 ; changed by: Kiril Lipatov, aka Leency ; changes: Mouse speed and mouse delay options moved to mouse_cfg ;--------------------------------------------------------------------- ; version: 1.16 ; last update: 12/04/2014 ; changed by: Yurii Shevtsov, aka gtament ; changes: Fixed junk draw at the bottom of window ;--------------------------------------------------------------------- ; 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 _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,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: ;-------------------------------------- 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 mcall 0,<40,(355+BBB)>,<40,(10*16)>,0xB4111199,0,title ; DRAW WINDOW mcall 9,procinfo,-1 mov eax,[ebx+70] ;status of window test eax,100b jne .end mcall 8,<(350-85),100>,<(5+16*6),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,151 mov ecx,5+8*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 'EEST' mov [text00+LLL*1+32],dword 'I ' ;-------------------------------------- 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 'EEST' mov [text00+LLL*0+32],dword 'I ' ;-------------------------------------- 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*4+28],ebx 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 ;------------------------------------------------------------------------------- onoff: cmp [syslang],4 jne norus1 mov ebx,'ДА ' cmp eax,1 je exitsub mov ebx,'НЕТ ' ret norus1: cmp [syslang],6 jne noet1 mov ebx,'SEES' cmp eax,1 je exitsub mov ebx,'V─L.' ret ;-------------------------------------- noet1: 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 ;------------------------------------------------------------------------------- _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 loadet mov esi,textrus jmp sload loadet: mov edi,text00 mov ecx,LLL*(text1_strings + text2_strings)/4+1 cmp [syslang],6 jne norus mov esi,textet 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 'Выключить 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 'SPEAKER disabled : OFF - + Apply ' text1_strings = 5 db 'NOTE: Apply all ' db 'SAVE YOUR SETTINGS BEFORE QUITING KOLIBRI Save all ' textet: db 'S№steemi keel : ENGLISH - + Kinnita ' db 'Klaviatuuri paigutus : ENGLISH - + Kinnita ' db 'LBA lugemine lubatud : V─L. - + Kinnita ' db 'PCI juurdepффs programm. : V─L. - + Kinnita ' db 'SPEAKER disabled : V─L. - + Kinnita ' db 'M─RKUS: Kinnita kїik' db 'SALVESTA SEADED ENNE KOLIBRIST V─LJUMIST Salvesta kїik' 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/SETTINGS/SETUP.DAT',0 ;------------------------------------------------------------------------------- keyboard dd 0x0 syslang dd 0x4 ; 4 - rus lba_read dd 0x1 pci_acc dd 0x1 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: ;-------------------------------------------------------------------------------