mbr:
table: ;; Voici la table des partitions
part1:
part1_boot_flag: db 0 ;;0 0 = inactive, 80h = active
part1_begin_head: db 0 ;;1 Tête de début
part1_begin_sector: db 0 ;;2 Secteur de début (*)
part1_begin_cyl: db 0 ;;3 Cylindre de début (*)
part1_type: db 0 ;;4 Type : 83h = Linux, bh = Win95/FAT32, ...
part1_end_head: db 0 ;;5 Tête de fin
part1_end_sector: db 0 ;;6 Secteur de fin (*)
part1_end_cyl: db 0 ;;7 Cylindre de fin (*)
part1_start_sector: dd 0 ;;8 Nombre de secteurs avant la partition (donc num\uffffro du 1e secteur en LBA) (**)
part1_sector_count: dd 0 ;;9 Nombre de secteurs dans la partition (**)
part2:
part2_boot_flag: db 0 ;; 0 = inactive, 80h = active
part2_begin_head: db 0 ;; Tête de début
part2_begin_sector: db 0 ;; Secteur de début (*)
part2_begin_cyl: db 0 ;; Cylindre de début (*)
part2_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part2_end_head: db 0 ;; Tête de fin
part2_end_sector: db 0 ;; Secteur de fin (*)
part2_end_cyl: db 0 ;; Cylindre de fin (*)
part2_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part2_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
part3:
part3_boot_flag: db 0 ;; 0 = inactive, 80h = active
part3_begin_head: db 0 ;; Tête de début
part3_begin_sector: db 0 ;; Secteur de début (*)
part3_begin_cyl: db 0 ;; Cylindre de début (*)
part3_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part3_end_head: db 0 ;; Tête de fin
part3_end_sector: db 0 ;; Secteur de fin (*)
part3_end_cyl: db 0 ;; Cylindre de fin (*)
part3_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part3_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
part4:
part4_boot_flag: db 0 ;; 0 = inactive, 80h = active
part4_begin_head: db 0 ;; Tête de début
part4_begin_sector: db 0 ;; Secteur de début (*)
part4_begin_cyl: db 0 ;; Cylindre de début (*)
part4_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part4_end_head: db 0 ;; Tête de fin
part4_end_sector: db 0 ;; Secteur de fin (*)
part4_end_cyl: db 0 ;; Cylindre de fin (*)
part4_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part4_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
signature:
dw 0xAA55 ;; magic number (***)
;; (*) Ces octets acceptent le meme format que cl et ch pour l'interruption 13h
;; (**) En fait, le format CHS (Cyl/Heads/Sect) sur 3 octets ne permet pas de
;; placer une partition apres le 1024e cylindre. Ces indications de 32 bits permettent
;; de realiser ce type de partitions. Malheureusement, elles ne sont pas accessibles
;; depuis le BIOS qui utilise le format CHS , il faut donc y acceder en communiquant
;; directement avec le controleur IDE)
;; (***) Les processeurs Intel inversant les octets quand on ecrit un word, dw aa55h quivaut db 55h, aah.
Pour chaque partition tu doit indiquer le type. Il y a un type special qui definit en fait une partition etendue, l'adresse indiquée point sur ce que l'on appelle un EBR. C'est comme un mbr mais avec seulement deux entrées au lieu de quatres : une pour la partition, l'autre pour la suite (etendue etc ... poupées russes quoi).
# bout de code perso
Posté par vincent LECOQ (site web personnel) . En réponse au message Partitions. Évalué à 2.
Il y a pas mal de docs et des liens vers d'autres sites tres utiles pour ce type de projet.
Voici un morceau de code perso (la fin d'un un boot sector):
;--------------------------------------------------------------------
;; NOP jusqu'a 446
;times 446-($-$$) db 144 ; reste du code
mbr:
table: ;; Voici la table des partitions
part1:
part1_boot_flag: db 0 ;;0 0 = inactive, 80h = active
part1_begin_head: db 0 ;;1 Tête de début
part1_begin_sector: db 0 ;;2 Secteur de début (*)
part1_begin_cyl: db 0 ;;3 Cylindre de début (*)
part1_type: db 0 ;;4 Type : 83h = Linux, bh = Win95/FAT32, ...
part1_end_head: db 0 ;;5 Tête de fin
part1_end_sector: db 0 ;;6 Secteur de fin (*)
part1_end_cyl: db 0 ;;7 Cylindre de fin (*)
part1_start_sector: dd 0 ;;8 Nombre de secteurs avant la partition (donc num\uffffro du 1e secteur en LBA) (**)
part1_sector_count: dd 0 ;;9 Nombre de secteurs dans la partition (**)
part2:
part2_boot_flag: db 0 ;; 0 = inactive, 80h = active
part2_begin_head: db 0 ;; Tête de début
part2_begin_sector: db 0 ;; Secteur de début (*)
part2_begin_cyl: db 0 ;; Cylindre de début (*)
part2_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part2_end_head: db 0 ;; Tête de fin
part2_end_sector: db 0 ;; Secteur de fin (*)
part2_end_cyl: db 0 ;; Cylindre de fin (*)
part2_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part2_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
part3:
part3_boot_flag: db 0 ;; 0 = inactive, 80h = active
part3_begin_head: db 0 ;; Tête de début
part3_begin_sector: db 0 ;; Secteur de début (*)
part3_begin_cyl: db 0 ;; Cylindre de début (*)
part3_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part3_end_head: db 0 ;; Tête de fin
part3_end_sector: db 0 ;; Secteur de fin (*)
part3_end_cyl: db 0 ;; Cylindre de fin (*)
part3_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part3_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
part4:
part4_boot_flag: db 0 ;; 0 = inactive, 80h = active
part4_begin_head: db 0 ;; Tête de début
part4_begin_sector: db 0 ;; Secteur de début (*)
part4_begin_cyl: db 0 ;; Cylindre de début (*)
part4_type: db 0 ;; Type : 83h = Linux, bh = Win95/FAT32, ...
part4_end_head: db 0 ;; Tête de fin
part4_end_sector: db 0 ;; Secteur de fin (*)
part4_end_cyl: db 0 ;; Cylindre de fin (*)
part4_start_sector: dd 0 ;; Nombre de secteurs avant la partition (donc numéro du 1e secteur en LBA) (**)
part4_sector_count: dd 0 ;; Nombre de secteurs dans la partition (**)
signature:
dw 0xAA55 ;; magic number (***)
;; (*) Ces octets acceptent le meme format que cl et ch pour l'interruption 13h
;; (**) En fait, le format CHS (Cyl/Heads/Sect) sur 3 octets ne permet pas de
;; placer une partition apres le 1024e cylindre. Ces indications de 32 bits permettent
;; de realiser ce type de partitions. Malheureusement, elles ne sont pas accessibles
;; depuis le BIOS qui utilise le format CHS , il faut donc y acceder en communiquant
;; directement avec le controleur IDE)
;; (***) Les processeurs Intel inversant les octets quand on ecrit un word, dw aa55h quivaut db 55h, aah.
Pour chaque partition tu doit indiquer le type. Il y a un type special qui definit en fait une partition etendue, l'adresse indiquée point sur ce que l'on appelle un EBR. C'est comme un mbr mais avec seulement deux entrées au lieu de quatres : une pour la partition, l'autre pour la suite (etendue etc ... poupées russes quoi).