fix: correction de bogue multiple permettant a ce pilote de fonctionner et ajout d'une fonction de listage des blocs
This commit is contained in:
parent
829f9b4721
commit
09f8882cb8
|
@ -9,7 +9,7 @@ include ..\include\mem.h
|
||||||
include ..\include\divers.h
|
include ..\include\divers.h
|
||||||
|
|
||||||
start:
|
start:
|
||||||
maxfunc equ 4
|
maxfunc equ 5
|
||||||
|
|
||||||
jmp tsr ;Saute à la routine résidente
|
jmp tsr ;Saute à la routine résidente
|
||||||
nameed db 'MB' ;Nom drivers
|
nameed db 'MB' ;Nom drivers
|
||||||
|
@ -45,7 +45,7 @@ itsok:
|
||||||
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
;mov ax,cs ;On récupère le segment et l'offset puis en renvoie l'adresse physique
|
||||||
;shl eax,4 ;de l'erreur.
|
;shl eax,4 ;de l'erreur.
|
||||||
;add ax,cs:current
|
;add ax,cs:current
|
||||||
;jmp endofint ;on termine l'int
|
jmp endofint ;on termine l'int
|
||||||
noerror:
|
noerror:
|
||||||
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
and byte ptr [bp+6],0FEh;Si pas d'erreur on efface le Bit CARRY du FLAG qui sera dépilé lors du IRET
|
||||||
endofint:
|
endofint:
|
||||||
|
@ -58,12 +58,15 @@ tables dw MBinit ;Table qui contient les adresses de toutes les fonctions de VI
|
||||||
dw MBFree
|
dw MBFree
|
||||||
dw MBCreate
|
dw MBCreate
|
||||||
dw MBresident
|
dw MBresident
|
||||||
|
dw MBGet
|
||||||
|
|
||||||
FirstMB dw 0
|
FirstMB dw 0
|
||||||
|
|
||||||
;Initialise les blocs de mémoire en prenant memorystart pour segment de base
|
;Initialise les blocs de mémoire en prenant memorystart pour segment de base
|
||||||
MBinit:
|
MBinit:
|
||||||
push ax cx es
|
push ax cx es
|
||||||
|
cmp cs:FirstMB,0
|
||||||
|
jne notforfree
|
||||||
mov ax,memorystart
|
mov ax,memorystart
|
||||||
mov cs:Firstmb,ax
|
mov cs:Firstmb,ax
|
||||||
mov cx,0A000h
|
mov cx,0A000h
|
||||||
|
@ -71,6 +74,8 @@ MBinit:
|
||||||
dec ax
|
dec ax
|
||||||
dec ax
|
dec ax
|
||||||
mov es,ax
|
mov es,ax
|
||||||
|
cmp es:[MB.Check],'NH'
|
||||||
|
je notforfree
|
||||||
mov es:[MB.Reference],Free
|
mov es:[MB.Reference],Free
|
||||||
mov es:[MB.Sizes],cx
|
mov es:[MB.Sizes],cx
|
||||||
mov es:[MB.Check],'NH'
|
mov es:[MB.Check],'NH'
|
||||||
|
@ -93,16 +98,52 @@ MBFree:
|
||||||
dec bx
|
dec bx
|
||||||
mov es,bx
|
mov es,bx
|
||||||
cmp es:[MB.Check],'NH'
|
cmp es:[MB.Check],'NH'
|
||||||
je notforfree
|
je wasfree
|
||||||
mov es:[MB.IsResident],0
|
cmp es:[MB.Reference],Free
|
||||||
|
je wasfree
|
||||||
|
cmp es:[MB.IsResident],true
|
||||||
|
je wasfree
|
||||||
|
mov es:[MB.IsResident],false
|
||||||
mov es:[MB.Reference],Free
|
mov es:[MB.Reference],Free
|
||||||
mov dword ptr es:[MB.Names],'eerF'
|
mov dword ptr es:[MB.Names],'eerF'
|
||||||
mov dword ptr es:[MB.Names+4],0
|
mov dword ptr es:[MB.Names+4],0
|
||||||
pop es bx
|
pop es bx
|
||||||
ret
|
ret
|
||||||
|
wasfree:
|
||||||
|
stc
|
||||||
|
pop es bx
|
||||||
|
ret
|
||||||
|
|
||||||
;Renvoie en GS le MB n° bx
|
;Renvoie en GS le MB n° cx carry quand terminé
|
||||||
MBGet:
|
MBGet:
|
||||||
|
push bx dx
|
||||||
|
mov bx,cs:firstmb
|
||||||
|
dec bx
|
||||||
|
dec bx
|
||||||
|
xor dx,dx
|
||||||
|
searchfree2:
|
||||||
|
mov gs,bx
|
||||||
|
cmp gs:[MB.Check],'NH'
|
||||||
|
jne itsend
|
||||||
|
inc bx
|
||||||
|
inc bx
|
||||||
|
add bx,gs:[MB.Sizes]
|
||||||
|
cmp word ptr gs:[MB.Sizes],0
|
||||||
|
je itsend
|
||||||
|
cmp dx,cx
|
||||||
|
je foundmcb
|
||||||
|
ja itsend
|
||||||
|
inc dx
|
||||||
|
cmp gs:[MB.IsNotLast],true
|
||||||
|
je searchfree2
|
||||||
|
itsend:
|
||||||
|
stc
|
||||||
|
pop dx bx
|
||||||
|
ret
|
||||||
|
foundmcb:
|
||||||
|
clc
|
||||||
|
pop dx bx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS
|
;Creér un bloc de nom ds:si de taille cx (octets) -> n°segment dans GS
|
||||||
|
|
Loading…
Reference in New Issue