На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 41 42 [43] 44 45 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Цитата zakharo @
    решили перепереть всю систему под 32-битный расширитель DOS32A

    :huh: А что, нельзя было? :blink: Как же ты вообще тогда с регистрами EHCI работал? Ну если уж по каким-то соображениям нельзя было использовать чужие расширители, то почему тогда нельзя было через тот же унреал моде работать или свой расширитель написать?
      Нельзя было. Я ж говорил - там условия сертификации жесткие. Да и вообще вся система была написана очень давно, никто радикально ее менять не хотел. Очень многое было завязано на real mode - были стандартные драйверы для сетевух и все такое. Памяти, конечно, катастрофически не хватало. Изгалялись, как могли. Код был оверлейный, а для данных использовали странички EMS. В общем, для 32-битных сегментов надо было переписывать почти все, включая драйверы сетевух. И unreal как-то тоже не очень влезал туда.
      А с регистрами EHCI и OHCI я работал через int 15 AX=87h (http://www.ctyme.com/intr/rb-1527.htm ). Копирование блока памяти. В MS-DOS оно так ничего, более-менее быстро отрабатывалось, а вот во FreeDOS - на порядок медленнее. Правда, свой менеджер памяти у нас все же был, и он это прерывание отрабатывал нормально. Но я за скоростью особо не гнался - у нас не очень большие объемы для хранения на флешках..
      Сообщение отредактировано: zakharo -
        Да в 32 битной системе теперь вам по удачнее будет, тем более, что тум он и нужет, т.к. в 16ричной средствами биоса можно с флешки читать.
        Я не в курсе, там анреал или защищёнка. А прерываниями будете от устроства пользоваться?
          Цитата zakharo @
          я работал через int 15 AX=87h

          Честно говоря не знал, что через него можно рабоать с MMIO.
          Цитата StasNewOs @
          Я не в курсе, там анреал или защищёнка.

          Там PM32 + V86, как и всех других подобных расширителлей.
          Цитата StasNewOs @
          А прерываниями будете от устроства пользоваться?

          Я думаю, что он и до этого пользовался...
          Сообщение отредактировано: shm -
            Цитата StasNewOs @
            т.к. в 16ричной средствами биоса можно с флешки читать.

            Это если с этой флешкой загрузиться. А мне надо было по ходу дела менять - то флешки (разные), то сидюки, то картридеры. А тут недавно еще сканеры 2D штрих-кодов понадобились. И кое-какие наши собственные устройства - индикаторы с кнопками и т.д.

            Прерываниями от USB я раньше не пользовался - все транзакции проверял по биту ACTIVE в TD (qTD) с таймаутом. Сейчас, наверное, буду.
              Цитата zakharo @
              Прерываниями от USB я раньше не пользовался

              Ты же вроде вроде где-то писал, что у тебя поддерживается "горячее подключение", или уже с кем-то путаю... :unsure: Хотя конечно можно и по таймеру статусные регистры проверять.
                Ну, как горячее.. Все идет примерно так: система постоянно занимается своими делами, а именно, маршрутизирует пакеты. Когда оператор выбирает в меню пункт "файлы", я делаю опрос портов и инициализацию устройств. И когда открывается список дисков для выбора, в нем помимо системных дисков A:, C: и т.д. появляются USB#1, USB#2... То есть обнаружение и инициализация устройств просто по команде. Есть еще вариант применения - чисто технологическая утилита вроде Нортон Коммандера - там правая панель показывает содержимое текущей ДОСовой директории, а в левой по Alt-F1 предлагается выбрать устройство USB. Опять инициализация по команде. И еще один вариант - там под Turbo Vision в функции idle() идет постоянный опрос портов с проверкой битов изменения статуса, и при изменении статуса делается инициализация и добавление устройства, ну или удаление отключенного устройства из списка.
                Сообщение отредактировано: zakharo -
                  В 32битной сегменты становятся селекторами, а в защищёнке ещё и таблица прерываний добавляется, а в APICе ещё и номер прерывания для PCI переводить нужно, у вас какой вариант?
                  Кстати я пользуюсь int 15 AX=87h для копирования с флешки в верхнюю память в загрузчике, но всегда думал, что для неё доступны не все 4 Гига.
                  Адрес куда копировать там 24битный.
                  Сообщение отредактировано: StasNewOs -
                    Цитата 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, ну и сам так же пишу) и старший байт адреса.
                    Сообщение отредактировано: zakharo -
                      Привет, уважаемые форумчане! У меня небольшой вопрос по теме: есть у меня диагностический кабель для авто - OBD II->USB (внутри его, наверное, стоит микросхема COM->USB), при подключении к компьютеру ставятся драйвера и присваивается виртуальный com-порт, по windows с программой (vag-com) работает нормально. Но вот появилась необходимость воспользоваться программой, для диагностики авто, которая есть только для DOS. Пробовал ставить различные эмуляторы DOS (DOSBo и т.п.) но программа не работает с этим кабелем. Можно ли как-то заставить работать этот кабель (OBD II->USB) корректно в MS-DOS. Большое спасибо.
                        Я создал форум для публикации живых статей, которые можно всегда изменять и добавлять, и их обсуждения. На форуме пишу статью для EHCI (просьба проверить и подправить если не верно написал), если есть желание писать свои статьи, то буду рад их появлению. asmcode.ru
                        Форум создал недавно и статей ещё мало, но хочу сделать большой обзор архитектур, контроллеров, ..., все темы ОС, ..., простыми словами(как говориться) и с примерами на asm.
                        Сообщение отредактировано: StasNewOs -
                          Добрый день. Пытаюсь поработать с UHCI.
                          Нахожу хост-контроллер на шине PCI.
                          Читай BAR из конфигурационного пространства PCI и получаю F080.
                          В спецификации нашел список операционных регистров (как я понял это BAR+offset), но при чтении из любого регистра получаю FFFF.
                          К примеру читаю HcControl register
                          ExpandedWrap disabled
                                    mov dx,[OHCI_bar]
                                    add dx,04h
                                    in ax,dx

                          Может кто подсказать где в этом алгоритме действий закралась ошибка?

                          Добавлено
                          Опечатался, работаю с OHCI
                            С OHCI не так работают. BAR для OHCI - это не адрес порта. OHCI вообще не работает через порты. Он свои регистры отображает в память. Соответственно, в BAR записано двойное слово (32 бита), которое является начальным адресом пространства регистров. Все дальнейшие операции с этими регистрами - это просто запись/чтение по соответствующим адресам памяти. Вот здесь и начинаются проблемы, поскольку это пространство располагается в очень дальних адресах памяти и из 16-битного ДОСового сегмента недоступно. Народ решает эти проблемы по-разному. Можно использовать unreal режим процессора, можно взять 32-битный расширитель типа DOS4GW или ему подобный, можно из 16-битного сегмента пользоваться функцией 87h прерывания 15h.
                              То есть если в BAR записано F0804000 то для того чтобы HcControl register нужно прочесть то что находится по адресу F0804004?
                                Цитата Modulator @
                                То есть если в BAR записано F0804000 то для того чтобы HcControl register нужно прочесть то что находится по адресу F0804004?

                                Да, именно так. F0804000 - это будет физический адрес начала пространства регистров. Дальше все регистры адресуются относительно него. И все операции с ними суть чтение/запись по физическим адресам.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 41 42 [43] 44 45 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1796 ]   [ 15 queries used ]   [ Generated: 20.07.25, 00:05 GMT ]