/kernel/trunk/boot/bootcode.inc |
---|
116,6 → 116,16 |
@@: |
; \end{diamond}[02.12.2005] |
cmp cx,'HA' ; ïî ðåãèñòðàì îïðåäåëÿåòñÿ çàãðóçêà ñ âèíòà |
jnz no_hd_load |
cmp dx,'RD' |
jnz no_hd_load |
mov word [bx_from_load], bx ; {SPraid}[13.03.2007] |
jmp load_next |
no_hd_load: |
mov word [bx_from_load], 'r1' ; if work with floppy |
load_next: |
; set up stack |
mov ax, 3000h |
mov ss, ax |
/kernel/trunk/build.bat |
---|
2,7 → 2,7 |
set languages=en ru ge et |
set drivers=sound sis infinity ati2d vmode ps2mouse |
set targets=all kernel drivers skins clean |
set targets=all kernel drivers skins lib clean |
call :Check_Target %1 |
for %%a in (all kernel) do if %%a==%target% call :Check_Lang %2 |
60,6 → 60,7 |
call :Target_kernel |
call :Target_drivers |
call :Target_skins |
call :Target_lib |
goto :eof |
87,7 → 88,16 |
cd .. |
goto :eof |
:Target_lib |
echo *** building libs ... |
if not exist bin\lib mkdir bin\lib |
cd lib |
fasm -m 65536 inifiles.asm ..\bin\lib\inifiles.obj |
if not %errorlevel%==0 goto :Error_FasmFailed |
cd .. |
goto :eof |
:Target_clean |
echo *** cleaning ... |
/kernel/trunk/core/conf_lib.inc |
---|
0,0 → 1,20 |
;------------------------------------------------------------------------- |
; |
; ©« ª®ä¨£ãà 樨 |
; |
; |
; SPraid |
; |
;------------------------------------------------------------------------- |
conf_file_loaded: db 0 ; ä« £ § £à㧪¨ ª®ä¨£ |
; § £à㧪 ¨¨ ä ©« ¢ ¡¨¡«¨®â¥ªã |
proc load_conf_file |
pushad |
invoke ini.load,.fname |
mov [conf_file_loaded],byte 1 |
popad |
ret |
.fname db '%sys%/sys.conf',0 |
endp |
/kernel/trunk/core/dll.inc |
---|
700,8 → 700,8 |
endl |
lea edx, [file_name] |
mov dword [edx], '/rd/' |
mov dword [edx+4], '1/dr' |
mov dword [edx], '%sys' |
mov dword [edx+4], '%/dr' |
mov dword [edx+8], 'iver' |
mov word [edx+12], 's/' |
mov esi, [driver_name] |
/kernel/trunk/core/ext_lib.inc |
---|
0,0 → 1,326 |
;============================================================================ |
; |
; Çàãðóçêà âíåøíèõ ôóíêöèé ÿäðà |
; |
; |
; |
; |
; |
; |
;============================================================================ |
macro library [name,fname] |
{ |
forward |
dd __#name#_library_table__,__#name#_library_name__ |
common |
dd 0 |
forward |
align 4 |
__#name#_library_name__ db fname,0 |
} |
macro import lname,[name,sname] |
{ |
common |
align 4 |
__#lname#_library_table__: |
forward |
name dd __#name#_import_name__ |
common |
dd 0 |
forward |
align 4 |
__#name#_import_name__ db sname,0 |
} |
macro export [name,sname] |
{ |
forward |
dd __#name#_export_name__,name |
common |
dd 0 |
forward |
align 4 |
__#name#_export_name__ db sname,0 |
} |
align 4 ; çàãðóçêà áèáëèîòåêè ñ óñëîâèåì, ÷òî áóäèò èñïîëüçûâàòüñÿ èç ÿäðà |
proc load_k_library stdcall, file_name:dword |
locals |
coff dd ? |
sym dd ? |
strings dd ? |
img_size dd ? |
img_base dd ? |
exports dd ? |
endl |
cli |
stdcall load_file, [file_name] |
test eax, eax |
jz .fail |
mov [coff], eax |
movzx ecx, [eax+CFH.nSections] |
xor ebx, ebx |
lea edx, [eax+20] |
@@: |
add ebx, [edx+CFS.SizeOfRawData] |
add ebx, 15 |
and ebx, not 15 |
add edx, COFF_SECTION_SIZE |
dec ecx |
jnz @B |
mov [img_size], ebx |
stdcall kernel_alloc, [img_size] |
test eax, eax |
jz .fail |
mov [img_base], eax |
mov edx, [coff] |
movzx ebx, [edx+CFH.nSections] |
mov edi, [img_base] |
lea eax, [edx+20] |
@@: |
mov [eax+CFS.VirtualAddress], edi |
mov esi, [eax+CFS.PtrRawData] |
test esi, esi |
jnz .copy |
add edi, [eax+CFS.SizeOfRawData] |
jmp .next |
.copy: |
add esi, edx |
mov ecx, [eax+CFS.SizeOfRawData] |
cld |
rep movsb |
.next: |
add edi, 15 |
and edi, not 15 |
add eax, COFF_SECTION_SIZE |
dec ebx |
jnz @B |
mov ebx, [edx+CFH.pSymTable] |
add ebx, edx |
mov [sym], ebx |
mov ecx, [edx+CFH.nSymbols] |
add ecx,ecx |
lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE |
add ecx, [sym] |
mov [strings], ecx |
lea eax, [edx+20] |
stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\ |
[strings], dword 0 |
test eax, eax |
jnz @F |
@@: |
mov edx, [coff] |
movzx ebx, [edx+CFH.nSections] |
mov edi, 0 |
lea eax, [edx+20] |
@@: |
add [eax+CFS.VirtualAddress], edi ;patch user space offset |
add eax, COFF_SECTION_SIZE |
dec ebx |
jnz @B |
add edx, 20 |
stdcall fix_coff_relocs, [coff], edx, [sym] |
mov ebx, [coff] |
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS |
mov [exports], eax |
stdcall kernel_free, [coff] |
mov eax, [exports] |
ret |
.fail: |
xor eax, eax |
ret |
endp |
proc dll.Load, import_table:dword |
mov esi,[import_table] |
.next_lib: mov edx,[esi] |
or edx,edx |
jz .exit |
push esi |
mov edi,s_libname |
mov esi,sys_path |
@@: lodsb |
stosb |
or al,al |
jnz @b |
dec edi |
mov [edi], dword '/lib' |
mov [edi+4],byte '/' |
add edi,5 |
pop esi |
push esi |
mov esi,[esi+4] |
@@: lodsb |
stosb |
or al,al |
jnz @b |
pushad |
stdcall load_k_library,s_libname |
mov [esp+28],eax |
popad |
or eax,eax |
jz .fail |
stdcall dll.Link,eax,edx |
stdcall dll.Init,[eax+4] |
pop esi |
add esi,8 |
jmp .next_lib |
.exit: xor eax,eax |
ret |
.fail: add esp,4 |
xor eax,eax |
inc eax |
ret |
endp |
proc dll.Link, exp:dword,imp:dword |
push eax |
mov esi,[imp] |
test esi,esi |
jz .done |
.next: lodsd |
test eax,eax |
jz .done |
stdcall dll.GetProcAddress,[exp],eax |
or eax,eax |
jz @f |
mov [esi-4],eax |
jmp .next |
@@: mov dword[esp],0 |
.done: pop eax |
ret |
endp |
proc dll.Init, dllentry:dword |
pushad |
mov eax,mem.Alloc |
mov ebx,mem.Free |
mov ecx,mem.ReAlloc |
mov edx,dll.Load |
stdcall [dllentry] |
popad |
ret |
endp |
proc dll.GetProcAddress, exp:dword,sz_name:dword |
mov edx,[exp] |
.next: test edx,edx |
jz .end |
stdcall strcmp,[edx],[sz_name] |
test eax,eax |
jz .ok |
add edx,8 |
jmp .next |
.ok: mov eax,[edx+4] |
.end: ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.Alloc size ;///////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
; mov eax,[size] |
; lea ecx,[eax+4+4095] |
; and ecx,not 4095 |
; stdcall kernel_alloc, ecx |
; add ecx,-4 |
; mov [eax],ecx |
; add eax,4 |
stdcall kernel_alloc, [size] |
pop ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.ReAlloc mptr,size;/////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx esi edi eax |
mov eax,[mptr] |
mov ebx,[size] |
or eax,eax |
jz @f |
lea ecx,[ebx+4+4095] |
and ecx,not 4095 |
add ecx,-4 |
cmp ecx,[eax-4] |
je .exit |
@@: mov eax,ebx |
call mem.Alloc |
xchg eax,[esp] |
or eax,eax |
jz .exit |
mov esi,eax |
xchg eax,[esp] |
mov edi,eax |
mov ecx,[esi-4] |
cmp ecx,[edi-4] |
jbe @f |
mov ecx,[edi-4] |
@@: add ecx,3 |
shr ecx,2 |
cld |
rep movsd |
xchg eax,[esp] |
call mem.Free |
.exit: |
pop eax edi esi ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.Free mptr ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
; mov eax,[mptr] |
; or eax,eax |
; jz @f |
; push ebx ecx |
; lea ecx,[eax-4] |
; stdcall kernel_free, ecx |
; pop ecx ebx |
; @@: ret |
stdcall kernel_free, [mptr] |
ret |
endp |
proc strcmp, str1:dword,str2:dword |
push esi edi |
mov esi,[str1] |
mov edi,[str2] |
xor eax,eax |
@@: lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: or eax,-1 |
.ok: pop edi esi |
ret |
endp |
s_libname db 64 dup (0) |
/kernel/trunk/data16.inc |
---|
5,6 → 5,10 |
preboot_lfb db 0 |
preboot_bootlog db 0 |
bx_from_load: dw 0 ; ñòðóêòóðà äëÿ õðàíåíèÿ ïàðàìåòðîâ- îòêóäà ãàøðóçèëèñü, áåðåòñÿ íèæå èç bx ; {SPraid}[13.03.2007] |
; a,b,c,d - âèí÷åñòåðû, r - ðàì äèñê |
; # äèñêà... ñèìâîë, à íå áàéò. '1', à íå 1 |
align 4 |
old_ints_h: |
dw 0x400 |
/kernel/trunk/data32.inc |
---|
82,13 → 82,21 |
szEXPORTS db 'EXPORTS',0 |
szIMPORTS db 'IMPORTS',0 |
firstapp db '/rd/1/LAUNCHER',0 |
char db 'FONTS/CHAR.MT',0 |
char2 db 'FONTS/CHAR2.MT',0 |
firstapp db '%sys%/LAUNCHER',0 |
char dd 0,0,0 |
dd 2560 |
dd FONT_I |
db '%sys%/FONTS/CHAR.MT',0 |
char2 dd 0,0,0 |
dd 2560 |
dd FONT_II |
db '%sys%/FONTS/CHAR2.MT',0 |
bootpath db '/KOLIBRI ' |
bootpath2 db 0 |
vmode db 'drivers/VMODE.MDR',0 |
vrr_m db '/rd/1/VRR_M',0 |
vrr_m db '%sys%/VRR_M',0 |
kernel_file db 'KERNEL MNT' |
105,7 → 113,17 |
putpixel dd __sys_putpixel |
; } mike.dld |
; SPraid.simba { 6.05.2007 |
; êîíñòàíòû äëÿ îáðàùåíèÿ ê èíè ôàéëó äëÿ îïðåäåëåíèÿ óñòðîéñòâ |
; |
ini_dev_sect: db 'dev',0 ; ñåêöèÿ îá óñòðîéñòâàõ |
ini_com1_mouse_detect: db 'com1_mouse',0 |
ini_com2_mouse_detect: db 'com2_mouse',0 |
dev_dev_val: db '2',0 ; äàëåå åñëè 2 - òî äåòåêòèðîâàòü |
; } SPraid.simba |
align 4 |
keyboard dd 1 |
sound_dma dd 1 |
/kernel/trunk/fs/fs_lfn.inc |
---|
6,6 → 6,9 |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
image_of_eax EQU esp+44 ;36 |
image_of_ebx EQU esp+32 ;24 |
; System function 70 - files with long names (LFN) |
; diamond, 2006 |
79,6 → 82,12 |
dd 0 |
endg |
end_of_file_system_lfn: |
pop edx |
stdcall kernel_free, edx |
ret |
file_system_lfn: |
; in: eax->fileinfo block |
; operation codes: |
93,6 → 102,53 |
; 8 : delete file |
; 9 : create directory |
; çàìåíà àäðåñà âîçâðàòà |
push eax |
stdcall kernel_alloc, 200 |
mov edx,eax |
pop eax |
push edx |
push end_of_file_system_lfn |
mov ebx,edx |
mov ecx, [eax] |
mov [ebx],ecx |
add ebx,4 |
mov ecx, [eax+4] |
mov [ebx],ecx |
add ebx,4 |
mov ecx, [eax+8] |
mov [ebx],ecx |
add ebx,4 |
mov ecx, [eax+12] |
mov [ebx],ecx |
add ebx,4 |
mov ecx, [eax+16] |
mov [ebx],ecx |
add ebx,4 |
push edx ; !!!!!!!!!!!!!!!!!!! |
; eax - yíà÷àëî ñòàðîãî ïàêåòà |
; edx - íà÷àëî íîâîãî ïàêåòà |
; ebx - êóäà ëîæèòü ñòðîêó |
add eax,20 |
mov cl, [eax] |
test cl,cl |
jnz @f |
mov eax,[eax+1] |
@@: |
stdcall full_file_name,eax,ebx |
pop eax |
; add eax, std_application_base_address |
; parse file name |
xchg ebx, eax |
115,13 → 171,13 |
; add ebx, new_app_base |
.l1: |
call fs_execute ; ebp, ebx, edx |
mov [esp+36], eax |
mov [image_of_eax], eax |
ret |
@@: |
cmp al, '/' |
jz @f |
.notfound: |
mov dword [esp+36], 5 ; file not found |
mov dword [image_of_eax], 5 ; file not found |
ret |
@@: |
cmp byte [esi], 0 |
223,8 → 279,8 |
js @f |
mov al, ERROR_END_OF_FILE |
@@: |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
; directory / |
.rootdir: |
231,7 → 287,7 |
cmp dword [ebx], 1 ; read folder? |
jz .readroot |
.access_denied: |
mov dword [esp+36], 10 ; access denied |
mov dword [image_of_eax], 10 ; access denied |
ret |
.readroot: |
299,8 → 355,8 |
js @f |
mov al, ERROR_END_OF_FILE |
@@: |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
.found1: |
338,7 → 394,7 |
; in: ecx = partition number |
; esi -> relative (for device) name |
; ebx -> fileinfo |
; out: [esp+36]=image of eax, [esp+24]=image of ebx |
; out: [image_of_eax]=image of eax, [image_of_ebx]=image of ebx |
fs_OnRamdisk: |
cmp ecx, 1 |
351,11 → 407,11 |
; add edx, std_application_base_address |
add ebx, 4 |
call dword [fs_RamdiskServices + eax*4] |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
.not_impl: |
mov dword [esp+36], 2 ; not implemented |
mov dword [image_of_eax], 2 ; not implemented |
ret |
fs_NotImplemented: |
389,8 → 445,8 |
add ebx, 4 |
call dword [fs_FloppyServices + eax*4] |
and [flp_status], 0 |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
fs_FloppyServices: |
440,7 → 496,7 |
.nf: |
call free_hd_channel |
and [hd1_status], 0 |
mov dword [esp+36], 5 ; not found |
mov dword [image_of_eax], 5 ; not found |
ret |
@@: |
mov [fat32part], ecx |
457,13 → 513,13 |
call dword [fs_HdServices + eax*4] |
call free_hd_channel |
and [hd1_status], 0 |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
.not_impl: |
call free_hd_channel |
and [hd1_status], 0 |
mov dword [esp+36], 2 ; not implemented |
mov dword [image_of_eax], 2 ; not implemented |
ret |
fs_HdServices: |
520,7 → 576,7 |
.nf: |
call free_cd_channel |
and [cd_status], 0 |
mov dword [esp+36], 5 ; not found |
mov dword [image_of_eax], 5 ; not found |
ret |
@@: |
mov ecx, [ebx+12] |
533,13 → 589,13 |
call dword [fs_CdServices + eax*4] |
call free_cd_channel |
and [cd_status], 0 |
mov [esp+36], eax |
mov [esp+24], ebx |
mov [image_of_eax], eax |
mov [image_of_ebx], ebx |
ret |
.not_impl: |
call free_cd_channel |
and [cd_status], 0 |
mov dword [esp+36], 2 ; not implemented |
mov dword [image_of_eax], 2 ; not implemented |
ret |
fs_CdServices: |
/kernel/trunk/fs/parse_fn.inc |
---|
0,0 → 1,183 |
;------------------------------------------------------------------------- |
; |
; ¬¥ ¨¬¥ ä ©«®¢ |
; |
; |
; SPraid |
; |
;------------------------------------------------------------------------- |
; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ ਠâë § ¬¥ |
proc full_file_name stdcall,sourc,dest |
locals |
param rb 60 |
val rb 60 |
tmpsrc rb 60 ; ¢à¥¬¥®¥ åà ¥¨¥ ¯à¥®¡à §®¢ ¨ï |
endl |
pushad |
mov esi,[sourc] |
mov edi,ebp |
add edi,tmpsrc-ebp |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
mov al,[conf_file_loaded] ; âॡã¥âáï ¯à¨ ®¡à 饨¨ ª ¯¥à¢®¬ã ä ©«ã (ª®ä¨£ã) |
or al,al |
jnz @use_replace |
jmp full_file_name_exit |
;-------------------------------- |
@use_replace: |
xor eax,eax |
.loop: |
push eax |
mov ebx,ebp |
add ebx,param-ebp |
mov ecx,ebp |
add ecx,val-ebp |
invoke ini.get_par,sect, ebx, ecx, eax |
mov bl,[param] |
or bl,bl |
jz .done |
mov eax,ebp |
add eax,tmpsrc-ebp |
mov ebx,ebp |
add ebx,param-ebp |
mov ecx,ebp |
add ecx,val-ebp |
mov edx,[dest] |
stdcall full_file_name_parse, eax,edx,ebx,ecx |
mov esi,[dest] |
mov edi,ebp |
add edi,tmpsrc-ebp |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
pop eax |
inc eax |
jmp .loop |
.done: |
pop eax |
full_file_name_exit: |
mov eax,ebp |
add eax,tmpsrc-ebp |
stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path |
popad |
ret |
endp |
sect: db 'path',0 |
; |
; ८¡à §®¢ âì ¨¬ï ¢ ¯®«®¥. ᫨ ¢ ç «¥ á⮨â |
; sourc - áá뫪 áâபã... |
; dest - áá뫪 ¡ãä¥à ªã¤ १ã«ìâ â «®¦¨âì |
; def - áâப è ¡«® ¤«ï ¯®¨áª |
; dval - ª 祬㠯à¨à ¢¨¢ âì è ¡«® |
proc full_file_name_parse stdcall,sourc,dest,def,dval |
; ¤«ï ®¤®£® |
pushad |
mov eax,[sourc] |
mov ebx,[def] |
@@: |
mov dl,[ebx] |
mov cl,[eax] |
cmp cl,0 |
je @@bad_s |
cmp dl,0 |
je @@good |
or cl,0x20 |
or dl,0x20 |
cmp cl,dl |
jne @@bad |
inc eax |
inc ebx |
jmp @b |
@@bad_s: |
cmp dl,0 |
je @@good |
@@bad: |
mov edi,[dest] |
mov esi,[sourc] |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
jmp @@ret_ok |
@@good: |
push eax |
mov edi,[dest] |
mov esi,[dval] |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
@@goodl: |
pop esi |
dec edi |
@@: |
lodsb |
stosb |
or al,al |
jnz @b |
@@ret_ok: |
popad |
ret |
endp |
sys_dir_mess: db 'System dir is ' |
sys_path: db '/HD0/1/KOLIBRI',0,0 |
sysdir_ db '%sys%',0 |
; ¡¥à¥â ¯ à ¬¥âàë bx_from_load ¨ ¨áç¨â ä ©« ª®ä¨£ãà 樨 |
Parser_params: |
pushad |
mov ax,[BOOT_VAR+bx_from_load] |
cmp al,'r' ; à ¬ ¤¨áª |
jnz @f |
mov [sys_path],dword '/RD/' |
mov [sys_path+4],byte ah |
mov [sys_path+5],word 0 ;0x002F |
jmp .done |
@@: |
sub al,49 |
mov [sys_path],dword '/HDa' |
mov [sys_path+3],byte al |
mov [sys_path+4],byte '/' |
mov [sys_path+5],byte ah |
mov [sys_path+6],dword '/KOL' |
mov [sys_path+10],dword 'IBRI' |
mov [sys_path+14],word 0 ;0x002F |
.done: |
popad |
ret |
/kernel/trunk/gui/skincode.inc |
---|
16,9 → 16,25 |
mov ebx,1 |
or ecx,-1 |
mov esi,12 |
call fileread |
pushad |
push eax |
mov [skin_to_load.adr],edx |
mov [skin_to_load.stradr],_skin_file_default |
mov eax,skin_to_load |
call file_system_lfn |
pop eax |
popad |
ret |
skin_to_load: |
dd 0,0,0 |
dd 64*1024 |
.adr dd 0 |
db 0 |
.stradr dd 0 |
struct SKIN_HEADER |
.ident dd ? |
.version dd ? |
/kernel/trunk/gui/skindata.inc |
---|
11,7 → 11,7 |
; |
iglobal |
_skin_file_default db 'DEFAULT SKN',0 |
_skin_file_default db '%sys%/DEFAULT.SKN',0 |
endg |
struct SKIN_DATA |
/kernel/trunk/kernel.asm |
---|
536,20 → 536,40 |
include 'vmodeld.inc' |
;!!!!!!!!!!!!!!!!!!!!!!! |
call Parser_params |
mov ax,[BOOT_VAR+bx_from_load] |
cmp ax,'r1' ; åñëè ñðàì äèñê - òî íå ãðóçèòü áèáëèîòåêè |
je no_lib_load |
; LOADING LIBRARES |
stdcall dll.Load,@IMPORT ; SPraid - çàãðóçêà ôóíêöèîíàëà (ïîêà ÷òî èíè ôàéë) |
call load_conf_file ; prepare configuration file |
no_lib_load: |
; LOAD FONTS I and II |
mov esi,char |
xor ebx,ebx |
mov ecx,2560 |
mov edx,FONT_I |
call fs_RamdiskRead |
; mov esi,char |
; xor ebx,ebx |
; mov ecx,2560 |
; mov edx,FONT_I |
; call fs_RamdiskRead |
mov esi,char2 |
xor ebx,ebx |
mov ecx,2560;26000 |
mov edx,FONT_II |
call fs_RamdiskRead |
; mov esi,char2 |
; xor ebx,ebx |
; mov ecx,2560;26000 |
; mov edx,FONT_II |
; call fs_RamdiskRead |
pushad |
push eax |
mov eax,char |
call file_system_lfn |
mov eax,char2 |
call file_system_lfn |
pop eax |
popad |
mov esi,boot_fonts |
call boot_log |
745,22 → 765,58 |
cmp byte [BOOT_VAR+0x9030],1 |
jne no_load_vrr_m |
mov ebp, vrr_m |
; mov ebp, vrr_m |
; xor ebx, ebx |
; xor edx, edx |
; call fs_execute |
; cmp eax,2 ; if vrr_m app found (PID=2) |
; je first_app_found |
stdcall kernel_alloc, 0x100 |
push eax |
mov ebx,eax |
stdcall full_file_name,vrr_m,eax |
mov ebp, eax |
xor ebx, ebx |
xor edx, edx |
call fs_execute |
pop ebx |
push eax |
stdcall kernel_free, ebx |
pop eax |
cmp eax,2 ; if vrr_m app found (PID=2) |
je first_app_found |
no_load_vrr_m: |
mov ebp, firstapp |
; mov ebp, firstapp |
; xor ebx, ebx |
; xor edx, edx |
; call fs_execute |
; cmp eax,2 ; continue if a process has been loaded |
; je first_app_found |
; mov eax, 0xDEADBEEF ; otherwise halt |
; hlt |
stdcall kernel_alloc, 0x100 |
push eax |
mov ebx,eax |
stdcall full_file_name,firstapp,eax |
mov ebp, eax |
xor ebx, ebx |
xor edx, edx |
call fs_execute |
pop ebx |
push eax |
stdcall kernel_free, ebx |
pop eax |
cmp eax,2 ; continue if a process has been loaded |
je first_app_found |
mov eax, 0xDEADBEEF ; otherwise halt |
hlt |
first_app_found: |
cli |
3372,7 → 3428,7 |
ret |
iglobal |
cpustring db '/RD/1/CPU',0 |
cpustring db '%sys%/CPU',0 |
endg |
uglobal |
/kernel/trunk/kernel32.inc |
---|
244,3 → 244,15 |
include "hid/set_dtc.inc" |
;% -include |
;parser file names |
include "fs/parse_fn.inc" |
; work with conf lib |
include "core/conf_lib.inc" |
; load external lib |
include "core/ext_lib.inc" |
; list of external functions |
include "lib_func.inc" |
/kernel/trunk/lib/inifiles.asm |
---|
0,0 → 1,372 |
;----------------------------------------------------------------------------- |
; Copyright (c) 2007, SPraid |
;----------------------------------------------------------------------------- |
format MS COFF |
public EXPORTS |
include '../proc32.inc' |
include 'proc.inc' |
purge section |
section '.flat' code readable align 16 |
mem.alloc dd ? |
mem.free dd ? |
mem.realloc dd ? |
dll.load dd ? |
block_count: dd 0 |
sect_num: dd 0 |
data_adr: dd 0 |
data_adr_last dd 0 |
filei_len EQU 0x4000 |
filei dd ?;0x4000 ; áá뫪¨ ¤ ë¥ - ⨯ â ¬ åà ¨âìáï ¡ã¤¨â... ¢ ç «¥ â ¬ - ᪮ª ¤ ¢ë¤¥«¨âì |
sec_i_len EQU 0x4000 |
sec_i dd ?;0x4000 |
dat_i_len EQU 0x4000 |
dat_i dd ?;0x4000 |
;----------------------------------------------------------------------------- |
proc lib_init ;////////// 樫¨§ æ¨ï ¡¨¡«¨®â¥ª¨ ( ¢â®¬ â¨ç¥áª¨© ¢ë§®¢)/////// |
;----------------------------------------------------------------------------- |
mov [mem.alloc],eax |
mov [mem.free],ebx |
mov [mem.realloc],ecx |
mov [dll.load],edx |
xor eax,eax |
inc eax |
ret |
endp |
; áâàãªâãà ¡«®ª |
block_adr EQU 0 |
block_name EQU block_adr + 4 |
block_i_count EQU block_name + 30 |
block_len EQU block_i_count + 4 |
; áâàãªâãà ¤ ëå |
data_name EQU 0 |
data_prev EQU data_name+200 |
data_next EQU data_prev+4 |
data_len EQU data_next+4 |
; ¢§ïâì á«¥¤ã騩 ¯ àã § ç¥¨ï ª«îç |
proc ini.get_par stdcall, sect:dword, param:dword, val:dword, num:dword |
pushad |
mov edx,[block_count] |
mov edi,[sect] |
mov esi,[sec_i] |
add esi,block_name |
@@: call strcmp |
cmp eax,-1 |
jne .sec_found |
dec edx |
or edx,edx |
jz .sec_not_found |
add esi,block_len |
jmp @b |
.sec_found: |
mov eax,esi |
sub eax,block_name |
add eax, block_i_count |
mov eax,[eax] |
; eax - count |
mov ebx,[num] ; test max count |
; ebx - num |
cmp eax,ebx |
jle .param_not_found |
sub esi,4 |
mov esi,[esi] |
; esi - first adr |
mov eax,ebx ; eax - num |
@@: |
or eax,eax |
je .param_found |
dec eax |
add esi,data_next |
mov esi,[esi] |
jmp @b |
.param_found: |
mov ebx,esi |
mov eax,[param] |
mov cl,'=' |
call copy_s |
add ebx,eax |
add ebx,1 |
mov eax,[val] |
mov cl,0 |
call copy_s |
jmp .ok |
.param_not_found: |
.sec_not_found: |
; set_default_.... 0 |
mov eax,[param] |
mov [eax],byte 0 |
mov eax,[val] |
mov [eax],byte 0 |
.ok: |
popad |
ret |
endp |
;------------------------------------------------------ |
proc ini.get_str stdcall, sect:dword, param:dword, buff:dword, default:dword |
; sect - ᥪæ¨ï |
; param - ¯ à ¬¥âà |
; buff - ¡ãä¥à |
; default - ¥á«¨ ®âáãâáâ¢ã¥â |
pushad |
mov edx,[block_count] |
mov edi,[sect] |
mov esi,[sec_i] |
add esi,block_name |
@@: call strcmp |
cmp eax,-1 |
jne .sec_found |
dec edx |
or edx,edx |
jz .sec_not_found |
add esi,block_len |
jmp @b |
.sec_found: |
mov eax,esi |
sub eax,block_name |
add eax, block_i_count |
mov eax,[eax] |
; eax - count |
sub esi,4 |
mov esi,[esi] |
; esi - first adr |
mov edi,[param] |
push eax |
@@: |
mov cl,'=' |
mov eax,text |
mov ebx,esi |
call copy_s |
mov edx,eax |
push esi |
mov esi,text |
call strcmp |
pop esi |
cmp eax,-1 |
jne .param_found |
pop eax |
dec eax |
or eax,eax |
jz .sec_not_found |
push eax |
add esi,data_next |
mov esi,[esi] |
jmp @b |
.param_found: |
mov ebx,esi |
add ebx,edx |
add ebx,1 |
pop eax |
mov eax,[buff] |
mov cl,0 |
call copy_s |
jmp .ok |
.param_not_found: |
.sec_not_found: |
; set_default_text |
mov eax,[buff] |
mov ebx,[default] |
mov cl,0 |
call copy_s |
.ok: |
popad |
ret |
endp |
;-------------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
proc ini.load stdcall filename ;/(§ £à㧪 ¨¨ ä ©« )///////////////////////// |
locals |
reads: dd 0,0,0 |
fsize dd 0 |
addr dd filei |
nulls db 0 |
fname dd 0 |
endl |
mov [reads],dword 0 |
mov [reads+4],dword 0 |
mov [reads+8],dword 0 |
mov [nulls],byte 0 |
stdcall get_filesize, [filename] |
mov [fsize],eax |
inc eax |
mov ebx,eax |
invoke mem.alloc,eax |
mov [filei],eax |
mov [addr],eax |
add eax,ebx |
mov [eax], byte 0 ;null string |
invoke mem.alloc,sec_i_len |
mov [sec_i],eax |
invoke mem.alloc,dat_i_len |
mov [dat_i],eax |
mov [data_adr],eax |
mov eax,[filename] |
mov [fname],eax |
mov eax,70 |
mov ebx , reads-ebp |
add ebx,ebp |
int 0x40 |
stdcall readlnf |
xor eax,eax |
ret |
endp |
proc readlnf |
pushad |
mov [.pos],dword 0 |
.char: |
mov eax,[.pos] |
inc eax |
mov [.pos],eax |
sub eax,1 |
add eax,[filei] |
mov al,[eax] ; ᨬ¢®« ®â ¯®§¨æ¨¨ |
; ⨯ ¯® ¯¥à¢®¬ã ᨬ¢®«ã |
cmp al,' ' |
je .char |
cmp al,9 |
je .char |
cmp al,13 |
je .char |
cmp al,10 |
je .char |
cmp al,'[' |
je .sect |
cmp al,0 |
je .exit |
;------------------------------------------------------------------------------------------ |
; ç⥨¥ ¯ à ¬¥â஢ |
mov eax,[data_adr] |
mov ebx,[.pos] |
add ebx,[filei] |
dec ebx |
mov cl,0xD |
call copy_s |
xchg ebx,eax |
mov eax,[.pos] |
add eax,ebx |
mov [.pos],eax |
mov ebx,[data_adr] |
mov ecx,[data_adr_last] |
mov [ebx+data_prev],ecx |
;add ebx,data_next |
mov [ecx],ebx |
add ebx,data_next |
mov [data_adr_last],ebx |
add ebx,data_len-data_next |
mov [data_adr],ebx |
mov eax,[sect_num] |
imul eax,eax,block_len |
add eax,[sec_i] |
add eax, block_i_count |
mov ebx,[eax] |
inc ebx |
mov [eax],ebx |
jmp .test_next |
;----------------------------------------------------------------------------------------------------------------- |
.sect: ; ç⥨¥ ᥪ樨 |
mov eax,[block_count] |
imul eax,eax,block_len |
; ª®¯¨à㥬 ¨¬ï (¤® ]) |
add eax,[sec_i] |
add eax,block_name ; ªã¦ «®¦¨âì ¨¬ï |
mov ebx,[.pos] |
add ebx,[filei] ; ®âªã¤ |
mov cl,']' |
call copy_s ; «®¦¨¬ |
mov ebx,[.pos] |
add ebx,eax |
;sub ebx,filei |
add ebx,1 |
mov [.pos],ebx |
mov eax,[block_count] ; ¯à¨¡ ¢¨âì ª®«¨ç¥á⢮ ¡«®ª®¢ |
mov [sect_num],eax |
mov ebx,eax |
imul eax,eax,block_len ; íâ® ¡ã¤¨â ¤à¥á ¯¥à¤ë¤ã饣® ¤«ï ¯¥à¢®£® í«¥¬¥â |
add eax,[sec_i] |
mov [data_adr_last],eax |
inc ebx |
mov [block_count],ebx |
.test_next: |
cmp [.pos] ,dword 97 |
jb .char |
.exit: |
popad |
ret |
.pos dd 0 |
endp |
text db 255 dup(?) |
align 16 |
EXPORTS: |
export \ |
lib_init ,'lib_init',\ |
ini.load ,'ini.load',\ |
ini.get_str,'ini.get_str',\ |
ini.get_par,'ini.get_par' |
/kernel/trunk/lib/proc.inc |
---|
0,0 → 1,100 |
macro export [name,sname] |
{ |
forward |
dd __#name#_export_name__,name |
common |
dd 0 |
forward |
align 4 |
__#name#_export_name__ db sname,0 |
} |
copy_s: |
; eax - ªã¤ |
; ebx - ®âªã¤ |
; cl - ¤® 祣® |
; ¢ë室 - eax - ᪮«ìª® ᪮¯¨à®¢ ® |
pushad |
push eax |
@@: |
mov ch,[ebx] |
cmp ch,cl |
je @f |
mov [eax],ch |
inc ebx |
inc eax |
jmp @b |
@@: |
mov [eax], byte 0 |
pop ebx |
sub eax,ebx |
mov [esp+0x1c],eax |
popad |
ret |
strcmp: |
; esi - áâப 1 |
; edi - áâப 2 |
; ¢ë室 - eax=-1 - ¥à ¢® |
xor eax,eax |
pushad |
@@: lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: or eax,-1 |
mov [esp+0x1c],eax |
.ok: popad |
ret |
proc get_filesize stdcall, file_name:dword |
locals |
cmd dd ? |
offset dd ? |
dd ? |
count dd ? |
buff dd ? |
db ? |
name dd ? |
info dd ? |
flags dd ? |
cr_time dd ? |
cr_date dd ? |
acc_time dd ? |
acc_date dd ? |
mod_time dd ? |
mod_date dd ? |
file_size dd ? |
file dd ? |
file2 dd ? |
endl |
xor eax, eax |
mov ebx, [file_name] |
mov ecx,info-ebp |
add ecx,ebp |
mov [cmd], 5 |
mov [offset], eax |
mov [offset+4], eax |
mov [count], eax |
mov [buff], ecx |
mov byte [buff+4], al |
mov [name], ebx |
mov eax, 70 |
lea ebx, [cmd] |
int 0x40 |
mov eax,[file_size] |
ret |
endp |
/kernel/trunk/lib_func.inc |
---|
0,0 → 1,21 |
;============================================================================ |
; |
; Çàãðóçêà ññûëêè íà âíåøíèå ôóíêöèè |
; |
; |
; |
; |
; |
; |
;============================================================================ |
@IMPORT: |
library \ |
libini,'inifiles.obj' |
import libini, \ |
ini.load,'ini.load',\ |
ini.get_str,'ini.get_str',\ |
ini.get_par,'ini.get_par' |
/kernel/trunk/sys.conf |
---|
0,0 → 1,2 |
[path] |
/rd/1=%sys% |