fix: passage au format CE, offset a 0 Ajout de la fonction MBSearchfunc qui recherche une fonction dans la mémoire et MBLoadfuncs qui permet de resoudre les dependance du format CE correction d'un bogue dans MBcreate lors de l'utilisation d'un bloc de meme taille que le libre
This commit is contained in:
parent
4da7f7f656
commit
20d5374674
127
noyau/mcb.asm
127
noyau/mcb.asm
|
@ -3,13 +3,13 @@
|
||||||
smart
|
smart
|
||||||
.code
|
.code
|
||||||
|
|
||||||
org 0100h
|
org 0h
|
||||||
|
|
||||||
include ..\include\mem.h
|
include ..\include\mem.h
|
||||||
include ..\include\divers.h
|
include ..\include\divers.h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
maxfunc equ 10
|
maxfunc equ 13
|
||||||
|
|
||||||
jmp tsr ;Saute à la routine résidente
|
jmp tsr ;Saute à la routine résidente
|
||||||
nameed db 'MB' ;Nom drivers
|
nameed db 'MB' ;Nom drivers
|
||||||
|
@ -64,9 +64,117 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI
|
||||||
dw MBAlloc
|
dw MBAlloc
|
||||||
dw MBclean
|
dw MBclean
|
||||||
dw MBfindsb
|
dw MBfindsb
|
||||||
|
dw MBnonresident
|
||||||
|
dw MBSearchfunc
|
||||||
|
dw MBLoadfuncs
|
||||||
|
;dw MBdefrag
|
||||||
|
;dw MBcopy
|
||||||
|
;dw MBchname
|
||||||
|
|
||||||
FirstMB dw 0
|
FirstMB dw 0
|
||||||
|
|
||||||
|
;Resouds les dépendances du bloc de mémoire GS
|
||||||
|
MBloadfuncs:
|
||||||
|
push ax bx ecx dx si di ds es gs
|
||||||
|
push gs
|
||||||
|
pop ds
|
||||||
|
cmp word ptr ds:[102h],"EC"
|
||||||
|
jne notloaded
|
||||||
|
mov si,ds:[100h+exe.import+2]
|
||||||
|
loadfuncs:
|
||||||
|
cmp word ptr [si],0
|
||||||
|
je endofloading
|
||||||
|
call MBSearchfunc
|
||||||
|
jnc toendoftext
|
||||||
|
mov bx,si
|
||||||
|
findend2:
|
||||||
|
inc bx
|
||||||
|
cmp byte ptr [bx], ':'
|
||||||
|
jne findend2
|
||||||
|
mov byte ptr [bx],0
|
||||||
|
mov ah,17
|
||||||
|
int 48h
|
||||||
|
jc notloaded
|
||||||
|
mov byte ptr [bx],':'
|
||||||
|
call MBSearchfunc
|
||||||
|
jc notloaded
|
||||||
|
toendoftext:
|
||||||
|
mov al,[si]
|
||||||
|
cmp al,0
|
||||||
|
je oktonext2
|
||||||
|
inc si
|
||||||
|
jmp toendoftext
|
||||||
|
oktonext2:
|
||||||
|
inc si
|
||||||
|
mov [si],dx
|
||||||
|
mov [si+2],gs
|
||||||
|
add si,4
|
||||||
|
jmp loadfuncs
|
||||||
|
endofloading:
|
||||||
|
clc
|
||||||
|
pop gs es ds di si dx ecx bx ax
|
||||||
|
ret
|
||||||
|
notloaded:
|
||||||
|
stc
|
||||||
|
pop gs es ds di si dx ecx bx ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;Recherche une fonction pointé par DS:SI en mémoire et renvoie son adresse en GS:DX
|
||||||
|
MBSearchfunc:
|
||||||
|
push bx si di
|
||||||
|
mov bx,si
|
||||||
|
findend:
|
||||||
|
inc bx
|
||||||
|
cmp byte ptr [bx], ':'
|
||||||
|
jne findend
|
||||||
|
mov byte ptr [bx],0
|
||||||
|
call MBfind
|
||||||
|
mov byte ptr [bx],':'
|
||||||
|
jc notfoundattallthesb
|
||||||
|
cmp word ptr gs:[102h],"EC"
|
||||||
|
jne notfoundattallthesb
|
||||||
|
mov di,gs:[100h+exe.export+2]
|
||||||
|
inc bx
|
||||||
|
inc bx
|
||||||
|
functions:
|
||||||
|
cmp word ptr gs:[di],0
|
||||||
|
je notfoundattallthesb
|
||||||
|
mov si,bx
|
||||||
|
cmpnamesfunc:
|
||||||
|
mov al,gs:[di]
|
||||||
|
cmp al,ds:[si]
|
||||||
|
jne notfoundthesb
|
||||||
|
cmp al,0
|
||||||
|
je seemsok
|
||||||
|
inc si
|
||||||
|
inc di
|
||||||
|
jmp cmpnamesfunc
|
||||||
|
notfoundthesb:
|
||||||
|
mov al,gs:[di]
|
||||||
|
cmp al,0
|
||||||
|
je oktonext
|
||||||
|
inc di
|
||||||
|
jmp notfoundthesb
|
||||||
|
oktonext:
|
||||||
|
inc di
|
||||||
|
inc di
|
||||||
|
inc di
|
||||||
|
jmp functions
|
||||||
|
seemsok:
|
||||||
|
mov dx,gs:[di+1]
|
||||||
|
clc
|
||||||
|
pop di si bx
|
||||||
|
ret
|
||||||
|
notfoundattallthesb:
|
||||||
|
stc
|
||||||
|
pop di si bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
;Mise a nivo de la mémoire (jonction de blocs libre)
|
;Mise a nivo de la mémoire (jonction de blocs libre)
|
||||||
MBclean:
|
MBclean:
|
||||||
push ax bx dx es gs
|
push ax bx dx es gs
|
||||||
|
@ -400,10 +508,10 @@ endofloops:
|
||||||
inc bx
|
inc bx
|
||||||
inc bx
|
inc bx
|
||||||
sub ax,cx
|
sub ax,cx
|
||||||
dec ax
|
|
||||||
dec ax
|
|
||||||
cmp ax,0
|
cmp ax,0
|
||||||
je nofree
|
je nofree
|
||||||
|
dec ax
|
||||||
|
dec ax
|
||||||
mov es:[MB.Sizes],cx
|
mov es:[MB.Sizes],cx
|
||||||
add cx,bx
|
add cx,bx
|
||||||
mov es,cx
|
mov es,cx
|
||||||
|
@ -442,4 +550,15 @@ MBresident:
|
||||||
pop es bx
|
pop es bx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;Rend le segment GS résident
|
||||||
|
MBnonresident:
|
||||||
|
push bx es
|
||||||
|
mov bx,gs
|
||||||
|
dec bx
|
||||||
|
dec bx
|
||||||
|
mov es,bx
|
||||||
|
mov es:[MB.IsResident],False
|
||||||
|
pop es bx
|
||||||
|
ret
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
Loading…
Reference in New Issue