Эмуляция IA-32 и AMD64

Тема в разделе "WASM.BEGINNERS", создана пользователем repne, 1 июл 2006.

  1. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Нужна эмуляция защищённого 32-/64-битного режима под Windows XP, чтобы писать программу скажем на fasm`е под windows и сразу запускать на проверку. в случае ошибки,

    чтобы не висло ничего и не перезагружалось. собственно для этого и нужен эмулятор.

    скачал Bochs, но.... разобраться не смог. документация объёмистая больно уж.

    так вот, может есть что нибудь попроще, если такое в принципе возможно в этой области. ведь с эмулятором

    гораздо проще практиковаться в защищённом режиме.

    :-(
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Не понял. На какой машине эмулировать будешь? И что именно? Игры с голым железом или под WinXP (32/64)? Если второе, то ставь VMWare на 64битном проце на любой из систем, ставь внутрь VMWare другую систему и вперёд.
     
  3. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    "Не понял. На какой машине эмулировать будешь?"

    Athlon XP



    "Что именно?"

    мне нужна эмуляция голой системы ну или хотя бы под

    ms-dos 6.22, так, как будто бы я с дискеты загрузился

    на которой ms-dos. только будучи под windows, для экономии времени в случае зависания программы.

    ну и чтобы было доступно 0-вое кольцо привилегий естественно. то есть как бы виртуальный процессор что-ли. :)

    я как-то криво изъясняюсь.



    а нужно это для перехода в 32/64-битный защ.реж.
     
  4. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    VMWare, можно еще конечно попробовать XEN под никсами, но ИМХО это лишнее
     
  5. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384




    И все-таки стоит разобраться с Bochs. Судя по всему, ты хочешь пописАть в защищенном режиме, а значит тебе рано или поздно понадобится Bochs -- у него есть неплохие возможности отладки. Либо придется писать свой отладчик. Так что, возможно, есть смысл "день потерять, потом за 5 минут долететь"? Не так уж страшен этот Bochs :).
     
  6. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Да, скачал я уже Bochs, установил, но наверное нужно делать образ загрузчика, либо образ диска с MS-DOS,

    только я не знаю пока где это искать
     
  7. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Скачал дистрибутив MS-DOS 6.22,

    теперь я полагаю её надо установить

    в свободный раздел. у меня есть такой,

    потом видимо сделать образ какой-нибудь

    программой понимающей IMG. только вот скачал

    я одну такую, а она пишет что неправильный формат.

    видимо img несколько видов :)
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Это зависит от того, что ты хочешь загрузить.



    Bochs эмулирует загрузку компа с самого начала -- т.е. читает сектор 0 (LBA) в память по линейному адресу 0х7С00 и передает туда управление. Т.е. в принципе, ты можешь сделать свою MBR, можешь взять готовую и подправить. BIOS Bochs проверяет сигнатуру MBR (0x55aa) и останавливает выполнение (hlt), если не находит. Так что надо о ней позаботиться.



    Образ, если поставишь ata0-master: ..., mode=flat будет "линейный", т.е. первый сектор в файле соответствтует первому сектору "винчестера" и т.д. translation= выбираешь по вкусу, но самое простое -- LBA. Размер образа может не совпадать с указанным в конфиге -- Bochs при этом поднимет панику, которую можно проигнорировать и выполнение успешно продолжится.



    Т.е. образ, в принципе, можно сделать так (FASM):


    Код (Text):
    1. use16
    2. org 0x7c00 ;Если надо
    3.  xor ax, ax
    4.  mov ds, ax
    5.  ...
    6. db сколько_там_осталось dup 0xFF
    7. dw 0xAA55




    Дальше уже по твоему усмотрению.



    Правда, 64 бита Bochs не поддерживает...
     
  9. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Написано, что поддерживает x86-64, вроде бы.

    В файле истории написано - amd64 fixes. Значит

    поддерживает. :)



    Ладно спасибо, попробую разобраться в этом.
     
  10. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    я немного изменил код, он стал теперь

    всегда 512 байт, ведь загрузчик не может

    быть больше кажется одного сектора.

    тьфу. надо почитать на эту тему чего нибудь

    снова, а то давно читал и позабыл уже всё :)



    use16

    org 0x7c00 ;Если надо

    entry16:

    xor ax, ax

    mov ds, ax

    ...

    boot_size=$-entry16

    db (510)-boot_size dup 0xFF

    dw 0xAA55
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Да, MBR всегда один сектор, всегда в "начале" -- так что никакие трансляции на нее не действуют.

    Почитать об этом можно тут: http://mossywell.com/boot-sequence -- подробно и понятно :).

    boot_size = $ - entry16
    db (510) - boot_size dup 0xFF

    Ааа, вот как это сделать можно... :)
     
  12. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Страница не открывается.

    А кто подкинет вариант конфига Bochs загружающегося с образа дискеты или харда.
    Хочеться посмотреть.
    Спасибо заранее. Тема будет полезна не только мне, но и другим.
    Я пробовал менять конфиг, но ничего не получалось, не разобрался до
    конца.
     
  13. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Прошу прощенья, надо так: http://www.mossywell.com/boot-sequence

    Ок, выложу свой конфиг. Только я что-то не пойму, как в новом интерфейсе файлы цеплять? Или скажи почту :).
     
  14. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Ой, не заметил...

    Конфиг:
    ОЗУ: 32
    FDD: отключен
    АТА: 1 включен, плоский, без трансляции. Правишь path="mbr.BIN" на то, что тебе надо.
     
  15. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Спасибо за информацию.
    Вообще я думаю стоит посвятить Bochs`у гораздо больше
    внимания на форуме! Ведь удобная и полезная вещь.
    Ещё раз спасибо.
     
  16. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    У тебя хард на 30 Gb в конфиге ?

    ata0-master: type=disk, path="mbr.BIN", mode=flat, cylinders=3648, heads=255, spt=63
     
  17. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Хммм... Да :). Не помню, почему именно выставил такие значения.

    В принципе, это не важно. Единственное, что надо учесть -- если используется какая-то трансляция (ECHS, AssistedLBA) надо вводить соответствующую геометрию, иначе чтения/записи int 0x13 будут промахиваться.
     
  18. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Ура, кое-что получилось, теперь он пишет что диск не загрузочный :))))))
    Урааа! Принял размер, я сделал его 1 мб. Прогресс уже.
    Теперь нужно дальше двигаться. Теперь нужно писать загрузчик простейший.
     
  19. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Проверь наличие сигнатуры -- dw 0xAA55 если MBR скомпилированна, 0x55AA -- в файле.
     
  20. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    да я сразу знал в чём дело, это не проблема, образ то брался пустой.
    это я просто запустил на проверку. загрузчик маленький уже есть. он
    пишет - Loading Operating System :)
    Вот собссно и он:

    Код (Text):
    1. use16
    2. org 0x7c00
    3. start_label:
    4.     xor ax, ax
    5.     mov ds, ax
    6.     mov ax,0x3
    7.     int 0x10
    8.     mov ax,0xb800
    9.     mov es,ax
    10.     mov si,message_loading
    11.     mov ah,7
    12.     xor di,di
    13.     mov cx,80
    14. @los:   lodsb
    15.     test    al,al
    16.     jz  @1
    17.     stosw
    18.     loop    @los
    19. @1: in  al,0x60
    20.     cmp al,1
    21.     jne @1
    22.     jmp @1
    23. message_loading db  'Loading Operating System...',0
    24. program_size=$-start_label
    25. rb  510-program_size
    26. dw  0xAA55
    27. rb  1032192-513
    28. db  00