Помогите создать загрузочную дискету

Тема в разделе "WASM.BEGINNERS", создана пользователем wcools, 7 сен 2008.

  1. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    эээ....
    первый элемент таблицы фат соответствует первому сектору области данных, второй - второму, и т.д. (+2 - я забыл про первые 2 элемента - идентификатор фат)
    т.е., если номер первого сектора в элемента каталога или в фат - 2, значит, это сектор №33, 3 - 34, и т.д.
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Да, конечно если это обычный флоппик на расчетную емкость 1.44 Мб. Думаю, Windows tools при необходимости смогут предварительно выполнить и низкоуровневое форматирование.
    Сделай уже нормальное преобразование линейных номеров в CHS.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    33-й линейный сектор - это второй кластер. Соответственно, для него используется первый полезный вход FAT, т.е. тот что под номером 2 (нумерация кластеров тоже идет с нуля, просто номера 0 и 1 - это служебные значения).
     
  4. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Это Вы про что???
     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    вот из образа.
    корневой каталог:
    Код (Text):
    1. Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
    2.  
    3. 00002600   41 20 20 20 20 20 20 20  54 58 54 00 00 00 00 00   A       TXT.....
    4. 00002610   00 00 00 00 00 00 00 00  00 00 02 00 12 15 00 00   ................
    5. 00002620   42 20 20 20 20 20 20 20  54 58 54 00 00 00 00 00   B       TXT.....
    6. 00002630   00 00 00 00 00 00 00 00  00 00 0E 00 58 14 00 00   ............X...
    7. 00002640   4B 45 52 4E 45 4C 20 20  42 49 4E 00 00 00 00 00   KERNEL  BIN.....
    8. 00002650   00 00 00 00 00 00 00 00  00 00 1A 00 B0 01 00 00   ............°...
    файл А.ТХТ начинается с сектора, соотв. элементу 002h

    смотрим фат:
    Код (Text):
    1. Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
    2.  
    3. 00000200   F0 FF FF 03 40 00 05 60  00 07 80 00 09 A0 00 0B   ðÿÿ.@..`..?.. ..
    4. 00000210   C0 00 FF 0F 00 0F 00 01  11 20 01 13 40 01 15 60   À.ÿ...... ..@..`
    5. 00000220   01 17 80 01 FF 0F 00 FF  0F 00 00 00 00 00 00 00   ..?.ÿ..ÿ........
    6. 00000230   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
    видно, что элемент 002 ссылается на 003, 003 на 004, 00B на 00С, а 00С - на FFF, т.е. - последний сектор

    смотрим сектор 33: 33*512=4200h
    Код (Text):
    1. Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
    2.  
    3. 000041F0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
    4. 00004200   41 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 2D 2D 2D 2D   A---------------
    5. 00004210   2D 2D 2D 2D 2D 2D 2D 2D  2D 2D 2D 2D 41 0D 0A 61   ------------A..a
    6. 00004220   61 61 61 61 61 61 61 61  61 61 61 61 61 61 61 61   aaaaaaaaaaaaaaaa
    7. 00004230   61 61 61 61 61 61 61 61  61 61 61 61 0D 0A 61 61   aaaaaaaaaaaa..aa
    - видим начало файла А.ТХТ
     
  6. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Напиши фрагмент код, чтобы на входе был в каком-либо регистре(ах) линейный номер сектора, а на выходе номер в формате C(ylinder), i.e. track - H(ead) - S(ector), причем в подходящих для вызова дисковых функций BIOS регистрах.
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Ну сделай в конце хоть jmp $
     
  8. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    а у меня там
    F0 FF FF FF 0F 00 00
    00 00 00 00 00 00 00

    А это тогда что.
    mov dh,02h ;номер головки
    mov ch,02h ;номер дорожки
    mov cl,15 ;номер сектора
    Так и не понял что и зачем нужно.

    OK

    PS: Так и не пония как без помощи фат прочитать 33 сектор, зная что в нем файл размером меньше 512 байт.
     
  9. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    правильно: 2-й элемент содержит FFF, т.е. это последний сектор, т.е. файл уместился в одном секторе.
     
  10. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    навскидку:
    секторов на дорожку: 18
    дорожка 0 сторона (=головка) 0 - сектора 0-17
    дорожка 0 сторона 1 - сектора 18-35, причем сектор 33 - 15-й на этой стороне (счет от 0)
    так што попробуйте прочитать сектор 15 головка 1 дорожка 0, а для того чтобы не заниматься прикидками и нужна функция перевода в CHS
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Нормально. Значит размер файла не превосходит 512 байт. Во второй ячейке FAT хранится признак конца файла, но а сам второй кластер занят файлом.
    Чтобы мыслить на уровне линейных адресов. А вообще головки и дорожки нумеруются с нуля! Т.е. 33-й сектор - это дорожка 0 (0-79), сторона 1 (0-1), сектор 16 (1-18).
     
  12. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Вот я в этом и запутался. Сектора с 1, дорожки и головки с 0... Еще: В данном случае дорожка это цилиндр так ведь? А то в некоторых источниках так: цилиндр это цилиндр, а дорожка это дорожка с одной стороны диска, т.е. в одном цилиндре 2 дорожки !
     
  13. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    сектора, наверное, с 1 - я точно не помню. но надеюсь, что ты руководствуешься не только нашими ответами ;)

    номер дорожки и номер цилиндра = это одно и то же
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Правильно.
    Лично я слово "цилиндр" вообще не использую применительно к дискетам. К тому же, если говорить о нумерации, а не о сущности, то номер дорожки = номер цилиндра. Здесь в любом случае речь идет о радиальном отсчете. При "сквозном" отсчете фигурируют такие понятия как поверхность или головка.
    Зато я помню точно - с единицы. При линейной адресации 36-й сектор - это начальный сектор второй дорожки. 35 - 18 физический (последний круговой) номер сектора, 34 - 17, 33 - 16.
     
  15. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Попробовал и :dntknw:
    Потом посчитал и получилось головка-1, цилиндр-0, сектор 16 , а не 15.

    Тепери мое настроение :) :) :) :) :) :) :) :) :) :) :) :) потомучто работает.
    Текст файла boot.asm
    org 7C00h
    use16

    jmp start ;Ïðûæîê ê íà÷àëó ïðîãðàììû(îáõîä äàííûõ BPB)
    nop ;Ñìåùàåìñÿ íà 1 áàéò
    Name db 'MyDisket';Èìÿ 8 áàéò
    ;Íà÷àëî BPB
    SecSize dw 00200h ;áàéò íà ñåêòîð
    ClustSize db 1 ;Ñåêòîðîâ íà êëàñòåð
    RezSec dw 1 ;Ðåçåðâíûõ ñåêòîðîâ ïåðåä ïåðâîé ôàò
    Fat db 2 ;Êîëè÷åñòâî òàáëèö ôàò
    Rde dw 224 ;Ýëåìåíòîâ â êàòàëîãå
    AllSec dw 2880 ;Âñåãî ñåêòîðîâ
    Media db 0f0h ;Êîä òèïà óñòðîéñòâà
    SecInFat dw 9 ;Ñåêòîðîâ â ôàò
    SecInTrek dw 18 ;ñåêòîðîâ íà äîðîæêó
    Head dw 2 ;×èñëî ãîëîâîê
    HideSec dd 0 ;Ñêðûòûõ ñåêòîðîâ äëÿ ðàçäåëà ìåíüøå 32 ìá
    XX dd 0 ;Âñåãî ñåêòîðî íà ëîã äèñêå ðàçìåðîì áîëüøå 32 ìá
    ;Êîíåö BPB
    NoDisk db 0 ;Íîìåð äèñêà äëÿ. 0-ôëîïïè
    Reserv db 0 ;ðåçåðâ äëÿ Win NT
    BootSig db 29h ;ñèìâîë ')' ïðèçíàê ðàñøèðåíîé çàãð. çàïèñè
    SerNumber dd 1234 ;Ñåðèéíûé íîìåð
    Metka db 'helloUserXXX' ;Ìåòêà òîìà 11 áàéò
    TupeSys db 'FAT12XXX' ;Òèï ôàéëîâîé ñèñòåìû 8 áàéò

    start:
    cli
    mov ax,cs
    mov ds,ax
    mov es,ax
    mov ss,ax
    mov sp,7c00h
    sti

    xor ax,ax
    mov es,ax
    mov bx,7e00h
    mov dl,00h ;íîìåð äèñêà
    mov dh,01h ;íîìåð ãîëîâêè
    mov ch,00h ;íîìåð öèëèíäðà
    mov cl,16 ;íîìåð ñåêòîðà
    mov al,01h ;÷èñëî ñåêòîðîâ äëÿ ÷òåíèÿ
    mov ah,02h
    int 13h

    jmp 7e00h
    times (512-2-($-7C00h)) db 0
    db 055H,0AAH


    И текст progr.asm (для 33 сектора)
    org 7e00h
    use16
    mov ah,9h
    mov al,200
    mov cx,10
    mov bl,3
    mov bh,00h
    int 10h
    jmp $

    PS: Огромное спасибо всем кто мне помог.
     
  16. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    все... идем за водкой!