Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

help tasm V86 EV86 protected mode boot

8.5K
22 ноября 2004 года
kidman
16 / / 21.11.2004
Привет! Я начинающий системный программер.
Раньше писал программы на Си и т.п.
Надеюсь, это занятие сможет меня обеспечить в будущем.
Мне необходим подробный материал о том, как использовать
V86 и EV86 режимы, обрабатывать прерывания задачи V86 в
защищённом режиме.
Задача может быть встроенной в программу или какой-то исполняемый
модуль *.com.

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

Подскажите, пожалуйста, литературу, интернет-ресурс или исходник.
Интересна также информация о загрузчиках, в особенности о тех,
с помощью которых можно запустить с диска (дискеты) *.exe файл
при загрузке с данного диска (дискеты).
Поделюсь тем, что уже раньше нашёл!
mailto: [email]vitas@horror.kirov.ru[/email]
1.7K
29 ноября 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman
Привет! Я начинающий системный программер.
Раньше писал программы на Си и т.п.
Надеюсь, это занятие сможет меня обеспечить в будущем.
Мне необходим подробный материал о том, как использовать
V86 и EV86 режимы, обрабатывать прерывания задачи V86 в
защищённом режиме.
Задача может быть встроенной в программу или какой-то исполняемый
модуль *.com.

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

Подскажите, пожалуйста, литературу, интернет-ресурс или исходник.
Интересна также информация о загрузчиках, в особенности о тех,
с помощью которых можно запустить с диска (дискеты) *.exe файл
при загрузке с данного диска (дискеты).
Поделюсь тем, что уже раньше нашёл!
mailto: [email]vitas@horror.kirov.ru[/email]



Зубков С.В. "Ассемблер для DOS, Windows и UNIX". Там есть кой-чего

8.5K
17 декабря 2004 года
kidman
16 / / 21.11.2004
Вообще-то я уже кое-что написал, а именно прога переходит в защищённый режим, инициирует задачу # 0, далее задачу в V86, в рамках которой запускает command.com. Однако я не знаю, как проверить, работает ли DOS в режиме виртуального 86-го? КАК ЭТО СДЕЛАТЬ, может программа есть специальная?
1.7K
17 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman
Вообще-то я уже кое-что написал, а именно прога переходит в защищённый режим, инициирует задачу # 0, далее задачу в V86, в рамках которой запускает command.com. Однако я не знаю, как проверить, работает ли DOS в режиме виртуального 86-го? КАК ЭТО СДЕЛАТЬ, может программа есть специальная?


Чего там проверять??? И причем здесь DOS? Во-первых, тебе нужно уяснить суть - что это вообще такое. Это задача с CPL=3, размер сегмента 1024 Кб, где могут использоваться дополнительные возможности (в основном для EV86). А по сути, придется практически эмулятор компьютера еще к этим фичам написать.

8.5K
17 декабря 2004 года
kidman
16 / / 21.11.2004
Цитата:
Originally posted by Envel

Чего там проверять??? И причем здесь DOS?


Суть такова, грузим с дискеты *.exe, который переходит в ProtectedMode, создаёт задачу V86 и запускает command.com в этой задаче.По завершении работы с comand.com переходит в RealMode. Вот и всё.

Цитата:
Это задача с CPL=3, размер сегмента 1024 Кб, где могут использоваться дополнительные возможности (в основном для EV86). А по сути, придется практически эмулятор компьютера еще к этим фичам написать.


Хрен с ним с этим EV86, мне бы V86 освоить!
Вопрос заключался в следующем:
как проверить, работает ли задача(а она работает) именно в режиме V86?

Ну и ещё одно - как запустить exe из загрузчика? как правильно задать PSP и передать управление exe программе?
Будет ли работать потом функция 4B00 int 21h, необходимая для запуска command.com

1.7K
18 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman

Суть такова, грузим с дискеты *.exe, который переходит в ProtectedMode, создаёт задачу V86 и запускает command.com в этой задаче.По завершении работы с comand.com переходит в RealMode. Вот и всё.


Хрен с ним с этим EV86, мне бы V86 освоить!
Вопрос заключался в следующем:
как проверить, работает ли задача(а она работает) именно в режиме V86?

Ну и ещё одно - как запустить exe из загрузчика? как правильно задать PSP и передать управление exe программе?
Будет ли работать потом функция 4B00 int 21h, необходимая для запуска command.com


Так-с... давай по частям. Если ты создаешь задачу V86, и хочешь в ней DOS запускать, то тебе придется задавать для нее сегмент с базой 0, лимитом 1 Мб. НЕ ФАКТ, что у тебя будет работать DOS, ибо он использует драйвера, например, HIMEM.SYS, EMM386, которые переходят в pm для отображения страниц на 1-ый Мбайт памяти, так что тебе придется обрабатывать переход в PM, а также полностью эмулировать страничную адресацию, а потом восстанавливать свою GDT. Есть вариант - не грузить эти драйвера. В принципе, для command.com сойдет.
Про PSP почитай в книге Зубкова. С прерываниями обстоит дело сложнее, посмотри описание TSS в той же лит-ре. Там может быть 256-тибитовая карта перенаправления прерываний (только если VME=1 - бит в CR4). Каждый бит в ней соответствует прерыванию, если установлен в 1, то прерывание обрабатывается обработчиком защищенного режима, если 0 - 16-тибитным обработчиком из реального режима (точнее v86). Вообще, с прерываниями все сложнее, чем я описал. Надо учитывать флаги VME, VIF,VIP. ПОЧИТАЙ ЛИТЕРАТУРУ!

8.5K
18 декабря 2004 года
kidman
16 / / 21.11.2004
Знаете, тяжеловато немного человеку, который смутно понимает страничную адресацию и работу DOS. Скачал какую-то книгу Зубкова... посмотрю. Обязательно выложу то, что получилось! (если начальство разрешит)
1.7K
18 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman
Знаете, тяжеловато немного человеку, который смутно понимает страничную адресацию и работу DOS. Скачал какую-то книгу Зубкова... посмотрю. Обязательно выложу то, что получилось! (если начальство разрешит)


Ты СКАЧАЛ книгу Зубкова??? Дай ссылку глянуть:-)
Со страничной адресацией не все так сложно, как кажется. Удачи.
p.s. не думал, что такое можно скачать.

8.5K
20 декабря 2004 года
kidman
16 / / 21.11.2004
Цитата:
Originally posted by Envel

Ты СКАЧАЛ книгу Зубкова??? Дай ссылку глянуть:-)


http://vmsis2001.narod.ru/ кажется, там была книга. Возможно, не та, которая Вам нужна, однако мне она как-то не пригодилась. Жаль! Посмотрел структуру PSP, однако ЭТО книга по программированию DOS, а DOS мне в конечном итоге будет и не нужен.

8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
Вопрос:
Есть загрузчик, который выполняет следующее:
1)читает корневой каталог;
2)ищет в нём имя файла, заданное заранее
3)определяет номер 1-го кластера файла;
4)читает FAT12 по адресу 0х7с00:0х0200
5)считывает по 1 сектору с дискеты, начиная с 1-го кластера, в цикле до тех пор, пока не получит кластер, номер которого в FAT соответствует записи 0xFFF;
считывает по адресу с 0x1000:0x0000 по хер знает какой.

Вопрос №1: может быть запись в FAT должна быть другой? (например 0хFF0 или 0xFF8)

Вопрос №2: как отдать управление загруженному файлу, если он *.exe (jmp dword 1000:точка входа не помогает, call far вообще в nasm ошибку выдаёт)
Как его запустить?
8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
Естественно, что по адресу 0x7c00:0x0200 он считывает 18 секторов FAT12, чтобы потом сравнивать значения записей FAT для соответствующих считанных кластеров файла.

По адресу 0x1000:0x0000 читается сам файл
1.7K
22 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman
Естественно, что по адресу 0x7c00:0x0200 он считывает 18 секторов FAT12, чтобы потом сравнивать значения записей FAT для соответствующих считанных кластеров файла.

По адресу 0x1000:0x0000 читается сам файл


RTFM. На предмет MZ-format. Если хочешь разбирать MZ формат (он вообще только для DOS приложений годиться!), тебе надо обработку его писать в своем загрузчике, а не просто считывать. Там помимо кода еще и таблицы перемещений и др. данные. Компилируй в простой бинарник (nasm -fbin ...), тогда таких проблем не будет. Никаких far и near в nasm вообще нет. Используй директивы указания адреса операнда: т.е. jmp dword seg:offs (для 16-тиразрядных дальних переходов), jmp fword seg:offs (для 32-хразрядных дальних переходов).

8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
Я бы скомпилил *.bin nasm'ом, если бы мог, однако исходники написаны под tasm, который может создать только *.exe. Компиляция с параметром nasm -T (кажется, это режим совместимости с tasm) также не помогает.

1) Вы уверены, что просто jmp dword seg передаст управление проге?

2) какое смещение указывать при переходе, если получится *.bin?

3) да вот ещё что, если использовать этот загрузчик для *.com и передавать управление проге через jmp dword 0x1000:0x0100, то не работает.

Если использовать jmp dword 0x1000:0x0000, то получается какая-то ерунда - отображаются некоторые сообщения из программы (*.com), я уже думаю, что загрузчик криво написан, но уж 100 раз перепроверил (переделан из boot'a Menuet os)
8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
boot.txt - исходник загрузчика для *.com
компилируется nasm -o boot.bin -fbin boot.asm

Запись в загрузочный сектор осущ-ся с помощью проги copyto.exe (исходник *.cpp сейчас выдам).
Я его компилирую Borland C++ 4.5 target expert - DOS standart.
8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
А вот это исходники Glukos'а (доступны здесь же - на этом сайте) Именно kernel.com glukos'а я пытаюсь загрузить загрузчиком MENUET OS, чтобы проверить, работает ли этот загрузчик
8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
Я тормоззз
1.7K
22 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman
Я бы скомпилил *.bin nasm'ом, если бы мог, однако исходники написаны под tasm, который может создать только *.exe. Компиляция с параметром nasm -T (кажется, это режим совместимости с tasm) также не помогает.

1) Вы уверены, что просто jmp dword seg передаст управление проге?

2) какое смещение указывать при переходе, если получится *.bin?

3) да вот ещё что, если использовать этот загрузчик для *.com и передавать управление проге через jmp dword 0x1000:0x0100, то не работает.

Если использовать jmp dword 0x1000:0x0000, то получается какая-то ерунда - отображаются некоторые сообщения из программы (*.com), я уже думаю, что загрузчик криво написан, но уж 100 раз перепроверил (переделан из boot'a Menuet os)


1. читайте seg [двоеточие] offs. Уверен, см. пост в "Помощи студентам" называется "помогите с лабами".
2. Посмотрите на директиву org в начале вашего ядра, там, наверняка, число, отличное от 0. Загружайте по этому адресу ядро.

8.5K
22 декабря 2004 года
kidman
16 / / 21.11.2004
Цитата:
Originally posted by Envel

1. читайте seg [двоеточие] offs. Уверен, см. пост в "Помощи студентам" называется "помогите с лабами".
2. Посмотрите на директиву org в начале вашего ядра, там, наверняка, число, отличное от 0. Загружайте по этому адресу ядро.


Я, конечно, начинающий, но не полный кретин. Я в курсе, что для *.com, как правило, используется команда препроцессора ORG 0100h, однако я никак не могу понять, почему 100% рабочий загрузчик не может перейти на 0х1000:0х0100 и запустить программу *.com

1.7K
22 декабря 2004 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by kidman

Я, конечно, начинающий, но не полный кретин. Я в курсе, что для *.com, как правило, используется команда препроцессора ORG 0100h, однако я никак не могу понять, почему 100% рабочий загрузчик не может перейти на 0х1000:0х0100 и запустить программу *.com


В том коде, что ты выложил вообще загружается прога по адресу 0x7c00:0200h, о каком 0x1000:0x0100 ты говоришь???

8.5K
24 декабря 2004 года
kidman
16 / / 21.11.2004
Цитата:
Originally posted by Envel

В том коде, что ты выложил вообще загружается прога по адресу 0x7c00:0200h, о каком 0x1000:0x0100 ты говоришь???


По адресу 0x7C00:0x0200 грузится 18 секторов FAT12 для последующего сравнения записей FAT, соответствующих считываемому кластеру, со значением 0x0FFF, которое соответствует последнему кластеру файла. Прога грузится тперь по адресу 0x1000:0x0100 (типа 256 байт под PSP). Пробовал грузить таким же образом *.exe, но появилась ошибка стека. Однако я на правильном пути, потому как при загрузке появился характерный для запуска *.exe серый фон.

8.5K
24 декабря 2004 года
kidman
16 / / 21.11.2004
файл boot.txt (который выше) грузит скомпилированный kernel.com GLUK OS'а, и при этом не важно, в каком месте дискеты он находится (в отличие от родного GLUKOS'овского загрузчика). Я пробовал его грузить в VMWare Workstation и всё работает.
8.5K
25 декабря 2004 года
kidman
16 / / 21.11.2004
Кстати, этот boot'er не работает при попытке загрузки компа с дискеты. Понятия не имею, в чём проблема, потому как в VM workstation работает!
Кто-нить в курсе?
8.5K
05 января 2005 года
kidman
16 / / 21.11.2004
давненьео не был тут:
задача:
хочу осуществлять переключение 2-ух задач по таймеру
задача № 1 - основная
задача № 2 - в режиме V86
как это сделать?
(переход на задачу выполняется
str ax
cmp ax,48
je out_1
pop dx
pop ax
jmp dword ptr cs: t86_addr
48 - селектор задачи V86
t86_addr = 48
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог