консольная программа для обновления образа дискеты

Тема в разделе "WASM.SOFTWARE", создана пользователем NoName, 18 авг 2007.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    нужна консольная программа для обновления образа дискеты под windows
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    что неужели никто незнает таких?
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    rawrite чтоль? поясни что значит "обновление образа дискаты"
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Есть файл образа дискеты. Я его гружу в bochs. Сейчас обновляю файлы в ultraiso мышкой, но хочется все автоматизировать.
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ну так возьми любую консольную прогу. Или даже так.
     
  6. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    а как прописать загрузку файла mz?
    вот беру 512 байт из рабочего образа вставляю их и ничего не работает. Подскажите пж-та.

    Код (Text):
    1. Start:
    2.    mov   ax,cs
    3.    mov   ds,ax
    4.    mov   cx,count
    5.    mov   si,hello
    6.    mov   bx,7
    7.    mov   ah,0Eh
    8. @@:
    9.    lodsb
    10.    int   10h
    11.    loop  @B
    12.    xor   ah,ah
    13. ;   int   16h
    14. ;   int   19h
    15.    jmp _start02
    16.  
    17. hello   db "Hi! This is disk-invalid!"
    18. count = $ - hello  
    19.    
    20. ;-----------------------------------------------------------------------
    21.     rb 7E00h-2-$
    22.     db 055h,0AAh ; signature at the end of the first sector
    23. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    24. ;
    25. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    26. ;   here you can continue coding -
    27. ;   this will just increase amount of reserved sectors automatically
    28. _start02:
    29. db 235,60,144,42,45,118,52,86,73,72,67,0,2,1,1,0
    30. db 2,224,0,64,11,240,9,0,18,0,2,0,0,0,0,0
    31.  
    32. db 0,0,0,0,0,0,41,225,108,135,42,229,0,0,0,0
    33. db 0,0,0,0,0,0,70,65,84,49,50,32,32,32,51,201
    34. db 142,209,188,252,123,22,7,189,120,0,197,118,0,30,86,22
    35. db 85,191,34,5,137,126,0,137,78,2,177,11,252,243,164,6
    36. db 31,189,0,124,198,69,254,15,56,78,36,125,32,139,193,153
    37. db 232,126,1,131,235,58,102,161,28,124,102,59,7,138,87,252
    38. db 117,6,128,202,2,136,86,2,128,195,16,115,237,51,201,254
    39. db 6,216,125,138,70,16,152,247,102,22,3,70,28,19,86,30
    40. db 3,70,14,19,209,139,118,17,96,137,70,252,137,86,254,184
    41. db 32,0,247,230,139,94,11,3,195,72,247,243,1,70,252,17
    42.  
    43. db 78,254,97,191,0,7,232,40,1,114,62,56,45,116,23,96
    44. db 177,11,190,216,125,243,166,97,116,61,78,116,9,131,199,32
    45. db 59,251,114,231,235,221,254,14,216,125,123,167,190,127,125,172
    46. db 152,3,240,172,152,64,116,12,72,116,19,180,14,187,7,0
    47. db 205,16,235,239,190,130,125,235,230,190,128,125,235,225,205,22
    48. db 94,31,102,143,4,205,25,190,129,125,139,125,26,141,69,254
    49. db 138,78,13,247,225,3,70,252,19,86,254,177,4,232,194,0
    50. db 114,215,234,0,2,112,0,82,80,6,83,106,1,106,16,145
    51. db 139,70,24,162,38,5,150,146,51,210,247,246,145,247,246,66
    52. db 135,202,247,118,26,138,242,138,232,192,204,2,10,204,184,1
    53.  
    54. db 2,128,126,2,14,117,4,180,66,139,244,138,86,36,205,19
    55. db 97,97,114,10,64,117,1,66,3,94,11,73,117,119,195,3
    56. db 24,1,39,13,10,73,110,118,97,108,105,100,32,115,121,115
    57. db 116,101,109,32,100,105,115,107,255,13,10,68,105,115,107,32
    58. db 73,47,79,32,101,114,114,111,114,255,13,10,82,101,112,108
    59. db 97,99,101,32,116,104,101,32,100,105,115,107,44,32,97,110
    60. db 100,32,116,104,101,110,32,112,114,101,115,115,32,97,110,121
    61. db 32,107,101,121,13,10,0,0,73,79,32,32,32,32,32,32
    62. db 83,89,83,77,83,68,79,83,32,32,32,83,89,83,127,1
    63. db 0,65,187,0,7,96,102,106,0,233,59,255,0,0,85,170
    64. ;-----------------------------------------------------------------------
    65.     align _bs
    66.     _rs = ($ - 7C00h) / _bs ; calculation of amount of reserved sectors
    67. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    68. ;
    Если вставить этот код в первый сектор получаем:

    flat assembler version 1.67.22 (318415 kilobytes memory)
    boot_fat.asm [92]:
    rb 7E00h-2-$
    error: invalid value.
     
  7. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Для начала, надо бы перед Start поставить org 7c00h. Кроме того, в результате mov ax,cs может быть получено в ax как 7с00h, так и 07c0h, 007ch, etc. из-за разных способов прыжка, поэтому в ds следует писать 0.
     
  8. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Привожу оригинальный исходник. Что точно нужно сделать чтобы заработало?

    Код (Text):
    1. ;=======================================================================
    2. _bs = 512   ; bytes per sector
    3. _st = 18    ; sectors per track
    4. _hd = 2     ; heads
    5. _tr = 80    ; tracks
    6. _rd = 224   ; root directory entries
    7. _ft = 2     ; fats
    8. _sf = 9     ; sectors per fat
    9. _sc = 1     ; sectors per claster
    10. ;=======================================================================
    11. include "fat12.inc"
    12. ;=======================================================================
    13.     org 7C00h
    14.     jmp start
    15.     nop
    16. ;=====================================================
    17.     db  "HE-HE OS";     ; 8                        BPB
    18.     dw  _bs             ; b/s
    19.     db  _sc             ; s/c  
    20.     dw  _rs             ; rs
    21.     db  _ft             ; fats
    22.     dw  _rd             ; rde
    23.     dw  _tr * _hd * _st ; as
    24.     db  0F0h            ; media
    25.     dw  _sf             ; s/fat
    26.     dw  _st             ; s/t
    27.     dw  _hd             ; h
    28.     dd  0               ; hs
    29.     dd  0               ; --
    30.     db  0               ; drv
    31.     db  0               ; --
    32.     db  29h             ; ebr
    33.     dd  0               ; sn
    34.     db  "NO NAME    ";  ; 11
    35.     db  "FAT12   ";     ; 8
    36. ;=====================================================
    37. start:
    38.     mov   ax,cs
    39.     mov   ds,ax
    40.     mov   cx,count
    41.     mov   si,hello
    42.     mov   bx,7
    43.     mov   ah,0Eh
    44. @@:
    45.     lodsb
    46.     int   10h
    47.     loop  @B
    48.     xor   ah,ah
    49.     int   16h
    50.     int   19h
    51.  
    52. hello   db "Hi! This is disk-invalid!"
    53. count = $ - hello  
    54.    
    55. ;-----------------------------------------------------------------------
    56.     rb 7E00h-2-$
    57.     db 055h,0AAh ; signature at the end of the first sector
    58. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    59. ;
    60. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    61. ;   here you can continue coding -
    62. ;   this will just increase amount of reserved sectors automatically
    63.  
    64. ;-----------------------------------------------------------------------
    65.     align _bs
    66.     _rs = ($ - 7C00h) / _bs ; calculation of amount of reserved sectors
    67. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    68. ;
    69. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    70. ;   including files into the image and generating fat.
    71. ;   you should check for the first string - file name and extension
    72. ;   - it does not checked by macro, thus error can cause unreadable
    73. ;   directory entry
    74.  
    75.     fat12 \
    76.         "A       TXT","a.txt",ff0,\
    77.         "B       TXT","b.txt",ff1,\
    78.         "KERNEL  BIN","kernel",ff2
    79.        
    80. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
  9. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Так всё ж терь работает. Только вместо mov ax,cx->mov ds,ax я бы написал xor ax,ax->mov ds,ax - на всякий случай - мало ли что в CS.
     
  10. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    10110111
    читай тему внимательно.
    Как прописать 512 байт рабочего загрузчика?
     
  11. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    ну уж тогда можно консольную программу вроде dd для записи 512 байт непосредственно уже в файл, только я такой под венду незнаю
     
  12. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    да, нашел dd для windows http://www.chrysocome.net/dd
    теперь все прекрасно работает, правда так осталось и непонятно как сделать это в исходнике
     
  13. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    бут-сектор на реальной дискете перезаписывается при помощи штатного отладчика следующим образом:
    Код (Text):
    1. debug boot.bin < make.dat
    - где boot.bin - новый загрузочный сектор, а make.dat - файл следующего содержания:
    Код (Text):
    1. w 100 0 0 1
    2. q
    (после q перевод строки обязателен!)
     
  14. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    shoo
    я работаю с образом дискеты. Подскажи пж-та как это реализовать в исходнике?
     
  15. shoo

    shoo New Member

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

    записать образ на дискету при помощи отладчика таким способом не получится, разве что если образ будет в пределах 64К-256 байт - иначе он его не загрузит в память. такое сделать возможно, если в макросе фат подкорректировать выравнивание. хоть это и кастрированный образ, его может оказаться достаточно для базы ОС. остальные файлы можно просто копировать на дискету сразу после копирования образа.

    вот три моих шаблона (включая новый BFATL):

    BFAT - создает нормальный образ 1.44
    BFATL - создает образ 63.5К, записывает на реальную дискету debug-ом
    BSECT - создает бут-сектор, записывает на реальную дискету debug-ом

    если нужно во втором добавлять каждый раз какие-то файлы - в write.bat после строки "debug ..." добавляются строки "copy ... a:\"

    НО... как я понял это образ для BOCSH...
    в этом случае пользоваться отладчиком сложно. лучше использовать вариант BFAT: при каждой компиляции boot_fat.asm создается новый образ с загрузочным сектором, в который включаются файлы, указанные параметрами макроса fat12. Если в обновлении нуждаются включаемые файлы, тогда сначала они перекомпилируются или обновляются, а затем снова компилируется файл boot_fat.asm

    Данные примеры выполнены как проекты WinAsm Studio, и при установленной надстройке фасм пересобираются полностью автоматически по команде "Выполнить всё". Если далее выбрать "Выполнить", то для BSECT и BFATL выполнится отладчик для записи на дискету, а для BFAT запустится эмулятор QEMU (правда, его нужно прописывать, или можно другой - вариантов много, если будут проблемы настройки - могу подсказать в конкретной ситуации, хотя борщом я не пользовался - но это уже другой вопрос)
     
  16. shoo

    shoo New Member

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

    в конце концов можно делать это, используя возможности фасма.

    вот проект, который работает так:

    1.существующий образ дискеты копируется во временный файл img.tmp
    2.после компиляции бутсектора к нему дописывается хвост из временного образа начиная от байта 512 (счёт от 0) и до конца файла - т.е. весь образ кроме первого сектора.
    3.временный образ удаляется.

    из винасма делается без участия пакетного файла - он приложен для тех, кто не пользуется винасмом.

    (прверял только при помощи fc - вроде нормально)

    ---
    уже тянет на туториал :)

    ---
    кстати может, необходимости в промежуточном файле и нет: можно попробовать :)
     
  17. shoo

    shoo New Member

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

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    спасибо большое, но это несовсем то, что мне нужно.
    Я нуждаюсь в постоянном бут секторе, обновляя только файлы. У меня есть образ дос дискеты и я не пользуюсь студией, хочу все в пакетном файле сделать.
    А у тебя получится хороший туториал :)
     
  19. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    Я нуждаюсь в постоянном бут секторе, обновляя только файлы.
    ну, дык... 8)
    никто ж не заставляет изменять каждый раз бут-сектор :)
    напиши в пакетном файле сначала компиляцию изменяемых файлов, а в конце - компиляцию boot_fat.asm. последняя операция при этом и будет предназначена только для пересобирания образа :)
    вариантов немеряно ;)
     
  20. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    shoo
    как мне туда засунуть уже имеющийся дос загрузчик с другой дискеты?