OSDev

для всех
Текущее время: 10 май 2024, 07:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 23:02 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В защищённом режиме другая таблица прерываний. Ключевые слова: таблица IDT, тип дескриптора 0x8E, команда lidt.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 23:10 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Но биус не понял такой диск и загрузчик не загрузил, хотя я в пакете указал, что сектор не 64, а 1.
Тогда я в программе dmde-free-2.2.2-win32-gui создал раздел и у меня добавилась информация о разделе в первом секторе.
Тогда биус загрузил все как надо.А раздел могу создавать не с 63 а с какого захочю сектора.
Тогда у меня будут эти сектора для моих ресурсов, а раздел будет чист. и читать я теперь сектора буду уже наконец таки с первого, и загрузчик будет один.
А при доработки кода менять буду второй сектор, первый дорабатывать уже не надо он только читает 10 секторов(с запасом) и прыгает на прочитаное, поэтому не затру разметку.
Да, по нескольким причинам будет лучше, если на флешке будет присутствовать раздел FAT. Ты используешь вариант с собственным MBR-загрузчиком, с помощью которого загружаешь дополнительный загрузчик (а можно сказать, что догружаешь MBR-загрузчик) достаточного размера для того чтобы с его помощью частично или полностью, однократно или многократно перезагружать данные в реальном режиме или в перспективе загружать данные в том числе и в дополнительную память. Т.е. получаешь такую структуру флешки (для большей точности я буду придерживаться разметки, которую тебе предложил):
1) MBR с твоим MBR-загрузчиком (размером 440 байт) и описателем раздела FAT;
2) первая часть резервной области (допустим, размером 31 сектор) - это твой дополнительный загрузчик, который последовательно загружается в память твоим MBR-загрузчиком;
3) вторая часть резервной области (допустим, размером 10 мб) - это твои данные/код, которые могут частично или полностью, однократно или многократно перезагружаться, загружаться в дополнительную память и т.п. при помощи дополнительного загрузчика;
4) раздел FAT, который ты не трогаешь программно, а используешь традиционным способом, т.е. для хранения файлов.

Цитата:
Но вот с чем мучаюсь, клава читается в зашишеном режиме у меня в цыкле, ни какой многозадачности здесь быть не может, да и вообше хочется воткнуть адрес функции на вектор, но комп перезагружается.
Тебе уже говорили, что нужно изучать работу процессора в защищенном режиме. Думаю, пока единственным реалистичным вариантом будет являться использование нереального режима.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 26 ноя 2011, 23:26 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
Тебе уже говорили, что нужно изучать работу процессора в защищенном режиме. Думаю, пока единственным реалистичным вариантом будет являться использование нереального режима.

Он по моему и использует нереальный режим, но называет его то длинным то защищенным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 08:01 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Ну может подскажите с апоратными прерываниями какимнибудь кодом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 10:18 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
См. переключение в нереальный режим, открытие адресной линии/шлюза A20.

Для нереального режима будет лучше, если после перехвата прерывания ты будешь сначала вызывать оригинальный обработчик, а потом выполнять собственную обработку.
Код:
  push ds
  push ax
  xor ax,ax ; mov ax,dataseg
  mov ds,ax
  pushf
  call [oldhandlerptr]
  ...
  pop ax
  pop ds
  iret


Для таймера можно использовать обработчик пользовательского прерывания по таймеру BIOS 1Ch. Для клавиатуры можно читать флаги состояния клавиатуры и клавиатурную очередь BIOS (как внутри собственного обработчика, так и за его пределами). Для мыши можно сэмулировать окружение и выполнить загрузку какого-нибудь минидрайвера под DOS, после чего использовать DOS-интерфейс для работы с мышью, включая установку и использование пользовательского обработчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 12:31 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Станислав писал(а):
В чем ошибка

При ожидании нажатия клавиш программа должна находиться в своём цикле, а у тебя она сразу идёт на key. Лучше так:
mov ax, key ; это смещение на процедуру
mov [0x24], ax
mov [0x26], cs

sti
loop:
hlt ;ожидание прерывания
jmp loop

key:

in al, 60h ;скан-код нажатия получаем из порта 60
вызов функции если кнопка подойдет
iret


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 15:01 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Himik писал(а):
При ожидании нажатия клавиш программа должна находиться в своём цикле, а у тебя она сразу идёт на key.

зачем цикл? Я же адрес своей ф-и key записываю по адресу 0:24 в первое прерывание(клавиатуры)
разве она не должна вызываться по нажатию кнопки без цикла

У мея зашишеный режим, перехожу в него так
use16
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
cli
lgdt [gdtr]
mov eax, cr0
or al,0x1
mov cr0,eax
jmp 0x10: PM
use32
PM:
mov ax,0x8
mov ds,ax
mov es,ax
mov ss,ax

А потом уже хочю чтобы ф-я key вызывалась по нажатию без циклов
Я не в реальном режиме, не в нереальном и нет в длинном, что одно и тоже, а в зашишённом


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 15:43 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Станислав писал(а):
разве она не должна вызываться по нажатию кнопки без цикла

Вот именно, что только по нажатию кнопки, а у тебя переход происходит в неё сразу, ещё до нажатия кнопки. Этого делать нельзя. На самом деле, вместо цикла, программа может выполнять какую-нибудь работу, например что-то рисовать. Код программы и код прерывания выполняются как бы параллельно.

Раз защищённый режим, то смотри моё сообщение выше. Таблица прерываний реального режима в защищённом режиме не работает, так что прописывать в неё адреса бесполезно.

PS: Защищённый пишется через Щ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 18:09 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Ну да, я опять все перепутал. В защищёном нету прирываний вообше.
У меня так клавиатура сейчас
..wait:
in al, 64h ;считываем состояние
test al, 1h ;если 1 то нажата клавиша
jz ..wait

in al, 60h ;скан-код нажатия получаем из порта 60

cmp al, 05h ;скан-код
je fin
cmp al, 0bh ;скан-код
je one

jmp ..wait

fin:
команда
jmp ..wait

tow:
команда
jmp ..wait


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка с флешки
СообщениеДобавлено: 27 ноя 2011, 20:51 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В защищённом есть прерывания, только через другую таблицу - IDT.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 129 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 13  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 130


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB