Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... .. 12 13 14 15 16 17 | Печать |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 15:40 Сообщение отредактировано: 27 января 2018 19:12
Краткое изложение последующих 8-ми страниц, включая предысторию в вольном толковании Начиная с 286-х IBM PC в составе материнской платы появился "контроллер клавиатуры" (сокращенно KBC - KeyBoard Controller). Это большая 40-ножечная микросхема, похожая на Bios, только побольше. Первоначально в качестве KBC использовался контроллер общего назначения Intel 8042 со специальной прошивкой. Позднее, когда KBC стали применяться массово, Intel стала производить 8042 уже с прошитой программой. Появилось множество уже прошитых клонов. Самые известные - Amikey, LT38C41, W83C42, Jetkey. Более подробный список на rom.by Основной функцией KBC является преобразование последовательного асинхронного интерфейса АТ клавиатуры в параллельный. Т.е. информация из клавиатуры приходит побитно по двум линиям - Data (данные) и Clock (тактирование), а процессору "предстаёт" побайтно. Причём уже в виде ASCII кодов, в порте 60h. Помимо этого, KBC "нагружен" и другими функциями. Самые важные из которых - программный Reset и управление Gate A20. Также к KBC подключены разные джамперы, которыми задаётся работа компьютера на этапе загрузки BIOS - "Color/Mono", "Turbo", "Keylock", "Объём RAM". В компьютерах IBM PS/2 к тому же самому KBC подключили "PS/2 мышь". Это потребовало смены прошивки и схемы подключения. Физически протокол PS/2 никак не отличается от АТ. Это тот же самый асинхронный последовательный интерфейс с двумя линиями - Data и Clock (плюс питание +5В и "земля"). Информация, передаваемая от мыши, конечно отличается. Ниже схемы включения контроллера клавиатуры для АТ и PS/2 режима: Что характерно, остальной части компьютера абсолютно всё равно, в каком режиме работает KBC. Взаимодействие с клавиатурой не меняется никак. Это всё тот же порт 60h для данных и порт 64h для управления и получения информации о состоянии KBC. Естественно, PS/2 мышь будет работать только в режиме PS/2 KBC. Контроллеры клавиатуры с поддержкой PS/2 режима (это Amikey-2, Holtek HT6542B, VIA VT82C42N и др.) обратно совместимы с АТ контроллерами. И сами определяют режим работы (АТ или PS/2) по схеме включения. Идея переделки состоит в том, чтобы изменить схему включения KBC с АТ на PS/2. При необходимости заменить сам контроллер, если установленный не поддерживает режим PS/2. Схема переделки: Синим цветом - то, что исходно уже есть на материнской плате. X1.1 и X1.2 - панелька под контроллер клавиатуры. Старый контроллер вытаскиваем. Вставляем новый с обвязкой. Сажаем на 36-ю ногу IRQ12 перемычкой на материнской плате. Черным цветом - то, что добавляем. Вместо инверторов 7406 используются обычные smd транзисторы типа 3904. В железе, на текущий момент: Как видно, помимо установки нового KBC и обвязки нужно соединить проводом ноги 36 KBC и D5 разъёма ISA. Это сигнал аппаратного прерывания Irq12, которым KBC сигнализирует процессору о приходе данных от мыши. Помимо аппаратной переделки необходима программная поддержка со стороны BIOS. ЧСХ поддержка PS/2 мыши существует во всех BIOS с древних времён (появления IBM PS/2), но отключена. Для Award BIOS существует отличная программа Modbin, которая понимает даже старые версии Bios. На 486-й с Award Bios модификация успешно проделана, поддержка PS/2 мыши в Bios включена, PS/2 мышь работает.))) Для редактирования старых AMI Bios существует туева куча версий программы AmiBCP. Причем под каждую версию биоса своя версия AmiBCP и никто эти версии в глаза не видел. Список версий. Поэтому возник вопрос, как добавить программную поддержку PS/2 мыши не трогая биос. Мною написан драйвер PS2SUPP rev.1.0.2, который эту поддержку добавляет. 26.01.18 добавил версию 1.0.2c, которая проверяет 3-й бит в первом байте пакета от мыши (он всегда должен быть =1), и если он не равен 1, сбрасывает мышь. Он немного больше по размерам, чем предыдущий. В памяти занимает на 16 байт больше. Достаточно запустить этот драйвер перед запуском драйвера мыши. Работает в DOS и версиях Windows - надстройках над DOS (Win 3xx, Win9x). Удобнее всего поставить запуск драйвера поддержки PS/2 мыши в autoexec.bat. К сожалению, не работает в Win NT и других осях, которые не базируются на DOS. Пока всё. Сейчас занимаюсь улучшением аппаратной части. ;============================================================ ; Начало исходного сообщения ;============================================================ Интерфейс PS/2 нужен, чтобы можно было подключать оптическую мышь. Коллеги, есть какие-то соображения по этому поводу? Можно ли это сделать? Имеет ли смысл? Как лучше делать? Может кто-то уже делал такое? Вообще, стоит ли этим заниматься? |
пользователь
Newbie
Откуда: Йошкар-Ола Всего сообщений: 56 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 4 окт. 2017 |
Поисковик выдал: http://www.phantom.sannata.ru/...mp;t=11271 После беглого ознакомления - либо конвертер протокола, либо ISA плата. |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 16:14
Видел на картинках плату в разъём клавиатурного BIOS, в который вставлялся собственно клавный BIOS и была гребенка для PS2 мыши |
Сейчас на форуме |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 16:18 Сообщение отредактировано: 15 октября 2017 16:19
пользователь написал: Да, видел эту тему. ISA плата - только для Bus Mouse. https://en.wikipedia.org/wiki/Bus_mouse Её сейчас сложнее найти, чем шариковую COM. Конвертер протокола PS/2 в COM даже в отдельной теме обсуждался. Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват. Хочется, так сказать, нативно. IdeaFix написал: Где? Видел на картинках плату в разъём клавиатурного BIOS, в который вставлялся собственно клавный BIOS и была гребенка для PS2 мыши |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 16:32
Rio444 Вот сейчас гуглю, не могу нагуглить.... т.е. это была платка небольшая, котоаря втыкалась в ДИП40 вместо клавного биоса, а на ней самой был клавный биос (тоже в дип40) и что-то еще из логики, ну и 5пин гребенка под PS/2. |
Сейчас на форуме |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 16:34 |
Сейчас на форуме |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
IdeaFix написал: 7405 нужна была, либо 7407, в зависимости от прошивки. и что-то еще из логики |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 16:41
Если кто-то освоит выпуск таких штук даже на макетке - стал бы постоянным покупателем Но я так понял там есть какие-то блокирующие баги, то ли на isa надо кидать хвост какой-то, то ли еще что-то, но повторюсь, читал по диагонали. |
Сейчас на форуме |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Прерывание от ps/2-мышки на irq12 протаскивать надо. В 386 только клавиатурное разведено до 8042. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 17:05 Сообщение отредактировано: 15 октября 2017 17:08
IdeaFix, спасибо! То, что нужно. Бегло просмотрел. Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал. Anonymous написал: Это не сложно. IRQ12 сидит на ноге D5 разъема ISA16. Прерывание от ps/2-мышки на irq12 протаскивать надо. IdeaFix написал: В варианте на картинке получается довольно толстый "бутерброд". На моей материнке, для которой всё затеял, прямо над контроллером 8042 сидят VLB карты. Зазор миллиметров 5, не больше. Кстати, сейчас посмотрел другую плату, там контроллер под ISA платами. Их можно в принципе не ставить. Если кто-то освоит выпуск таких штук даже на макетке - стал бы постоянным покупателем Не на всех материнках контроллер стоит в панельке. Его придется выпаивать и запаивать панельку. Сколько штук Вам было бы интересно и порядок цены? Anonymous написал: Истина где-то рядом(с) 7406. IdeaFix написал:7405 нужна была, либо 7407, в зависимости от прошивки. и что-то еще из логики |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 17:27
Rio444 Зависит от цены и совместимости.... мне было бы интересно полдюжины если оно было бы совместимо с моими платами и не сильно бы урезало возможности системы (в плане ISA слотов и пр). А насчет ISA и того что DIP40 будет мешать платам, у меня есть такие платы, которым DIP40 штатно стоящий на плате мешает В основном это мультикарты, у которых ком дб25 и гейм порт на плате - широко... На последней странице указанной мной темы есть картинка сборки контроллера на панельке. Т.е. если панельки ранее не было - высотка будет так или иначе штатной (панелька+микросхема) |
Сейчас на форуме |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 17:31 Сообщение отредактировано: 15 октября 2017 17:36
IdeaFix, а не думали сами такое собрать? Или поучаствовать в разработке? Схему я сделаю, вопрос в программной части. IdeaFix написал: Вообще, там две панельки. Панелька, которая на картинке - вторая, которая вставляется в панельку на материнской плате (которой могло исходно не быть). На последней странице указанной мной темы есть картинка сборки контроллера на панельке. Т.е. если панельки ранее не было - высотка будет так или иначе штатной (панелька+микросхема) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Идейно правильной я считаю была бы разработка ISA платы специально под это дело. Даже стало жаль что мышь на машинах такого класса мне не нужна абсолютно Да и на основной машине мышь только для интернета... |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088, мне кажется будет гораздо сложнее и точно в разы дороже. По сути придется дублировать 8042 со всеми сигналами. Без Вашего участия, точно не осилю |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 17:49
Rio444 я могу понять когда не искушенные в ПК посетители моего бложика, получившие помощь по вопросам 771 мода начинают задавать сложные вопросы, на которые у меня нет ответов, но тут-то уважаемое комьюнити должно однозначно оценивать плинтусный уровень моих знаний Поучаствовать я могу только материально. К тому же, материальные ресурсы хоть ограничены, но есть, а вот временных нет По поводу конструктива - можно же и не выпаивать ничего - напаять соплей с тыльной стороны платы или вовсе сделать "накладку" с тыльной стороны, как иной раз и именитые производители делали в случае исправления багов разводки. Тут конструктив имхо не так важен - руки с конструктивом развязаны совершенно, а вот потенциальный мод биоса и задействование одновременно дип40 и иса и куча других проблем... кстати, авард на 486pci коллеги вроде победили. i8088 Под дип40 есть почти готовый проект которым можно вдохновляться, под PCI есть даже китайские адаптеры, которыми можно вдохновляться, или просто их купить, а под ISA придётся что-то изобретать полностью самостоятельно. Уровень у меня, как уже говорил выше, плинтусный, но мне задача с ISA платой кажется куда более комплексной, но конечно и более изящной. |
Сейчас на форуме |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Rio444 написал: Все полноценные ОС используют после загрузки свой драйвер, биос после запуска ядра идёт отдыхать. Гляньте мою древнюю тему про оживление безбиосной промплатки. Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал. Rio444 написал: Есть же планарные 8742... В варианте на картинке получается довольно толстый "бутерброд". Rio444 написал: Это высоковольтовая, 30в (оно зачем надо?), полный аналог 7405 по выводам. 7407 - без инверсии, потому и написал о зависомости от версии прошивки. Истина где-то рядом(с) 7406. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
IdeaFix написал: Скорее всего не получится. Там смысл в замене контроллера без поддержки PS/2 на контролер с поддержкой. По поводу конструктива - можно же и не выпаивать ничего - напаять соплей с тыльной стороны платы или вовсе сделать "накладку" с тыльной стороны И часть сигналов в принципе по-другому идёт. То есть, надо будет не только добавлять, но и перерезать какие-то дорожки. |
IdeaFix |
NEW! Сообщение отправлено: 15 октября 2017 18:04
Ну, я далее просто зритель и/или покупатель... по делу ничего сказать не могу |
Сейчас на форуме |
Anonymous
Advanced Member
Откуда: Москва(Россия) Всего сообщений: 2537 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 22 нояб. 2011 |
Rio444 написал: А в этом и смысл, мышка ps/2 и клавиатура работают через одни регистры, у них только прерывание различается. Там смысл в замене контроллера без поддержки PS/2 на контролер с поддержкой. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Предварительные соображения по поводу ISA платы - легче использовать готовый прошитый 8042, но надо как-то отключить клавиатурную часть, иначе потребуется сделать модернизированную прошивку только для мыши. Ну и еще понадобятся дешифраторы и буфера, здесь можно подсмотреть в доступных схемах не-чипсетных AT плат. По поводу IRQ12 - никакого обработчика писать не требуется (этим занимается PS2 mouse driver, а BIOS я думаю ставит просто IRET). BIOS просто запрещает выделение этого прерывания для мыши (или всю mouse part), тк PS2 mouse необязательное устройство. Поскольку это может быть чипсетозависимым, OS этим как правило не занимается. Правильнее всего сделать option ROM (BIOS расширения), который выполнит эту работу. Но можно обойтись программой или драйвером, которая разблокирует mouse part в контроллере клавиатуры. Для DOS принципиальных проблем не вижу (на первый взгляд, по крайней мере). Здесь можно попробовать помочь, только datasheet на старый PS2+mouse controller надо поискать. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Anonymous написал: 7406 - рекомендации производителей. В типовых схемах именно она. Хотя, наверное, можно поставить и 7405. Rio444 написал:Это высоковольтовая, 30в (оно зачем надо?), полный аналог 7405 по выводам. 7407 - без инверсии, потому и написал о зависомости от версии прошивки. Истина где-то рядом(с) 7406. Anonymous написал: Возможно, начиная с Windows NT. Win9x использует прерывания Bios. Rio444 написал:Все полноценные ОС используют после загрузки свой драйвер, биос после запуска ядра идёт отдыхать. Гляньте мою древнюю тему про оживление безбиосной промплатки. Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 20:09 Сообщение отредактировано: 15 октября 2017 20:15
i8088 написал: Всё не так просто. При "срабатывании" IRQ12, через прерывание Bios вызывается обработчик, которой уже вызывает драйвер мыши. По поводу IRQ12 - никакого обработчика писать не требуется (этим занимается PS2 mousedriver, а BIOS я думаю ставит просто IRET). Для иниализации этого обработчика вызывается другое прерывание, через которое назначается адрес драйвера мыши. i8088 написал: Даташиты: Здесь можно попробовать помочь, только datasheet на старый PS2+mouse controller надо поискать.HT6542B, VT82C42, Intel 87C42. Если мало, ещё найду. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Контроллер определяет, в каком режиме он работает (АТ или PS/2) по схеме включения. Для остальной части компьютера режим работы контроллера значения не имеет. Разве что, в режиме АТ невозможна работа мыши PS/2. Клавиатура работает одинаково в обоих режимах. Подключение контроллера в режиме АТ (из даташита на VT82C42): В режиме PS/2: |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Спасибо! Всё не так просто. При "срабатывании" IRQ12, через прерывание Bios вызывается обработчик, которой уже вызывает драйвер мыши. Нашел в исходниках Award, что Вы имели ввиду. ifndef\tNO_PS2_MOUSE_SUPPORT ;***************************************************************************** ; Procedure Name:\tsubf_07 ;\tDevice driver far call initialization ;\tSet INT74 far call address with ES:BX and set far call flag (27:b.7) ;\tAssume always no error occur ; Saves: ; Inputs:\tbp_seg (ES)\t= device driver routine segment ;\t\tbp_offset (BX)\t= device driver routine offset ; Output:\tnone ; Destroy:\tax ; Author:\tKen Chen ; Date: \t06/21/90 ; ; Rev\t| Name\t| Date\t\t| TPR#\t| Description ; ------+-------+---------------+-------+------------------------------------- ; 1.00\t| Ken\t|\t\t| NEW\t| Initial revision ; ;***************************************************************************** SUBF_07 \tPROC\tNEAR \t\tmov\tax,bp_seg \t\tmov\tword ptr ds:fcsegment,ax \t\tmov\tax,bp_offset \t\tmov\tword ptr ds:fcoffset,ax \t\tor\tbyte ptr ds:pdflg_2,ddfcflg \t\tjmp\tsucc_00 \t\t\t; successful SUBF_07 \tENDP ;***************************************************************************** ; Procedure Name:\twait_ack ;\tlong loop to get the mouse response for system's command ; Saves: ; Inputs:\tnone ; Output:\tbp_flag : cf = 0 : no error ;\t\t\t cf = 1 : error ;\t\tbp_errcode (AH) = 00 : no error ;\t\t\t\t= 03 : interface error ;\t\t\t\t= 04 : resend ;\t\tzf = 1 : acknowledge received ;\t\tzf = 0 : error occur ; Destroy:\tax ; Author:\tKen Chen ; Date: \t06/21/90 ; ; Rev\t| Name\t| Date\t\t| TPR#\t| Description ; ------+-------+---------------+-------+------------------------------------- ; 1.00\t| Ken\t| 06/21/90\t| NEW\t| Initial revision ; ;***************************************************************************** WAIT_ACK\tPROC\tNEAR \t\tpush\tcx wait_ack1: \t\txor\tcx,cx wait_oaf_loop: \t\tpush\tcx \t\textrn\tout_aux_full:near \t\tcall\tout_aux_full \t\tpop\tcx \t\tjnz\tshort get_ack \t\tloop\tshort wait_oaf_loop \t\tjmp\tshort wa_error_03\t; time out get_ack: \t\tin\tal,data8042 \t\tcmp\tal,ackcode\t\t; check acknowledge code \t\tje\tshort wa_suc chk_rsnd_code: \t\tcmp\tal,rscode\t\t; check resend code \t\tjne\tshort chk_error_code \t\tmov\tbp_errcode,04 \t\tjmp\tshort wa_error chk_error_code: wa_error_03: \t\tmov\tbp_errcode,03 wa_error: \t\tand\tbyte ptr ds:pdflg_1,0f0h \t\tor\tbp_flag,01\t\t; set carry flag \t\tjmp\tshort wa_ret wa_suc: \t\tmov\tbp_errcode,00 \t\tand\tbp_flag,0fffeh\t\t; clear carry flag wa_ret: \t\tpop\tcx \t\tor\tbp_errcode,0\t\t; affect ZF \t\tret WAIT_ACK\tENDP ;***************************************************************************** ; Procedure Name:\tget_data ;\treceive data from mouse if Auxiliary device Output Buffer Full ; Saves: ; Inputs:\tnone ; Output:\tzf = 1 : no data received ;\t\tzf = 0 : successful ;\t\t\tal = data byte received ; Destroy:\tah ; Author:\tKen Chen ; Date: \t06/21/90 ; ; Rev\t| Name\t| Date\t\t| TPR#\t| Description ; ------+-------+---------------+-------+------------------------------------- ; 1.00\t| Ken\t| 06/21/90\t| NEW\t| Initial revision ; ;***************************************************************************** GET_DATA\tPROC\tNEAR \t\tpush\tcx \t\txor\tcx,cx gd_loop: \t\tpush\tcx \t\tcall\tout_aux_full\t\t; check AOBF \t\tpop\tcx \t\tjnz\tshort receive_data \t\tloop\tshort gd_loop \t\tjmp\tshort gd_ret receive_data: \t\tin\tal,data8042 gd_ret: \t\tpop\tcx \t\tret GET_DATA\tENDP endif\t;NO_PS2_MOUSE_SUPPORT Нужно еще размаскировать вход 8259 и поставить новый вектор (mouse.asm). datasheet-ы посмотрю. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 15 октября 2017 20:45 Сообщение отредактировано: 15 октября 2017 20:48
i8088, круто! Откуда исходники? Посоветуйте хорошую книгу по программированию на ассемблере. В частности, чтобы было рассказано, как писать TSR программы. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Я их нашел в свободном доступе уже не помню где Вот ссылки https://yadi.sk/d/_Z5f_1AO3Nmihf https://yadi.sk/d/GYol8Y5_3NmiXg Книга по программированию мне больше всего нравится Джордейна Справочник Программиста Персональных компьютеров типа IBM PC XT и AT И Нортона - Персональный Компьютер фирмы IBM и Операционная система MS-DOS (в ней правда про TSR мало). Книга Лео Скенлона Програмирование на языке Ассемблера (там про TSR тоже правда нет) Книги мои бумажные, но найти в сети я думаю можно PS. Мышиный вопрос меня озадачил, не думал что такие сложности там. Как говорится - век живи век учись, а помирать все равно дураком |
Mihail1810
Advanced Member
Откуда: Екатеринбург Всего сообщений: 1565 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 дек. 2014 |
Господа, если все так сложно, не проще сделать com-ps2 конвертер и не париться? Вот тут все есть - http://www.vogons.org/viewtopic.php?f=46&t=42862 |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Mihail1810 написал: http://www.vogons.org/viewtopic.php?f=46&t=42862Это даже здесь есть Господа, если все так сложно, не проще сделать com-ps2 конвертер и не париться? Вот тут все есть - http://www.phantom.sannata.ru/...amp;st=all Но, как писал выше Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват.Хочется, так сказать, нативно. |
Mihail1810
Advanced Member
Откуда: Екатеринбург Всего сообщений: 1565 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 дек. 2014 |
Звиняйте. Диагональное чтение подвело. Ну а есть же уже отовые платы isa на ps/2 mouse, они работают как то или нет на старых системах? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Да, там можно по отдельности отключать прерывание IRQ12 и саму mouse part of controller . Для проверки аппаратной части устройства можно использовать FreeBSD. |
Bobo
Advanced Member
Откуда: СПб Всего сообщений: 3628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 авг. 2007 |
Mihail1810 написал: боюсь что нет Ну а есть же уже отовые платы isa на ps/2 mouse на pci есть |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 10:49 Сообщение отредактировано: 16 октября 2017 10:55
i8088 написал: Это как? Можно поподробнее? Да, там можно по отдельности отключать прерывание IRQ12 и саму i8088 написал: Фряха биос полностью игнорирует? Для проверки аппаратной части устройства Что можно поставить на iDX2-66(@80), память 8Мб? Могу расширить до 16 или 32Мб. Bobo написал: Для ISA есть только Bus Mouse. Внешне похожа, но совсем не то. Сейчас встречаются очень редко и в основном шариковые. Mihail1810 написал:боюсь что нет Ну а есть же уже отовые платы isa на ps/2 mouse На PCI есть, но для рассматриваемых платформ это не актуально. 486-ю материнку с PCI можно найти и с поддержкой PS/2 мыши. На 386 и 486-х VLB это только брендовые материнки для горизонтального корпуса с райзером. У меня есть даже 286-я такая материнка. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: NOTE: two bits in the command byte controls the operation of the aux port Это как? Можно поподробнее? (mouse port): the aux port disable bit (bit 5) and the aux port interrupt (IRQ 12) enable bit (bit 2) Rio444 написал: Не то чтобы полностью, но можно заставить игнорировать. Например, Фряха биос полностью игнорирует? цитата из psm.c версии 8.4 (с которой пишу) \t/* \t * The PnP BIOS and ACPI are supposed to assign an IRQ (12) \t * to the PS/2 mouse device node. But, some buggy PnP BIOS \t * declares the PS/2 mouse device node without an IRQ resource! \t * If this happens, we shall refer to device hints. \t * If we still don't find it there, use a hardcoded value... XXX \t */ Для 486 удобнее всего версия 4.11 - с одной стороны достаточно современная (и легкая в установке), с другой стороны вполне работает на 16MB RAM. И можно ставить даже на 386, хотя это неоптимально, но работает. Я правда никогда ранее не вдавался в работу мышей (ну Вы это уже поняли, но общие соображения таковы. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 14:37 Сообщение отредактировано: 16 октября 2017 14:38
i8088 написал: Спасибо! Покурю. Вот набросал схемку переделки. Синим цветом - то, что исходно уже есть на материнской плате. X1.1 и X1.2 - панелька под контроллер клавиатуры. Старый вытаскиваем. Вставляем новый с обвязкой. Сажаем на 36-ю ногу IRQ12 перемычкой на материнской плате. Черным цветом - то, что добавляем. Вроде не сложно получилось. Как считаете, взлетит? Особо вопрос по резисторам R1, R3, R5 в цепях баз транзисторов. Нужны ли они, или можно обойтись? Конкретно VT82C42N выходы, к которым подключены базы - TTL-совместимые. Что будет, если подключить базы без транзисторов? |
Bobo
Advanced Member
Откуда: СПб Всего сообщений: 3628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 16 авг. 2007 |
Rio444 написал: да - есть Microsoft, Logitec только штырьков там больше чем в PS/2, поэтому что их упоминать Для ISA есть только Bus Mouse. Внешне похожа, но совсем не то. Сейчас встречаются очень редко и в основном шариковые |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 15:03 Сообщение отредактировано: 16 октября 2017 15:10
Rio444 написал: Если выходы чисто TTL, да еще мощные - то резисторы обязательны. Для Особо вопрос по резисторам R1, R3, R5 в цепях баз транзисторов. Нужны ли они, или можно обойтись? Конкретно VT82C42N выходы, к которым подключены базы - TTL-совместимые. Что будет, если подключить базы без транзисторов? two-way port тоже не стоит исключать резистор, тк если он когда нибудь работает на ввод, то будет введен лог 0. А почему Вы использовали транзисторы, а не логические элементы? Просто не хватает места для корпуса инвентора с открытым коллектором, я правильно понял? были на плате изначально? Ошибок не нашел |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Да, это одна из главных причин. Просто не хватает места для Вторая - доступность 7406. Если в DIP исполнении их ещё можно найти, то в SOIC гораздо сложнее. Даже в чипе с дипом только на заказ. С ибея ждать долго. Да и нужна ли там ИС? Разве транзисторы не справятся? i8088 написал: Спасибо! Буду собирать. Ошибок не нашел |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 15:52 Сообщение отредактировано: 26 января 2018 6:51
Кстати, вот в этой теме, коллега hyperborean высказал весьма здравые мысли. hyperborean написал: Пункты с 1 по 3-й мне понятны. Собственно, в схеме выше это всё реализовано. Чисто теоретически можно (не проверял, только идея): А вот с 4-м пока толком не разобрался. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 16:17 Сообщение отредактировано: 16 октября 2017 17:09
Попробуйте, протестировать можно во FreeBSD (ему этот DOS севис реального режима до лампочки). Кстати, я подумал, мышь должна и в NT4 работать (2000 поставить на 486 трудно). Относительно включения mouse part в 8042 и размаскирования 8259 мне понятно, а вот взаимодействие IRQ12 -> INT74 -> драйвера ps2 mouse мне пока что не очень ясно. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: А NT 3.51? Она больше по возрасту подходит. Кстати, я подумал, мышь должна и в NT4 работать (2000 поставить на 486) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Попробовать можно. Ядро и идеология по идее не сильно отличается. Только - он поддерживает PS2 mouse (я не помню)? Я его ставил один раз очень давно... А NT 3.51? Она больше по возрасту подходит. |
ATauenis
Advanced Member
Откуда: Москва Всего сообщений: 2904 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 апр. 2015 |
i8088 написал: Поддерживает, без проблем. Только - он поддерживает PS2 mouse (я не помню)? Я его ставил один раз очень давно... |
hyperborean
Junior Member
Откуда: Санкт-Петербург, Великий Новгород Всего сообщений: 131 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2011 |
i8088 написал: INT33 - драйвер мыши для прикладного ПО, реализуется в TSR драйвере (условный mouse.com), но INT74 - обработчик прерываний контроллера - реализован в биос соответствующим драйвером, который предоставляет API INT15, а mouse.com использует либо RS232 для COM-мышей, либо API INT15 функция C2 для PS/2 мышей 8259 мне понятно, а вот взаимодействие IRQ12 -> INT74 -> драйвера ps2 mouse мне пока что не очень ясно. POINTING DEVICE BIOS INTERFACE ( http://www.ctyme.com/intr/int-15.htm ): Int 15/AX=C200h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - ENABLE/DISABLE Int 15/AX=C201h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - RESET Int 15/AX=C202h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET SAMPLING RATE Int 15/AX=C203h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET RESOLUTION Int 15/AX=C204h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - GET TYPE Int 15/AX=C205h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - INITIALIZE Int 15/AX=C206h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - EXTENDED COMMANDS Int 15/AX=C207h - SYSTEM - POINTING DEVICE BIOS INTERFACE (PS) - SET DEVICE HANDLER ADDR Int 15/AX=C208h - SYSTEM - POINTING DEVICE BIOS INTERFACE - WRITE TO POINTER PORT Int 15/AX=C209h - SYSTEM - POINTING DEVICE BIOS INTERFACE - READ FROM POINTER PORT По сути обычный драйвер мыши ставит свой калбэк через Int 15/AX=C207h, а биос драйвер в обработчике INT74 дергает этот калбэк (см ps2aux.inc строки 360-381 и 460-462) Необходимо загружать драйвер реализующий INT15 API, в виде TSR, в случае когда его нет в биосе. Это всё в теории конечно. Собственно такой драйвер и надо написать чтобы всё взлетело на 386. Можно вдохновляться вышеупомянутым ps2aux.inc Но, конечно, проблема физического размещения платы-расширения добавляет изрядную ложку дёгтя во всю затею. |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Rio444 написал: У меня есть такой блок-конвертор. Как проверить "разные форматы, разные носители, частота кадров, цветовой охват" ? Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват. |
Швейк
Advanced Member
Откуда: Подмосковье Всего сообщений: 482 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 21 окт. 2016 |
А в чём состоит сакральный смысл оптической мыши? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 19:50 Сообщение отредактировано: 16 октября 2017 19:53
Ekb написал: В разных программах (преимущественно в играх под DOS; в NC и Windows это менее заметно), путём: У меня есть такой блок-конвертор. Как проверить "разные форматы, разные носители, частота кадров, цветовой охват" ? 1) прямолинейно, медленно и плавно двигать мышью с разные стороны. Убедиться, что курсор движется по экрану также плавно, без "заеданий" и скачков, 2) резко начинать движение мышью, резко менять её направление движения, резко останавливать. Убедиться, что курсор на экране не отстаёт от мыши и не продолжает движение, когда она уже остановилась. При существующих и, в принцие возможных, алгоритмах преобразования кода PS/2 в COM в реальном времени, курсор мыши "хорошо себя ведет" или в первом случае, или во втором. Возможны "промежуточные" алгоритмы, когда и в первом и во втором случае курсор движется не идеально, но приемлемо. Реализаций я пока не встречал. Возможно, как-нибудь займусь сам. hyperborean написал: Абсолютно с Вами согласен. С другой стороны, самое сложное - выпаять "старый" контроллер клавиатуры. Впаять панельку и бросить перемычку на IRQ12 уже не сложно. Но, конечно, проблема физического размещения платы-расширения добавляет изрядную ложку дёгтя во всю затею. Швейк написал: 1. Не нужен коврик. Работает по любой поверхности. А в чём состоит сакральный смысл оптической мыши? 2. Не нужно чистить. 3. PS/2 оптические мыши до сих пор доступны в ассортимете. Можно даже новую приобрести. Найти хорошую COM шариковую уже проблематично. У меня из трёх хорошо работает только одна. Остальные, то ли изначально были некачественные, то ли резина от времени усохла. |
hyperborean
Junior Member
Откуда: Санкт-Петербург, Великий Новгород Всего сообщений: 131 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2011 |
Rio444 написал: Я подумал о случае когда контроллер расположен под платами расширения ISA как, например, на Baby AT 386 материнках. В этом случае высота переходника не позволит его использовать Впаять панельку и бросить перемычку на IRQ12 уже не сложно. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 20:03 Сообщение отредактировано: 16 октября 2017 20:03
hyperborean написал: Если есть хоть небольшой зазор, ~6..8мм, то можно влезть. Если меньше, то да, проблематично. Придется придумывать что-нибудь экзотическое, чтобы подключить панельку с контроллером. Или поискать другую плату. |
IdeaFix |
NEW! Сообщение отправлено: 16 октября 2017 20:12
Коллеги, ну нет проблем с "высотой". Ну совсем нет. Вот смотрите... это плата в базе и BIOS у неё родной. И плата расширения - канонический трезубец девятитысячный: https://pp.userapi.com/c639228...tcUyxY.jpg Ну не садится и всё тут И платы с клавиатурным контроллером в панельке в этом месте "не совместимы" с большим количеством видеокарт и мультикарт. Но кто-то переживает по этому поводу? Нет, все молча берут другую видеокарту или мкультяху или молча перевтыкают карту в другой слот, который не пересекается с микросхемой. Ведь так? К тому же, в теме по ссылке есть и реализация навеской на макетке и реализация ВНУТРИ панельки и своё что-то соорудить с тыльной стороны никто не мешает. Вы же умные... не отвлекайтесь на форму, давайте быстрее прототип Я б купил! |
Сейчас на форуме |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
hyperborean спасибо! Теперь более-менее понятно. |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 21:17 Сообщение отредактировано: 16 октября 2017 21:58
Rio444 написал: Включил XT, снова подергал мышку в VC... ощущения абсолютно прозрачное, как и на основном 4-х ядерном компе. В разных программах (преимущественно в играх под DOS; в NC и Windows это менее заметно), путём: К слову, даже на основном компе с графикой 1280x720 - тоже курсор перепрыгивает через 10-20 пикселей, при быстром движении по кругу. Это заметно на глаз. Конвертор, точно также перепрыгивает несколько символов в VC. Это проблема низкого разрешения самой мышки (300dpi?) Если человеку не знать, что перед ним находится, то возникает ощущения, что это обычный эмулятор XT под 4-х ядерном. Другими словами, конвертор абсолютно прозрачен. Стартует мгновенно и застопаривается мгновенно. Полная синхронизация мышечной реакции и глазной обратной связи. Т.е. ты знаешь, что курсор остановится "вот в этом месте". Рисовать "МонаЛизу с истеричной улыбкой" не пробовал. Лень Нашел под XT игрушку с высоким разрешением.. да-да, это Warlords с 640x200, мыша там изначально не удобная, как и на COM-вских... Железная привычка играть на клавиатуре и использовать hot-key.. Но мыша там обязательна, чтобы попасть в кнопки "ok". Нашел еще SimCity, да-да, на XT тоже работает. Графика 640x350. Построил городок и обнаружил неудобства в том что "большая клетка" может промахнуться в другую сторону (строишь дорогу и пошла вверх на 1 клетку, а я хотел по горизонтали, на картинке видно этот "квадратный курсор"). Игрушка сама по себе не удобна, из-за отсутствия привычной формы "курсора мыши". Покупал за 300 руб. Забыл шариковую мышку как страшный сон Из минусов: 1) ужасный хвост для внешнего питания 5v, как в Flash-DOM-овских хвостов с 5 вольтом. Сам блок микроскопический, а этот хвост болтает как гремучая змея.. 2) Требуется ISA плата с COM-портом. С другой стороны, нет конфликтов на програмном уровне, Все программы думают что это стандартная COM-мыша. Полностью аутентичный COM-протокол. Из плюсов: 1) "а что такое шариковая мышь?" |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 октября 2017 22:28 Сообщение отредактировано: 2 декабря 2017 13:24
Ekb написал: На XT естественно ничего заметно не будет. Включил XT... Речь о 386, 486-х. 640х480 и выше. Я не уверен, что на 286-й что-то будет видно. P.S. Если это конвертер EJSanYo, то у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения. Невозможно плавно менять скорость. Также попробуйте плавно, равномерно двигать курсором горизонтально, вертикально, под углом 45 градусов. |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 октября 2017 1:27 Сообщение отредактировано: 17 октября 2017 9:05
Rio444 написал: Если речь идет "ускорения" то это ответственность несет драйвер мыши, управляется из командной строки. К слову, с этим проблем тоже не наблюдаю. Невозможно плавно менять скорость. Я так понимаю, что нужно проверять в 3D-шутере, подобия Descent - где нужно быстро и точно наводить на цель. Для таких случаев, у меня 486 на плате 4dps, у него и так есть PS/2 Кстати, рекомендую в Wolf3D играть только на конвертере, идеально работает и быстрый захват на цель. А не клавиатурой. Играл на быстром 286-25мгц. Rio444 написал: Откуда эти сведения? думаю паника преувеличена у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения.... Подвигал... Также попробуйте плавно, равномерно двигать курсором горизонтально, вертикально, под углом 45 градусов. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 октября 2017 6:56 Сообщение отредактировано: 17 октября 2017 9:03
Ekb написал: Из анализа исходного кода прошивки. Rio444 написал:Откуда эти сведения? думаю паника преувеличена у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения.... В зависимости от установленного в конвертере масштаба скорости мыши, либо теряется часть пакетов, приходящих от мыши. Либо наоборот приходят уже устаревшие данные. Основная проблема протокола для COM мыши - низкая частота передачи данных. Всего 1200 бод/9 бит/3 байта = 44,(4) раза в секунду. Если пакет с данными приходит непосредственно от мыши, с задержкой 1000/44,(4) = 22,5 миллисекунд. Мизерный процент людей могут заметить такую задержку. Не зря считается, что fps с играх не должен опускаться ниже 30. Если мышь PS/2 подключена через конвертер, то задержка увеличивается в 2-3 раза. То есть будет 22,5*2 = 45мс или 22,5*3 = 67,5мс. Что соответсвует частоте 22,2 и 14,81Гц. Что уже очень заметно. Задержка связана с тем, что пока в COM порт передаётся очередной пакет данных, из PS/2 уже приходят новые данные. Они не передадутся в COM, пока в COM не уйдет текущий пакет. Задержка может быть разной потому что частоты передачи данных у PS/2 и COM мыши не совпадают. У PS/2 - 100 раз в секунду. У COM, как писал выше - 44,(4) раза. Поэтому задержка зависит от того, на кокой момент пакета передачи данных в COM приходится получение данных из PS/2. Если пакет данных в COM (почти) передан, но новый ещё не начался - задержка 45мс. Если только начался - то 67,5мс. Чтобы уменьшить задержку, можно передавать в COM только последний пакет, полученный из PS/2. При этом часть данных теряется. Теряются ранее полученные пакеты. Это будет ощущаться в незавномерном движении курсора, если очень медленно двигать мышью. Либо, если двигать ею равномерно вертикально, она будет слегка "скакать" влево-вправо. Если горизонтально - то вверх-вниз. Такой алгоритм реализован у EJSanYo при минимальном масштабе скорости. При других масштабах в компьютер приходит "свет угасших звёзд", т.е. неактуальные данные. Конечно понятнее было бы это всё отобразить на графиках. Если Вам действительно интересно, можете сами это сделать. Если Вы хотите доказать, что всё работает нормально и Вас всё устраивает, даже спорить не буду))) Ekb написал: Я довольно однозначно написал про курсор. Я так понимаю, что нужно проверять в 3D-шутере, подобия Descent - где нужно быстро и точно наводить на цель.Для таких случаев, у меня 486 на плате 4dps, у него и так есть PS/2 |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 октября 2017 8:54 Сообщение отредактировано: 17 октября 2017 9:15
Rio444 написал: Вполне возможно. У COM-овских протоколов ограничено до Из анализа исходного кода прошивки. Часть пакетов от мыши PS/2 теряется и не доходит по порта COM. Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена Но никто-ж не запрещает изобретать новое. В любом случае, аутентичность теряется в обеих случаях (конвертор или новый 8042 c ISA-платой). P.S. Интересно потом сравнить в лоб: конвертор или New8042. И где эта разница обнаружится. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 октября 2017 8:56 Сообщение отредактировано: 17 октября 2017 11:14
Ekb написал: Дописал сообщение выше. Там подробнее. Предыдущее сообщение получилось несколько сумбурным. Есть неточности. Задержка в конвертере PS/2 -> COM, не в 2-3 раза, а в примерно 1,1-2,3 раза. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Ekb написал: Хорошая шариковая COM мышь на хорошем коврике более точно передаёт движения, чем оптическая через конвертер. Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена Хотя, возможно, долю погрешности вносит сама оптическая мышь. Как-нибудь попробую с другой. "New8042" будет работать точно так же, как обычный PS/2 порт на любой материнской плате. Никаких задержек или преобразований не добавляется. Про "скачет" возможно я неточно выразился. Появляется дискретность движений. То есть, вместо того, чтобы перемещаться плавно, попиксельно, курсор может на мгновение остановиться, потом "перепрыгнуть" сразу на два пикселя. Это заметно только если очень медленно двигать мышью. Либо не настолько медленно, но почти вертикально или почти горизонтально. При быстрых резких перемещениях что-то заметить очень сложно. В каких-то программах это более заметно, в каких-то менее. Видимо сами программы вносят какую-то задержку на обработку входящих данных о перемещении мыши. И по-разному их обрабатывают. В теме о конвертере я писал, что наиболее заметны артефакты в игре "Цветные линии" (Lines). В Norton Commander заметить что-то практически невозможно. В Windows95 на уровне ощущений чувствуется небольшая рассинхронизация движения руки и курсора на экране. С оптической мышью, подключенной в PS/2 ощущения рассинхронизации не возникает. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 1 ноября 2017 14:14 Сообщение отредактировано: 1 ноября 2017 14:15
Аппаратная часть проверена и отлично работает. Проверял на 486-й материнке с биос Award 4.50PG. В программной части оказалось достаточно подправить родной биос модбином, включить "PS/2 mouse support" enable. Оказалось, что ещё одна 486-я и все мои 386-е имеют AMI Bios. Каждая версия AMI Bios правится своей версией Amibcp: BCP14.EXE (for core BIOS 07/07/91)Источник Никто эти версии в глаза не видел. Если у кого есть, шлите! Сейчас работаю на TSR программой, которая будет выполнять все функции биос, связанные с работой PS/2 мыши. Кто знает ассемблер, и, особенно, NASM, нужны ваши подсказки. В частности, как реализовать задержку 15мкс? Сделал через функцию 86h прерывания int 15h. В некоторых источниках пишут, что эта функция нормально работает, если задержка от 1000мкс. Но не понятно, что будет, если длительность меньше. Как я предполагаю, просто реальная задержка будет больше заданной. Что скажете? |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
не позволяет реализовать задержку меньше 976 мкс, если речь про это: В некоторых источниках пишут, что эта функция http://vitaly_filatov.tripod.com/ng/asm/asm_026.13.html Надо разбираться как она внутри работает, чтобы проверить это. что будет, если длительность меньше Ровно не получится, но вряд ли вам наносекунды будут принципиальны В частности, как реализовать задержку 15мкс? Самому запрограммировать таймер 8254 на нужную частоту прерываний и ловить IRQ0 https://en.wikibooks.org/wiki/...rval_Timer Нужный делитель - 18. Как различные ОС к такому отнесутся - ничего обещать не могу. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
pahan, спасибо за наводку. Почитаю. Может можно как-то попроще? Или есть готовый код для таймера? |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 1 ноября 2017 15:41 Сообщение отредактировано: 1 ноября 2017 15:44
Сам с ним не развлекался, а примеры кода есть здесь: http://wiki.osdev.org/Programmable_Interval_Timer Там хорошая простыня |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Я бы только посоветовал использовать инструкции не выше 286, чтобы можно было использовать эту разработку на 286 платах. В кодах BIOS-ов небольше задержки часто делаются просто loop цилами, но понятно, что такая задержка зависит от частоты и поколения CPU. Работу с таймером с только 16-bit инструкциями можно подсмотреть в коде Atmel программатора для AT89 (прилагаю AT89.ZIP, файл XTIMER.ASM) PS. Я бы использовал MASM (или другой DOS assembler), чтобы можно было вести разработку на 286 машине. Прикрепленный файл (AT89.ZIP, 0 байт, скачан: 18 раз) |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
Rio444 написал: Думаю, это самое реальное из всего возможного (подпрограмма задержки из BIOS PC/XT): как реализовать задержку 15мкс?
Извините за формат - тегов CODE что-то не вижу на форуме... Думаю, канал 0 DMA - единственное, что на старых компьютерах может более-менее надежно выдавать подобные интервалы, причем крайне маловероятно, чтобы кто-то решил его перепрограммировать (хотя такие примеры тоже знаю). Перепрограммировать 8253 категорически не рекомендую - несовместимость с чем-нибудь практически гарантирована... |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 |
Оффтопик: Оффтопик: justontime Оооо, вы только что подали мне идею, как все-таки попробовать Трайдент запустить. Нужно рефреш в BIOS увеличить до пары секунд, или сколько память потянет и попробовать стартануть. Если дело в ALE, то может успеть Video BIOS стартануть. РУ7 у меня держала данные до 5 секунд, помнится, без рефреша. |
Кай
Гость
Divine Assassin Откуда: извне (from beyond) Всего сообщений: 13709 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 8 авг. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 1 ноября 2017 21:13 Сообщение отредактировано: 1 ноября 2017 21:17 {code} Извините за формат - тегов CODE что-то не вижу на форуме...
{/code} Соотв. фигурные скобки меняем на квадратные. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
justontime, большое спасибо! Буду разбираться. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 11:13 Сообщение отредактировано: 2 ноября 2017 15:20
justontime, этот код для XT, но в AT машинах канал DMA0 освободился от функции регенерации памяти. Соответственно, для требуемой нам AT читать DMA регистры уже не годится. А во всех ли интересующих нас AT (286-486) чтобы можно было его использовать? Надо будет проверить. upd Исправил, напутал номер канала 8253 |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
i8088 написал: А, я просто неправильно понял проблему - думал, что речь идет только о решении для совсем старых машин PC/XT класса... но в AT машинах |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Приоритетно для машин 286, 386, 486-х. Если заработает на XT - не страшно, но и не принципиально. Для пентиумов не нужно, для них материнка без поддержки PS/2 - экзотика. Вообще, первая мысль была - использовать тупой цикл, со счетчиком. Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора. Это начальное значение можно считать на этапе инициализации (т.е. только один раз). Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково. Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: На XT не заработает - там нет 8042 вообще. Если заработает на XT - не страшно, но и не принципиально. Rio444 написал: Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. Канал 1 подходит, но надо проверить, на всех ли 286-486 AT машинах его настройка одинакова? Если на всех машинах он настроен на 0x12h, то как раз один тик ~15mks |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Rio444 написал: Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444, OK, я чего-то не сообразил сразу. Приношу свои извинения! |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088, извинения излишни. Значения счетчика из таймера можно читать непосредственно? in al, 040h ? Ничего не собьётся? Всегда ли он работает? Нужно ли предварительно делать "Access mode" = lobyte only ? Bits Usage |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да. Я только рекомендую не использовать 386+ инструкции, Reading The Current Count для совместимости с 286. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 16:31 Сообщение отредактировано: 2 ноября 2017 16:44
i8088 написал: Вы зря переживаете. Я и 8086 инструкции плохо знаю. 386+ для меня вообще темный лес. Я только рекомендую не использовать 386+ инструкции, для совместимости с 286. i8088 написал: Не нравится мне пример по ссылке: По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да. read_PIT_count: Он устанавливает собственный режим работы канала 0, нарушая работу системного таймера. Я бы сделал mov al, 00010110b Т.е. принудительно установил бы чтение/запись только младшего байта. Остальное без изменений. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 16:59 Сообщение отредактировано: 2 ноября 2017 16:59
Rio444 написал: Я это просто к тому, что в тех примерах полно 386+ инструкций, тот же pushd/popfd. Вы зря переживаете. Я и 8086 инструкции плохо знаю. 386+ для меня вообще темный лес. Rio444 написал: Согласен, в книге Джордейна (правда для для канала 2 тоже сделано так, как Вы хотели), Я бы сделал к сожалению командный регистр - WO, что не позволяет сохранять настройки. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
У 8254 есть команда write-back. к сожалению командный регистр - WO, что не позволяет сохранять настройки. принудительно установил бы чтение/запись только младшего байта Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. Но скорее всего придётся для получения адекватной производительности (см. ниже для примера чтения всех байт). В остальном - ОК. Значения счетчика из таймера можно читать непосредственно? В теории, кто-то может и поменять режим за то время, что мы к нему обращаемся. Безопаснее ставить. Нужно ли предварительно делать "Access mode" = lobyte only ? Можно, но стоит серьёзно подумать, 1)насколько нам нужна такая точность (ровно 15 мкс), 2) на каких процах и 3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся. прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 Считаем время выполнения инструкций (данные отсюда - http://www.cs.dartmouth.edu/~m...c/x86.html) только для считывания текущего значения счётчика таймера 8253 (а значит, этот код повторится ещё как минимум 1 раз, + сравнение(2-2-1 такт), +цикл после сравнения(не меньше 7-не меньше 7-3), +служебные команды, если это будет подпрограммой (cli/sti/push/pop/ret)): mov al, 0xD2 out 0x43, al in al,0x40 mov ah,al in al, 0x40 rol ax,8 - считали текущее значение канала 0 mov bx,ax - и запомнили его В тактах проца это всё займёт: 286 - 2+3+5+2+5+13+2=32 такта (на частоте 8-25 МГц)= 4 мкс-1,3 мкс 386 - 2+10(4..24..24)+12(6..26..26)+2+12(6..26..26)+3+2=43 такта в реальном режиме/25-85 в защищённом/85 в V86 (на частоте 16-40 МГц)= 2,7/1,6/5,3 мкс - 1,1/0,6/2,1 мкс 486 - 1+16(11..31..29)+14(9..29..27)+1+14(9..29..27)+2+1=39 тактов в реальном режиме/34-94 в защищённом/88 в V86 (на частоте 25-133 МГц)= 1,6/1,4-3,8/3,5 мкс - 0,3/0,3-0,7/0,7 мкс |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Небольшой фотоотчет. Новый контроллер клавиатуры с обвязкой, установленный взамен старого. На "брюхе" контроллера установлена небольшая платка с обвязкой. Прошу прощения за несмытую канифоль. Ноги контроллера подогнуты и припаяны к плате. К ним припаяны "фиктивные" ноги, откушенные от ненужной микросхемы. Никогда так не делайте!!! Припаять новые ноги ровно задача не из простых. Заняло несколько часов и немерено матерных слов. Новый прототип буду делать по-другому. Резисторы на картинке видно. Транзисторы (их почти не видно) - SMD 2n3904, снятые с какой-то нерабочей материнской платы. Конденсаторы не ставил. Не нашлось нужных по размеру и номиналу, ехать на радиорынок долго. Впрочем, работает и так. Модифицированную прошивку зашивал во флэш (оригинальная в 27c512). Как назло, места, чтобы поставить 32-пиновую DIP вместо 28-пиновой не оказалось. Микросхема упиралась в ISA8 разъём. Пришлось городить колхоз из нескольких 28 и 32-х пиновых панелек. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 18:27 Сообщение отредактировано: 2 ноября 2017 18:34
pahan написал: Предварительно проверяем, что текущее значение >18 (лучше с запасом - больше 30). Если меньше, ждём (считываем повторно, пока не станет >18, т.е. не пройдет через 0). Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. pahan написал: Если реальная задержка будет 15...30мкс, думаю это устроит. Это задержка между появлением флага переполнения буфера мыши в контроллере и появлением данных в выходном регистре. Не знаю, почему именно 15мкс. Это значение в исходнике Sergey Kiselev XT биос. Он, вероятно, скопировал из исходников Award bios. 1)насколько нам нужна такая точность (ровно 15 мкс) pahan написал: От самого младшего 286 (8МГц?), до самого старшего 486 (AMD 5x133@160) 2) на каких процах pahan написал: Код инициализации - из под чистого DOS (если стоит Win95, то до её загрузки, из autoexec.bat). Сама задержка - вероятно и DOS, и Windows. Но Win95 ставят только на 386 и выше (лично я предпочитаю от 486-х). 3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся. Исходя из Ваших дальнейших расчетов pahan написал: думаю нормально. Эта часть быдет выполнять только в чистом DOS. 286 - 2+3+5+2+5+13+2=32 такта (на частоте 8-25 МГц)= 4 мкс-1,3 мкс |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Сейчас вы будете смеяться, но в Award BIOS такой задержки нет. Или я чего-то не понимаю. Код Sergey-XT биос: ;========================================================================= Аналогичный участок кода Award BIOS: |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 20:25 Сообщение отредактировано: 2 ноября 2017 20:32
pahan написал: Это как раз не страшно, тк складывать текущее знасение с 18 мы тоже будем с переполнением. Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. Пример. Текущее значение счетчика (младший байт) == 0xF0 Запоминаем, складываем с 18 , 0xF0 + 0x12 = 102 Перенос вызовет установку флага CF, но на это не обращаем внимания. Ну и собственно ждем, когда счетчик достигнет значения 0x02 Это чем-то похоже на относительные внутрисегментные безусловные переходы в x86: смещение перехода задается формально в пределах -32768 +32767, но "дотянуться" до любого адреса внутри сегмента не проблема. А о задержке - я думаю это носит рекомендательный характер, для совместимости со всеми устройствами и выдерживать его прям точно до микросекунды нет необходимости, и исходники это подтверждают. Rio444 написал: Первый 286 - 6MHz. PC/XT полюбому в пролете, там совсем другой От самого младшего 286 (8МГц?), интерфейс клавиатуры и сама клавиатура. Ну за исключением очень редких нестандартных XT с AT клавиатурой. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 или я Вас не понял, или Вы ошибаетесь Т.е. 18 надо вычитать, а не прибавлять. Каждый период синхронизации происходит уменьшение на единицу содержимого внутреннего счётчика канала, начальное значение которого устанавливается программно. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 20:37 Сообщение отредактировано: 2 ноября 2017 20:54
Rio444 написал: Ой да, забыл, что счет в обратную сторону, мои извинения! Т.е. 18 надо вычитать, а не прибавлять. Но сути дела это не меняет. Пример Исходное значение 0x04 Вычисляем, чего ждать 0x04 - 0x12 == 0xFFF2 (старшие FF это я перенос обозначил) На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2 PS. Если бы КД канала 0 был бы не 65536, то переустановку счетчика при переходе через 0 пришлось бы учитывать, и код был бы более сложным. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 ноября 2017 22:23 Сообщение отредактировано: 2 ноября 2017 22:23
i8088 написал: Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет очередное считывание? На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2 Если процессор медленный. И, видимо, надо будет запрещать аппаратные прерывания, иначе они сильно исказят расчет. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: При медленном CPU я думаю возможно, тогда ловить не равенство, а что число в счетчике ниже Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет чем рассчитанное (сравнивать беззнаково!). К примеру (просто первое, что сходу пришло в голову, это не проверялось, возможны грубые ошибки!) ====================================================================== DELAY_CONST EQU 18 mov al, 00010110b out 043h, al in al, 040h mov bl, al sub bl, DELAY_CONST (в bl вычисляем значение окончания задержки) delay_ch0: in al, 040h cmp al, bl ;(в bl у нас рассчитанное ранее значение) jbe stop_delay_ch0 ;(сравнение беззнаковое!) ;; здесь должна быть дополнительная проверка, если к примеру у нас рассчитанное ;; конечное значение 0x01, CPU задержался, и в счетчике уже к примеру 0xff ;; Здесь я совсем не уверен в корректности моего решения (проверка чисел как ;; знаковых, если беззнаковая проверка дала "добро" на продолжение цикла и считанное ;; значение отрицательно (0x80-0xff), а конечное положительно. Надеюсь, что до 0x7f ;; запаздывание из-за CPU (положительные знаковые числа не дойдет). cmp al, 00h ; просто для устанавки флагов jns delay_ch0 ;проверка, что считанное значение положтельно, если да, то продолжаем цикл ; если мы здесь, то имеем считанное значение отрицательное, проверяем конечное значение cmp bl, 00h ; если имеем ситуацию, когда конечное значение (bl) положительно, а текущее (al) ; отрицательно, то выходим из цикла jns stop_delay_ch0 jmp short delay_ch0 stop_delay_ch0: ;эдесь процедура (код) задержки кончается ====================================================================== Прерывания да, запретить обязательно! По любому будет видно при отладке, с первой попытки такие вещи обычно не работают. Для проверки можно сделать простую програму с бесконечным циклом из этой задержки, и направить вывод например в LPT порт (например после каждой задержки иннвертировать данные в 378h). И наблюдать осциллографом длительность импульса и паузы на линиях данных LPT. Я так проверял реальные задержки во FreeBSD. ====================================================================== LPT_DATA_PORT EQU 0378h mov dx, LPT_DATA_PORT in al, dx xor al, 0ffh ;инвертируем out dx, al ====================================================================== После исполнения такой программы в цикле системные часы отстанут, но для проверки это несущественно, особенно если цикл бесконечный. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088, спасибо! Буду пробовать. Пока вообще эту задержку убрал. Сейчас ошибки компиляции исправил. Но после запуска компьютер виснет. Пока проверяю код. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Роман, для отладки пока уберите отключение прерываний в процедуре задержки. Я как освобожусь, тоже посмотрю. Процедура задержки будет полезна и в других проектах. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088, хорошо. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Я проверял на плате XT IBM5160 (у нее таймер 8253) - при программировании канала 0 даже тем же значением 0x36h (lsb/msb), режим 011, таймер просто перестает считать и системное время стоит. Если не трогать 0x43, то чтение канала0 исправно возвращает LSB/MSB (меняющиеся). В исходниках IBM BIOS делается отключение прерываний от таймера при программировании маскированием входа 8259. Ядумаю надо сделать также. |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Обсудили же, что XT не трогаем и сами лезете на ней тестировать А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254). при программировании канала 0 даже |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
pahan написал: Он стоит в режиме hi/lo 011, при записи того-же режима получаем останов А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254). счетчика и поочередно получаем hi/lo одинаковые (те например 0xe4 0xf2 0xe4 0xf2 0xe4 0xf2 итд). При переводе в режим LSB - всегда одно значение. pahan написал: Меня интересует универсальная процедура задержки, к PS2 вопросу это не Обсудили же, что XT не трогаем и сами лезете на ней тестировать относится. Насколько я понял, у Rio444 на AT получилось то же самое. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 ноября 2017 19:19 Сообщение отредактировано: 3 ноября 2017 19:25
Пока ещё ничего не пробовал. Сегодня весь день на работе. Если завтра не буду работать, могу поэкспериментировать. Это Вы в 43h порт пишите? Что такое "LSB", "MSB"? i8088 написал: Сильно странно это. Таймер вообще не должен стоять. Я проверял на плате XT IBM5160 (у нее таймер 8253) - при программировании канала 0 даже |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 ноября 2017 19:36 Сообщение отредактировано: 3 ноября 2017 19:40
Rio444 написал: Да этоя по привычке, low status byte, high status byte,. Что такое "LSB", "MSB"? MSB вообще мой глюк Здесь это не статус конечно, просто режим младший байт старший байт. Rio444 написал: Да, меня тоже это заинтересовало, неожиданно. Для пользователя Сильно странно это. Таймер вообще не должен стоять. проявилось это в том что системное время "стало" |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Что такое "M"? "Main status byte"? "HSB" я бы догадался))) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
MSB аббревиатуру я где-то встречал, поэтому и на автомате написал. Сейчас не могу вспомнить где, наверно действительно main |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 | |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 ноября 2017 22:22 Сообщение отредактировано: 3 ноября 2017 22:35
Ошибка оказалась простейшей! Просто после изменения режима счетчика (даже если записывается тот же режим, что был) нужно заново загрузить значения коэфф деления, у нас 65536, соответственно записываем 0 Из исходников IBM \tMOV\tAL,36H\t\t\t; SEL TIM 0,LSB,MSB,MODE 3 \tOUT\tTIMER+3,AL\t\t; WRITE TIMER MODE PEG \tMOV\tAL,0 \tOUT\tTIMER,AL\t\t; WRITE LSB TO TIMER 0 REG \tOUT\tTIMER,AL\t\t; WRITE MSB TO TIMER 0 REG Пока это не сделать, соответствующий счетчик будет стоять. По окончанию задержки обязательно восстановить исходный hi/lo режим, хотя можно и работать в режиме hi/lo, не меняя режим на lo IBM тоже использует обозначения LSB/MSB применительно к байтам! |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 0:32 Сообщение отредактировано: 4 ноября 2017 0:33
i8088 написал: Думаю так гораздо проще. Ничего не менять, просто отбрасывать hi. хотя можно и работать в режиме hi/lo, не меняя режим на lo У меня прогресс. Программа пока не работает, зато уже не вешает комп)))) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 9:13 Сообщение отредактировано: 4 ноября 2017 9:16
А кстати, можно не отбрасывать старший байт, тогда максимальная задержка будет 55ms, и процедура будет более универсальной. Но точность малых задержек будет хуже, тк процессору больше работы. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Тогда лучше две процедуры. Одна для малых задержек, другая для больших. Если не трогать 043h, в каком порядке идут байты? Сначала Low, потом High? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Да, но режим 0x36 все же стоит установить, тк нет гарантии, что какая-либо Если не трогать 043h, в каком порядке идут байты? Сначала Low, потом High? программа/процедура не читала счетчик ранее, и могла оставит в состоянии, когда первым (в нашей процедуре) будет MSB. MSB/LSB обозначения можно узаконить, они упоминаются в официальной Intel manual по 8253 |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 10:07 Сообщение отредактировано: 4 ноября 2017 10:09
i8088 написал: У меня они ассоциируются с битами. Как по ссылкам MSB/LSB обозначения можно узаконить, они упоминаются в официальнойIntel manual по 8253 Tronix написал: Если Вам удобно, используйте их. Вас поймут. https://en.wikipedia.org/wiki/Most_significant_bit i8088 написал: Да, тут надо будет что-то придумать. Да, но режим 0x36 все же стоит установить, тк нет гарантии, что какая-либопрограмма/процедура не читала счетчик ранее, и могла оставит в состоянии,когда первым (в нашей процедуре) будет MSB. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 20:20 Сообщение отредактировано: 4 ноября 2017 20:22
Моя идея с отлавливанием запаздывания оказалась неверной, новый вариант попробовать ловить изменение старшего байта если конечное значение положительно. Но очень много команд, и после latch нужно заново ставить режим, чтобы заново началось изменение счетчика (я все проверял на 8253). Надо еще подумать. Кстати, loop цикл с выводом в LPT порт на IBM 5160 дает меандр с длительностями импкльса и паузы примерно 11мкс. Вообще может быть удобнее использовать канал 2, его можно останавливать (замемто latch) через логику PPA (или ее аналог в AT)? Временно перепрограммировать на 65536, а на выходе вернуть назад, но это увеличит задержку. Надо подумать. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Если только канал 2 уже ни для чего больше не используется. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Штатно он в основном для диагностического speaker используется. Если только канал 2 уже ни для чего больше не используется. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Кстати, да. Но не уверен, что только диагностического. Штатно он в основном для диагностического speaker используется. Если в системе есть звуковуха, то наверное канал 2 ей и не нужен. А если только спикер? Фиг с ним, если временно собьётся его работа. А если конфликт в системе, с более неприятными последствиями? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Если какая программа использует его для измерения времени, то по любому сама и программирует. А штатно егоо функция например подавать гудки (тот же DOS), я не уверен что он программирует его заново каждый раз. Ну можно по выходе оставлять настроенным на 1000Hz Во всех руководствах по ассемблеру это самый используемый канал, все примеры обычно на нем строятся. Я еще подумаю. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 ноября 2017 22:45 Сообщение отредактировано: 4 ноября 2017 22:51
Только для AT (не слишком новых, где есть канал 1 8254) можно попробовать процедуру из исходников IBM AT |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Очень просто, но очень неточно. Даже значение в Ah не инициализируют. Перед WAITF1 должно быть: IN AL,PORT_B Возможно именно этот алгоритм используется в int 15h функция 86h. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 9:31 Сообщение отредактировано: 5 ноября 2017 9:32
Rio444 написал: Мне тоже это не понравилось но я решил привести как в оригинале. Даже значение в Ah не инициализируют. Дилемма в том, что с 8253/54 слишком много команд получается, что снизит точность. Но при использовании канала2 будет чуть проще, тк его можно останавливать без latch. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Посмотрите вот такой вариант:
На 386DX-40 получилось на выходе 10 циклов. Что вполне неплохо. На 286-й конечно точность будет очень низкая. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу? В принципе оба варианта (IBM и Ваш) могут использоваться, в зависимости от целей. А Вы пробовали проверить реальную задержку осциллографом? Я проверял так
Это делает 65536 импульсов и пауз в порт принтера. Проверить, насколько изменится длительность импульсов и паузы если заккоментировать CALL DLY (для уменьшения потерь времени можно заменить макроопределением). Разность и даст задержку. Цикл у Вас в конце лучше сделать так |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 13:07 Сообщение отредактировано: 5 ноября 2017 13:08
i8088 написал: Собственно я так изначально предлагал Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу? Rio444 написал: i8088 написал: Вообще, первая мысль была - использовать тупой цикл, со счетчиком.Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора.Это начальное значение можно считать на этапе инициализации (т.е. только один раз).Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково. Смысл в том, что сохраняется число тактов на один проход цикла. Весь код совпадает, только меняется порядок инструкций, и inc cx меняется на dec cx. Цикл у Вас в конце лучше сделать так Будут ли по числу тактов loop и dec(inc) cx jnz равноценны? |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Навряд-ли, loop должна быть быстрее. Тогда оставим как есть. Будут ли по числу тактов loop и dec(inc) cx jnz равноценны? Теперь осталось проверить реально получающуюся задержку. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 13:40 Сообщение отредактировано: 5 ноября 2017 14:02
Осциллограф далеко и барахлит, поэтому проверил программно: org 0100h С метки start_main_loop находится цикл, который выполняется 65536 раз, в каждом цикле 10 раз вызывается задержка 15мкс. Расчетная задержка = 15мкс*65536*10 = 9 830400 мкс = 9,83 секунд Интервал считаем между появлением на экране сообщений Program start и Program end. По секундомеру получилось 11,3 секунды. Что вполне неплохо коррелирует. Т.е. реальная задержка (с учетом затрат времени на call и ret) получается ~17мкс. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 ноября 2017 17:12 Сообщение отредактировано: 5 ноября 2017 17:22
OK, неплохо! Можно попробовать использовать! PS. Я кстати посмотрел несколько datasheet, канал1 имеется и в достаточно новых системах (865, современные PCH например), те простой вариант IBM тоже можно использовать даже на современных платах. Я нашел про int 15 AH=86 INT 15 - системное прерывание - WAIT - ожидание - (для AT,XT2,XT286,CONV,PS) AH = 86h CX,DX = число микросекунд ожидания (с точностью до 977 мс) Возвращает: CF сброшен: после окончания ожидания CF установлен: немедленно при ошибке Примечание: точность периода ожидания равна 977 микросекунд в большинстве секунд потому что большинство BIOS использует прерывание от мик- росхемы таймера AT с частотой 1/1024 секунды доступные по INT 70 Смотри: AH=83h, INT 70 NT 70 - IRQ8 - AT/XT286/PS50+ - REAL-TIME CLOCK - часы реального времени - Примечание: может маскироваться установкой бита 0 в порте Ввода/Вывода A1h Смотри: INT 58 Те оно использует прерывание от RTC и не годится для нашей цели. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Спасибо! Дя, обломчик с int 15 86h. Странно, что в большинстве источников не указан такой принципиальный момент. Но, по большому счету, в TSR программе вообще нельзя использовать int. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 24 ноября 2017 0:14 Сообщение отредактировано: 24 ноября 2017 0:25
Не прошло и месяца, как появились хоть немного заметные подвижки))) Наконец есть рабочая "альфа" версия программы. Работает пока через одно место, не со всеми драйверами и многое не понятно. Но работает. Довольно много драйверов мыши "плюют" на "штатный" обработчик прерывания мыши Irq12 (Int 74h) и полностью подменяют его собственным. Вот некоторые из таких драйверов и заработали. В частности, проверил на CuteMouse (версии 1.9, 2.0, 2.1 - работает со всеми). И какой-то старый драйвер от А4 Tech. Некий неизвестно чей драйвер "amouse.com" отказывается загружаться, сообщая, что "установка драйвера PS/2 мыши невозможна". Драйвер, который при запуске пишет, что он ©Microsoft и ©IBM, 1992-го года, загружается, но сразу вешает систему (или отрубает клавиатуру?). Пока так. В процессе инициализации размаскировываю прерывание Irq12, но к концу программы какая-то хрень снова его маскирует. Не могу понять какая. Сейчас перед выходом из программы приходится повторно его размаскировывать. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Роман, поздравляю с первым вариантом программы!! Rio444 написал: Это под чистым DOS делается? По идее кроме драйвера мыши В процессе инициализации размаскировываю прерывание Irq12, но к концу программы какая-то хрень снова его маскирует. заниматься манипуляциями с irq12 некому? Он уже загружен при запуске программы? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 24 ноября 2017 10:55 Сообщение отредактировано: 24 ноября 2017 10:58
Спасибо! i8088 написал: Да, MS-DOS 6.22 Это под чистым DOS делается? i8088 написал: Нет. Ни один драйвер мыши не грузится до запуска проги. Чтобы не запутаться, пусть прога будет называться "ps2supp.com". По идее кроме драйвера мышизаниматься манипуляциями с irq12 некому? Он уже загружен призапуске программы? Программа ps2supp добавляет PS/2 мышь в список устройств, хранящийся по адресу 40:10h (и вызываемый через int 11h). Драйверы в первую очередь проверяют, есть ли мышь в этом списке. Ps2supp также подменяет обработчик int 15h. Оставляет в памяти свой, который проверяет, не являются ли запрашиваемые функции службами работы с мышью (AH = C2h, AL = 00-07h). Если не являются, передаёт управление дефолтному обработчику. Если являются - обрабатывает сам. Кроме этого ps2supp.com подменяет int 74h - прерывание, вызываемое по irq12. Обработка int74h видимо пока не работает должным образом, поэтому драйверы мыши, которые его используют тоже не работают. Но как писал выше, многие драйверы подменяют int74h своим обработчиком. Штатный обработчик irq12 (int 74h) не так прост, как кажется. Он не только вызывает драйвер мыши, а готовит для него данные. Пакет данных от мыши содержит 3 или 4 байта (мышь без колесика и с колесиком). Отправляет их мышь по очереди, по одному байту. После каждого байта генерируется irq12. Штатный обработчик irq12 (int74h) собирает все эти 3 или 4 байта вместе, помещает их в стек и только после этого вызывает драйвер мыши. Для того, чтобы можно было хранить промежуточные данные до того, как пакет придет полностью, плюс адрес драйвера мыши, плюс флаги и счетчики, в конце RAM (в конце 640кб) резервируется 1кб памяти под EBDA - "Extended BIOS Data Area". Основное её назначение именно хранение данных для поддержки PS/2 мыши. Но как пишут в источниках, биос мождет хранить там и другие данные. Тут я немного схитрил, и разместил первые 30h байт EBDA (которые используются для PS/2 мыши) в теле резидентной части ps2supp.com. Точнее в конце её PSP. Возможно некоторый драйверы видят "подвох" и отказываются грузиться. Возможная причина также может быть в том, что наличие PS/2 мыши фиксируется в CMOS. Это пока не реализовано. Помимо этого, прерывание int 15h, служба C0h возвращает адрес таблицы конфигурации системы, в которой содержится информация, выделена ли область EBDA. Находится эта таблица в ROM. В принципе, эту службу тоже можно подменить, переместив таблицу в RAM. Маловероятно, но возможно какие-то драйверы проверяют и эту таблицу. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Вроде все логично. Относительно маскирования - а может быть какое-то действие в программе вызывает маскирование, как побочный эффект (вызов какой-либо функции BIOS, хотя в TSR это ограничено)? А если попробовать в программу через определенные интервалы вставлять чтение регистра маски secondary int controller, 0a1h ? И в debug пронаблюдать, когда происходит маскирование? |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Не "может", а обязательно будет. И формат её не стандартизирован... Но как пишут в источниках, биос мождет хранить там и другие данные. Скорее всего это именно куски биоса и возможно недокументированные. может быть какое-то действие в Рекомендую ещё глянуть обработчики всех остальных прерываний (аппартаных, IRQx) - скорее всего "гадит" кто-то из-них. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 24 ноября 2017 15:57 Сообщение отредактировано: 24 ноября 2017 15:58
i8088 написал: Тоже об этом подумал. Но это ещё не TSR (точнее не резидентная часть) , это инициализация, которая выполняется один раз, как обычная программа. Относительно маскирования - а может быть какое-то действие впрограмме вызывает маскирование, как побочный эффект (вызовкакой-либо функции BIOS, хотя в TSR это ограничено)? i8088 написал: Что-то подобное попробую сделать. А если попробовать в программу через определенные интервалывставлять чтение регистра маски secondary int controller, 0a1h ?И в debug пронаблюдать, когда происходит маскирование? pahan написал: Если "будет", то это ещё проще. В этом случае область EBDA уже выделена. И можно использовать её готовую.Не "может", а обязательно будет. И формат её не стандартизирован... Но как пишут в источниках, биос мождет хранить там и другие данные. Но пока на платах без поддержки PS/2 она отсутствует в принципе. В ячейке BDA, хранящей указатель на EBDA - "0000h". |
pahan
Advanced Member
Откуда: Химки, М.О. Всего сообщений: 1070 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мар. 2015 |
Учитывая, что она появилась в IBM PS/2 и оттуда была скопирована остальными - ожидаемо. В этом случае область EBDA уже выделена. И можно использовать её готовую. Так что или она сразу есть и там полно и других данных или её изначально нет. Были ли платы (точнее, биосы) с EBDA, но без PS/2-мыши - если только экспериментально проверять. Раньше (до появления EBDA) она определялась как адрес порта LPT4. В ячейке BDA, хранящей указатель на EBDA - "0000h". |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Причина отключения irq12 оказалась весьма нетривиальной. Помехой послужила операция чтения статусного регистра 8042: "in al,064h". Если размаскирование irq12 выполнить после этой операции, то всё работает. Если до - irq12 по-прежнему отключено. Вот участок кода с "in al,064h": kbc_wait_aux_full: Для размаскирования irq12 вставлял код: push ax Сразу не понял в чем дело. Между этими операциями не должно быть никакой связи. Видимо причина в том, что контроллер прерываний слишком тормознутый, и, если после операции записи в него, через короткое время следует операция с другим портом (или именно 064h??), он не успевает считать данные. Эксперимент это подтвердил. Если в Debug запускать сразу весь участок кода - маска прерываний не меняется. Если в режиме трассировки (когда появляются паузы) - всё работает. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 25 ноября 2017 20:18 Сообщение отредактировано: 25 ноября 2017 20:19
Роман, очень ценное наблюдение, я думаю, мне тоже пригодится!! А Вы пробовали поставить небольшую задержку после размаскирования 8259 (перед чтением регистра статуса 8042), для проверки гипотезы? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 25 ноября 2017 21:24 Сообщение отредактировано: 25 ноября 2017 23:01
Буду пробовать. Не хватает времени плотно заняться. Приходится урывками. UPD Не могу повторить утренний результат. Запуск pa2supp.com вызывает маскирование irq12 (маска 1Dh), даже если оно было ранее замаскировано (маска 0Dh). В Debug код mov AL,0D работает как ни в чем не бывало. Т.е. в результате в регистре AL = 0D, как и должно быть. Хотя утром он не работал. Или я был не внимателен. В коде основной программы место работающего фрагмента кода включения irq12 тоже "гуляет". В нескольких попытках оно сначало оказалось перед строкой in al,064h, потом "вернулось" на то же место, что и утром - после этой строки. В общем, ничего не понимаю. Остаётся забить на эту проблему и включать irq12 в конце кода. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Вчера немного поигрался со своим драйвером, отключая отдельные участки кода. Выяснились любопытные вещи. Во-первых, если PS/2 мышь отсутствует в списке оборудования (адрес 40:10h BDA), все драйверы (включая cutemouse) пишут, что мышь отсутствует и отказываются загружаться. Тут попадание 100%. Примерно то же самое происходит, если отключить службу C2h прерывания int 15h. Может быть, сообщения драйверов немного отличаются от предыдущего случая. Особо не обращал внимания. А вот на службу C1h того же прерывания (которая возвращает в регистре ES сегмент EBDA) похоже всем драйверам пофиг. Которые работали - продолжают работать. Те, что не работали, по-прежнему так же не работают. Если отключить обработчик irq12 (int 74h), это имеет фатальные последствия. Драйверы загружаются, но вешают систему (а скорее блокируют клавиатуру) сразу или после любых действий с мышью. Также выяснилось, что Cutemouse версии 2.1 использует дефолтный обработчик int 74h (а не подменяет своим) и прекрасно работает. То есть, мой обработчик irq12 его полностью устраивает. Плюс этот драйвер занимает меньше всего места в памяти из числа протестированных. Всего 3,1кб (по данным CheckIt). Если прибавить размер драйвера поддержки PS/2 мыши, получаем 3,1+1,4 = 4,5кб. Это меньше, чем размер большинства драйверов мыши самих по себе. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Немного не совсем по теме, но все же, возвращаясь к вопросу задержки. Обнаружил любопытный эффект на плате IBM 5150 с таймером 8253 от AMD, образца 1983 года. Простое чтение счетчиков канала 0 без latch приводит к резкому понижению коэффициента деления, особенно при больших исходных коэффициентах. Так, при делителе по умолчанию (65536) просто после чтения (в debug) порта 0x40, коэффициент деления канала 0 становится равным 2! Проверялось осциллографом. При чтении с latch чтение нормальное. Столь малые КД для канала 0 ведут к зависание машины (слишком высокая частота IRQ0). Те просто: debug -i 40 и все, машина стала. На IBM 5160 c таймером 8253 от Intel (плата выпуска 1986года) такого не наблюдалось, я эксперименты в этой теме делал с ней. У кого есть IBM 5150, большая просьба проверить проверить чтение порта 0x40! |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Немного по теме добавлю. Как писал выше, наличие PS/2 мыши также фиксируется в CMOS. Но оно не стандартизировано и для разных BIOS "mouse enable" находится в разных регистрах. Стандартная карта CMOS: Фролов Расширенная, для разных BIOS. Поэтому, содержимое CMOS на работу драйвера мыши никак не влияет. Вероятно сам BIOS использует эту информацию. Возможная лазейка - установить в CMOS "mouse enable", в надежде, что BIOS при загрузке воспользуется этой информацией и включит поддержку PS/2 мыши. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 1 декабря 2017 23:33 Сообщение отредактировано: 1 декабря 2017 23:33
Нашел ещё одну ошибку. Теперь работает Пока не выкладываю, программа ещё сыровата. Надо ещё тестировать и оптимизировать. Но если кто-то оперативно повторит схему, пишите - поделюсь, в состоянии "как есть". Заодно потестируете. Проверял: - i486DX2-66, чипсет Sis471, BIOS Award 4.50, родной KBC LT38C41, - AMD 386DX-40, чипсет PC Chips "Chip 11", Bios AMI ver. 2.11, KBC Sa6042A Драйверы разные, включая драйверы от A4, Genius, Microsoft. Windows 3.11 сама "подхватывает" мышь, без всяких драйверов. Остаётся проверить на Win9x. Отрицательный момент. Win NT 3.51 мышь не видит. Хотя должна полностью игнорировать BIOS. По всей видимости, ей не хватает размаскированного прерывания Irq12 и/или наличия мыши в списке оборудования в области данных BIOS 40:10h. Код для размаскирования/добавления очень простой и короткий. Но не знаю, куда и как его вставить до загрузки Win. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Отлично! Нашел ещё одну ошибку. Rio444 написал: Можно рассмотреть вставление кода модифицировав какой либо менеджер загрузки с Код для размаскирования/добавления очень простой и короткий. Но не знаю, куда и как его вставить до загрузки Win. открытыми исходниками. Правильно однако сделать нормальный драйвер, сам по себе он простейший, но по деталям не подскажу, тк не использую windows. В качестве плана - найти DDK для NT3.51, посмотреть примеры кодов и сделать драйвер который может даже не регистрироваться в системе, и не отвечать на команды OS. По аналогии с DOS драйвером - он должен выполнить инициализацию, выполнить требуемый код и далее освободить память (как это делается, если устройства, с которым дрвйвер работает не найдено). |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 |
i8088 написал: найти DDK для NT3.51https://winworldpc.com/product/windows-sdk-ddk/nt-3x |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Но тогда придется делать драйвер для каждой оси. В качестве плана - найти DDK для NT3.51, посмотреть примеры кодов и сделать драйвер Это, как минимум, NT 4.0, OS/2, Linux. Мне видится более интересным вариант модификации MBR. Делают же это как-то вирусы? Другие, возможные варианты: - дополнение кода bios в ПЗУ, - отдельное ПЗУ (например на сетевой карте). С этим вопросом перекликается другой, очень интересный. Возможно ли создание контроллера PS/2 мыши на отдельной ISA плате? Основная сложность в том, что реальный PS/2 контроллер не самостоятельное устройство, а "часть" контроллера клавиатуры. Взаимодействие с ним осуществляется по тем же адресам: 60h для данных и 64h - управление и чтение статуса. Внешний PS/2 контроллер мыши можно создать как отдельное, независимое устройство. Но в этом случае он будет иметь свои, другие адреса шины портов и требовать драйвера для каждой ОС. Для DOS и Win3.x, Win9x драйвер можно сказать готов. Достаточно внести небольшие изменения в существующий код. На остальные оси драйвера нужно будет писать с нуля. Второй вариант - попытаться "скрестить" существующий KBC и новый контроллер PS/2. По всей видимости, понадобится дополнительная схема, которая будет отключать основной контроллер, когда необходимо взаимодействие с контроллером PS/2. Задача если и возможная, то весьма нетривиальная. Вероятно надо будет подключаться (или включаться в разрыв) ног контроллера: "Chip Select", "Host Read", "Host Write". |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 декабря 2017 12:39 Сообщение отредактировано: 2 декабря 2017 12:46
Rio444 написал: Все варианты возможны, кстати модификация BIOS для Award (если достаточно размаскировать IRQ12 Мне видится более интересным вариант модификации MBR. Делают же это как-то вирусы? итп, те есть отлаженный код) довольно простая. Надо или внедрится в POST jump table (после настройки 8259, на место dummy,онми всегда есть) Или добавить ISA module в BIOS, с помощью CBROM (это менее надежно). Основная здесь сложность (если не требовать спец драйвера, те если контроллер kbd+mouse по С этим вопросом перекликается другой, очень интересный. Возможно ли создание контроллера PS/2 мыши на отдельной ISA плате? стандартным адресам, и также минимум доработок платы), это полностью отключить встроенный контроллер, те сть весь функционал переложить на ISA плату. Возможно, достаточно изъять 8042 из панели, или если он запаян, организовать посоянно RESET или отсутствие выборки #CS для него. (8042 - не совсем 8048, он специально предназначен для работы в составе микропроцессорных систем, есть изменения, в виде наличия A0 и CS в частности). Если он подключен к шине данных ISA без дополнительных буферов (типа LS 245, это легко проверить), то изымания должно быть достаточно, тк вместо встроенного быдет выбираться внешний, а дешифратор буден на ISA плате, те ситуации когда на шине ISA окажутся два устройства по одному адресу, не должно быть. upd. В оригинальной AT буфер есть, отделяющий внутреннние устройства, от устройств на ISA. Тогда правильнее контроллер по нестандартным адресам, со своим драйвером. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 декабря 2017 13:37 Сообщение отредактировано: 2 декабря 2017 13:39
i8088 написал: Не совсем понял, как это влияет? В оригинальной AT буфер есть, отделяющий внутреннние устройства, от устройств на ISA. i8088 написал: Это мне кажется совсем не сложным. Прямой и грубый вариант - откусить ногу /CS и повесить её через резистор на +5В. Основная здесь сложность... это полностью отключить встроенныйконтроллер Возможно, есть какие-то программные варианты. i8088 написал: Возможно ли это? Помимо обслуживания мыши и клавиатуры, KBC, как минимум, управляет А20 Gate и программным Reset. те сть весь функционал переложить на ISA плату. Схему изучал давно, но помнится, не все сигналы выведены на ISA. Придется бросать провода с ножек 8042, что нивелирует весь смысл затеи. Наверное, проще оставить существующий KBC, но отключать его, когда идёт обращение к портам 60h и 64h, выделяя команды для мыши и клавиатуры. Причем очень оперативно. Наверное, с помощью ПЛИС. Так, чтобы команды, связанные с А20 Gate и Reset продолжали работать. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Rio444 написал: Даже если отключить контроллер KBC, буфер двунаправленный может быть будет Не совсем понял, как это влияет? выбран при обращении к портам KBC, и будет передавать логические единицы на ISA. Rio444 написал: Черт, я совсем забыл за это! Тогда да, полная замена KBC без проводов от ISA платы невозможна. Помимо обслуживания мыши и клавиатуры, KBC, как минимум, управляет А20 Gate и программным Reset. Rio444 написал: По моему это несколько громоздко и не очень надежно, опять таки не на всех платах 8042 в явном виде... Наверное, проще оставить существующий KBC, но отключать его, когда идёт обращение к портам 60h и 64h, выделяя команды для мыши и клавиатуры. Причем очень оперативно. Наверное, с помощью ПЛИС. Так, чтобы команды, связанные с А20 Gate и Reset продолжали работать. Мне все же кажется, правильнее делать платы по нестандартным адресам, со своим драйвером, специально для мыши, это будет пригодно и для плат, где нет "настоящего" 8042. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 вот тут ещё одна мысль появилась. Что если использовать плату, которая ОС будет видна как упомянутая выше "Bus Mouse"? А фактически это будет переходник с "Bus Mouse" на PS/2 мышь. В википедии пишут, что Bus Mouse выпускалась до ~2000 года. Все старые ОС должны её знать. Остаётся это проверить и найти документацию на протоколы Bus Mouse. |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 2 декабря 2017 14:18 Сообщение отредактировано: 2 декабря 2017 14:20
Я тут почитал - ISA плата по стандартным адресам не будет работать, тк чтение по адресам 0h -0ffh (при наличии устройства) не распрстраняется на шины расширения. Rio444 написал: Насколько помню, Bus Mouse это просто несколько линий портов ввода-вывода, и запрос прерывания. В принципе возможно, только Что если использовать плату, которая ОС будет видна как упомянутая выше "Bus Mouse"? такая мышь не может программироваться (если только в обработчике OS это не имитируется возможностью изменения скорости итп), те это похоже на переход с клавиатуры AT на XT Протоколы надо будет изучить очень тщательно, для написания программы ля MK. Только по скорости - не будет ли ситуации как с COM->PS2. ISA конечно быстрее COM, но протокол BUS Mouse не вносет ли ограничения? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
i8088 написал: Есть такие опасения. Только по скорости - не будет ли ситуации как с COM->PS2.ISA конечно быстрее COM, но протокол BUS Mouse не вносет ли ограничения? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Win95 после запуска драйвера подхватила PS/2 мышь легко и непринужденно, причем ещё на этапе установки. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 12 декабря 2017 23:56 Сообщение отредактировано: 13 декабря 2017 0:14
Проверил на AMD 5x86-133@160. Для 286 пришлось перекомпилировать. По умолчанию NASM компилирует под 386. Проверил на 286-16. В том числе, в детурбированном режиме (производительность примерно 286-10). В памяти занимает 1,1кб. PS2SUPP rev.1.0.2 Надеюсь скачавшие используют по прямому назначению)))) |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Поздравляю с написанием полезной программы!! Осталось еще, что доделать, вопросы нерешенные итп? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Спасибо! Сейчас занимаюсь новым вариантом аппаратной части. Схема та же, но в железе чтобы было более удобно и практично. Планирую сделать полностью на SMD элементах. Пока основная загвоздка в миниатюрном 4-пиновом SMD разъёме, с шагом ~1,25мм. Надеюсь, найдётся на радиорынке. Но гарантий никаких. Если у кого-то есть намётки, буду рад помощи. Желательно, чтобы размер (вместе с ответной частью) не превышал 7х6х4мм (ШхГхВ). Также есть пожелания, чтобы это работало в NT и других осях, которые не используют DOS, и нет возможности загрузить драйвер до загрузки оси. Для меня это не очень актуально. Но, может со временем... Самое простое решение видится в добавлении кода в загрузчик. Но пока не вникал. Кстати, у большинства 286-х контроллер клавиатуры уже стоит в панельке. Модификация самая простая - остаётся только подкинуть Irq12. На 386-х примерно в каждой 4-й или 5-й материнской плате. 486-е такие мне пока не попадались. |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Предлагаю в первом посте написать то, что достигнуто + фотки. Иначе 8 страниц - не осилю читать |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
ОК, постараюсь вечером сделать. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Ekb написал: Наконец наступил этот "вечер", добавил в первый пост. Предлагаю в первом посте написать то, что достигнуто + фотки. Иначе 8 страниц - не осилю читать |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 19 декабря 2017 11:37 Сообщение отредактировано: 19 декабря 2017 11:39
Продолжаю свой блог Вчера попробовал запустить на WinNT 3.51, добавив в MBR такой код: MBR HEX Он затирает командой JMP первые три байта MBR (FA 31 C0), но перед возвратом их выполняет (строчки 01A2 и 01A0). Код работает отлично - наличие мыши добавляется в список оборудования по адресу 0040:0010h, размаскировывается прерывание Irq12 в PIC. Но мышь не работает((( Думаю, либо надо все эти действия производить на этапе установки Win, либо, всё таки, WinNT 3.51 использует какие-то службы BIOS. Например, перед загрузкой, ещё в реальном режиме, инициализирует мышь службой C2 прерывания int 15h. Завтра поэкспериментирую с Win95. Она точно подхватывает PS/2 мышь даже будучи полностью установленной. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 22 декабря 2017 12:10 Сообщение отредактировано: 22 декабря 2017 16:14
Поигрался вчера с Win95. Предполождения подтвердились. Если исключить (или не включать) мышь в список оборудования по адресу 0040:0010h, то при загружке Win: "Мышь не обнаружена, COM мышь можете подключить прямо сейчас". Если не размаскировать Irq12, то вроде всё нормально, мышь обнаруживается, Win загружается, но компьютер не реагирует ни на мышь, ни на клавиатуру. Выходной буфер 8042 заполняется, а освободать его некому. Irq12 не срабатывает, int 74h не вызывается. Если "отключить" обработку Irq12 (int 74h), то мышь вполне себе работает. Что тоже логично. Было бы глупо, если бы Win из защищенного режима вызывала обработчик реального режима. То есть Windows полностью подменяет обработчик int 74h своим. Правда, есть одно но. Если вы перезагрузите Windows в "режиме эмуляции MS-DOS", то штатный обработчик Windows работать не будет. Он работает только в защищенном режиме. Драйверы мыши тоже работать не будут. Если отключить обработчик int 15h служб C200...C207, то происходит ровно тоже, что и в самом первом случае: "Мышь не обнаружена, COM мышь можете подключить прямо сейчас". Причем, Windows использует при загрузке все восемь служб, начиная с C200 и заканчивая C207. Если вместо любой из них поставить заглушку, возвращающую аппаратную ошибку мыши, то результат всегда одинаков. Возвращаясь к вопросу Win NT. Конечно выяснившиеся обстоятельства несколько затрудняют задачу. Но после MBR следуют как минимум несколько свободных, ни под что не используемых секторов (в моём случает 63 по 512кБ), так что есть, где развернуться)))) Если найдутся желающие - велкам в личку. Поделюсь всеми наработками. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Переделал на SMD компонентах, полностью по приведенной выше схеме. Залил эпоксидным клеем. Толщина текстолита - 0,5мм. Высота устройства в панельке на 1,5мм больше по сравнению с обычной микросхемой. В принципе, можно уложиться в 1,0мм. Слишком много налил эпоксидки на шлейф. Форма для заливки получается довольно сложной. Из-за того, что с наружной стороны ножки должны быть слегка оголены. А SMD элементы надо наоборот залить потолще. Идально залить не получилось, поэтому после заливки пришлось дополнительно обработал "напильником". Из-за этого поверхность заливки не везде глянцевая. Заодно доработал драйвер (ссылка в первом посте). Раньше при переходе из одной программы в другую изредка терялась последовательность чередования байтов в пакете от мыши. Курсор начинал "метаться" по экрану. С новой версией такой эффект поймать не удалось. |
XPOHOMETP
Advanced Member
Всего сообщений: 752 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мая 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 6 февраля 2018 11:39 Сообщение отредактировано: 6 февраля 2018 11:44
Rio444 написал: А с какой целью заливали то? Сопутствующие темы про эпоксидку читал... Залил эпоксидным клеем.Залил эпоксидным клеем.Залил эпоксидным клеем. Если шлейф отходящий зафиксировать - так его отдельно приклеить можно. Если схему заизолировать - лак и кисточка в руки Не в плане надежности Вашей схемы, но любое покрытие ремонтопригодность снижает |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 6 февраля 2018 13:01 Сообщение отредактировано: 6 февраля 2018 13:02
XPOHOMETP написал: Для прочности. Если "поставил и забыл", думаю достаточно лаком покрыть. А с какой целью заливали то? У меня сейчас один экземпляр такой. Пока не сделаю несколько, буду перетыкать из платы в плату этот. Там есть очень ненадежные с механической точки зрения места: - 20, 38, 39, 40* ноги припаяны к дорожкам на краю платы, т.е. пропаян стык 90 градусов между ножкой и платой. Много припоя туда нельзя, будет мешать заходить ножкам в панельку; - 38 и 39 ноги "фиктивные", согнуты буквой "Г" и приклеены на суперклей к тыльной стороне платы. Вот за эти элементы опасения. Шлейф приклеен к плате суперклеем до заливки эпоксидкой. *первая нога - со стороны шлейфа. |
XPOHOMETP
Advanced Member
Всего сообщений: 752 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 13 мая 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 6 февраля 2018 19:01 Сообщение отредактировано: 6 февраля 2018 19:02
Rio444 написал: Классическая эпоксидка конечно добавит толщины для прочности, но сама по себе она тоже вещь весьма хрупкая. Там есть очень ненадежные с механической точки зрения места Был какой-то вариант для ремонта обуви, типа лопнувшие подошвы клеить. Сам не пробовал, потому марку не подскажу, но от знакомых положительные отзывы слышал. Клей именно на эпоксидной основне имелся ввиду... Rio444 написал: Это в любом случае штучное изделие. 20, 38, 39, 40* ноги припаяны к дорожкам на краю платы, Намотайте на ножку тонкий проводок, его и на плату заведите (а потом всё вместе пропаять). Ну а в текущей ситуации ИМХО вопрос не в припое, а насколько крепко дорожка к плате держится. Если при пайке не перегревать, то не оторвутся они. Вы же не советском гетинаксе делаете... |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 6 февраля 2018 19:23 Сообщение отредактировано: 7 февраля 2018 11:13
XPOHOMETP написал: Не знаю, на каком. Покупал на местном радиорынке. Подозреваю, что китайский. Но, точно стеклотекстолит, а не гетинакс. Вы же не советском гетинаксе делаете... XPOHOMETP написал: Вы видели мою тему по эпоксидке. В конце-концов остановился на имеющейся каменской. Классическая эпоксидка конечно добавит толщины для прочности, но сама по себе она тоже вещь весьма хрупкая. ММ меня успокоил. Увеличил количество отвердителя до соотношения 15:100, и стала нормально застывать. Даже через несколько дней, после полного отвердения, она не производит впечатление хрупкой. Вчера лишнее отпиливал дремелем. Пилилась нормально, куски не откалывались. XPOHOMETP написал: Была такая мысль. Но не реализовал. И так слишком много мелкой работы. Намотайте на ножку тонкий проводок, его и на плату заведите (а потом всё вместе пропаять). Текущий вариант мне кажется вполне приемлемым. Единственный минус - до заливки эпоксидкой микросхема садилась глубже в панельку. Мешал только шлейф. Если срезать немного боковой стенки панельки, думаю можно было бы запихать до конца. |
IdeaFix |
NEW! Сообщение отправлено: 7 февраля 2018 10:42
А можно фоточку реализации проводника между контроллером и ISA слотом? Или такого уже нет? |
Сейчас на форуме |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Можно конечно. Вечером. Там ничего особенного. Обычный МГТФ с обратной стороны платы. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 | |
IdeaFix |
NEW! Сообщение отправлено: 7 февраля 2018 23:08
Понятно. Ну и ISA слот при этом функционален. Блин, круто! |
Сейчас на форуме |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
IdeaFix написал: Конечно функционален. Понятно. Ну и ISA слот при этом функционален. И если вернуть назад обычную микросхему контроллера, всё работает как обычно. Подключение Irq12 с ISA никак не мешает. Более того, коллега с вогонс утверждает, что на всех его платах контроллер уже изначально подключен к IRQ12. Либо я его неправильно понял. |
Ekb
Advanced Member
Всего сообщений: 1628 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 июня 2014 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 февраля 2018 12:51 Сообщение отредактировано: 17 февраля 2018 12:51 Оффтопик: Оффтопик: Пипец как сложно искать в здешнем "Поиске", не находит то "mouse", то "ps/2", то ника "rio444" Может кому пригодится, тоже извратили над PS/2 протоколом: https://www.vogons.org/viewtop...p;start=20 |
mindforms
Advanced Member
Откуда: Ростов Всего сообщений: 1085 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 31 янв. 2008 |
круто! осталось подключить к usb... валяется у меня Cherry MХ5000 из далекого 1996 года. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
Ekb написал: Так ссылка уже есть в 6-м сообщении этой темы. Там, где фотография с vogons. Может кому пригодится, тоже извратили над PS/2 протоколом: mindforms написал: Спасибо! Что подключить? круто! осталось подключить к usb... валяется у меня Cherry MХ5000 из далекого 1996 года. |
mindforms
Advanced Member
Откуда: Ростов Всего сообщений: 1085 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 31 янв. 2008 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 17 февраля 2018 13:35 Сообщение отредактировано: 17 февраля 2018 13:40
Rio444 написал: я неверно выразился. подключить АТ к USB, но это мало того, что совершенно отдельный контроллер так еще и далеко от темы СТАРЫХ плат, сорри Что подключить? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
mindforms написал: AT в USB смысла нет. Прямая переделка невозможна. переделать АТ в USB А отдельный контроллер - да возможно. Но слишком много нюансов и сложностей. Тут предлагали сделать ISA USB контроллер. Но чтобы его потянуть, нужен процессор не ниже Pentium. Уже на 486-х заметны тормоза. Учитывая, что на пентиумных и поздних 486-х есть PCI, и существуют готовые USB PCI карты.. Делать конвертер USB PS/2 тоже особого смысла нет. Простым он небудет. Дешевле купить PS/2 мышь. Их до сих пор даже новых в достатке. |
mindforms
Advanced Member
Откуда: Ростов Всего сообщений: 1085 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 31 янв. 2008 |
Rio444, это все волна увлечения механикой. у меня периодически возникает идея допилить старушку черри |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
Rio444 написал: Чтобы что к нему подключать ? Тут предлагали сделать ISA USB контроллер. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
justontime написал: В первую очередь USB flash. Также мышь. |
justontime
Full Member
Откуда: СПб Всего сообщений: 236 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 10 сен. 2016 |
Rio444 написал: Тогда не понимаю насчет требуемого жуткого быстродействия компьютера. Для USB flash уже есть В первую очередь USB flash. Также мышь.адаптер Для мыши можно сделать плату на базе 5-долларового микроконтроллера (плюс, скорее всего, некоторая обвязка). Или я неправильно понял идею ? |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
justontime написал: Не вникал в этот вопрос. Тогда не понимаю насчет требуемого жуткого быстродействия компьютера. Для USB flash уже есть адаптер Только на собственном опыте знаю, что если в USB воткнута флешка, в системах уровня Pentium I и даже старше, снижаются результаты тестов. Если с этой флешкой производятся операции чтения-записи, расходуется значительный ресурс процессора. Подобные отзывы слышал от других участников форума. justontime написал: Т.е. готовое устройство будет стоить не менее 10$. Для мыши можно сделать плату на базе 5-долларового микроконтроллера (плюс, скорее всего, некоторая обвязка). В чем смысл, если за 100-200 руб. можно купить б/у оптическую PS/2 мышь, а за ~300 руб. новую или универсальную, с переходником? |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 ... .. 12 13 14 15 16 17 | Печать |
Полигон-2 » IBM PC-совместимое. До 2000 года включительно » Переделка АТ интерфейса клавиатуры в PS/2 на старых платах |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |