BootLoader реальная замутка!

Тема в разделе "WASM.WIN32", создана пользователем Godness, 4 авг 2005.

  1. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Не могу понять почему это происходит! Вообщем имею следущий свой код в первом секторе (тобиш загрузочном) партиции (активная партиция) и с нее пытаюсь загружатся


    Код (Text):
    1.  
    2. .586
    3.  
    4. _Text segment public use16
    5.  assume cs:_Text, ds:_Text
    6.  org 0h
    7.  
    8. main proc far
    9. EntryPoint:       ;Entry point
    10.  jmp AfterData
    11.  db "NTFS    "  ; OEM
    12.  dw 0200h         ; Bytes per sector
    13.  db 08h           ; Sectors per cluster
    14.  dw 0h      ; Reserved Sectors
    15.  db 2 dup(0)    ; undefined - always 0
    16.  dw 0h      ; not used
    17.  db 0F8h          ; Media Type
    18.  dw 0h      ; undefined - always 0
    19.  dw 03Fh          ; Sectors per track
    20.  dw 0FFh          ; Heads
    21.  dd 03fh          ; Hidden Sectors
    22.  dd 0h      ; not used
    23.  dd 80008000h   ; not used
    24.  dq 0h      ; Total Sectors
    25.  dq 04h           ; MFT start cluster
    26.  dq 0h      ; MFT mirror start cluster
    27.  dd 0F6h          ; Clusters per FRS
    28.  dd 01h           ; Clusters per index
    29.  dq 0h      ; Volume serial number
    30.  dd 0h      ; CRC
    31.  
    32.  extended_mode db 0   ; reserved, don't tuch
    33.  
    34.  ;Structure for read sectors
    35.  align 4              ;if this structure would not been aligment than function int13 will failed!
    36.  packet_size           dw 10h
    37.  number_of_blocks      dw 1
    38.  transfer_buffer       dd 0
    39.  abs_block_numberlow   dd 0
    40.  abs_block_numberhigh  dd 0
    41.  ;end structure
    42.  
    43.  abs_address    dd 0
    44.  ConfigAbsOffset       dq 0   ;absolute config offset in sectors
    45.  BootStrapAddress      dq 0   ;absolute bootstrap address in sectors
    46.  
    47.  ;Boot Loader Code ====================================================================== ==============
    48.  
    49. AfterData:
    50.  cli
    51.  pusha
    52.  push   ds
    53.  mov    ax, 07C0h
    54.  mov    ds, ax
    55.  sti
    56.  mov    si, offset packet_size
    57.  mov    word ptr [packet_size], 10h
    58.  mov    word ptr [number_of_blocks], 1  
    59.  mov    dword ptr [transfer_buffer], 50000000h
    60.  mov    dword ptr [abs_block_numberlow], 707137D
    61.  mov    dword ptr [abs_block_numberhigh], 0
    62.  mov    ah, 42h
    63.  mov    dl, ds:24h
    64.  int    13h
    65.  jc ErrorRead1
    66.  
    67.  mov    si, offset packet_size
    68.  mov    word ptr [packet_size], 10h
    69.  mov    word ptr [number_of_blocks], 1  
    70.  mov    dword ptr [transfer_buffer], 50000000h
    71.  mov    dword ptr [abs_block_numberlow], 707137D
    72.  mov    dword ptr [abs_block_numberhigh], 0
    73.  mov    ah, 42h
    74.  mov    dl, ds:24h
    75.  int    13h
    76.  jc ErrorRead2
    77.  jmp    EndRead  
    78.  




    тут я два раза подряд читаю один и тот же сектор, который находится по смещению в 707137 секторов от начала диска. И что бы вы думали!? На одной машине чтение происходит нормально и выполнение доходит до EndRead, а на другой выполняется только первое чтение, второе же вызывает ошибку!!!!!!



    В чем такое недоразумение? Может неправильно использую int13? У меня уже крыша едет!!!!! >8( Работа горит ааааааа....
     
  2. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    винт один и тот же, я просто с ним перехожу от одной тачки на другую и вот такая вот лажа! тут читается там не читается ;(
     
  3. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    может кто сталкивался с таким
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Godness

    А причем тут винт. Тут биус либы поддерживает это расширение либы нет. Я имею ввиду функци 40-4x/
     
  5. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Дык ты невнимательно прочитал пост! Первое чтение всегда происходит нормально ошибка на втором! Ща смотрю как там системном буте это сделано может чего и найду, хотя пока никаких отличий не видно, тот же инт13
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Godness

    попробуй выполнить после ошибки mov ah, 0/int 13h

    и повторить попытку чтения несколько раз
     
  7. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Фууууухххх!!!!!!!!! :))) пофиксил багу!



    Оказывается дело в том, что я не настроил сегмент стека! Я использовал
    Код (Text):
    1.  
    2. mov    ax, 9000h
    3. mov    ss, ax
    4.  


    а оказывается некоторые биосы используют эту область! поэтому и валилось на отдельных тачках. надо так как в системном буте -
    Код (Text):
    1.  
    2. mov    ax, 07C0h
    3. mov    ss, ax
    4.  




    зразу все заработало! дело вовсе не в инт13

    аЖ полегчало! :)
     
  8. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    всем спасибо!