mirror of https://git.ia64.cc/perso/cos2000v1.git
Nicolas Hordé
17 years ago
11 changed files with 1896 additions and 2036 deletions
@ -1,58 +1,52 @@
|
||||
Free equ 0 |
||||
True equ 1 |
||||
False equ 0 |
||||
struc dpt |
||||
steprate&headunload db 0DFh ;Vitesse de progression & mont‚e de la tˆte |
||||
dmaflag&headload db 002h ;Etat Dma et temps de descente de la tˆte |
||||
delaymotoroff db 025h ;Temps avant extinction moteur |
||||
bytepersector db 002h ;Taille des secteurs |
||||
sectorpertracks db 000h ;Nombre de secteur par piste |
||||
intersectgaplength db 01Bh ;Taille du GAP3 en lecture/‚criture |
||||
datalength db 0FFh ;Longueur du transfert de donn‚es |
||||
intersectgaplengthf db 054h ;Taille du GAP3 en formatage |
||||
formatbyte db 0F6h ;Octet de formatage |
||||
headsettlingtime db 000h ;Temps de repos des tˆtes |
||||
delaymotornormspeed db 008h ;Temps de mont‚e en vitesse du moteur |
||||
ends dpt |
||||
|
||||
DPT struc
|
||||
StepRate&HeadUnload db 0DFh ;Vitesse de progression & mont‚e de la tˆte |
||||
DMAFlag&HeadLoad db 002h ;Etat Dma et temps de descente de la tˆte |
||||
DelayMotorOff db 025h ;Temps avant extinction moteur |
||||
BytePerSector db 002h ;Taille des secteurs |
||||
SectorPerTracks db 000h ;Nombre de secteur par piste |
||||
InterSectGapLength db 01Bh ;Taille du GAP3 en lecture/‚criture |
||||
DataLength db 0FFh ;Longueur du transfert de donn‚es |
||||
InterSectGapLengthF db 054h ;Taille du GAP3 en formatage |
||||
FormatByte db 0F6h ;Octet de formatage |
||||
HeadSettlingTime db 000h ;Temps de repos des tˆtes |
||||
DelayMotorNormSpeed db 008h ;Temps de mont‚e en vitesse du moteur |
||||
DPT ends
|
||||
struc entries |
||||
filename db 8 dup (0) |
||||
filext db 3 dup (0) |
||||
fileattr db 0 |
||||
filereserved db 0 |
||||
filetimecreams db 0 ;(*10 ms) |
||||
filetimecrea dw 0 |
||||
filedatecrea dw 0 |
||||
filedateacc dw 0 |
||||
filenotused dw 0 |
||||
filetime dw 0 |
||||
filedate dw 0 |
||||
filegroup dw 0 |
||||
filesize dd 0 |
||||
ends entries |
||||
|
||||
Entries Struc |
||||
FileName db 8 dup (0) |
||||
FilExt db 3 dup (0) |
||||
FileAttr db 0 |
||||
FileReserved db 0 |
||||
FileTimeCreaMs db 0 ;(*10 ms) |
||||
FileTimeCrea dw 0 |
||||
FileDateCrea dw 0 |
||||
FileDateAcc dw 0 |
||||
FileNotused dw 0 |
||||
FileTime dw 0 |
||||
FileDate dw 0 |
||||
FileGroup dw 0 |
||||
FileSize dd 0 |
||||
Entries Ends |
||||
|
||||
BootSector Struc |
||||
jumper db 0,0,0 |
||||
Vendor db 'COS2000A' ;Fabricant + n°série Formatage |
||||
SectorSize dw 512 ;octet/secteur |
||||
SectorsPerCluster db 1 ;secteur/cluster |
||||
ReservedSectors dw 1 ;secteur reserv‚ |
||||
FatsPerDrive db 2 ;nb de copie de la FAT |
||||
DirectorySize dw 224 ;taille rep racine |
||||
SectorsPerDrive dw 2880 ;nb secteur du volume si < 32 még |
||||
MédiaDescriptor db 0F0h ;Descripteur de média |
||||
SectorsPerFat dw 9 ;secteur/FAT |
||||
SectorsPerTrack dw 18 ;secteur/piste
|
||||
HeadsPerDrive dw 2 ;nb de tˆteb de lecture/écriture |
||||
HiddenSectorsH dw 0 ;nombre de secteur cach‚s |
||||
HiddenSectorsL dw 0 ; |
||||
SectorPerDisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors |
||||
BootDrive db 0 ;Lecteur de d‚marrage |
||||
ReservedForNT db 0 ;NA |
||||
BootSign db 29h ;boot signature 29h |
||||
SerialNumber dd 01020304h ;no de serie |
||||
DriveName db 'COS2000 ' ;nom de volume |
||||
TypeOffAt db 'FAT16 ' ;FAT |
||||
bootcode db 453 dup (0) |
||||
BootSector ends |
||||
struc bootinfo |
||||
vendor db 'COS2000A' ;Fabricant + n°série Formatage |
||||
sectorsize dw 512 ;octet/secteur |
||||
sectorspercluster db 1 ;secteur/cluster |
||||
reservedsectors dw 1 ;secteur reserv‚ |
||||
fatsperdrive db 2 ;nb de copie de la FAT |
||||
directorysize dw 224 ;taille rep racine |
||||
sectorsperdrive dw 2880 ;nb secteur du volume si < 32 még |
||||
mediadescriptor db 0F0h ;Descripteur de média |
||||
sectorsperfat dw 9 ;secteur/FAT |
||||
sectorspertrack dw 18 ;secteur/piste |
||||
headsperdrive dw 2 ;nb de tˆteb de lecture/écriture |
||||
hiddensectorsh dw 0 ;nombre de secteur cach‚s |
||||
hiddensectorsl dw 0 ; |
||||
sectorperdisk2 dd 0 ;Nombre secteur du volume si > 32 Mo+20h ; the number of sectors |
||||
bootdrive db 0 ;Lecteur de d‚marrage |
||||
reservedfornt db 0 ;NA |
||||
bootsign db 29h ;boot signature 29h |
||||
serialnumber dd 01020304h ;no de serie |
||||
drivename db 'COS2000 ' ;nom de volume |
||||
typeoffat db 'FAT16 ' ;FAT |
||||
ends bootinfo |
||||
|
@ -1,16 +1,20 @@
|
||||
lnk_boot = tlink /x |
||||
asm= tasm /t/m5/zi |
||||
lnk= tlink /x/t |
||||
asm= lzasm |
||||
lnk= elink |
||||
|
||||
all: setup.com |
||||
|
||||
setup.com: setup.asm |
||||
$(asm) setup |
||||
$(lnk) setup |
||||
setup.com: setup.obj |
||||
$(lnk) setup.obj setup.com |
||||
|
||||
setup.obj: |
||||
$(asm) setup.asm |
||||
|
||||
clean: |
||||
del *.obj |
||||
del *.exe |
||||
del *.bak |
||||
del *.lib |
||||
del *.com |
||||
del *.bin |
||||
del *.sys |
||||
del *.err |
||||
del *.err |
@ -0,0 +1,26 @@
|
||||
asm= lzasm |
||||
lnk= elink |
||||
|
||||
all: detect.lib video.lib |
||||
|
||||
detect.lib: detect.obj |
||||
$(lnk) detect.obj detect.lib |
||||
|
||||
video.lib: video.obj |
||||
$(lnk) video.obj video.lib |
||||
|
||||
detect.obj: |
||||
$(asm) detect.asm |
||||
|
||||
video.obj: |
||||
$(asm) video.asm |
||||
|
||||
clean: |
||||
del *.obj |
||||
del *.exe |
||||
del *.bak |
||||
del *.lib |
||||
del *.com |
||||
del *.bin |
||||
del *.sys |
||||
del *.err |
@ -1,73 +1,36 @@
|
||||
lnk_boot = tlink /x |
||||
asm= tasm /t/m5/zi |
||||
lnk= tlink /x/t |
||||
asm= lzasm |
||||
lnk= elink |
||||
|
||||
all: boot.bin clavier.sys 8259a.sys disque.sys heure.sys horloge.sys manette.sys port.sys souris.sys systeme.sys video.sys mcb.sys |
||||
all: systeme.sys boot.bin |
||||
|
||||
boot.bin: boot.asm |
||||
$(asm) boot |
||||
$(lnk_boot) boot |
||||
exe2boot boot.exe boot.bin |
||||
systeme.sys: video.obj systeme.obj |
||||
$(lnk) systeme.obj systeme.sys |
||||
|
||||
clavier.sys: clavier.asm |
||||
$(asm) clavier |
||||
$(lnk) clavier |
||||
ren clavier.com clavier.sys |
||||
systeme.obj: ../lib/detect.lib ../lib/video.lib video.sys |
||||
$(asm) systeme.asm |
||||
|
||||
8259a.sys: 8259a.asm |
||||
$(asm) 8259a |
||||
$(lnk) 8259a |
||||
ren 8259a.com 8259a.sys |
||||
|
||||
disque.sys: disque.asm |
||||
$(asm) disque |
||||
$(lnk) disque |
||||
ren disque.com disque.sys |
||||
video.sys: |
||||
$(lnk) video.obj video.sys |
||||
|
||||
heure.sys: heure.asm |
||||
$(asm) heure |
||||
$(lnk) heure |
||||
ren heure.com heure.sys |
||||
boot.bin: boot.obj |
||||
$(lnk) boot.obj boot.bin /bs |
||||
|
||||
horloge.sys: horloge.asm |
||||
$(asm) horloge |
||||
$(lnk) horloge |
||||
ren horloge.com horloge.sys |
||||
detect.obj: |
||||
$(asm) detect.asm |
||||
|
||||
manette.sys: manette.asm |
||||
$(asm) manette |
||||
$(lnk) manette |
||||
ren manette.com manette.sys |
||||
video.obj: |
||||
$(asm) video.asm |
||||
|
||||
port.sys: port.asm |
||||
$(asm) port |
||||
$(lnk) port |
||||
ren port.com port.sys |
||||
|
||||
souris.sys: souris.asm |
||||
$(asm) souris |
||||
$(lnk) souris |
||||
ren souris.com souris.sys |
||||
|
||||
systeme.sys: systeme.asm |
||||
$(asm) systeme |
||||
$(lnk) systeme |
||||
ren systeme.com systeme.sys |
||||
|
||||
video.sys: video.asm |
||||
$(asm) video |
||||
$(lnk) video |
||||
ren video.com video.sys |
||||
|
||||
mcb.sys: mcb.asm |
||||
$(asm) mcb |
||||
$(lnk) mcb |
||||
ren mcb.com mcb.sys |
||||
boot.obj: |
||||
$(asm) boot.asm |
||||
|
||||
clean: |
||||
del *.obj |
||||
del *.exe |
||||
del *.bak |
||||
del *.lib |
||||
del *.com |
||||
del *.sys |
||||
del *.err |
||||
del *.bin |
||||
del *.sys |
||||
del *.err |
@ -1,222 +1,216 @@
|
||||
boots segment |
||||
.386 |
||||
model tiny,stdcall |
||||
p486 |
||||
locals |
||||
jumps |
||||
codeseg |
||||
option procalign:byte |
||||
|
||||
include "..\include\mem.h" |
||||
include "..\include\fat.h" |
||||
include "..\include\divers.h" |
||||
|
||||
org 7C00h |
||||
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' |
||||
bootsec bootinfo <"COS2000A",512,1,1,2,224,2880,0F0h,9,18,2,0,0,0,0,0,29h,01020304h,"COS2000 ","FAT12 "> |
||||
|
||||
errorloading db " [Erreur]",0dh,0ah,0 |
||||
okloading db "Recherche noyau ",0Dh,0ah," -" |
||||
sys db "SYSTEME SYS",0 |
||||
syst db " [ Ok ]",0dh,0ah,"Chargement ",0 |
||||
dot db ".",0 |
||||
|
||||
|
||||
|
||||
errorboot: |
||||
mov si,offset errorloading |
||||
call showstr |
||||
mov ah,0 |
||||
int 16h |
||||
int 19h |
||||
mov si,offset errorloading |
||||
call showstr |
||||
mov ah,0 |
||||
int 16h |
||||
int 19h |
||||
|
||||
boot: |
||||
mov Bootdrv,dl |
||||
mov [bootsec.bootdrive],dl |
||||
cli |
||||
mov ax,09000h |
||||
mov ss,ax |
||||
mov sp,0FFFFh |
||||
sti |
||||
|
||||
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 |
||||
push cs |
||||
push cs |
||||
pop es |
||||
pop ds |
||||
xor ax,ax |
||||
mov dl,[bootsec.bootdrive] |
||||
int 13h |
||||
jc errorboot |
||||
mov si,offset okloading |
||||
call showstr |
||||
mov cx,[bootsec.reservedsectors] |
||||
add cx,[bootsec.hiddensectorsh] |
||||
adc cx,[bootsec.hiddensectorsl] |
||||
push cx |
||||
mov bx,[bootsec.sectorsperfat] |
||||
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 |
||||
call readsector |
||||
jc errorboot |
||||
inc cx |
||||
add di,[bootsec.sectorsize] |
||||
dec bx |
||||
jnz readfat |
||||
pop cx |
||||
xor ax,ax |
||||
mov al,[bootsec.fatsperdrive] |
||||
mov bx,[bootsec.sectorsperfat] |
||||
mul bx |
||||
add cx,ax |
||||
mov ax,32 |
||||
mul [bootsec.directorysize] |
||||
div [bootsec.sectorsize] |
||||
add ax,cx |
||||
sub ax,2 |
||||
mov [word ptr bootsec.reservedfornt],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 |
||||
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 |
||||
add di,32 |
||||
add bx,32 |
||||
inc dx |
||||
cmp dx,[bootsec.directorysize] |
||||
ja errorboot |
||||
cmp bx,[bootsec.sectorsize] |
||||
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,000h |
||||
push di |
||||
mov si,offset dot |
||||
xor ax,ax |
||||
mov si,offset syst |
||||
call showstr |
||||
mov cx,[di+26] |
||||
mov ax,0900h |
||||
mov es,ax |
||||
push es |
||||
mov di,0000h |
||||
push 0010h |
||||
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 |
||||
cmp cx,0FF0h |
||||
jae finishload |
||||
push cx |
||||
add cx,[word ptr bootsec.reservedfornt] |
||||
call readsector |
||||
pop cx |
||||
jc errorboot |
||||
inc ax |
||||
call showstr |
||||
add di,sizec |
||||
call getfat |
||||
jnc fatagain |
||||
call showstr |
||||
add di,[bootsec.sectorsize] |
||||
call getfat |
||||
jnc fatagain |
||||
finishload: |
||||
db 0CBh |
||||
retf |
||||
|
||||
;=============READSECTOR (Fonction 01H)=============== |
||||
;Lit le secteur CX et le met en es:di |
||||
;-> AH=1 |
||||
;<- Flag Carry si erreur |
||||
;===================================================== |
||||
ReadSector: |
||||
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 |
||||
xor dx,dx |
||||
div [bootsec.sectorspertrack] |
||||
inc dl |
||||
mov bl,dl |
||||
xor dx,dx |
||||
div [bootsec.headsperdrive] |
||||
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 |
||||
mov si, 4 |
||||
mov al, 1 |
||||
tryagain: |
||||
mov ah, 2 |
||||
mov dl,[bootsec.bootdrive] |
||||
int 13h |
||||
jnc Done |
||||
dec SI |
||||
jnz TryAgain |
||||
Done: |
||||
jnc done |
||||
dec si |
||||
jnz tryagain |
||||
done: |
||||
pop si dx cx bx ax |
||||
ret |
||||
ret |
||||
|
||||
|
||||
getfat: |
||||
push ax bx dx di |
||||
mov di,offset bufferfat |
||||
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 |
||||
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 |
||||
and dx,0FFFh |
||||
mov cx,dx |
||||
jmp endfat |
||||
evenfat: |
||||
mov dx,[di+1] |
||||
and dx,0FFF0h |
||||
shr dx,4 |
||||
mov cx,dx |
||||
mov dx,[di+1] |
||||
and dx,0FFF0h |
||||
shr dx,4 |
||||
mov cx,dx |
||||
endfat: |
||||
pop di dx bx ax |
||||
pop di dx bx ax |
||||
ret |
||||
|
||||
|
||||
showstr: |
||||
push ax bx si |
||||
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 |
||||
or al,al |
||||
jz fin |
||||
mov ah,0Eh |
||||
mov bx,07h |
||||
int 10h |
||||
jmp again |
||||
fin: |
||||
pop si bx ax |
||||
ret |
||||
|
||||
|
||||
db 055h,0AAh |
||||
|
||||
Buffer equ $ |
||||
BufferFat equ $+2048 |
||||
endof: |
||||
|
||||
boots ends |
||||
end start |
||||
buffer equ offset endof+2048 |
||||
bufferfat equ offset endof+4096 |
||||
|
||||
|
Loading…
Reference in new issue