Browse Source

fix: correction dans la fonction "decompressrle" Modifications de "projfile" et de "execfile" afin de pouvoir gérer les appels récurant en libraire.

feature/test
Nicolas Hordé 17 years ago
parent
commit
db544a7cbe
  1. 42
      noyau/disque.asm

42
noyau/disque.asm

@ -158,17 +158,19 @@ PROC execfile FAR
ARG @file:word
pushad
push ds es fs gs
call projfile,[@file]
jc @@reallyerrornoblock
call [cs:mbchown],ax,[word ptr ss:bp+4]
jc @@reallyerror
call [cs:mbloadfuncs],ax
mov di,[@file]
call uppercase,di
call projfile,di
;jc @@reallyerrornoblock
call [cs:mbfind],di
jc @@reallyerror
call [cs:mbloadsection],ax
call [cs:mbchown],ax,[word ptr ss:bp+4]
jc @@reallyerror
push ax
push ax
pop ds
cmp [ds:0x0],'EC'
jne @@reallyerror
push ax
push cs
push offset @@arrive
push ds
@ -191,9 +193,10 @@ PROC execfile FAR
sti
db 0CBh
@@arrive:
cli
pop ax
call [cs:mbfree],ax
;cli
;pop ax
;call [cs:mbfree],ax
call [cs:mbfree]
pop gs fs es ds
popad
clc
@ -208,8 +211,8 @@ PROC execfile FAR
endp execfile
;============projfile (Fonction 17)===============
;Charge le fichier ds:%0 sur un bloc mémoire -> eax taille -> es bloc
;-> ax bloc mémoire
;Charge le fichier ds:%0 sur un bloc mémoire -> eax taille
;-> eax taille fichier
;<- Flag Carry si erreur
;=====================================================
PROC projfile FAR
@ -236,12 +239,20 @@ USES cx,si,di,ds,es
mov eax,[es:(find di).result.filesize]
call [cs:mbcreate],di,ax
jc @@errorload
call [cs:mbchown],ax,[word ptr ss:bp+4]
jc @@errorload
mov ds,ax
mov cx,[es:(find di).result.filegroup]
mov eax,[es:(find di).result.filesize]
call loadway,cx,eax,0
jc @@errorload
mov ax,ds
cmp [ds:0x0],'EC'
jne @@notace
call [cs:mbloadfuncs],ds
jc @@errorload
call [cs:mbloadsection],ds
jc @@errorload
@@notace:
clc
ret
@@errorload:
@ -364,7 +375,7 @@ PROC cmpnames FAR
jmp @@itok
endp cmpnames
;charge le fichier de de groupe CX et de taille eax
;charge le fichier de de groupe %0 et de taille %1
PROC loadway NEAR
ARG @sector:word,@size:dword,@offset:word
USES eax,bx,cx,dx,si,di,ds,es
@ -871,7 +882,7 @@ invert:
;=====================================================
PROC decompressrle FAR
ARG @seg1:word,@off1:word,@seg2:word,@off2:word,@size:word
USES ax,cx,dx,si,di,ds,es
USES ecx,dx,si,di,ds,es
mov ds,[@seg1]
mov es,[@seg2]
mov si,[@off1]
@ -906,6 +917,7 @@ PROC decompressrle FAR
dec dx
jnz @@decompression
@@thenen:
xor eax,eax
mov ax,di
sub ax,[@off2]
clc

Loading…
Cancel
Save