
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (51) « Первая ... 41 42 [43] 44 45 ... 50 51 ( Перейти к последнему сообщению ) |
Сообщ.
#631
,
|
|
|
![]() ![]() |
Сообщ.
#632
,
|
|
|
Нельзя было. Я ж говорил - там условия сертификации жесткие. Да и вообще вся система была написана очень давно, никто радикально ее менять не хотел. Очень многое было завязано на real mode - были стандартные драйверы для сетевух и все такое. Памяти, конечно, катастрофически не хватало. Изгалялись, как могли. Код был оверлейный, а для данных использовали странички EMS. В общем, для 32-битных сегментов надо было переписывать почти все, включая драйверы сетевух. И unreal как-то тоже не очень влезал туда.
А с регистрами EHCI и OHCI я работал через int 15 AX=87h (http://www.ctyme.com/intr/rb-1527.htm ). Копирование блока памяти. В MS-DOS оно так ничего, более-менее быстро отрабатывалось, а вот во FreeDOS - на порядок медленнее. Правда, свой менеджер памяти у нас все же был, и он это прерывание отрабатывал нормально. Но я за скоростью особо не гнался - у нас не очень большие объемы для хранения на флешках.. |
Сообщ.
#633
,
|
|
|
Да в 32 битной системе теперь вам по удачнее будет, тем более, что тум он и нужет, т.к. в 16ричной средствами биоса можно с флешки читать.
Я не в курсе, там анреал или защищёнка. А прерываниями будете от устроства пользоваться? |
Сообщ.
#634
,
|
|
|
Цитата zakharo @ я работал через int 15 AX=87h Честно говоря не знал, что через него можно рабоать с MMIO. Цитата StasNewOs @ Я не в курсе, там анреал или защищёнка. Там PM32 + V86, как и всех других подобных расширителлей. Цитата StasNewOs @ А прерываниями будете от устроства пользоваться? Я думаю, что он и до этого пользовался... |
Сообщ.
#635
,
|
|
|
Цитата StasNewOs @ т.к. в 16ричной средствами биоса можно с флешки читать. Это если с этой флешкой загрузиться. А мне надо было по ходу дела менять - то флешки (разные), то сидюки, то картридеры. А тут недавно еще сканеры 2D штрих-кодов понадобились. И кое-какие наши собственные устройства - индикаторы с кнопками и т.д. Прерываниями от USB я раньше не пользовался - все транзакции проверял по биту ACTIVE в TD (qTD) с таймаутом. Сейчас, наверное, буду. |
Сообщ.
#636
,
|
|
|
Цитата zakharo @ Прерываниями от USB я раньше не пользовался Ты же вроде вроде где-то писал, что у тебя поддерживается "горячее подключение", или уже с кем-то путаю... ![]() |
Сообщ.
#637
,
|
|
|
Ну, как горячее.. Все идет примерно так: система постоянно занимается своими делами, а именно, маршрутизирует пакеты. Когда оператор выбирает в меню пункт "файлы", я делаю опрос портов и инициализацию устройств. И когда открывается список дисков для выбора, в нем помимо системных дисков A:, C: и т.д. появляются USB#1, USB#2... То есть обнаружение и инициализация устройств просто по команде. Есть еще вариант применения - чисто технологическая утилита вроде Нортон Коммандера - там правая панель показывает содержимое текущей ДОСовой директории, а в левой по Alt-F1 предлагается выбрать устройство USB. Опять инициализация по команде. И еще один вариант - там под Turbo Vision в функции idle() идет постоянный опрос портов с проверкой битов изменения статуса, и при изменении статуса делается инициализация и добавление устройства, ну или удаление отключенного устройства из списка.
|
Сообщ.
#638
,
|
|
|
В 32битной сегменты становятся селекторами, а в защищёнке ещё и таблица прерываний добавляется, а в APICе ещё и номер прерывания для PCI переводить нужно, у вас какой вариант?
Кстати я пользуюсь int 15 AX=87h для копирования с флешки в верхнюю память в загрузчике, но всегда думал, что для неё доступны не все 4 Гига. Адрес куда копировать там 24битный. |
Сообщ.
#639
,
|
|
|
Цитата StasNewOs @ Кстати я пользуюсь int 15 AX=87h для копирования с флешки в верхнюю память в загрузчике, но всегда думал, что для неё доступны не все 4 Гига. Адрес куда копировать там 24битный. Исправим мою ошибку. Не AX=87h, а AH=87h. Что касается 24-битного адреса, то это было только в каких-то ранних версиях. В более поздних - 4-й байт адреса дописывается отдельно. См, например, http://www.delorie.com/djgpp/doc/rbinter/it/99/4.html - по смещению 16h и 1eh пишутся 16-битные слова, содержащие байт расширенных прав доступа (не знаю, что это такое - я где-то увидел пример, в котором туда пишется 0fch, ну и сам так же пишу) и старший байт адреса. |
Сообщ.
#640
,
|
|
|
Привет, уважаемые форумчане! У меня небольшой вопрос по теме: есть у меня диагностический кабель для авто - OBD II->USB (внутри его, наверное, стоит микросхема COM->USB), при подключении к компьютеру ставятся драйвера и присваивается виртуальный com-порт, по windows с программой (vag-com) работает нормально. Но вот появилась необходимость воспользоваться программой, для диагностики авто, которая есть только для DOS. Пробовал ставить различные эмуляторы DOS (DOSBo и т.п.) но программа не работает с этим кабелем. Можно ли как-то заставить работать этот кабель (OBD II->USB) корректно в MS-DOS. Большое спасибо.
|
Сообщ.
#641
,
|
|
|
Я создал форум для публикации живых статей, которые можно всегда изменять и добавлять, и их обсуждения. На форуме пишу статью для EHCI (просьба проверить и подправить если не верно написал), если есть желание писать свои статьи, то буду рад их появлению. asmcode.ru
Форум создал недавно и статей ещё мало, но хочу сделать большой обзор архитектур, контроллеров, ..., все темы ОС, ..., простыми словами(как говориться) и с примерами на asm. |
Сообщ.
#642
,
|
|
|
Добрый день. Пытаюсь поработать с UHCI.
Нахожу хост-контроллер на шине PCI. Читай BAR из конфигурационного пространства PCI и получаю F080. В спецификации нашел список операционных регистров (как я понял это BAR+offset), но при чтении из любого регистра получаю FFFF. К примеру читаю HcControl register ![]() ![]() mov dx,[OHCI_bar] add dx,04h in ax,dx Может кто подсказать где в этом алгоритме действий закралась ошибка? Добавлено Опечатался, работаю с OHCI |
Сообщ.
#643
,
|
|
|
С OHCI не так работают. BAR для OHCI - это не адрес порта. OHCI вообще не работает через порты. Он свои регистры отображает в память. Соответственно, в BAR записано двойное слово (32 бита), которое является начальным адресом пространства регистров. Все дальнейшие операции с этими регистрами - это просто запись/чтение по соответствующим адресам памяти. Вот здесь и начинаются проблемы, поскольку это пространство располагается в очень дальних адресах памяти и из 16-битного ДОСового сегмента недоступно. Народ решает эти проблемы по-разному. Можно использовать unreal режим процессора, можно взять 32-битный расширитель типа DOS4GW или ему подобный, можно из 16-битного сегмента пользоваться функцией 87h прерывания 15h.
|
Сообщ.
#644
,
|
|
|
То есть если в BAR записано F0804000 то для того чтобы HcControl register нужно прочесть то что находится по адресу F0804004?
|
Сообщ.
#645
,
|
|
|
Цитата Modulator @ То есть если в BAR записано F0804000 то для того чтобы HcControl register нужно прочесть то что находится по адресу F0804004? Да, именно так. F0804000 - это будет физический адрес начала пространства регистров. Дальше все регистры адресуются относительно него. И все операции с ними суть чтение/запись по физическим адресам. |