
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Страницы: (51) « Первая ... 20 21 [22] 23 24 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#316
,
|
|
|
Спасибо за ответы, покодю, надеюсь поможет.
![]() Жалко. Знал ведь что так просто не получится! |
Сообщ.
#317
,
|
|
|
Цитата lojkofob @ Спасибо за ответы, покодю, надеюсь поможет. ![]() Жалко. Знал ведь что так просто не получится! Все получится. Надо воспользоваться функцией 87h прерывания 15h Процедура на Ассемблере GLOBDESC LABEL BYTE zeroes db 16 dup (0) srcLen dw 4;0ffffh lowSrcAddr dw ? hiSrcAddr0 db ? srcAccess db 93h extSrcRights db 0fch hiSrcAddr1 db ? dstLen dw 4;0ffffh lowDstAddr dw ? hiDstAddr0 db ? dstAccess db 93h extDstRights db 0fch hiDstAddr1 db ? zeroes2 db 16 dup (0) GlobWrite PROC USES es si ds eax, SRCADDR:DWORD,DSTADDR:DWORD mov ax,cs mov ds,ax mov es,ax mov si,offset GLOBDESC mov eax,SRCADDR mov lowSrcAddr,ax shr eax,16 mov hiSrcAddr0,al mov hiSrcAddr1,ah mov eax,DSTADDR mov lowDstAddr,ax shr eax,16 mov hiDstAddr0,al mov hiDstAddr1,ah mov ax,8700h mov cx,2 int 15h ret GlobWrite ENDP |
Сообщ.
#318
,
|
|
|
Для тех, кто хочет работать в нереальном режиме, но не знает как в него войти, даю готовый объектный модуль... Там всего одна функция _unreal_init (если использовать из ЯВУ, то возможно придется объявлять без первого подчеркивания, т.е. просто unreal_init) которая устанавливает этот режим. После установки режима, доступ к физической можно получить через GS. Вот пример чтения двойного слова по адресу 0x12345678:
![]() ![]() mov EBX, 0x12345678 mov EAX, GS:[EBX]; для некоторых компиляторов [GS:EBX] ;в EAX нужное двойное слово Примерно такой код можно использовать в ассемблерных вставках, только не забывать указать линкеру, чтобы было разрешено использовать 32-битовые операции. Прикреплённый файл ![]() |
Сообщ.
#319
,
|
|
|
Всем привет!
Тема USB под ДОС занимает меня уже года 4 как.. В результате написал программку типа Norton Commander, которая работает с устройствами mass-storage (флешками, картридерами, флоппиками, CDROM и т.п.), поддерживает USB-хабы. Может качать файлы туда-сюда, создавать и удалять директории, просматривать 16-ричный дамп как файлов, так и носителя в целом, чистить (обнулять) и форматировать носители, ставить метки диска (LABEL), ну и всякие другие полезные вещи делать. В программе реализована работа с контроллерами UHCI, OHCI, EHCI; протоколы Bulk-Only и Control-Bulk-Intterrupt; системы команд SCSI-2, ATAPI, MMC-3. Она сама (без помощи ДОС) работает с файловыми системами FAT12/FAT16/FAT32/ISO9660. Есть простенькая поддержка USB-клавиатуры. Синхронными устройствами типа видео-аудио не занимался за ненадобностью. Так что ежели кому какая помощь в реализации нужна - милости просим, чем смогу - помогу. |
Сообщ.
#320
,
|
|
|
zakharo, я тоже подобное реализовывал, только в рамках драйверов для своей ОС, из ФС еще и писал драйвер NTFS, ну и дисковых операций чуточку побольше, правда поддержки OHCI у меня нет, ибо не имею такого контроллера.
|
Сообщ.
#321
,
|
|
|
shm, а информацией по NTFS не поделишься? Сильно хочу в эту прогу добавить поддержку NTFS, но как-то полного описания не нашел.
|
![]() |
Сообщ.
#322
,
|
|
zakharo, полного описания ты и не найдёшь. NTFS в общем-то не документирована. Но если погуглить, можно найти информацию, достаточную для создания read-only драйвера. Если не ошибаюсь, мыщъх как-то дал довольно подробную информацию. Разве что малопопулярные аттрибуты и индексы не рассмотрел. Погуглить можно по "Linux-NTFS Project".
|
Сообщ.
#323
,
|
|
|
Цитата Qraizer @ NTFS в общем-то не документирована Да, но не совсем. Существует некое подобие документации от Linux NTFS Project, хотя там конечно многое не освещено, но если человек уже с файловыми системами работал вплотную, то интуиция многое подскажет... Добавлено zakharo, я предлагаю не оффтопить, поэтому я кину тебе номер аси в ПМ, а там уже подгоню доки и может разъясню некоторые основополагающие вещи... |
Сообщ.
#324
,
|
|
|
Скажите, пожалуйста, как-то до этого не возникал вопрос, а вот тут...
Для использования GS в режиме 4Gb-ой адресации использовал всем небезызвестный пример из Кулакова. Ну использовал и использовал, в подробности не вдавался... а вот тут вдруг надо перед использованием понять, а надо ли это вообще, или уже можно и так использовать его. Как-то в последних BIOS уже он оказывается переведён в такой режим и повторная его инициализация приводит к проблемам. |
Сообщ.
#325
,
|
|
|
Инициализировать надо.
Это у тебя BIOS что-то умничает сильно. А какие там проблемы при повторном переходе? Кстати использовать можно не только GS, можно любой сегментный регистр настроить (я лимит у всех меняю, кроме CS). |
Сообщ.
#326
,
|
|
|
Цитата lsvmo @ Как-то в последних BIOS уже он оказывается переведён в такой режим и повторная его инициализация приводит к проблемам. При грамотной реализации драйвера нереального режима никаких проблем с его инициализацией быть не должно даже в том случае, если он уже установлен. Другое дело, что БИОС вполне может юзать тоже самое в своих прерываниях (как правило при работе с современными дисковыми контроллерами, где нужен доступ к MMIO), вот это как раз не учел Кулаков. Если не инициализировать в таком случае, то грабельки могут быть в том, что "биосовский" GS не обязательно может иметь базу = 0 и предел = 4Гб. Но в любом случае инициализировать надо, у меня на одной машине БИОС тоже GS в унреал вводит, но проблем из-за моего драйвера вроде не было. |
Сообщ.
#327
,
|
|
|
Цитата cppasm @ Это у тебя BIOS что-то умничает сильно. Да уж... Современный BIOS это нечто... пора бы уже Windows не систему выпускать над BIOS, а прошивать систему в BIOS и всё. ![]() Цитата cppasm @ А какие там проблемы при повторном переходе? Проблема одна - всё виснет ![]() Вот и стоит вопрос, можно ли как-то понять, инициализирован регистр или нет. Ибо в противном случае (если не инициализирован), то также будет зависание при обращении за пределы 1Мб |
![]() |
Сообщ.
#328
,
|
|
В голову приходит единственный способ: выйти в SMM, посмотреть в кэше сегментных регистров и использовать эту информацию для восстановления после своих изменений. Боюсь только, что это задача отнюдь не проще.
|
Сообщ.
#329
,
|
|
|
Цитата lsvmo @ Проблема одна - всё виснет При вызове прерывания BIOS? Если нет, то значит чего-то неправильно делаешь, может сама процедура Кулакова фейлит, у него там в книге ошибок хватает почти во всех примерах... Цитата lsvmo @ Вот и стоит вопрос, можно ли как-то понять, инициализирован регистр или нет. ![]() Добавлено Цитата lsvmo @ то также будет зависание при обращении за пределы 1Мб Не обрабатываемый "General protection fault" detected. ![]() Добавлено Цитата Qraizer @ выйти в SMM, посмотреть в кэше сегментных регистров и использовать эту информацию для восстановления после своих изменений Зачем? ![]() |
![]() |
Сообщ.
#330
,
|
|
Чтобы прочитать ту самую теневую часть.
|