Virtual_86_for_MyOS

Тема в разделе "WASM.ASSEMBLER", создана пользователем trash, 24 апр 2006.

  1. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Вобщем, делаю что-то вроде простейшей 32бит ОС. Плоская модель. Пейджинг и мультитаск отсутствуют. Что-бы каллбачить BIOS и DOS прерывания выхожу в чистый реал, а хочеться из V86... Первоначально мой проект основывался на PMODE307.



    Вобщем механизм попадания в V86 довольно прост, однако с выходом из него что-то не все так просто... Помогите, если можете!
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    V86 предназначен лишь для совместимости со старым софтом. Использовать его для новых разработок - ересь! Для кого PM делался?!
     
  3. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.


    Ну походу я еретик.. Да и разработка не нова хачу вот пень166 переделать не знаю под чево... Извращаюсь короче... А мне BiOs c DOS нужен на первое время...



    Для китайцкой армии.. (жутка)



    Ну ломает писать всю хрень под хардваре... Хочу пока с процом розобраться а там продолжить...
     
  4. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    trash

    С с выходом из него можно познакомиться в исходниках винды, или разреверсить обработчики #UD и #GP, для выхода из этого режима используются запрещенные инструкции как правило, типа как C4h в ntvdm, вызывает #UD либо intxx, in/out, вызывают #GP. Сорцы посмотри, помоему ничего сложного.
     
  5. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.


    У меня их нет, обхожусь ICE-ом...



    В Win9X, из ринг0 выхожу в V86, все вроде номано трассируеться..



    То бишь делаю в V86 Int - и опять выхожу в ринг0...



    В голом DOS - IDT/GDT подготовлен. В V86 выхожу.. Делаю Int - и словно ресет.



    Наверно нужно загружать TSS (хотя как неохота с этим пока связываться)
     
  6. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    хм, странно, а как ты без тсс работаешь ?
     
  7. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Да нормально можно без тсс поработать, если... если ограничиться, например иследованием поведения аппаратных INT обработчиков и IDT... У меня в проекте пока именно так драйверные вещи в PM обкатываются. НО! Но INT обработчики целиком мои и именно это и цель - пока победить популярные железяки в плане обработки их прерываний в PM для создания собственных драйверных решений под свою ось под свои задумки, просто, универсально, оптимально...

    В плане твоих вызовов INT и ресета как следствие - думаю ты не учитываешь, что там внутри будет с DS, ES,... т.к. я понимаю ты ныряешь в существующие BIOSовские, а они дают тебе жестокие исключения. Вожможно, если легализовать их занчения в GDT, обьявив соответсвующим образом, что хотябы ресет исчезнет, а там дальше - больше... Но считаю это, мягко говоря - неоптимальностью.
     
  8. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.


    Да на "УРА"...

    Отсутствие пэйджинга (бит 15 = 0 в CR0) - упрощает работу с памятью. И (субьективно) - режим этот более стабилен.



    TR (регистр задач) и все что с ним связано я не трогаю. Бит NT(nested task) в EFLAGS = 0...



    Хотя и его загружал селектором-НЕПОМОГАЕТ.



    Обработчики прерываний стоят, и в FLAT PM, работают... А захожу в V86 и делаю фаулт/прерывание вылетаю в перезагруз.



    Также пока не трогаю V86-расширений...
     
  9. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    Если верить Интелу, чтобы войти в V86, нужно как минимум две задачи (основная и задача v86). А при выходе автоматически происходит переключение задач. Сам с этим не эксперементировал, но Интелу пока верю :)



    А как ты входишь в V86 без всего этого?
     
  10. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Надо в ринг0 делать:



    mov eax, esp

    push rm_gs

    push rm_fs

    push rm_ds

    push rm_es

    push rm_ss



    push eax //push esp

    push 23046h //PUSH EFL

    push RM_CS //push V86 segment

    push offset V86proc



    iretd



    Здесь рулит значение регистра флага. Если это переход Ring0-V86Ring3, то загружаються дополнительные сегментные регистры...

    з.ы

    Винда 9Х так прыгает.
     
  11. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Гм.. Тут у вас кое что нарыл в "брошеной ОСи для 80386". Попробую разобраться со всем этим гемором. Так то оно все ничего,

    а вот TR/TSS/LDT - то просто мраки какие-то...



    Отлаживаю как в реал-моде так и на VirtPC. Хм.. код ведет себя по разному.



    Если верить интелу...
     
  12. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    trash

    ааа, ёптыть, тыж тока в r0, понятно. Не тут без наличия виновника(кода) и бутылки не разберешься, как пральна кто то упомянул, не у всех есть телепатические способности
     
  13. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Попробую набухацца до телепатических способностей, и бросить все нафик.



    V86-заколдованый режим каойто. Если верить Ынтелу.
     
  14. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    trash

    ты для начала книжки почитай, если это работает, то ничего закалдованнава тут нету.
     
  15. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    trash

    Нифига себе! Не, вариант наверное рабочий, хотя и не очень понято почему, но это-то точно колдунство :) И плохо документированное к тому же.



    23046h это установленный VM и IOPL равный 11b. Ещё, зачем-то ZF и PF..



    Боюсь, что раз уж ты так в режим вошёл, то и возвращаться нужно таким же способом, через iret :) А стандартный способ возвращения расчитывает на TSS, поэтому и обламывается.



    А что тебе с TR и TSS неясно? Могу попробовать объяснить.. Правда, опять же, сам с этим не возился пока, только читал. А на LDT - забей, накой он тебе сдался.



    По поводу виртуальных машин - в них бывают глюки. Редко, но бывают.
     
  16. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    trash



    дарю исходник

    загружаешь голый дос - без himem/emm386 и запускаешь это

    переводит дос из real-mode в V86-mode

    хочешь - разбирайся, спрашивай

    [​IMG] 1787862645__init.zip
     
  17. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    z0mailbox

    Сорри, не разбирался подробно.. Но зачем такая большая io-map для v86? Разве нельзя просто отбросить завершающие нули?
     
  18. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    z0mailbox спасибо, мне все пригодиться!



    В принципе-то я пытаюсь сделать очень упрощеный вариант вызова V86 подпрограммы. В контексте одной единственной задачи(ядра) без юзанья CR2/CR3...
     
  19. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ




    это полная карта, так просто для разнообразия

    да, можно обрезать нули с указанием правильной границы в TSS

    но можно и полную дать - жалко байтов чтоли
     
  20. trash

    trash New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2006
    Сообщения:
    143
    Адрес:
    х.з.
    Плоховато что init.exe не пашет под Virtual PC. А так довольно простая реализация - без пейджинга.



    Да, скорей всего нужно создавать новую задачу под V86.



    Как ни пытался я упростить - получаеться RESET.



    То есть после установки FLAT PM,

    прыгаю в V86 и получаю перезагруз. :dntknw: