Browse Source

feat: mise a jour des fonctions "decompressrle" et "compressrle" au format STDCALL/CE

feature/test
Nicolas Hordé 17 years ago
parent
commit
2f20a86d11
  1. 85
      noyau/disque.asm

85
noyau/disque.asm

@ -869,22 +869,26 @@ invert:
;-> AH=5
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
;=====================================================
decompressrle:
push cx dx si di
mov dx,cx
mov bp,di
decompression:
mov eax,[si]
PROC decompressrle FAR
ARG @seg1:word,@off1:word,@seg2:word,@off2:word,@size:word
USES ax,cx,dx,si,di,ds,es
mov ds,[@seg1]
mov es,[@seg2]
mov si,[@off1]
mov di,[@off2]
mov dx,[@size]
@@decompression:
mov eax,[ds:si]
cmp al,'/'
jne nocomp
jne @@nocomp
cmp si,07FFFh-6
jae thenen
jae @@thenen
mov ecx,eax
ror ecx,16
cmp cl,'*'
jne nocomp
cmp [byte ptr si+4],'/'
jne nocomp
jne @@nocomp
cmp [byte ptr ds:si+4],'/'
jne @@nocomp
mov al,ch
mov cl,ah
xor ah,ah
@ -893,48 +897,45 @@ decompression:
rep stosb
add si,5
sub dx,5
jnz decompression
jmp thenen
nocomp:
jnz @@decompression
jmp @@thenen
@@nocomp:
mov [es:di],al
inc si
inc di
dec dx
jnz decompression
thenen:
mov ax,dx
sub bp,di
neg bp
jnz @@decompression
@@thenen:
mov ax,di
sub ax,[@off2]
clc
pop di si dx cx
ret
endp decompressrle
;=============CompressRle (Fonction 06H)==============
;compress ds:si en es:di taille cx d‚compress‚ BP compress‚
;-> AH=6
;<- Flag Carry si erreur, Flag Equal si secteurs égaux
;=====================================================
compressrle:
push ax bx cx dx si di ds es
mov bp,di
xchg si,di
push es
push ds
pop es
pop ds
mov dx,cx
;mov bp,cx
againcomp:
PROC compressrle FAR
ARG @seg1:word,@off1:word,@seg2:word,@off2:word,@size:word
USES ax,bx,cx,dx,si,di,ds,es
mov es,[@seg1]
mov ds,[@seg2]
mov di,[@off1]
mov si,[@off2]
mov dx,[@size]
@@againcomp:
mov bx,di
mov al,[es:di]
mov cx,dx
cmp ch,0
je poo
je @@poo
mov cl,0ffh
;mov cx,bp
;sub cx,di
;mov ah,cl
poo:
@@poo:
mov ah,cl
inc di
xor ch,ch
@ -942,7 +943,7 @@ poo:
sub cl,ah
neg cl
cmp cl,6
jbe nocomp2
jbe @@nocomp2
mov [dword ptr si],' * /'
mov [byte ptr si+4],'/'
mov [si+1],cl
@ -951,21 +952,21 @@ poo:
dec di
xor ch,ch
sub dx,cx
jnz againcomp
jmp fini
nocomp2:
jnz @@againcomp
jmp @@fini
@@nocomp2:
mov [si],al
inc si
inc bx
mov di,bx
dec dx
jnz againcomp
fini:
sub bp,si
neg bp
jnz @@againcomp
@@fini:
mov ax,si
sub ax,[@off2]
clc
pop es ds di si dx cx bx ax
ret
endp compressrle
;=============Changedir (Fonction 13)==============
;Change le repertoire courant a DS:SI

Loading…
Cancel
Save