/kernel/trunk/boot/shutdown.inc |
---|
10,9 → 10,9 |
system_shutdown: ; shut down the system |
mov eax,3 ; stop playing cd |
push 3 ; stop playing cd |
pop eax |
call sys_cd_audio |
cli |
cld |
mov al,[0x2f0000+0x9030] |
19,123 → 19,120 |
cmp al,1 |
jl no_shutdown_parameter |
cmp al,4 |
jg no_shutdown_parameter |
jmp yes_shutdown_param |
jle yes_shutdown_param |
no_shutdown_parameter: |
movzx ecx,word [0x2f0000+0x900A] |
movzx esi,word [0x2f0000+0x900C] |
imul ecx,esi ;[0xfe04] |
; mov ecx,0x500000/4 ;3fff00/4 ; darken screen |
push ecx |
mov esi,[0xfe80] |
cmp esi,32*0x100000 |
jbe no_darken_screen |
mov edi,16*0x100000 |
sdnewpix: |
mov eax,[esi] |
add esi,4 |
shr eax,1 |
and eax,0x7f7f7f7f |
stosd |
loop sdnewpix |
pop ecx |
mov esi,16*0x100000 |
mov edi,[0xfe80] |
cld |
rep movsd |
no_darken_screen: |
; movzx ecx,word [0x2f0000+0x900A] |
; movzx esi,word [0x2f0000+0x900C] |
; imul ecx,esi ;[0xfe04] |
;; mov ecx,0x500000/4 ;3fff00/4 ; darken screen |
; push ecx |
; mov esi,[0xfe80] |
; cmp esi,32*0x100000 |
; jbe no_darken_screen |
; mov edi,16*0x100000 |
; push esi edi |
; sdnewpix: |
; lodsd |
; shr eax,1 |
; and eax,0x7f7f7f7f |
; stosd |
; loop sdnewpix |
; pop ecx |
; pop esi edi |
; rep movsd |
; no_darken_screen: |
; read shutdown code: |
; 1) display shutdown "window" |
mov eax,[0xfe00] |
shr eax,1 |
sub eax,220 |
lea esi,[eax+220] ; x end |
sub eax,220 ; x start |
mov ebx,[0xfe04] |
shr ebx,1 |
mov [shutdownpos],ebx |
sub ebx,120 |
lea ebp,[ebx+105] ; y end |
sub ebx,120 ; y start |
mov edi,1 |
xor edi,edi |
inc edi ; force putpixel & dtext |
mov ecx,0x0000ff |
; vertical loop begin |
sdnewpix1: |
push eax ; save x start |
; horizontal loop begin |
sdnewpix2: |
call [putpixel] |
inc eax |
mov esi,[0xfe00] |
shr esi,1 |
add esi,220 |
cmp eax,esi |
jnz sdnewpix2 |
; horizontal loop end |
dec ecx |
dec ecx ; color |
pop eax ; restore x start |
inc ebx ; advance y pos |
cmp ebx,ebp |
jnz sdnewpix1 |
; vertical loop end |
; 2) display text strings |
; a) version |
mov eax,[0xfe00] |
shr eax,1 |
sub eax,220 |
inc ebx |
mov edx,[shutdownpos] |
add edx,105 |
cmp ebx,edx |
jnz sdnewpix2 |
mov esi,[0xfe00] ; menuet version |
shr esi,1 |
sub esi,220 |
add esi,27 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
sub eax,105 |
shl eax,16 |
mov ax,word [shutdownpos] |
push eax |
sub eax,(220-27)*10000h + 105 |
mov ebx,0xffff00 |
mov ecx,version |
mov edx,34 |
mov edi,1 |
push 34 |
pop edx |
call dtext |
mov esi,[0xfe00] ; 'it is safe..' |
shr esi,1 |
sub esi,220 |
add esi,27 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
add eax,33 |
mov esi,6 |
mov ebx,0xffffff |
; b) variants |
add eax,105+33 |
push 6 |
pop esi |
; mov ebx,0xffffff |
mov bl,0xFF |
mov ecx,shutdowntext |
mov edx,40 |
mov edi,1 |
mov dl,40 |
newsdt: |
call dtext |
add eax,10 |
add ecx,40 |
add ecx,edx |
dec esi |
jnz newsdt |
; 3) load & display rose.txt |
mov eax,rosef ; load rose.txt |
mov ebx,0 |
mov ecx,16800 |
xor ebx,ebx |
push 2 |
pop ecx |
mov edx,0x90000 |
mov esi,12 |
push edx |
push 12 |
pop esi |
push edi ; may be destroyed |
call fileread |
pop edi |
mov esi,[0xfe00] ; draw rose |
shr esi,1 |
add esi,20 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
sub eax,110 |
pop ecx |
inc ecx ; do not display stars from rose.txt |
pop eax |
add eax,20*10000h - 110 |
mov ebx,0x00ff00 |
mov ecx,0x90001 |
mov edx,27 |
mov edi,1 |
push 27 |
pop edx |
nrl: |
call dtext |
142,19 → 139,19 |
sub ebx,0x050000 |
add eax,8 |
add ecx,31 |
cmp ecx,dword 0x90001+25*31 |
cmp cx,word 0x0001+25*31 |
jnz nrl |
call checkEgaCga |
yes_shutdown_param: |
cli |
mov eax,kernel ; load kernel.mnt to 0x8000:0 |
mov esi,12 |
mov ebx,0 |
mov ecx,-1 |
push 12 |
pop esi |
xor ebx,ebx |
or ecx,-1 |
mov edx,0x80000 |
call fileread |
161,19 → 158,17 |
mov esi,restart_kernel_4000 ; move kernel re-starter to 0x4000:0 |
mov edi,0x40000 |
mov ecx,1000 |
cld |
rep movsb |
mov eax,0x2F0000 ; restore 0x0 - 0xffff |
mov ebx,0x0000 |
mov ecx,0xffff |
xor ebx,ebx |
mov ecx,0x10000 |
call memmove |
call restorefatchain |
mov eax,pr_mode_exit |
mov [0x467+0],ax |
mov [0x467+2],word 0x1000 |
mov word [0x467+0],pr_mode_exit-0x10000 |
mov word [0x467+2],0x1000 |
mov al,0x0F |
out 0x70,al |
195,26 → 190,7 |
; setup ds |
push cs |
pop ds |
; mov ax,1000 |
; mov ds,ax |
; mov es,ax |
; mov fs,ax |
; mov gs,ax |
; mov ss,ax |
; mov bl,[shutdown_parameter] |
; mov [es:shutdown_parameter-0x10000],bl |
jmp real_mode-0x10000 |
old_ints_h: |
dw 4*0x20 |
dd 0 |
dw 0 |
rdelay: |
ret |
real_mode: |
lidt [old_ints_h-0x10000] |
;remap IRQs |
mov al,0x11 |
249,14 → 225,20 |
out 0xA1,al |
sti |
jmp temp_3456 |
temp_3456: |
xor ax,ax |
mov es,ax |
mov al,byte [es:0x9030] |
cmp al,1 |
jl nbw |
cmp al,4 |
jle nbw32 |
nbw: |
xor ax,ax |
in al,0x60 |
call pause_key |
cmp al,7 |
jge nbw |
cmp al,6 |
jae nbw |
mov bl,al |
nbw2: |
in al,0x60 |
266,7 → 248,7 |
cmp al,240 ;ax,240 |
jne nbw31 |
mov al,bl |
dec al |
dec ax |
jmp nbw32 |
nbw31: |
add bl,128 |
276,45 → 258,40 |
nbw32: |
cmp al,1 ; write floppy |
jne no_floppy_write |
dec ax ; 1 = write floppy |
js nbw |
jnz no_floppy_write |
call floppy_write |
jmp temp_3456 ;nbw |
no_floppy_write: |
cmp al,2 ; poweroff |
jne no_apm_off |
dec ax ; 2 = power off |
jnz no_apm_off |
call APM_PowerOff |
jmp $ |
no_apm_off: |
cmp al,3 ; boot |
jnz no_sys_boot |
mov ax,0x0040 |
mov ds,ax |
dec ax ; 3 = reboot |
jnz restart_kernel ; 4 = restart kernel |
push 0x40 |
pop ds |
mov word[0x0072],0x1234 |
jmp 0xF000:0xFFF0 |
no_sys_boot: |
cmp al,4 ; restart kernel |
je restart_kernel |
temp_3456: |
push word 0x0000 |
pop es |
mov al,byte [es:0x9030] |
cmp al,1 |
jl nbw |
cmp al,4 |
jg nbw |
jmp nbw32 |
; jmp nbw |
pause_key: |
mov ecx,100 |
mov cx,100 |
pause_key_1: |
loop pause_key_1 |
ret |
old_ints_h: |
dw 0x400 |
dd 0 |
dw 0 |
rdelay: |
ret |
iglobal |
kernel db 'KERNEL MNT' |
; shutdown_parameter db 0 |
361,10 → 338,10 |
xor si, si |
xor di, di |
rep movsw |
mov ax, 0x9000 |
mov ds, ax |
mov ax, 0x2000 |
mov es, ax |
push 0x9000 |
pop ds |
push 0x2000 |
pop es |
pop cx |
rep movsw |
434,93 → 411,72 |
mov cx,3 |
int 0x15 |
;!!!!!!!!!!!!!!!!!!!!!!!! |
fwwritedone: |
ret |
uglobal |
flm db 0 |
endg |
floppy_write: ; write diskette image to physical floppy |
pusha |
mov ax,0x1000 |
mov es,ax |
cmp [es:flm-0x10000],byte 1 |
cmp [flm-0x10000],byte 1 |
je fwwritedone |
mov [es:flm-0x10000],byte 1 |
mov [flm-0x10000],byte 1 |
mov ax,0x0000 ; reset drive |
mov dx,0x0000 |
xor ax, ax ; reset drive |
xor dx, dx |
int 0x13 |
mov cx,0x0001 ; startcyl,startsector |
mov dx,0x0000 ; starthead,drive |
push word 80*2 ; read no of sect |
; mov dx,0x0000 ; starthead,drive |
xor dx, dx |
mov ax, 80*2 ; read no of sect |
fwwrites: |
pusha |
push ax |
; move 1mb+ -> 0:a000 |
pusha |
mov si,fwmovedesc -0x10000 |
push word 0x1000 |
pop es |
mov cx,256*18 |
mov ah,0x87 |
push ds |
pop es |
int 0x15 |
mov eax,[es:fwmovedesc-0x10000+0x12] |
add eax,512*18 |
mov [es:fwmovedesc-0x10000+0x12],eax |
add dword [fwmovedesc-0x10000+0x12], 512*18 |
popa |
xor si,si |
mov es,si |
fwnewwrite: |
push word 0x0 |
pop es |
mov bx,0xa000 ; es:bx -> data area |
mov ax,0x0300+18 ; read, no of sectors to read |
int 0x13 |
cmp ah,0 |
test ah, ah |
jz fwgoodwrite |
add si,1 |
inc si |
cmp si,10 |
jnz fwnewwrite |
add esp,32+2 |
popa ; can't access diskette |
; can't access diskette - return |
pop ax |
ret |
fwgoodwrite: |
popa |
inc dh |
cmp dh,2 |
jnz fwbb2 |
mov dh,0 |
inc ch |
fwbb2: |
cld |
pop ax |
dec ax |
push ax |
cmp ax,0 |
jnz fwrs |
jnz fwwrites |
ret |
pop ax |
jmp fwwritedone |
fwrs: |
jmp fwwrites |
fwmovedesc: |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0 |
530,13 → 486,6 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
fwwritedone: |
popa |
ret |
use32 |
uglobal |
544,14 → 493,16 |
endg |
iglobal |
;shutdowntext: |
; db "IT'S SAFE TO POWER OFF COMPUTER OR " |
; db ' ' |
; db '1) SAVE RAMDISK TO FLOPPY ' |
; db '2) APM - POWEROFF ' |
; db '3) REBOOT ' |
; db '4) RESTART KERNEL ' |
if lang eq en |
shutdowntext: |
db "IT'S SAFE TO POWER OFF COMPUTER OR " |
db ' ' |
db '1) SAVE RAMDISK TO FLOPPY ' |
db '2) APM - POWEROFF ' |
db '3) REBOOT ' |
db '4) RESTART KERNEL ' |
else |
shutdowntext: |
db "¥§®¯ ᮥ ¢ëª«î票¥ ª®¬¯ìîâ¥à ¨«¨ " |
db ' ' |
db '1) ®åà ¨âì à ¬¤¨áª ¤¨áª¥âã ' |
558,6 → 509,7 |
db '2) APM - ¢ëª«î票¥ ¯¨â ¨ï ' |
db '3) ¥à¥§ £à㧪 á¨á⥬ë ' |
db '4) ¥áâ àâ ï¤à ¨§ ' |
end if |
rosef: |
db 'ROSE TXT' |
endg |
/kernel/trunk/core/newproce.inc |
---|
86,6 → 86,7 |
call find_new_process_place ;find empty process slot |
sti |
test eax,eax |
mov ecx, -0x20 ; too many processes |
jz .failed |
mov edi,eax |
97,9 → 98,9 |
rep stosd ;clean extended information about process |
;set new process name |
xor eax,eax |
mov [appl_path_size],eax |
mov eax,[esp] ;+8] |
pop eax |
push eax |
.find_last_byte: |
cmp byte [eax],0 |
jz .find_last_byte_end |
126,9 → 127,11 |
; cli |
call floppy_fileread ;read file from FD |
; sti |
cmp eax,0 |
jne .cleanfailed |
mov ecx, eax |
neg ecx |
jnz .cleanfailed |
;check MENUET signature |
mov ecx, -0x1F ; not Menuet/Kolibri executable |
cmp [0x90000],dword 'MENU' |
jnz .cleanfailed |
cmp [0x90004],word 'ET' |
135,10 → 138,11 |
jnz .cleanfailed |
call get_app_params ;parse header fields |
cmp esi,0 |
test esi, esi |
jz .cleanfailed |
mov eax,[new_process_place] |
inc ecx ; -0x1E = no memory |
call create_app_cr3_table ;create page directory for new process |
test eax,eax |
jz .cleanfailed_mem |
152,6 → 156,7 |
mov edx,eax |
call mem_alloc_specified_region ;allocate memory for application |
test eax,eax |
mov ecx, -0x1E |
jz .cleanfailed_mem1 |
mov eax,[edx+(std_application_base_address shr 20)] |
209,6 → 214,7 |
mov esi,start_not_enough_memory |
call sys_msg_board_str |
.cleanfailed: ;clean process name |
push ecx ; save error code |
;can't read file, clean process name. |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
218,13 → 224,14 |
mov eax,' ' |
cld |
rep stosb |
pop eax |
.failed: |
;no more slots |
add esp,8+4 |
mov [application_table_status],0 |
mov [esp+1Ch], eax |
popad |
sti |
mov eax,-1 |
ret |
;----------------------------------------------------------------------------- |
258,6 → 265,7 |
call find_new_process_place ;find empty process slot |
call safe_sti |
test eax,eax |
mov ecx, -0x20 ; too many processes |
jz .failed |
mov edi,eax |
284,9 → 292,11 |
cli |
call fileread ;read file from RD |
call safe_sti |
cmp eax,0 |
jne .cleanfailed |
mov ecx, eax |
neg ecx |
jnz .cleanfailed |
;check MENUET signature |
mov ecx, -0x1F ; not Menuet/Kolibri executable |
cmp [0x90000],dword 'MENU' |
jnz .cleanfailed |
cmp [0x90004],word 'ET' |
293,11 → 303,12 |
jnz .cleanfailed |
call get_app_params ;parse header fields |
cmp esi,0 |
test esi,esi |
jz .cleanfailed |
mov eax,[new_process_place] |
call create_app_cr3_table ;create page directory for new process |
inc ecx ; -0x1E = no memory |
test eax,eax |
jz .cleanfailed_mem |
310,6 → 321,7 |
mov edx,eax |
call mem_alloc_specified_region ;allocate memory for application |
test eax,eax |
mov ecx, -0x1E |
jz .cleanfailed_mem1 |
mov eax,[edx+(std_application_base_address shr 20)] |
366,6 → 378,7 |
mov esi,start_not_enough_memory |
call sys_msg_board_str |
.cleanfailed: ;clean process name |
push ecx ; save error code |
;can't read file, clean process name. |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
375,13 → 388,14 |
mov eax,' ' |
cld |
rep stosb |
pop eax |
.failed: |
;no more slots |
add esp,8 |
mov [application_table_status],0 |
mov [esp+1Ch], eax |
popad |
call safe_sti |
mov eax,-1 |
ret |
.add_app_parameters: |
1203,6 → 1217,7 |
call find_new_process_place ;find new process slot |
sti |
test eax,eax |
mov ecx, -0x20 ; too many processes |
jz .failed |
;write application name |
1231,11 → 1246,14 |
mov ecx,1 ;read from first block |
mov edx,1 ;read 1 block |
call read_hd_file |
test eax,eax |
mov ecx, eax |
neg ecx |
jnz .cleanfailed |
mov esi,[esp] |
pop esi |
push esi |
;check menuet signature |
mov ecx, -0x1F ; not Menuet/Kolibri executable |
cmp [esi+1024+0],dword 'MENU' ;read_hd_file function write file to +1024 offset |
jnz .cleanfailed |
cmp [esi+1024+4],word 'ET' |
1246,6 → 1264,7 |
cld |
rep movsd ;copy first block to 0x90000 address for get_app_params function |
call get_app_params |
mov ecx, -0x1F ; not Menuet/Kolibri executable |
test esi,esi |
jz .cleanfailed |
1252,6 → 1271,7 |
mov eax,[new_process_place] |
call create_app_cr3_table ;create page directory |
test eax,eax |
inc ecx ; -0x1E = no memory |
jz .cleanfailed_mem |
call MEM_Get_Linear_Address |
1262,6 → 1282,7 |
shr ecx,12 |
mov edx,eax ;edx - linear address of page directory |
call mem_alloc_specified_region ;allocate memory for application |
mov ecx, -0x1E ; no memory |
test eax,eax |
jz .cleanfailed_mem1 |
1350,6 → 1371,7 |
mov esi,start_not_enough_memory |
call sys_msg_board_str |
.cleanfailed: ;clean process name |
push ecx |
;can't read file, clean process name. |
;this avoid problems with panel application. |
mov edi,[new_process_place] |
1359,11 → 1381,12 |
mov eax,' ' |
cld |
rep stosb |
pop eax |
.failed: |
;no more slots |
add esp,16 |
mov [esp+1Ch], eax |
popad |
mov eax,-1 |
mov [application_table_status],0 |
sti |
ret |
/kernel/trunk/fs/fs.inc |
---|
48,7 → 48,7 |
; OUT: |
; |
; eax = 0 : read ok |
; eax = 1 : no fd base and/or partition defined |
; eax = 1 : no hd base and/or partition defined |
; eax = 2 : yet unsupported FS |
; eax = 3 : unknown FS |
; eax = 4 : partition not defined at hd |
61,11 → 61,32 |
; |
; ebx = size |
; \begin{diamond}[18.03.2006] |
; for subfunction 16 (start application) error codes must be negative |
; because positive values are valid PIDs |
; so possible return values are: |
; eax > 0 : process created, eax=PID |
; -0x10 <= eax < 0 : -eax is filesystem error code: |
; eax = -1 = 0xFFFFFFFF : no hd base and/or partition defined |
; eax = -3 = 0xFFFFFFFD : unknown FS |
; eax = -5 = 0xFFFFFFFB : file not found |
; eax = -6 = 0xFFFFFFFA : unexpected end of file (probably not executable file) |
; eax = -9 = 0xFFFFFFF7 : fat table corrupted |
; eax = -10 = 0xFFFFFFF6 : access denied |
; -0x20 <= eax < -0x10: eax is process creation error code: |
; eax = -0x20 = 0xFFFFFFE0 : too many processes |
; eax = -0x1F = 0xFFFFFFE1 : not Menuet/Kolibri executable |
; eax = -0x1E = 0xFFFFFFE2 : no memory |
; ebx is not changed |
; \end{diamond}[18.03.2006] |
; Extract parameters |
add eax, std_application_base_address ; abs start of info block |
mov edi,[0x3010] |
add eax,[edi+0x10] ; abs start of info block |
cmp dword [eax+0],12 ; Get file size |
je fs_read |
cmp dword [eax+0],13 ; Get file attribute |
85,9 → 106,6 |
cmp dword [0x3000],1 ; no memory checks for kernel requests |
jz no_checks_for_kernel |
;iglobal |
; buffer_failed db 'Buffer check failed',13,10,0 |
;endg |
mov edx,eax |
cmp dword [eax+0],1 |
jz .check_for_write_op |
104,11 → 122,11 |
.error_output: |
mov esi,buffer_failed |
call sys_msg_board_str |
mov eax,7 |
; mov eax,7 |
mov dword [esp+36],7 |
ret |
iglobal |
buffer_failed db 'Buffer check failed',13,10,0 |
buffer_failed db 'K : Buffer check failed',13,10,0 |
endg |
.usual_check: |
cmp dword [eax+0],0 |
122,22 → 140,6 |
call check_region |
test eax,eax |
jz .error_output |
jmp area_in_app_mem |
; mov ebx,[0x3000] ; pointer in application memory ? |
; shl ebx,8 |
; mov ebx,[ebx+0x80000+0x8c] |
; mov ebp,ebx ; save for checking at stack save |
; sub ebp,[eax+12] |
; shr ebp,9 |
; sub ebx,512 ; need atleast one block |
; cmp ebx,[eax+12] |
; ja area_in_app_mem |
; mov eax,7 |
; mov dword [esp+36],7 |
; ret |
area_in_app_mem: |
mov eax,edx |
no_checks_for_kernel: |
147,7 → 149,7 |
je fs_read |
cmp dword [eax+8],0 ; read or write 0 blocks/bytes ? |
jne fs_read |
mov dword [esp+36],0 |
and dword [esp+36],0 |
ret |
fs_read: |
157,26 → 159,39 |
test bh,bh |
jne fs_noroot |
fs_getroot: |
mov edx,[edi+0x10] |
; \begin{diamond}[18.03.2006] |
; root - only read is allowed |
; other operations return "access denied", eax=10 |
; (execute operation returns eax=-10) |
cmp dword [eax], 0 |
jz .read_root |
mov ecx, 10 |
cmp dword [eax], 16 |
jnz @f |
neg ecx |
@@: mov [esp+36], ecx |
ret |
.read_root: |
; \end{diamond}[18.03.2006] |
mov esi,dir0 |
mov edi,[eax+12] |
add edi,edx |
add edi,std_application_base_address |
mov ecx,11 |
cld |
push ecx |
; cld ; already is |
rep movsb |
mov eax,0x10 |
mov al,0x10 |
stosb |
add edi,32-11-1 |
mov ecx,11 |
pop ecx |
rep movsb |
stosb |
mov dword [esp+36],0 ; ok read |
and dword [esp+36],0 ; ok read |
mov dword [esp+24],32*2 ; size of root |
ret |
fs_info: ;start of code - Mihasik |
mov edi,eax |
push edi |
push eax |
cmp [eax+21],byte 'h' |
je fs_info_h |
cmp [eax+21],byte 'H' |
210,27 → 225,16 |
fs_noroot: |
mov ebx,[eax+0] |
push ebx ; read/write/delete/.../makedir/rename/lba/run |
mov ebx,[eax+4] |
push ebx ; 512 block number to read |
mov ebx,[eax+8] |
; cmp dword [eax+0],0 ; if read, check that the data stays at |
; jne ret_size_fine ; application memory |
; cmp ebx,ebp |
; jbe ret_size_fine |
; mov ebx,ebp |
; ret_size_fine: |
push ebx ; bytes to write/append or 512 blocks to read |
push dword [eax+0] ; read/write/delete/.../makedir/rename/lba/run |
push dword [eax+4] ; 512 block number to read |
push dword [eax+8] ; bytes to write/append or 512 blocks to read |
mov ebx,[eax+12] |
add ebx,[edi+0x10] |
add ebx,std_application_base_address |
push ebx ; abs start of return/save area |
lea esi,[eax+20] ; abs start of dir + filename |
mov edi,[edi+0x10] ; abs start of work area |
add edi,[eax+16] |
mov edi,[eax+16] |
add edi,std_application_base_address ; abs start of work area |
call expand_pathz |
237,11 → 241,10 |
push edi ; dir start |
push ebx ; name of file start |
mov ebx,[dir0+11] ; /RAMDISK |
mov eax,[edi+1] |
cmp eax,'RD ' |
je fs_yesramdisk |
cmp eax,ebx |
cmp eax,'RAMD' |
jne fs_noramdisk |
fs_yesramdisk: |
249,11 → 252,10 |
cmp byte [edi+1+11],0 |
je fs_give_dir1 |
mov ebx,[dir1] ; /FIRST |
mov eax,[edi+1+12] |
cmp eax,'1 ' |
je fs_yesramdisk_first |
cmp eax,ebx |
cmp eax,'FIRS' |
jne fs_noramdisk |
fs_yesramdisk_first: |
312,17 → 314,16 |
add eax,2*12+1 |
xor ebx,ebx ; parameters to pass |
cmp dword [esp+12],0 |
cmp dword [esp+12],ebx;0 |
je no_fl_start_param |
mov ebx,[0x3010] |
mov ebx,[ebx+0x10] |
add ebx,[esp+12] |
mov ebx, [esp+12] |
add ebx, std_application_base_address |
no_fl_start_param: |
mov edx,[esp+16] ; flags |
call start_application_fl |
jmp file_system_return |
jmp file_system_startapp_return |
fs_noramdisk_start_application: ;there's new code - Mihasik |
cmp dword [esp+20],2 ;DELETE |
350,11 → 351,10 |
fs_noramdisk: |
;******************************************************************** |
mov ebx,[dir0+22] ; /FLOPPYDISK |
mov eax,[edi+1] |
cmp eax,'FD ' |
je fs_yesflpdisk |
cmp eax,ebx |
cmp eax,'FLOP' |
jne fs_noflpdisk |
fs_yesflpdisk: |
363,16 → 363,14 |
cmp byte [edi+1+11],0 |
je fs_give_dir1 |
mov ebx,[dir1] ; /FIRST |
mov eax,[edi+1+12] |
cmp eax,'1 ' |
je fs_yesflpdisk_first |
cmp eax,ebx |
cmp eax,'FIRS' |
je fs_yesflpdisk_first |
mov ebx,[dir1+11] ; /SECOND |
cmp eax,'2 ' |
je fs_yesflpdisk_second |
cmp eax,ebx |
cmp eax,'SECO' |
jne fs_noflpdisk |
jmp fs_yesflpdisk_second |
434,7 → 432,7 |
add eax,2*12+1 |
xor ebx,ebx ; parameters to pass |
cmp dword [esp+12],0 |
cmp dword [esp+12],ebx;0 |
je no_flp_start_param |
mov ebx,[0x3010] |
mov ebx,[ebx+0x10] |
445,6 → 443,8 |
call start_application_floppy |
file_system_startapp_return: |
mov ebx, [esp+24+24] ; do not modify ebx in application |
jmp file_system_return |
fs_noflpdisk_start_application: |
495,9 → 495,9 |
call StringToNumber |
mov [fat32part],eax |
choice_necessity_partition_1: |
mov [0xfe10],dword 0 ; entries in hd cache |
mov ecx,[hdpos] |
xor eax,eax |
mov [0xfe10], eax ; entries in hd cache |
mov edx,0x40002 |
search_partition_array: |
mov bl,[edx] |
516,11 → 516,10 |
ret |
old_path_harddisk: |
mov ebx,[dir0] ; /HARDDISK |
mov eax,[edi+1] |
cmp eax,'HD ' |
je fs_yesharddisk |
cmp eax,ebx |
cmp eax,'HARD' |
jne fs_noharddisk |
fs_yesharddisk: |
543,6 → 542,10 |
fs_yesharddisk_all: |
mov eax,1 |
cmp dword [esp+20], 16 |
jnz @f |
neg eax |
@@: mov ebx, [esp+24+24] |
cmp [hdpos],0 ; is hd base set? |
jz file_system_return ; no |
cmp [fat32part],0 ; is partition set? |
661,19 → 664,17 |
add edi,12+1 ; continue after name |
call expand_pathz ; convert destination name |
mov edx,[dir0] ; /HARDDISK |
mov eax,[edi+1] |
cmp eax,'HD ' |
je fs_rename_test1 |
cmp eax,edx |
cmp eax,'HARD' |
jne fs_rename_error |
fs_rename_test1: |
mov edx,[dir1] ; /FIRST |
mov eax,[edi+1+12] |
cmp eax,'1 ' |
je fs_rename_start |
cmp eax,edx |
cmp eax,'FIRS' |
jne fs_rename_error |
fs_rename_start: |
774,21 → 775,28 |
add ecx,512 |
xor ebp,ebp ; parameters to pass |
cmp dword [esp+12],0 |
cmp dword [esp+12],ebp;0 |
je no_hd_start_param |
mov ebp,[0x3010] |
mov ebp,[ebp+0x10] |
add ebp,[esp+12] |
mov ebp, [esp+12] |
add ebp, std_application_base_address |
no_hd_start_param: |
mov edx,[esp+16] ; flags |
call start_application_hd |
jmp file_system_return |
jmp file_system_startapp_return |
fs_noharddisk_start_application: |
fs_noharddisk: |
; \begin{diamond}[18.03.2006] |
mov eax, 5 ; file not found |
; à ìîæåò áûòü, âîçâðàùàòü äðóãîé êîä îøèáêè? |
cmp dword [esp+20], 16 |
jnz @f |
neg eax |
@@: mov ebx, [esp+24+24] ; do not change ebx in application |
; \end{diamond}[18.03.2006] |
file_system_return: |
801,13 → 809,29 |
fs_give_dir1: |
mov eax,0x10 |
; \begin{diamond}[18.03.2006] |
; /RD,/FD,/HD - only read is allowed |
; other operations return "access denied", eax=10 |
; (execute operation returns eax=-10) |
cmp dword [esp+20], 0 |
jz .read |
add esp, 20 |
pop ecx |
mov eax, 10 |
cmp ecx, 16 |
jnz @f |
neg eax |
@@: mov [esp+36], eax |
ret |
.read: |
; \end{diamond}[18.03.2006] |
mov al,0x10 |
mov ebx,1 |
mov edi,[esp+8] |
mov esi,dir1 |
fs_d1_new: |
mov ecx,11 |
cld |
; cld |
rep movsb |
stosb |
add edi,32-11-1 |
816,7 → 840,7 |
add esp,24 |
mov dword [esp+36],0 ; ok read |
and dword [esp+36],0 ; ok read |
mov dword [esp+24],32*1 ; dir/data size |
ret |
851,7 → 875,7 |
shl esi,9 |
add esi,0x100000 |
mov ecx,512/4 |
cld |
; cld |
rep movsd |
popad |
/kernel/trunk/kernel.asm |
---|
72,7 → 72,7 |
putpixel dd __sys_putpixel |
; } mike.dld |
version db 'Kolibri OS version 0.5.2.9 ',13,10,13,10,0 |
version db 'Kolibri OS version 0.5.3.0 ',13,10,13,10,0 |
;dd endofcode-0x10000 |
;db 'Boot02' |
2274,7 → 2274,7 |
iglobal |
version_inf: |
db 0,5,2,9 ; version 0.5.2.9 |
db 0,5,3,0 ; version 0.5.2.9 |
db UID_KOLIBRI |
db 'Kolibri',0 |
version_end: |