tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
691
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    Hallo,

    wie kann man unter einen non-OS - also ein eigenes OS (kein win, lin ...) via BIOS Sectoren auslesen?

    Ich komme da nicht klar,mit der ganzen ATAPi Driver sachen.
    habe bis jetzt einen kernel, der in den protect mode schalten kann, ein paar strings ausgeben kann und nun oll halt ein dateisystem implementiert werden.
    dazu ist es aber notwendig, erstmal sektoren einzulesen .....

    danke für infos
    jkallup
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    schau dir mal den Interrupt 13h an
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    hab ich schon, ich weiss auch schon, das ectoren 2048 bytes groß sind,
    aber ich weiss nicht wie man mit int386(0x13,&regs,&regs);
    sektoren einlesen kann.

    Hallo,

    ich habe folgendes gefunden:

    http://en.wikipedia.org/wiki/INT_13H...ors_From_Drive

    aber wie ich das verstanden habe, hat ein cdrom laufwerk nur eine Spur (Spirale) und keine
    Heads und Cylinders ....

    wie kommt man dann an die gewünschte Sector Struktur?
    danke
    Jens
    Geändert von sheel (30.12.11 um 22:57 Uhr) Grund: Doppel
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    wo steht denn da was von Cylinds?
    Sector gibts in der verlinkten Tabelle?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  5. #5
    jkallup jkallup ist offline Mitglied Bronze
    Registriert seit
    Sep 2004
    Beiträge
    43
    habe folgendes:
    klappt aber nicht so recht ...


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    #define FP_SEG(fptr) ((unsigned)((unsigned long)(fptr) >> 16))
    #define FP_OFF(fptr) ((unsigned)(fptr))
     
    #define MK_FP(seg,off) ((void*) (((unsigned long)(seg) << 16) | (unsigned)(off)))
     
     
    typedef unsigned char BYTE;
    typedef unsigned short WORD;
    typedef unsigned long DWORD;
     
    typedef struct {
      unsigned long low;
      unsigned long high;
    } QDWORD;
     
    void PrintSector ( void * );
    void LBASectorRead(void *, double );
    int check_ext_present();
     
    QDWORD double2qd( double x )
    {
      QDWORD qdw;
      qdw.high = (unsigned long)(x/4294967296.0);
      qdw.low = (unsigned long) x;
      return qdw;
    }
     
    #pragma pack(1)
    typedef struct disk_packet
    {
      BYTE size_pack;   //size of packet must be 16 or 16+
      BYTE reserved1;   //reserved
      BYTE no_of_blocks;    //nof blocks for transfer
      BYTE reserved2;   //reserved
      DWORD TransAddr;  //address in segff format
      QDWORD lba;       //quad word sector to read
    };
    struct disk_packet disk_pack;
     
    void LBASectorRead(void *buffer, double lba )
    {
      REGS uRegs;
     
      disk_pack.TransAddr = 0;
      disk_pack.size_pack = sizeof(disk_pack); //set size to 16
      disk_pack.no_of_blocks = 1; //1 block
      disk_pack.reserved1 = 0x0; 
      disk_pack.reserved2 = 0x0;
      disk_pack.TransAddr = (unsigned long) MK_FP( FP_SEG(buffer),FP_OFF(buffer));
      disk_pack.lba=double2qd( lba );
     
      uRegs.x.ds  = FP_SEG( &disk_pack );
      uRegs.x.esi = FP_OFF( &disk_pack );
     
      uRegs.b.dl = 0x80;
      uRegs.b.ah = 0x42;
     
      int386(0x13,&uRegs,&uRegs);
     
      printf("\n\nError: %x ", uRegs.b.ah );
    }
     
     
    int testfat ( void )
    {
      static unsigned char currentMBR[2048] = {0};
      int i;
     
      LBASectorRead(currentMBR, 17 );
      printk("%c", currentMBR );
    }
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Hmm, wenn ich da so drüber nach denke, komm ich zum Schluss, das eine Implementierung des ATAPI-Standards wohl die bessere Alternative wäre, oder?

    Hier mal was zum Schmökern:

    http://www.lowlevel.eu/wiki/IDE
    http://forum.lowlevel.eu/index.php?t...22429#msg22429
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. Bios auslesen?
    Von dixi im Forum Hardware
    Antworten: 6
    Letzter Beitrag: 19.10.08, 12:56
  2. interrupt
    Von xXchrissiXx im Forum Java
    Antworten: 2
    Letzter Beitrag: 24.05.07, 15:20
  3. Zylinde, Köpfe und Sektoren auslesen
    Von fizban im Forum Hardware
    Antworten: 2
    Letzter Beitrag: 09.08.04, 22:59
  4. BIOS-Daten unter Windows auslesen
    Von fizban im Forum Hardware
    Antworten: 1
    Letzter Beitrag: 02.07.04, 18:30
  5. BIOS - Zeit auslesen
    Von lukasS im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 09.10.03, 16:53