zoran8000 Juste quelques hommes...justes | Bonjour à tous !
Je dispose d'un code source en C qui réalise la chose suivante : il active la première partition d'un disque et désactive les trois autres.
Mon problème, c'est qu'il marche très bien pour un disque branché en IDE, mais walou pour un disque en SCSI.
Donc est-ce que quelqu'un saurait me dire les modifications à apporter pour le rendre compatible en SCSI ?
Merci
Code :
- #include <dos.h>
- // Source pour activer la 1ère partition du premier disque
- // et desactiver les autres partitions du même disque
- // ( IDE0 maître )
- struct Partition
- {
- unsigned char flag;
- char description[15];
- };
- struct Mbr
- {
- char bootCode[0x1BE];
- struct Partition table[4];
- char signature[2];
- };
- int main()
- {
- struct Mbr mbr;
- union REGS r, rout;
- struct SREGS sr;
- sr.es=FP_SEG(&mbr);
- r.x.bx=FP_OFF(&mbr);
- r.x.ax= 0x201; // lecture d'un secteur
- r.h.dl= 0x80; // 1er disque
- r.x.cx= 1; // 1er secteur
- r.h.dh= 0; // piste 0 et tête 0
- int86x(0x13, &r, &rout, &sr); // 1ère lecture factice au cas où le lecteur serait arrêté
- int86x(0x13, &r, &r, &sr);
- if( r.x.cflag )
- return 1; // erreur de lecteur
- else
- {
- mbr.table[0].flag= 0x80; // 1ère partition
- mbr.table[1].flag= 0x80; // 2ème partition
- mbr.table[2].flag= 0x80; // 3ème partition
- mbr.table[3].flag= 0x80; // 4ème partition
- sr.es=FP_SEG(&mbr);
- r.x.bx=FP_OFF(&mbr);
- r.x.ax= 0x301; // écriture d'un secteur
- r.h.dl= 0x80; // 1er disque
- r.x.cx= 1; // 1er sercteur
- r.h.dh= 0; // piste 0 et tête 0
- int86x(0x13, &r, &r, &sr);
- if( r.x.cflag )
- return 2;
- else
- return 0;
- }
- }
|
|