diff --git a/kernel/trunk/core/conf_lib.inc b/kernel/trunk/core/conf_lib.inc index 0c207f89f6..ed961e8db3 100644 --- a/kernel/trunk/core/conf_lib.inc +++ b/kernel/trunk/core/conf_lib.inc @@ -20,24 +20,32 @@ proc load_conf_file endp -proc set_kentel_conf +proc set_kernel_conf locals par db 30 dup(?) endl + pushad ;[gui] ;mouse_speed mov eax,ebp add eax,par-ebp - invoke ini.get_str, ugui, ugui_mouse_speed, eax, ugui_mouse_speed_def - stdcall strtoint,eax + push eax + invoke ini.get_str, ugui, ugui_mouse_speed, eax, ugui_mouse_speed_def + pop eax + stdcall strtoint,eax push eax pop edx call _mouse_speed + + popad + ret ;mouse_delay mov eax,ebp add eax,par-ebp + push eax invoke ini.get_str, ugui, ugui_mouse_delay, eax, ugui_mouse_delay_def + pop eax stdcall strtoint,eax push eax pop edx @@ -47,7 +55,9 @@ endl ;sb16 mov eax,ebp add eax,par-ebp + push eax invoke ini.get_str, udev, udev_sb16, eax, udev_sb16_def + pop eax stdcall strtoint,eax push eax pop ecx @@ -56,7 +66,9 @@ endl ;sound_dma mov eax,ebp add eax,par-ebp + push eax invoke ini.get_str, udev, udev_sound_dma, eax, udev_sound_dma_def + pop eax stdcall strtoint,eax push eax pop ecx @@ -66,29 +78,34 @@ endl ;midibase mov eax,ebp add eax,par-ebp + push eax invoke ini.get_str, udev, udev_midibase, eax, udev_midibase_def + pop eax stdcall strtoint,eax push eax pop ecx call _midibase - + + popad + ret endp ugui db 'gui',0 ugui_mouse_speed db 'mouse_speed',0 -ugui_mouse_speed_def db '',0 +ugui_mouse_speed_def db '2',0 ugui_mouse_delay db 'mouse_delay',0 -ugui_mouse_delay_def db '',0 +ugui_mouse_delay_def db '0x00A',0 udev db 'dev',0 udev_sb16 db 'sb16',0 -udev_sb16_def db '',0 +udev_sb16_def db '0x220',0 udev_sound_dma db 'sound_dma',0 -udev_sound_dma_def db '',0 +udev_sound_dma_def db '1',0 udev_midibase db 'midibase',0 -udev_midibase_def db '',0 +udev_midibase_def db '0x320',0 ; конверчение строки в DWord в eax (по второму символу определяет систему счисления) + proc strtoint stdcall,strs pushad @@ -108,7 +125,7 @@ proc strtoint stdcall,strs dec eax stdcall strtoint_dec,eax .exit: - mov [esi+28],eax + mov [esp+28],eax popad ret endp @@ -116,26 +133,52 @@ endp ; конверчение строки в DWord в eax для десятичного proc strtoint_dec stdcall,strs pushad + xor edx,edx + ; поиск конца + mov esi,[strs] +@@: + lodsb + or al,al + jnz @b + mov ebx,esi + mov esi,[strs] + dec ebx + sub ebx,esi + mov ecx,1 + +@@: + dec ebx + or ebx,ebx + jz @f + imul ecx,ecx,10 ; порядок + jmp @b +@@: + + xchg ebx,ecx + xor ecx,ecx - mov ebx,1 ; порядок - mov esi,[strs] + @@: xor eax,eax lodsb cmp al,0 - je .end + je .eend sub al,30h imul ebx add ecx,eax - imul ebx,ebx,10 - + push ecx + xchg eax,ebx + mov ecx,10 + div ecx + xchg eax,ebx + pop ecx jmp @b -.end: - mov [esi+28],ecx +.eend: + mov [esp+28],ecx popad ret endp @@ -143,45 +186,56 @@ endp ; конверчение строки в DWord в eax для шеснадцатиричного proc strtoint_hex stdcall,strs pushad - + xor edx,edx + + mov esi,[strs] + mov ebx,1 + add esi,1 + +@@: + lodsb + or al,al + jz @f + shl ebx,4 + jmp @b +@@: xor ecx,ecx - mov ebx,1 ; порядок mov esi,[strs] @@: xor eax,eax lodsb cmp al,0 - je .end + je .eend cmp al,'a' jae .bm cmp al,'A' jae .bb jmp .cc -.bm: ; 57h +.bm: ; 57h sub al,57h jmp .do -.bb: ; 37h +.bb: ; 37h sub al,37h jmp .do -.cc: ; 30h +.cc: ; 30h sub al,30h .do: imul ebx add ecx,eax - imul ebx,ebx,16 + shr ebx,4 jmp @b - -.end: - mov [esi+28],ecx + +.eend: + mov [esp+28],ecx popad ret -endp +endp ; установки из setup diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 6f406b628b..2542c0fd47 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -542,7 +542,7 @@ include 'vmodeld.inc' ; LOADING LIBRARES stdcall dll.Load,@IMPORT ; SPraid - чруЁєчър ЇєэъЎшюэрыр (яюър ўЄю шэш Їрщы) call load_conf_file ; prepare configuration file - ;call set_kentel_conf ; configure devices and gui + call set_kentel_conf ; configure devices and gui no_lib_load: ; LOAD FONTS I and II @@ -3441,11 +3441,23 @@ checkmisc: cmp [ctrl_alt_del], 1 jne nocpustart - mov ebp, cpustring - lea esi,[ebp+6] - xor ebx,ebx ; no parameters - xor edx,edx ; no flags - call fs_RamdiskExecute.flags + + + stdcall kernel_alloc, 0x100 + push eax + mov ebx,eax + stdcall full_file_name,cpustring,eax + mov ebp, eax + + xor ebx, ebx + xor edx, edx + call fs_execute + + pop ebx + push eax + stdcall kernel_free, ebx + pop eax + mov [ctrl_alt_del], 0 nocpustart: