• # bout de code perso

    Posté par (site web personnel) . En réponse au message Partitions. Évalué à 2.

    va faire un tour sur http://www.owl-doc.fr.st(...)
    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).