|
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
|
|
Ядро операционной системы19.12.2013, 22:34. Показов 3819. Ответов 16
Метки нет (Все метки)
Здравствуйте! Пытаюсь создать загрузчик и ядро простой ОС, которое по нажатию на клавишу выполняет различные функции (смена цвета текста, вывод на экран информации о процессоре и видеокарте и др). Загрузчик записываю в бут-сектор дискеты, а ядро на 2, 3 и 4 сектора (его размер 1515 байт). Некоторые функции ядра не выполняются (например, вывод на экран производителя процессора), хотя при записи каждой функции ядра в бут сектор в виде отдельной программы, все работает (т. е. по отдельности программы работают, а вместе - нет). Дело в сохранении состояния регистров? Помогите разобраться, как решить эту проблему? Заранее спасибо!
0
|
|
| 19.12.2013, 22:34 | |
|
Ответы с готовыми решениями:
16
Разработка операционной системы. Как написать программу, чтоб она могла запускаться без участия операционной системы архитектура операционной системы |
|
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
|
|
| 19.12.2013, 22:58 [ТС] | |
|
Не выводится на экран производитель процессора, ASCII код введенного символа тоже неверно отображается, температура процессора и время BIOS не отображаются, beep не слышен. Хотя все эти функции по отдельности работают при их записи в бутсектор дискеты.
0
|
|
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
|
| 19.12.2013, 23:42 | |
|
Опишу, как это делал я. Некоторые детали уже не помню.
Создать ПЕРВИЧНЫЙ ЗАГРУЗЧИК размером не более одного сектора (512 байт) и записать его в первый сектор дискеты, его основная функция – ЗАГРУЗКА ЯДРА и так как размер загрузчика мал, то туда можно записать например вывод цветного приветствия, номер версии, вывод времени и даты и т.п. Первичный загрузчик считывает ядро с других секторов в другую область памяти и передает туда управление. Память лучше выбрать что то 4000h:100h, тогда ядро можно создать как СОМ – файл и нормально его отлаживать в отладчике.
1
|
|
|
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
|
|
| 20.12.2013, 01:18 [ТС] | |
|
AFP, я проверил каждую из функций отдельно (т. е. создал загрузчик и ядро, состоящее из одной функции). Возникли ошибки в тех же функциях, что и при их совместном включении в ядро. Получается, некоторые функции работают из первичного загрузчика, но не из ядра. Возможно, ошибка возникает из-за того, что регистр es используется и в загрузчике (push es) и в ядре (как раз в ошибочной функции). Если дело в этом, то как можно исправить?
0
|
|
|
Ушел с форума
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
|
|
| 20.12.2013, 08:43 | |
|
RocBoy-D,
всё, что относится к вашему учебному мини-ядру постарайтесь создавать в этой ветке, а не в ассемблере для начинающих
0
|
|
|
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
|
|
| 20.12.2013, 10:40 | |
|
RocBoy-D, Примеров перехода на вторичный загрузчик в сети достаточно, в альтернативе попробуйте на CD, в нем сектора имеют размер 2048 байт.
1
|
|
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
|
| 20.12.2013, 11:37 | |
|
RocBoy-D,
создавайте только СОМ - файлы. Там все сегментные регистры равны.
1
|
|
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
| 20.12.2013, 13:05 | |
|
Чтобы не мучаться с загрузчиком, также можно использовать GRUB и грузиться хоть с винта, хоть с CD, хоть с флешки.
2
|
|
|
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
|
|
| 21.12.2013, 02:10 [ТС] | |
|
а как в Bochs создать образ дискеты с двумя файлами (первичный и вторичный загрузчики)? Или как сделать загрузку не с образа, а с floppy drive, в который уже вставлена дискета с этими двумя файлами? У меня получается только загрузка с одного файла
0
|
|
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
||||||
| 22.12.2013, 21:20 | ||||||
Сообщение было отмечено как решение
Решение
1
|
||||||
|
41 / 40 / 23
Регистрация: 10.03.2012
Сообщений: 374
|
||||||||||||||||
| 23.12.2013, 00:47 [ТС] | ||||||||||||||||
|
AFP, так у меня есть программа для записи файла на дискету (в аттаче). И с созданием образа для borchs тоже разобрался. Проблема вот в чем: следующая программа работает верно (выводит время на экран)
0
|
||||||||||||||||
|
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
|
|
| 24.12.2013, 09:44 | |
|
RocBoy-D, ваша строка читается не из того места в памяти. Мне с ORG'ами париться не приходилось, но у меня была схожая проблема. В вашем случае нужна вставка типа mov word ptr string-7C00h, мне лень считать.
1
|
|
|
780 / 412 / 75
Регистрация: 29.03.2013
Сообщений: 854
|
|||||||
| 24.12.2013, 10:01 | |||||||
|
RocBoy-D, я думаю, что проще искать ошибки используя дебаггер (например td). Для этого я после компиляции прогоняю obj-файл через линкер 2 раза:
1) для получения EXE-файла (для последующей отладки в td); 2) для получения BIN-файла (для записи на диск).
1
|
|||||||
|
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
|
||
| 24.12.2013, 10:08 | ||
|
Добавлено через 5 минут Еще один безумный вариант - сбить CS и DS.
1
|
||
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
||||||||||||||||
| 24.12.2013, 13:38 | ||||||||||||||||
|
Получается ЕХЕ - файл. В hex редакторе удалить шапку из нулей. Записать в первый сектор FDD/HDD.
Будьте внимательны, можно убить систему на винте.
Получается СОМ - файл. Записать начиная со второго сектора дискеты.
1
|
||||||||||||||||
|
780 / 412 / 75
Регистрация: 29.03.2013
Сообщений: 854
|
|||
| 24.12.2013, 15:00 | |||
1
|
|||
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
|
| 24.12.2013, 19:26 | |
|
Бинарники для записи на дискету:
1
|
|
| 24.12.2013, 19:26 | |
|
Помогаю со студенческими работами здесь
17
Выбор операционной системы Загрузка Операционной системы Поведение Операционной системы Выбор операционной системы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|