Как получить BPB_Mediа FDD

Тема в разделе "WASM.BEGINNERS", создана пользователем AMarya, 8 янв 2009.

  1. AMarya

    AMarya New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    4
    TASM, MS-Dos
    не могу рaзобраться, как используя 13H получить BPB_Mediа диcкeты,
    Не хватает мне-блондинке практических навыков.
    Если не затруднит, покажите в коде, пожалуйста.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    AMarya
    "BPB_Mediа диcкeты" - это "media descriptor (same as 1st byte in FAT)"?
     
  3. AMarya

    AMarya New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    4
    Вроде да, я так поняла
     
  4. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Вот нечто похожее из моих университетских будней. Считывает файл из корневой директории дискеты. Только юзается masm и int 25.

    Хороший цикл статей по структуре FAT12/16/32 также в архиве. Найти аналог в инете не смог - видать прикрыли лавочку.

    http://ifolder.ru/9935013

    Выдержка из статьи по ссылке

    Код (Text):
    1. BPB_Media
    2. Смещение(байт) 21 от начала FAT
    3. Размер(байт) 1
    4. 0xF8 стандартное значение для “жёстких” (не сменных) дисков. Для сменных дисков, обычное значение 0xF0.
    5. Разрешённые значения: 0xF0, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE и 0xFF.
    6. Важно, чтобы это же значение было записано в байт таблицы FAT[0].
    7. Это старое правило появилось MS-DOS 1.x для определения типа диска (как рассказано в начале),
    8. но сейчас не имеет практического применения.
    P.S. писалось давно и подробно разбирать снова лень.
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    AMarya
    Код (Text):
    1. .model tiny
    2. .code
    3. org 100h
    4.  
    5. start:
    6.     push    cs
    7.     pop ds
    8.     mov ah,2
    9.     mov al,1
    10.     mov ch,0
    11.     mov cl,1
    12.     mov dh,0
    13.     mov dl,0            ;; drive A-0, B-1
    14.     push    cs
    15.     pop es
    16.     mov bx,offset buffer
    17.     int 13h
    18.     jnc short @1
    19.     mov al,ah           ;; error code
    20.     mov dx,offset errmsg
    21.     mov bx,offset errcode
    22.     jmp short @2
    23. @1: mov al,[bx+15h]     ;; BPB.bMedia
    24.     mov dx,offset mtmsg
    25.     mov bx,offset mtcode
    26. @2: mov ah,al
    27.     and ax,0F00Fh
    28.     add al,90h
    29.     daa
    30.     adc al,40h
    31.     daa
    32.     mov [bx+1],al
    33.     mov al,ah
    34.     mov cl,4
    35.     shr al,cl
    36.     add al,90h
    37.     daa
    38.     adc al,40h
    39.     daa
    40.     mov [bx],al
    41.     mov ah,9
    42.     int 21h
    43.     mov ax,4c00h
    44.     int 21h
    45. even
    46. errmsg  db  'int 13h fn 02h failed '
    47. errcode db  '00h$'
    48.  
    49. even
    50. mtmsg   db  'Media type is '
    51. mtcode  db  '00h$'
    52.    
    53. even
    54. buffer  db  512 dup(0)
    55.  
    56. end start