fix: correctione du fonctionnement des blocs de mémoire. rajout d'une fonction de projection en bloc mémoire. utilisation de la fonction projfile pour le chargement des pilotes et de l'interpreteur. ajout de fonctions de déboguage temporaire

This commit is contained in:
Nicolas Hordé 2004-10-30 18:51:59 +00:00
parent 819d3e819c
commit df90101e7f
1 changed files with 202 additions and 51 deletions

View File

@ -77,7 +77,6 @@ noone:
call MBinit call MBinit
jc nomem1 jc nomem1
call InitDrive call InitDrive
mov si,offset premice mov si,offset premice
mov bl,7 mov bl,7
call showstr call showstr
@ -92,7 +91,6 @@ noone:
mov di,offset loadinglist mov di,offset loadinglist
call loadfile call loadfile
jc noconfread jc noconfread
mov si,offset debut mov si,offset debut
mov bl,7 mov bl,7
call showstr call showstr
@ -101,23 +99,11 @@ noone:
suiteloading: suiteloading:
call readline call readline
jc noconfload jc noconfload
mov cx,19000
call MBCreate
jc nomem2
push si
mov bl,7 mov bl,7
push si
mov si,offset next mov si,offset next
call showstr call showstr
pop si pop si
call showstr
mov dx,gs
push si
mov bl,7
mov si,offset address
call showstr
mov cx,16
call showhex
mov si,offset addressend
call showstr call showstr
xor bp,bp xor bp,bp
mov dx,ax mov dx,ax
@ -136,14 +122,15 @@ noadder:
mov bp,1 mov bp,1
sub dx,68h sub dx,68h
haveirq: haveirq:
push si
mov si,offset irqs mov si,offset irqs
call showstr call showstr
mov cx,4 mov cx,4
call showhex call showhex
mov si,offset irqsend mov si,offset irqsend
call showstr call showstr
pop si
noadd: noadd:
pop si
cmp bp,1 cmp bp,1
jne install jne install
call replacehandler call replacehandler
@ -152,10 +139,21 @@ install:
call installhandler call installhandler
suites: suites:
jc nohandlerload jc nohandlerload
mov dx,es
mov bl,7
push si
mov si,offset address
call showstr
mov cx,16
call showhex
mov si,offset addressend
call showstr
inc cx inc cx
pop si
call nextline call nextline
jnz suiteloading jnz suiteloading
mov si,offset fini mov si,offset fini
mov bl,7 mov bl,7
call showstr call showstr
@ -163,13 +161,10 @@ suites:
call showstr call showstr
mov si,offset prompt mov si,offset prompt
call showstr call showstr
mov ax,6000h call projfile
mov es,ax
push ax
mov di,0100h
push di
call loadfile
jc nopromptload jc nopromptload
push es
push di
push 7202h push 7202h
popf popf
push es push es
@ -260,24 +255,28 @@ premice3e db 0Dh,0Ah,'Erreur lors de la reservation memoire',0
;==positionne si sur l'entrée suivante de la loading liste jusqu'a equal ;==positionne si sur l'entrée suivante de la loading liste jusqu'a equal
nextline: nextline:
push ax cx di push ax cx di
push cs
pop es
mov di,si mov di,si
mov al,0Ah mov al,0Ah
mov cx,20 mov cx,20
cld
repnz scasb repnz scasb
mov si,di mov si,di
cmp byte ptr [di],0 cmp byte ptr [di],0
pop di cx ax pop di cx ax
ret ret
;==Lit la loading list et initialise SI(Fichier) BX(adresse) AX(interruption) ;==Lit la loading list et initialise SI(Fichier) AX(interruption)
readline: readline:
push cx dx di es push cx dx di es
push ds push cs
pop es pop es
;Voir taille de la ligne -> DX ;Voir taille de la ligne -> DX
mov di,si mov di,si
mov al,0Dh mov al,0Dh
mov cx,20 mov cx,20
cld
repne scasb repne scasb
sub cx,20 sub cx,20
neg cx neg cx
@ -398,16 +397,132 @@ control:
fin: fin:
pop si cx bx ax pop si cx bx ax
ret ret
;================================================ ;================================================
;Routine de gestion de la mémoire ;Routine de débogage
;================================================ ;================================================
regdata:
eaxr dd 0
ebxr dd 0
ecxr dd 0
edxr dd 0
esir dd 0
edir dd 0
espr dd 0
ebpr dd 0
csr dw 0
dsr dw 0
esr dw 0
fsr dw 0
gsr dw 0
ssr dw 0
include ..\include\mem.h reg db 0Dh,0Ah,"eax : ",0
db 0Dh,0Ah,"ebx : ",0
db 0Dh,0Ah,"ecx : ",0
db 0Dh,0Ah,"edx : ",0
db 0Dh,0Ah,"esi : ",0
db 0Dh,0Ah,"edi : ",0
db 0Dh,0Ah,"esp : ",0
db 0Dh,0Ah,"ebp : ",0
db 0Dh,0Ah,"cs : ",0
db 0Dh,0Ah,"ds : ",0
db 0Dh,0Ah,"es : ",0
db 0Dh,0Ah,"fs : ",0
db 0Dh,0Ah,"gs : ",0
db 0Dh,0Ah,"ss : ",0
FirstMB dw 0 showreg:
pushad
pushf
push ds
mov cs:[eaxr],eax
mov cs:[ebxr],ebx
mov cs:[ecxr],ecx
mov cs:[edxr],edx
mov cs:[esir],esi
mov cs:[edir],edi
mov cs:[espr],esp
mov cs:[ebpr],ebp
mov cs:[csr],cs
mov cs:[dsr],ds
mov cs:[esr],es
mov cs:[fsr],fs
mov cs:[gsr],gs
mov cs:[ssr],ss
push cs
pop ds
mov si,offset poppp
call Showstr
mov si,offset reg
mov di,offset regdata
mov bx,7
showregs:
cmp byte ptr cs:[si+6],":"
jne endshowregs
call Showstr
cmp byte ptr cs:[si+4]," "
je segsss
mov edx,cs:[di]
mov cx,32
call Showhex
add di,4
jmp showmax
segsss:
mov dx,cs:[di]
mov cx,16
call Showhex
add di,2
showmax:
add si,9
mov bp,dx
push si
mov si,offset beginds
call showstr
mov si,bp
mov cx,8
mov al,0
letshow:
mov dl,ds:[si]
inc si
call showhex
inc al
cmp al,10
jb letshow
mov si,offset ende
call showstr
mov si,offset begines
call showstr
mov si,bp
mov cx,8
mov al,0
letshow2:
mov dl,es:[si]
inc si
call showhex
inc al
cmp al,10
jb letshow2
mov si,offset ende
call showstr
pop si
jmp showregs
endshowregs:
mov si,offset poppp
call Showstr
xor ax,ax
int 16h
pop ds
popf
popad
ret
begines db ' es[',0
beginds db ' ds[',0
ende db '] ',0
;vide GS pour 200 octets (pour test) ;vide ES pour 200 octets (pour test)
erroresu: showmem:
pushad pushad
pushf pushf
mov si,offset poppp mov si,offset poppp
@ -440,6 +555,14 @@ ret
poppp db 0Ah,0Dh,'*********',0Ah,0Dh,0 poppp db 0Ah,0Dh,'*********',0Ah,0Dh,0
;================================================
;Routine de gestion de la mémoire
;================================================
include ..\include\mem.h
FirstMB dw 0
;Initialise les blocs de mémoire en prenant GS pour segment de base ;Initialise les blocs de mémoire en prenant GS pour segment de base
MBinit: MBinit:
@ -570,13 +693,10 @@ MBresident:
;Routine de gestion de handler ;Routine de gestion de handler
;================================================ ;================================================
;remplace le handler pointer par ds:si en gs:100h interruption ax ;remplace le handler pointer par ds:si en bloc:100h interruption ax
replacehandler: replacehandler:
push ax bx cx si di ds es push ax bx cx si di es ds
mov bx,gs call projfile
mov es,bx
mov di,0100h
call loadfile
jc reph jc reph
mov bx,ax mov bx,ax
call getint call getint
@ -584,37 +704,34 @@ mov es:[102h],si
mov es:[104h],ds mov es:[104h],ds
call setint call setint
reph: reph:
pop es ds di si cx bx ax pop ds es di si cx bx ax
ret ret
;install le handler pointer par ds:si en bx:100h interruption ax ;install le handler pointer par ds:si en bloc:100h interruption ax -> es
installhandler: installhandler:
push bx cx di es push bx cx
mov bx,gs call projfile
mov es,bx
mov di,100h
call loadfile
jc insh jc insh
mov bx,ax mov bx,ax
call setint call setint
insh: insh:
pop es di cx bx pop cx bx
ret ret
;met es:di le handle de l'int bx ;met es:100h le handle de l'int bx
setint: setint:
push ax bx ds push ax bx ds
cli cli
shl bx,2 shl bx,2
xor ax,ax xor ax,ax
mov ds,ax mov ds,ax
mov ds:[bx],di mov word ptr ds:[bx],0100h
mov ds:[bx+2],es mov ds:[bx+2],es
pop ds bx ax pop ds bx ax
sti sti
ret ret
;met ds:si le handle de l'int bx ;met dans ds:si le handle de l'int bx
getint: getint:
push ax bx es push ax bx es
shl bx,2 shl bx,2
@ -685,6 +802,40 @@ nocarry:
pop si dx bx ax pop si dx bx ax
ret ret
;============projfile (Fonction 4)===============
;Charge le fichier ds:si sur un bloc mémoire->ecx taille es:di
;-> AH=4
;<- Flag Carry si erreur
;=====================================================
projfile:
push eax bx di gs
push cs
pop es
mov di,offset tempfit
call searchfile
jne errorload
jc errorload
mov eax,cs:tempfit.FileSize
mov ecx,eax
add ecx,19000
call MBCreate
jc errorload
push gs
pop es
mov cx,cs:tempfit.FileGroup
mov di,100h
call loadway
jc errorload
clc
mov ecx,eax
pop gs di bx eax
ret
errorload:
stc
mov ecx,0
pop gs di bx eax
ret
;============loadfile (Fonction 4)=============== ;============loadfile (Fonction 4)===============
;Charge le fichier ds:si en es:di ->ecx taille ;Charge le fichier ds:si en es:di ->ecx taille
;-> AH=4 ;-> AH=4
@ -703,12 +854,12 @@ loadfile:
mov cx,cs:tempfit.FileGroup mov cx,cs:tempfit.FileGroup
mov eax,cs:tempfit.FileSize mov eax,cs:tempfit.FileSize
call loadway call loadway
jc errorload jc errorload2
clc clc
;mov ecx,eax ;mov ecx,eax
pop di bx eax pop di bx eax
ret ret
errorload: errorload2:
stc stc
mov ecx,0 mov ecx,0
pop di bx eax pop di bx eax
@ -857,7 +1008,7 @@ zeroload:
ret ret
noway: noway:
stc stc
pop es ds ebp di si dx bx eax pop es ds ecx di si dx bx eax
ret ret
;=============INITDRIVE (Fonction 04H)=============== ;=============INITDRIVE (Fonction 04H)===============