int 13h 41h

Discussion in 'WASM.OS.DEVEL' started by XshStasX, Apr 9, 2011.

  1. XshStasX

    XshStasX New Member

    Blog Posts:
    0
    Joined:
    Aug 9, 2008
    Messages:
    991
    Почему после выполнения 41h функции, флаг С всегда установлен?
    Тогда как чтение проходит успешно.

    Вот код:
    Code (Text):
    1. int InitDiskSystem(PDISK disks,u8 Count){
    2.     u16 i,ret0,f;
    3.    
    4.     for (i=ret0=0; (i<0xff) && Count; ++i)
    5.     {
    6.         f = -1;
    7.         __asm{
    8.           pusha
    9.             mov ax,4100h
    10.             mov bx,55AAh
    11.             mov WORD PTR  dx,[i]
    12.             int 13h
    13.             mov WORD PTR [f],cx
    14.             jc next
    15.             xchg bx,bx
    16.              and cl,00000101b
    17.              jz next
    18.                
    19.                 mov WORD PTR bp,[disks]
    20.                 mov WORD PTR di,[ret0]
    21.                 lea WORD PTR di,[bp+di*4]
    22.                 mov WORD PTR ax,[i]
    23.                 mov BYTE PTR [di + 0],al
    24.                 mov BYTE PTR [di + 1],cl
    25.                 mov WORD PTR [di + 2],200h
    26.                 inc WORD PTR [ret0]
    27.                 jmp exit
    28.             next:
    29.              jmp exit;
    30.             exit:
    31.           popa  
    32.         };
    33.         SetXY(0x0400);
    34.         DebugStr("[");
    35.         DebugHexInt(i);
    36.         DebugStr("] CX: ");
    37.         DebugHexInt(f);
    38.         DebugStr("\r\n");
    39.         GetCh();
    40.     };
    41.     DebugStr("\r\n");
    42.      DebugHexInt(ret0);
    43.        
    44.     return ret0;
    45. };
     
  2. MisHel64

    MisHel64 Member

    Blog Posts:
    0
    Joined:
    Mar 9, 2011
    Messages:
    182
    Значение DL до вызова int, и AH при установленном CF после вызова в студию.
     
  3. XshStasX

    XshStasX New Member

    Blog Posts:
    0
    Joined:
    Aug 9, 2008
    Messages:
    991
    в bochs:
    dl = 0x80 -> ah = 30h cl = 07h
    dl = 0xE0 -> ah = 30h cl = 07h
     
  4. MisHel64

    MisHel64 Member

    Blog Posts:
    0
    Joined:
    Mar 9, 2011
    Messages:
    182
    А ты случаем не с CD диска грузишься?
    Причем это "dl = 0x80 -> ah = 30h cl = 07h " при эмуляции HDD
    А это "dl = 0xE0 -> ah = 30h cl = 07h" без эмуляции?
     
  5. XshStasX

    XshStasX New Member

    Blog Posts:
    0
    Joined:
    Aug 9, 2008
    Messages:
    991
    MisHel64[
    dl = 0x80 -> это тип disk в бош
    dl = 0xE0 -> это тип cdrom в бош
     
  6. MisHel64

    MisHel64 Member

    Blog Posts:
    0
    Joined:
    Mar 9, 2011
    Messages:
    182
    Тогда ковырять в сторону бош ;)
    С начало попробовав на реальном железе.
    А вообще, 30 ошибка, это ошибка формата носителя. Причем судя по отзывам, специфичная только для боша.
     
  7. reverser

    reverser New Member

    Blog Posts:
    0
    Joined:
    Jan 27, 2004
    Messages:
    615
    1.9.2. How do you pronounce "Bochs"?

    Phonetically the same as the English word "box". It's just a play on the word "box", since techies like to call their machines a "Linux box", "Windows box", ... Bochs emulates a box inside a box.
     
  8. MisHel64

    MisHel64 Member

    Blog Posts:
    0
    Joined:
    Mar 9, 2011
    Messages:
    182
    XshStasX
    Вот, что еще подумалось. По CF-UP попробуй 13/01 и 13/48, может натолкнет на причину.
    И для верности, посмотри, как и что BS от MS DOS получит от 13/41