Funktion für OS klappt nicht!!



  • Also hier ist der CODE ich hab ihn 1:1 aus dem OS-LOADER for DUMMYS
    übernommen aber er klappt nicht was könnte falsch sein?

    int read_hotof(BYTE drive,BYTE cylinder,BYTE sector,BYTE head,BYTE count_sectors,void far *puffer)
    {
    // initialisieren...
    asm mov dl, drive
    asm mov ch, cylinder
    asm mov cl, sector
    asm mov dh, head
    asm mov al, count_sectors
    asm mov es, puffer
    asm mov bx, [puffer+2]
    asm mov ah, 02h

    // starten des INT 13
    asm int 13h

    return 1;
    }

    DANKE IM VORAUS!!

    MFG

    LordHoto



  • Ich habe den Code als php-Seite abgespeichert, und da kommt immer "syntax error". 😞 😉

    Es wäre sehr hilfreich, wenn du sagst, was nicht klappt.

    Achja:
    Bei inline Assembler musst du _asm davorschreiben, und dieser Code (interrupt) klappt auch nur bei einem echten 16Bit DOS-Compiler.

    [ Dieser Beitrag wurde am 17.02.2003 um 14:07 Uhr von cd9000 editiert. ]



  • meiner meinung nach müsstest du beim zuweisen der pufferadresse das mit low/hi-word genau vertauschen:

    asm mov es, Word Ptr [puffer+2]
    asm mov bx, Word Ptr [puffer]

    ansonsten ist der code auf dem ersten blick ok.
    außerdem funzt diese routine nur für disketten und laufwerke mit weniger als 256 zylindern/tracks. die zylinder/track-anzahl kann nämlich bei der CHS-Adressierung bis zu zehn bit groß sein. die oberen 2 bits müssen dann in bit 6 und 7 von CL stehen:

    // store track into CX and shift by 8 -> bit 8 and 9 in CL
    asm Mov Cx,track
    asm ShR Cx,8

    // make that bit 8 and 9 are bit 6 and 7 of CL because in bit 0...5
    // we'll store the sector number
    asm ShL Cl,6

    // store the lower 8 bits into Ch
    asm Mov Ch,Byte Ptr track

    // store sector in bits 0...5 (bit 6 and 7 = bit 8 and 9 of track-number)
    asm Or Cl,sector

    (ist jetzt hier nur ein auszug, vollständige read-sector-routine habe ich auch)

    cu todo



  • jajaja Ist ja auch nur für Disketten! 😉 ICH benutze Borland C 2.01 einen 16 BIT nur er nimmt kein _asm an also schreib ich asm und es geht genauso gut!
    Das mit dem tauschen muss ich mal probieren. Also der puffer wird net aufgefüllt! Das heißt er ist nacher genauso wie vorher!

    MFG

    LordHoto



  • Wie kann ich eigentlich dann Char oder so ein laden?
    Wenn dein CODE richtig wäre müsste es bei mir gehen...



  • was meinst du bitteschön mit char-einladen??? das mit der vertauschung muss wirklich so sein, habs mir noch mal angeguckt.



  • Also mein Buffer ist ein CHAR string meinetwegen den schreib ich(auf seinen Sector) jetzt und wenn ich ihn lese müsst er doch dann wieder der gleiche sein oder?



  • ich meine oben einen Sector!! nicht seinen Sektor!!



  • hähhh??? ehrlichgesagt kapier ich nicht, was du willst. auf welchen sector willst du den puffer schreiben bzw. wie kann ein puffer einem sector gehören ("...seinen sector...") 🙂 wenn du einen puffer schreibst, ist der inhalt danach immer noch der gleiche. wenn du liest, in den meisten fällen nicht (außer, du hast den buffer schonmal gelesen 🙂

    cu todo



  • Also ich hab jetzt meinen Puffer 1 :
    BYTE puffer1[512] = "...";
    BYTE puffer2[512];

    write_hotof(0,0,1,0,1,puffer1);
    read_hotof(0,0,1,0,1,puffer2);

    dann müssten doch beide 'gleich' sein!!! oder etwa nicht?
    read_hotof wurde ja oben schon beschprochen 😉
    und der unterschied von read_hotof zu write_hotof wirst du dann
    wohl schwer eraten können... einfach stat asm mov ah, 02h
    asm mov ah, 03h

    MFG

    LordHoto



  • na klar sind die gleich! wo liegt da das problem???

    🙂

    cu todo



  • also bei mir ist der 2 Puffer genauso wie voher also leer 😞 😞



  • hmmm... komisch... poste mal dein komplettes programm

    cu todo


Anmelden zum Antworten