mirror of https://git.ia64.cc/perso/cos2000v1.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
221 lines
4.5 KiB
221 lines
4.5 KiB
boots segment |
|
.386 |
|
org 7C00h |
|
;org 100h |
|
assume cs:boots,ds:boots |
|
|
|
start: |
|
jmp boot |
|
|
|
bootdb db 'COS2000A' ;Fabricant + n°série Formatage |
|
sizec dw 512 ;octet/secteur |
|
db 1 ;secteur/cluster |
|
reserv dw 1 ;secteur reserv‚ |
|
nbfat db 2 ;nb de copie de la FAT |
|
nbfit dw 224 ;taille rep racine |
|
allclu dw 2880 ;nb secteur du volume si < 32 még |
|
db 0F0h ;Descripteur de média |
|
fatsize dw 9 ;secteur/FAT |
|
nbtrack dw 18 ;secteur/piste |
|
head dw 2 ;nb de tˆteb de lecture/écriture |
|
hidden dd 0 ;nombre de secteur cach‚s |
|
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors |
|
bootdrv db 0 ;Lecteur de d‚marrage |
|
bootsig db 0 ;NA |
|
db 29h ;boot signature 29h |
|
bootsig2 dd 01020304h ;no de serie |
|
pope db 'COS2000 ' ;nom de volume |
|
db 'FAT12 ' ;FAT |
|
specialboot: |
|
|
|
errorloading db ' Erreur !!',0dh,0ah,0 |
|
okloading db 'Recherche noyau',0Dh,0ah,' - system.sys',0 |
|
syst db ' Ok',0dh,0ah,'Chargement',0 |
|
dot db '.',0 |
|
Sys db 'SYSTEME SYS' |
|
|
|
errorboot: |
|
mov si,offset errorloading |
|
call showstr |
|
mov ah,0 |
|
int 16h |
|
int 19h |
|
boot: |
|
mov Bootdrv,dl |
|
cli |
|
mov ax,09000h |
|
mov ss,ax |
|
mov sp,0FFFFh |
|
sti |
|
|
|
boot2: |
|
push cs |
|
push cs |
|
pop es |
|
pop ds |
|
xor ax,ax |
|
int 13h |
|
jc errorboot |
|
mov si,offset okloading |
|
call showstr |
|
mov cx,Reserv |
|
add cx,word ptr [offset Hidden] |
|
adc cx,word ptr [offset Hidden+2] |
|
push cx |
|
mov bx,fatsize |
|
mov di,offset bufferfat |
|
readfat: |
|
call readsector |
|
inc cx |
|
add di,sizec |
|
dec bx |
|
jnz readfat |
|
pop cx |
|
xor ax,ax |
|
mov al,NbFat |
|
mov bx,FatSize |
|
mul bx |
|
add cx,ax |
|
mov ax,32 |
|
mul nbfit |
|
div sizec |
|
add ax,cx |
|
sub ax,2 |
|
mov word ptr [offset bootsig],ax |
|
xor dx,dx |
|
CheckRoot: |
|
mov di,offset buffer |
|
call readsector |
|
jc errorboot |
|
xor bx,bx |
|
findnext: |
|
cmp byte ptr [di],0 |
|
je errorboot |
|
cmp byte ptr [di],0E5h |
|
je no |
|
cmp byte ptr [di],041h |
|
je no |
|
mov si,offset dot |
|
call showstr |
|
push di cx |
|
mov si,offset sys |
|
mov cx,11 |
|
rep cmpsb |
|
pop cx di |
|
je oksystem |
|
no: |
|
add di,32 |
|
add bx,32 |
|
inc dx |
|
cmp dx,nbfit |
|
ja errorboot |
|
cmp bx,sizec |
|
jb findnext |
|
inc cx |
|
jmp Checkroot |
|
oksystem: |
|
mov si,offset syst |
|
call showstr |
|
mov cx,[di+26] |
|
mov ax,0900h |
|
mov es,ax |
|
push es |
|
mov di,100h |
|
push di |
|
mov si,offset dot |
|
xor ax,ax |
|
fatagain: |
|
cmp cx,0FF0h |
|
jae finishload |
|
push cx |
|
add cx,word ptr [offset bootsig] |
|
call readsector |
|
pop cx |
|
jc errorboot |
|
inc ax |
|
call showstr |
|
add di,sizec |
|
call getfat |
|
jnc fatagain |
|
finishload: |
|
db 0CBh |
|
|
|
;=============READSECTOR (Fonction 01H)=============== |
|
;Lit le secteur CX et le met en es:di |
|
;-> AH=1 |
|
;<- Flag Carry si erreur |
|
;===================================================== |
|
ReadSector: |
|
push ax bx cx dx si |
|
mov ax,cx |
|
xor dx,dx |
|
div nbtrack |
|
inc dl |
|
mov bl,dl |
|
xor dx,dx |
|
div head |
|
mov dh, 0 |
|
xchg dl,dh |
|
mov cx,ax |
|
xchg cl,ch |
|
shl cl,6 |
|
or cl, bl |
|
mov bx,di |
|
mov SI, 4 |
|
mov AL, 1 |
|
TryAgain: |
|
mov AH, 2 |
|
int 13h |
|
jnc Done |
|
dec SI |
|
jnz TryAgain |
|
Done: |
|
pop si dx cx bx ax |
|
ret |
|
|
|
getfat: |
|
push ax bx dx di |
|
mov di,offset bufferfat |
|
mov ax,cx |
|
mov bx,ax |
|
and bx,0000000000000001b |
|
shr ax,1 |
|
mov cx,3 |
|
mul cx |
|
add di,ax |
|
cmp bx,0h |
|
jnz evenfat |
|
oddfat: |
|
mov dx,[di] |
|
and dx,0FFFh |
|
mov cx,dx |
|
jmp endfat |
|
evenfat: |
|
mov dx,[di+1] |
|
and dx,0FFF0h |
|
shr dx,4 |
|
mov cx,dx |
|
endfat: |
|
pop di dx bx ax |
|
ret |
|
|
|
showstr: |
|
push ax bx si |
|
again: |
|
lodsb |
|
or al,al |
|
jz fin |
|
mov ah,0Eh |
|
mov bx,07h |
|
int 10h |
|
jmp again |
|
fin: |
|
pop si bx ax |
|
ret |
|
|
|
Buffer equ $ |
|
BufferFat equ $+2048 |
|
|
|
boots ends |
|
end start |
|
|
|
|