2000-12-10 21:48:09 +01:00
|
|
|
|
boots segment
|
|
|
|
|
.386
|
2001-02-03 21:48:09 +01:00
|
|
|
|
org 7C00h
|
|
|
|
|
;org 100h
|
2000-12-10 21:48:09 +01:00
|
|
|
|
assume cs:boots,ds:boots
|
|
|
|
|
|
|
|
|
|
start:
|
|
|
|
|
jmp boot
|
|
|
|
|
|
|
|
|
|
|
2001-05-09 22:48:10 +02:00
|
|
|
|
bootdb db 'COS2000A' ;Fabricant + n<>s<EFBFBD>rie Formatage
|
2001-02-03 21:48:09 +01:00
|
|
|
|
sizec dw 512 ;octet/secteur
|
2000-12-10 21:48:09 +01:00
|
|
|
|
db 1 ;secteur/cluster
|
2001-02-03 21:48:09 +01:00
|
|
|
|
reserv dw 1 ;secteur reserv<72>
|
2001-05-09 22:48:10 +02:00
|
|
|
|
nbfat db 1 ;nb de copie de la FAT
|
|
|
|
|
nbfit dw 25 ;taille rep racine
|
|
|
|
|
allclu dw 2880 ;nb secteur du volume si < 32 m<>g
|
|
|
|
|
db 0F0h ;Descripteur de m<>dia
|
|
|
|
|
fatsize dw 12 ;secteur/FAT
|
2001-02-03 21:48:09 +01:00
|
|
|
|
nbtrack dw 18 ;secteur/piste
|
2001-05-09 22:48:10 +02:00
|
|
|
|
head dw 2 ;nb de t<>teb de lecture/<2F>criture
|
2001-02-03 21:48:09 +01:00
|
|
|
|
hidden dd 0 ;nombre de secteur cach<63>s
|
|
|
|
|
dd 0 ;si nbsecteur = 0 nbsect ; the number of sectors
|
|
|
|
|
bootdrv db 0 ;Lecteur de d<>marrage
|
|
|
|
|
db 0 ;NA
|
|
|
|
|
bootsig db 29h ;boot signature 29h
|
|
|
|
|
dd 01020304h ;no de serie
|
|
|
|
|
pope db 'COS2000 ' ;nom de volume
|
2000-12-10 21:48:09 +01:00
|
|
|
|
db 'FAT16 ' ;FAT
|
|
|
|
|
specialboot:
|
|
|
|
|
|
2001-02-03 21:48:09 +01:00
|
|
|
|
errorloading db 'It''s not a COS disk!',0dh,0ah,0
|
|
|
|
|
okloading db 'COS search system',0Dh,0ah,0
|
|
|
|
|
syst db 'Ok',0dh,0ah,0
|
|
|
|
|
dot db '.',0
|
|
|
|
|
carry db 0dh,0ah,0
|
2001-02-18 21:48:09 +01:00
|
|
|
|
Sys db 'system',0,0,0,0,0,0
|
2001-02-03 21:48:09 +01:00
|
|
|
|
sys2 db 'sys',0
|
2000-12-10 21:48:09 +01:00
|
|
|
|
|
|
|
|
|
errorboot:
|
|
|
|
|
mov si,offset errorloading
|
|
|
|
|
call showstr
|
|
|
|
|
mov ah,0
|
|
|
|
|
int 16h
|
|
|
|
|
int 19h
|
|
|
|
|
boot:
|
2001-02-03 21:48:09 +01:00
|
|
|
|
mov Bootdrv,dl
|
|
|
|
|
cli
|
2000-12-10 21:48:09 +01:00
|
|
|
|
mov ax,09000h
|
|
|
|
|
mov ss,ax
|
|
|
|
|
mov sp,0FFFFh
|
2001-02-03 21:48:09 +01:00
|
|
|
|
sti
|
|
|
|
|
p:
|
|
|
|
|
push cs
|
|
|
|
|
pop ds
|
2000-12-10 21:48:09 +01:00
|
|
|
|
xor ax,ax
|
|
|
|
|
int 13h
|
|
|
|
|
jc errorboot
|
|
|
|
|
mov si,offset okloading
|
|
|
|
|
call showstr
|
2001-02-03 21:48:09 +01:00
|
|
|
|
mov cx,nbtrack
|
|
|
|
|
les si,ds:[1Eh*4]
|
|
|
|
|
mov byte ptr es:[si+4], cl
|
|
|
|
|
mov byte ptr es:[si+9], 0Fh
|
|
|
|
|
xor ax,ax
|
|
|
|
|
mov al,NbFat
|
|
|
|
|
mov bx,FatSize
|
|
|
|
|
mul bx
|
|
|
|
|
mov cx,ax
|
|
|
|
|
add cx,word ptr [offset Hidden]
|
|
|
|
|
adc cx,word ptr [offset Hidden+2]
|
|
|
|
|
add cx,Reserv
|
|
|
|
|
mov word ptr [offset BootSig],cx
|
|
|
|
|
xor dx,dx
|
|
|
|
|
mov ax,allclu
|
|
|
|
|
div nbtrack
|
|
|
|
|
xor dx,dx
|
|
|
|
|
div head
|
|
|
|
|
mov word ptr [offset pope],ax
|
|
|
|
|
push cs
|
|
|
|
|
pop es
|
|
|
|
|
mov bx,offset buffer
|
|
|
|
|
mov si,bx
|
|
|
|
|
xor dx,dx
|
|
|
|
|
CheckRoot:
|
|
|
|
|
call readsector
|
|
|
|
|
jc errorboot
|
|
|
|
|
xor di,di
|
|
|
|
|
findnext:
|
|
|
|
|
cmp byte ptr [bx+di],0
|
|
|
|
|
je errorboot
|
|
|
|
|
push si di cx
|
|
|
|
|
mov si,di
|
|
|
|
|
add si,bx
|
|
|
|
|
call showstr
|
|
|
|
|
mov ax,si
|
|
|
|
|
mov si,offset dot
|
|
|
|
|
call showstr
|
|
|
|
|
mov si,ax
|
|
|
|
|
add si,12
|
|
|
|
|
call showstr
|
|
|
|
|
mov si,offset carry
|
|
|
|
|
call showstr
|
|
|
|
|
mov si,ax
|
|
|
|
|
mov di,offset sys
|
|
|
|
|
mov cx,12+4
|
|
|
|
|
rep cmpsb
|
|
|
|
|
pop cx di si
|
|
|
|
|
je oksystem
|
|
|
|
|
add di,32
|
|
|
|
|
inc dx
|
|
|
|
|
cmp dx,nbfit
|
|
|
|
|
ja errorboot
|
|
|
|
|
cmp di,sizec
|
|
|
|
|
jb findnext
|
|
|
|
|
inc cx
|
|
|
|
|
jmp Checkroot
|
|
|
|
|
oksystem:
|
|
|
|
|
mov si,offset syst
|
|
|
|
|
call showstr
|
|
|
|
|
mov cx,[di+BX+26]
|
2001-05-09 22:48:10 +02:00
|
|
|
|
mov bx,200h
|
2001-02-03 21:48:09 +01:00
|
|
|
|
mov es,bx
|
|
|
|
|
push bx
|
|
|
|
|
mov bx,0100h
|
|
|
|
|
push bx
|
|
|
|
|
mov si,offset dot
|
|
|
|
|
fatagain:
|
|
|
|
|
cmp cx,0FFF0h
|
|
|
|
|
jae finishload
|
|
|
|
|
call readsector
|
|
|
|
|
jc errorboot
|
|
|
|
|
call showstr
|
|
|
|
|
add bx,sizec
|
|
|
|
|
call getfat
|
|
|
|
|
jnc fatagain
|
|
|
|
|
finishload:
|
|
|
|
|
push es
|
|
|
|
|
push es
|
|
|
|
|
push es
|
|
|
|
|
pop ds
|
|
|
|
|
pop fs
|
|
|
|
|
pop gs
|
|
|
|
|
push 7202h
|
|
|
|
|
popf
|
|
|
|
|
db 0CBh
|
2000-12-10 21:48:09 +01:00
|
|
|
|
|
|
|
|
|
|
2001-02-03 21:48:09 +01:00
|
|
|
|
|
|
|
|
|
;<-cx n<>secteur ->cx code FAT
|
|
|
|
|
getfat:
|
|
|
|
|
push es bx
|
|
|
|
|
mov ax,cx
|
|
|
|
|
xor dx,dx
|
|
|
|
|
div sizec
|
|
|
|
|
mov cx,ax
|
|
|
|
|
add cx,reserv
|
|
|
|
|
mov bx,offset buffer
|
|
|
|
|
push cs
|
|
|
|
|
pop es
|
|
|
|
|
call readsector
|
|
|
|
|
jc errorgetfat
|
|
|
|
|
shl dx,1
|
|
|
|
|
add bx,dx
|
|
|
|
|
mov cx,[bx]
|
|
|
|
|
errorgetfat:
|
|
|
|
|
pop bx es
|
2000-12-10 21:48:09 +01:00
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
ReadSector:
|
2001-02-03 21:48:09 +01:00
|
|
|
|
push ax cx dx si
|
2000-12-10 21:48:09 +01:00
|
|
|
|
mov AX, CX
|
|
|
|
|
xor DX, DX
|
2001-02-03 21:48:09 +01:00
|
|
|
|
div nbtrack
|
2000-12-10 21:48:09 +01:00
|
|
|
|
mov CL, DL ;{ Set the sector }
|
|
|
|
|
and CL, 63 ;{ Top two bits are bits 8&9 of the cylinder }
|
|
|
|
|
xor DX, DX
|
2001-02-18 21:48:09 +01:00
|
|
|
|
div word ptr pope
|
2000-12-10 21:48:09 +01:00
|
|
|
|
mov CH, DL ;{ Set the track bits 0-7 }
|
|
|
|
|
mov AL, DH
|
|
|
|
|
ror AL, 1
|
|
|
|
|
ror AL, 1
|
|
|
|
|
and AL, 11000000b
|
|
|
|
|
or CL, AL ;{ Set bits 8&9 of track }
|
|
|
|
|
xor dX, DX
|
2001-02-18 21:48:09 +01:00
|
|
|
|
div head
|
2000-12-10 21:48:09 +01:00
|
|
|
|
mov DH, DL ;{ Set the head }
|
|
|
|
|
inc CL
|
|
|
|
|
mov SI, 4
|
|
|
|
|
TryAgain:
|
2001-02-03 21:48:09 +01:00
|
|
|
|
mov AX,0201h
|
|
|
|
|
mov DL, bootdrv
|
2000-12-10 21:48:09 +01:00
|
|
|
|
int 13h
|
|
|
|
|
jnc Done
|
|
|
|
|
dec SI
|
|
|
|
|
jnz TryAgain
|
|
|
|
|
Done:
|
2001-02-03 21:48:09 +01:00
|
|
|
|
pop si dx cx ax
|
2000-12-10 21:48:09 +01:00
|
|
|
|
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
|
2001-02-03 21:48:09 +01:00
|
|
|
|
ret
|
|
|
|
|
|
2000-12-10 21:48:09 +01:00
|
|
|
|
|
2001-02-03 21:48:09 +01:00
|
|
|
|
Buffer equ $
|
2001-02-18 21:48:09 +01:00
|
|
|
|
boots ends
|
2000-12-10 21:48:09 +01:00
|
|
|
|
end start
|
|
|
|
|
|