Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

Переделка АТ интерфейса клавиатуры в PS/2 на старых платах

Уровня 386-х, 486-х, чтобы можно было подключить PS/2 мышь.

<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... .. 12 13 14 15 16 17
Печать
 
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Краткое изложение последующих 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
Гость

Ссылка

Видел на картинках плату в разъём клавиатурного BIOS, в который вставлялся собственно клавный BIOS и была гребенка для PS2 мыши
Сейчас на форуме
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
пользователь написал:
[q]
[/q]
Да, видел эту тему. ISA плата - только для Bus Mouse. https://en.wikipedia.org/wiki/Bus_mouse
Её сейчас сложнее найти, чем шариковую COM.
Конвертер протокола PS/2 в COM даже в отдельной теме обсуждался.
Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват.
Хочется, так сказать, нативно.

IdeaFix написал:
[q]
Видел на картинках плату в разъём клавиатурного BIOS, в который вставлялся собственно клавный BIOS и была гребенка для PS2 мыши
[/q]
Где?
IdeaFix
Гость

Ссылка

Rio444
Вот сейчас гуглю, не могу нагуглить.... т.е. это была платка небольшая, котоаря втыкалась в ДИП40 вместо клавного биоса, а на ней самой был клавный биос (тоже в дип40) и что-то еще из логики, ну и 5пин гребенка под PS/2.
Сейчас на форуме
IdeaFix
Гость

Ссылка

Во!


http://www.vogons.org/viewtopi...p;start=60

Но я по диагонали читал, может это и совсем не то...
Сейчас на форуме
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
IdeaFix написал:
[q]
и что-то еще из логики
[/q]
7405 нужна была, либо 7407, в зависимости от прошивки.
IdeaFix
Гость

Ссылка

Если кто-то освоит выпуск таких штук даже на макетке - стал бы постоянным покупателем :)

Но я так понял там есть какие-то блокирующие баги, то ли на isa надо кидать хвост какой-то, то ли еще что-то, но повторюсь, читал по диагонали.
Сейчас на форуме
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Прерывание от ps/2-мышки на irq12 протаскивать надо. В 386 только клавиатурное разведено до 8042.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
IdeaFix, спасибо! То, что нужно.
Бегло просмотрел. Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал.

Anonymous написал:
[q]
Прерывание от ps/2-мышки на irq12 протаскивать надо.
[/q]
Это не сложно. IRQ12 сидит на ноге D5 разъема ISA16.

IdeaFix написал:
[q]
Если кто-то освоит выпуск таких штук даже на макетке - стал бы постоянным покупателем
[/q]
В варианте на картинке получается довольно толстый "бутерброд". На моей материнке, для которой всё затеял, прямо над контроллером 8042 сидят VLB карты. Зазор миллиметров 5, не больше. Кстати, сейчас посмотрел другую плату, там контроллер под ISA платами. Их можно в принципе не ставить.
Не на всех материнках контроллер стоит в панельке. Его придется выпаивать и запаивать панельку.
Сколько штук Вам было бы интересно и порядок цены?

Anonymous написал:
[q]
IdeaFix написал:
[q]
и что-то еще из логики
[/q]
7405 нужна была, либо 7407, в зависимости от прошивки.
[/q]
Истина где-то рядом(с) 7406.
IdeaFix
Гость

Ссылка

Rio444
Зависит от цены и совместимости.... мне было бы интересно полдюжины если оно было бы совместимо с моими платами и не сильно бы урезало возможности системы (в плане ISA слотов и пр). А насчет ISA и того что DIP40 будет мешать платам, у меня есть такие платы, которым DIP40 штатно стоящий на плате мешает :( В основном это мультикарты, у которых ком дб25 и гейм порт на плате - широко...

На последней странице указанной мной темы есть картинка сборки контроллера на панельке. Т.е. если панельки ранее не было - высотка будет так или иначе штатной (панелька+микросхема)
Сейчас на форуме
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
IdeaFix, а не думали сами такое собрать? Или поучаствовать в разработке?
Схему я сделаю, вопрос в программной части.

IdeaFix написал:
[q]
На последней странице указанной мной темы есть картинка сборки контроллера на панельке. Т.е. если панельки ранее не было - высотка будет так или иначе штатной (панелька+микросхема)
[/q]
Вообще, там две панельки. Панелька, которая на картинке - вторая, которая вставляется в панельку на материнской плате (которой могло исходно не быть).
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Идейно правильной я считаю была бы разработка ISA платы специально под
это дело. Даже стало жаль что мышь на машинах такого класса мне не нужна
абсолютно:) Да и на основной машине мышь только для интернета...
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088, мне кажется будет гораздо сложнее и точно в разы дороже.
По сути придется дублировать 8042 со всеми сигналами.
Без Вашего участия, точно не осилю :)
IdeaFix
Гость

Ссылка

Rio444 я могу понять когда не искушенные в ПК посетители моего бложика, получившие помощь по вопросам 771 мода начинают задавать сложные вопросы, на которые у меня нет ответов, но тут-то уважаемое комьюнити должно однозначно оценивать плинтусный уровень моих знаний :) Поучаствовать я могу только материально. К тому же, материальные ресурсы хоть ограничены, но есть, а вот временных нет :(

По поводу конструктива - можно же и не выпаивать ничего - напаять соплей с тыльной стороны платы или вовсе сделать "накладку" с тыльной стороны, как иной раз и именитые производители делали в случае исправления багов разводки. Тут конструктив имхо не так важен - руки с конструктивом развязаны совершенно, а вот потенциальный мод биоса и задействование одновременно дип40 и иса и куча других проблем... кстати, авард на 486pci коллеги вроде победили.

i8088
Под дип40 есть почти готовый проект которым можно вдохновляться, под PCI есть даже китайские адаптеры, которыми можно вдохновляться, или просто их купить, а под ISA придётся что-то изобретать полностью самостоятельно. Уровень у меня, как уже говорил выше, плинтусный, но мне задача с ISA платой кажется куда более комплексной, но конечно и более изящной.
Сейчас на форуме
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Rio444 написал:
[q]
Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал.
[/q]
Все полноценные ОС используют после загрузки свой драйвер, биос после запуска ядра идёт отдыхать. Гляньте мою древнюю тему про оживление безбиосной промплатки.

Rio444 написал:
[q]
В варианте на картинке получается довольно толстый "бутерброд".
[/q]
Есть же планарные 8742...

Rio444 написал:
[q]
Истина где-то рядом(с) 7406.
[/q]
Это высоковольтовая, 30в (оно зачем надо?), полный аналог 7405 по выводам. 7407 - без инверсии, потому и написал о зависомости от версии прошивки.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
IdeaFix написал:
[q]
По поводу конструктива - можно же и не выпаивать ничего - напаять соплей с тыльной стороны платы или вовсе сделать "накладку" с тыльной стороны
[/q]
Скорее всего не получится. Там смысл в замене контроллера без поддержки PS/2 на контролер с поддержкой.
И часть сигналов в принципе по-другому идёт. То есть, надо будет не только добавлять, но и перерезать какие-то дорожки.
IdeaFix
Гость

Ссылка

Ну, я далее просто зритель и/или покупатель... по делу ничего сказать не могу :)
Сейчас на форуме
Anonymous
Advanced Member


Откуда: Москва(Россия)
Всего сообщений: 2537
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
22 нояб. 2011
Rio444 написал:
[q]
Там смысл в замене контроллера без поддержки PS/2 на контролер с поддержкой.
[/q]
А в этом и смысл, мышка 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 написал:
[q]
Rio444 написал:
[q]
Истина где-то рядом(с) 7406.
[/q]
Это высоковольтовая, 30в (оно зачем надо?), полный аналог 7405 по выводам. 7407 - без инверсии, потому и написал о зависомости от версии прошивки.
[/q]
7406 - рекомендации производителей. В типовых схемах именно она. Хотя, наверное, можно поставить и 7405.

Anonymous написал:
[q]
Rio444 написал:
[q]
Как понял, главная загвоздка - поддержка биосом. Если поддерживает, то всё ОК. Если нет - нужно писать свой обработчик прерывания от мыши. Насколько понял, никто его ещё не написал.
[/q]
Все полноценные ОС используют после загрузки свой драйвер, биос после запуска ядра идёт отдыхать. Гляньте мою древнюю тему про оживление безбиосной промплатки.
[/q]
Возможно, начиная с Windows NT. Win9x использует прерывания Bios.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
По поводу IRQ12 - никакого обработчика писать не требуется (этим занимается PS2 mousedriver, а BIOS я думаю ставит просто IRET).
[/q]
Всё не так просто. При "срабатывании" IRQ12, через прерывание Bios вызывается обработчик, которой уже вызывает драйвер мыши.
Для иниализации этого обработчика вызывается другое прерывание, через которое назначается адрес драйвера мыши.

i8088 написал:
[q]
Здесь можно попробовать помочь, только datasheet на старый PS2+mouse controller надо поискать.
[/q]
Даташиты: HT6542B, VT82C42, Intel 87C42.
Если мало, ещё найду.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Контроллер определяет, в каком режиме он работает (АТ или PS/2) по схеме включения. Для остальной части компьютера режим работы контроллера значения не имеет. Разве что, в режиме АТ невозможна работа мыши PS/2. Клавиатура работает одинаково в обоих режимах.
Подключение контроллера в режиме АТ (из даташита на VT82C42):

В режиме PS/2:
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Всё не так просто. При "срабатывании" IRQ12, через прерывание Bios вызывается обработчик, которой уже вызывает драйвер мыши.
[/q]
Спасибо!

Нашел в исходниках 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
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 написал:
[q]
Господа, если все так сложно, не проще сделать com-ps2 конвертер и не париться? Вот тут все есть - http://www.vogons.org/viewtopic.php?f=46&t=42862
[/q]
Это даже здесь есть http://www.phantom.sannata.ru/...amp;st=all
Но, как писал выше
[q]
Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват.Хочется, так сказать, нативно.
[/q]
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 написал:
[q]
Ну а есть же уже отовые платы isa на ps/2 mouse
[/q]
боюсь что нет
на pci есть
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Да, там можно по отдельности отключать прерывание IRQ12 и саму
mouse part of controller .
[/q]
Это как? Можно поподробнее?

i8088 написал:
[q]
Для проверки аппаратной части устройства
можно использовать FreeBSD.
[/q]
Фряха биос полностью игнорирует?
Что можно поставить на iDX2-66(@80), память 8Мб? Могу расширить до 16 или 32Мб.

Bobo написал:
[q]
Mihail1810 написал:
[q]
Ну а есть же уже отовые платы isa на ps/2 mouse
[/q]
боюсь что нет
на pci есть
[/q]
Для ISA есть только Bus Mouse. Внешне похожа, но совсем не то. Сейчас встречаются очень редко и в основном шариковые.
На PCI есть, но для рассматриваемых платформ это не актуально. 486-ю материнку с PCI можно найти и с поддержкой PS/2 мыши.
На 386 и 486-х VLB это только брендовые материнки для горизонтального корпуса с райзером.
У меня есть даже 286-я такая материнка.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Это как? Можно поподробнее?
[/q]
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 написал:
[q]
Фряха биос полностью игнорирует?
[/q]
Не то чтобы полностью, но можно заставить игнорировать. Например,
цитата из 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
i8088 написал:
[q]
[/q]
Спасибо! Покурю.

Вот набросал схемку переделки. Синим цветом - то, что исходно уже есть на материнской плате. X1.1 и X1.2 - панелька под контроллер клавиатуры. Старый вытаскиваем. Вставляем новый с обвязкой. Сажаем на 36-ю ногу IRQ12 перемычкой на материнской плате.
Черным цветом - то, что добавляем.

Вроде не сложно получилось.
Как считаете, взлетит?
Особо вопрос по резисторам R1, R3, R5 в цепях баз транзисторов. Нужны ли они, или можно обойтись? Конкретно VT82C42N выходы, к которым подключены базы - TTL-совместимые. Что будет, если подключить базы без транзисторов?
Bobo
Advanced Member


Откуда: СПб
Всего сообщений: 3628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
16 авг. 2007
Rio444 написал:
[q]
Для ISA есть только Bus Mouse. Внешне похожа, но совсем не то. Сейчас встречаются очень редко и в основном шариковые
[/q]
да - есть Microsoft, Logitec только штырьков там больше чем в PS/2, поэтому что их упоминать
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Особо вопрос по резисторам R1, R3, R5 в цепях баз транзисторов. Нужны ли они, или можно обойтись? Конкретно VT82C42N выходы, к которым подключены базы - TTL-совместимые. Что будет, если подключить базы без транзисторов?
[/q]
Если выходы чисто TTL, да еще мощные - то резисторы обязательны. Для
two-way port тоже не стоит исключать резистор, тк если он когда нибудь
работает на ввод, то будет введен лог 0. А почему Вы использовали
транзисторы, а не логические элементы? Просто не хватает места для
корпуса инвентора с открытым коллектором, я правильно понял?

Транзистор/инвентор VT1 и связанный с ним повторитель
были на плате изначально?
А все, понятно:)

Ошибок не нашел:)
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Просто не хватает места для
корпуса инвентора с открытым коллектором, я правильно понял?
[/q]
Да, это одна из главных причин.
Вторая - доступность 7406. Если в DIP исполнении их ещё можно найти, то в SOIC гораздо сложнее. Даже в чипе с дипом только на заказ. С ибея ждать долго.
Да и нужна ли там ИС? Разве транзисторы не справятся?

i8088 написал:
[q]
Ошибок не нашел
[/q]
Спасибо! Буду собирать.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Кстати, вот в этой теме, коллега hyperborean высказал весьма здравые мысли.

hyperborean написал:
[q]
Чисто теоретически можно (не проверял, только идея):

1. Заменить 8242 контроллер на поддерживающий PS2_AUX порт
2. Вставлять его в панельку через переходник, который отводит PS2_AUX data и clock на внутреннюю гребенку под PS2-выкидыш как у поздних 486 и Pentium материнок (на переходнике ещё, видимо, понадобится инвертор 7406)
3. Придется протянуть IRQ12 от ISA шины проводочком (ну либо небольшая платка как у Tekram DC-690 для съема прерывания с ISA шины)
4. Понадобится резидентная программа драйвер которая дополнит биосовский сервис прерывания 15h функцией C2h (PS2 pointing device). Она будет висеть на int 74h (IRQ12) и int15h (перехват функции C2h), а также инициализировать порт контроллера клавиатуры и включать IRQ12 во втором PIC.
[/q]
Пункты с 1 по 3-й мне понятны. Собственно, в схеме выше это всё реализовано.
А вот с 4-м пока толком не разобрался.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Попробуйте, протестировать можно во FreeBSD (ему этот DOS севис реального режима до лампочки).

Кстати, я подумал, мышь должна и в NT4 работать (2000 поставить на 486 трудно).

Относительно включения mouse part в 8042 и размаскирования
8259 мне понятно, а вот взаимодействие IRQ12 -> INT74 -> драйвера ps2 mouse мне пока что не очень ясно.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Кстати, я подумал, мышь должна и в NT4 работать (2000 поставить на 486)
[/q]
А NT 3.51? Она больше по возрасту подходит.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
А NT 3.51? Она больше по возрасту подходит.
[/q]
Попробовать можно. Ядро и идеология по идее не сильно отличается. Только - он поддерживает PS2 mouse (я не помню)? Я его ставил один раз очень давно...
ATauenis
Advanced Member


Откуда: Москва
Всего сообщений: 2904
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 апр. 2015
i8088 написал:
[q]
Только - он поддерживает PS2 mouse (я не помню)? Я его ставил один раз очень давно...
[/q]
Поддерживает, без проблем.
hyperborean
Junior Member


Откуда: Санкт-Петербург, Великий Новгород
Всего сообщений: 131
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2011
i8088 написал:
[q]
8259 мне понятно, а вот взаимодействие IRQ12 -> INT74 -> драйвера ps2 mouse мне пока что не очень ясно.
[/q]
INT33 - драйвер мыши для прикладного ПО, реализуется в TSR драйвере (условный mouse.com), но INT74 - обработчик прерываний контроллера - реализован в биос соответствующим драйвером, который предоставляет API INT15, а mouse.com использует либо RS232 для COM-мышей, либо API INT15 функция C2 для PS/2 мышей

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 написал:
[q]
Работать, работает, но всё равно часть информации теряется. Это как кинопленку переписывать на видеокассету. Разные форматы, разные носители, частота кадров, цветовой охват.
Хочется, так сказать, нативно.
[/q]
У меня есть такой блок-конвертор. Как проверить "разные форматы, разные носители, частота кадров, цветовой охват" ? :)
Швейк
Advanced Member


Откуда: Подмосковье
Всего сообщений: 482
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
21 окт. 2016
А в чём состоит сакральный смысл оптической мыши?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
У меня есть такой блок-конвертор. Как проверить "разные форматы, разные носители, частота кадров, цветовой охват" ?
[/q]
В разных программах (преимущественно в играх под DOS; в NC и Windows это менее заметно), путём:
1) прямолинейно, медленно и плавно двигать мышью с разные стороны. Убедиться, что курсор движется по экрану также плавно, без "заеданий" и скачков,
2) резко начинать движение мышью, резко менять её направление движения, резко останавливать. Убедиться, что курсор на экране не отстаёт от мыши и не продолжает движение, когда она уже остановилась.

При существующих и, в принцие возможных, алгоритмах преобразования кода PS/2 в COM в реальном времени, курсор мыши "хорошо себя ведет" или в первом случае, или во втором.
Возможны "промежуточные" алгоритмы, когда и в первом и во втором случае курсор движется не идеально, но приемлемо.
Реализаций я пока не встречал. Возможно, как-нибудь займусь сам.

hyperborean написал:
[q]
Но, конечно, проблема физического размещения платы-расширения добавляет изрядную ложку дёгтя во всю затею.
[/q]
Абсолютно с Вами согласен. С другой стороны, самое сложное - выпаять "старый" контроллер клавиатуры. Впаять панельку и бросить перемычку на IRQ12 уже не сложно.


Швейк написал:
[q]
А в чём состоит сакральный смысл оптической мыши?
[/q]
1. Не нужен коврик. Работает по любой поверхности.
2. Не нужно чистить.
3. PS/2 оптические мыши до сих пор доступны в ассортимете. Можно даже новую приобрести. Найти хорошую COM шариковую уже проблематично. У меня из трёх хорошо работает только одна. Остальные, то ли изначально были некачественные, то ли резина от времени усохла.
hyperborean
Junior Member


Откуда: Санкт-Петербург, Великий Новгород
Всего сообщений: 131
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2011
Rio444 написал:
[q]
Впаять панельку и бросить перемычку на IRQ12 уже не сложно.
[/q]
Я подумал о случае когда контроллер расположен под платами расширения ISA как, например, на Baby AT 386 материнках. В этом случае высота переходника не позволит его использовать
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
hyperborean написал:
[q]
[/q]
Если есть хоть небольшой зазор, ~6..8мм, то можно влезть. Если меньше, то да, проблематично.
Придется придумывать что-нибудь экзотическое, чтобы подключить панельку с контроллером. Или поискать другую плату.
IdeaFix
Гость

Ссылка

Коллеги, ну нет проблем с "высотой". Ну совсем нет.

Вот смотрите... это плата в базе и BIOS у неё родной. И плата расширения - канонический трезубец девятитысячный:
https://pp.userapi.com/c639228...tcUyxY.jpg

Ну не садится и всё тут :)

И платы с клавиатурным контроллером в панельке в этом месте "не совместимы" с большим количеством видеокарт и мультикарт. Но кто-то переживает по этому поводу? Нет, все молча берут другую видеокарту или мкультяху или молча перевтыкают карту в другой слот, который не пересекается с микросхемой. Ведь так?

К тому же, в теме по ссылке есть и реализация навеской на макетке и реализация ВНУТРИ панельки и своё что-то соорудить с тыльной стороны никто не мешает.

Вы же умные... не отвлекайтесь на форму, давайте быстрее прототип :) Я б купил! :08:
Сейчас на форуме
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
hyperborean спасибо! Теперь более-менее понятно.
Ekb
Advanced Member


Всего сообщений: 1628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2014
Rio444 написал:
[q]
В разных программах (преимущественно в играх под DOS; в NC и Windows это менее заметно), путём:
1) прямолинейно, медленно и плавно двигать мышью с разные стороны. Убедиться, что курсор движется по экрану также плавно, без "заеданий" и скачков,
2) резко начинать движение мышью, резко менять её направление движения, резко останавливать. Убедиться, что курсор на экране не отстаёт от мыши и не продолжает движение, когда она уже остановилась.
[/q]
Включил XT, снова подергал мышку в VC... ощущения абсолютно прозрачное, как и на основном 4-х ядерном компе.
К слову, даже на основном компе с графикой 1280x720 - тоже курсор перепрыгивает через 10-20 пикселей, при быстром движении по кругу. Это заметно на глаз.
Конвертор, точно также перепрыгивает несколько символов в VC. Это проблема низкого разрешения самой мышки (300dpi?)

Если человеку не знать, что перед ним находится, то возникает ощущения, что это обычный эмулятор XT под 4-х ядерном. Другими словами, конвертор абсолютно прозрачен. Стартует мгновенно и застопаривается мгновенно. Полная синхронизация мышечной реакции и глазной обратной связи. Т.е. ты знаешь, что курсор остановится "вот в этом месте". Рисовать "МонаЛизу с истеричной улыбкой" не пробовал. Лень :rolleyes:


Нашел под 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
Ekb написал:
[q]
Включил XT...
[/q]
На XT естественно ничего заметно не будет.
Речь о 386, 486-х.
640х480 и выше.
Я не уверен, что на 286-й что-то будет видно.

P.S. Если это конвертер EJSanYo, то у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения.
Невозможно плавно менять скорость.
Также попробуйте плавно, равномерно двигать курсором горизонтально, вертикально, под углом 45 градусов.
Ekb
Advanced Member


Всего сообщений: 1628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2014
Rio444 написал:
[q]
Невозможно плавно менять скорость.
[/q]
Если речь идет "ускорения" то это ответственность несет драйвер мыши, управляется из командной строки. К слову, с этим проблем тоже не наблюдаю.

Я так понимаю, что нужно проверять в 3D-шутере, подобия Descent - где нужно быстро и точно наводить на цель.
Для таких случаев, у меня 486 на плате 4dps, у него и так есть PS/2 ;)
Кстати, рекомендую в Wolf3D играть только на конвертере, идеально работает и быстрый захват на цель. А не клавиатурой. Играл на быстром 286-25мгц.


Rio444 написал:
[q]
у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения....
[/q]
Откуда эти сведения? думаю паника преувеличена ;)
[q]
Также попробуйте плавно, равномерно двигать курсором горизонтально, вертикально, под углом 45 градусов.
[/q]
Подвигал... :)
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
Rio444 написал:
[q]
у его алгоритма проблема не с отзывчивостью, а с плавностью перемещения....
[/q]
Откуда эти сведения? думаю паника преувеличена
[/q]
Из анализа исходного кода прошивки. Часть пакетов от мыши PS/2 теряется и не доходит по порта COM.
В зависимости от установленного в конвертере масштаба скорости мыши, либо теряется часть пакетов, приходящих от мыши. Либо наоборот приходят уже устаревшие данные.

Основная проблема протокола для 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 написал:
[q]
Я так понимаю, что нужно проверять в 3D-шутере, подобия Descent - где нужно быстро и точно наводить на цель.Для таких случаев, у меня 486 на плате 4dps, у него и так есть PS/2
[/q]
Я довольно однозначно написал про курсор.
Ekb
Advanced Member


Всего сообщений: 1628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2014
Rio444 написал:
[q]
Из анализа исходного кода прошивки. Часть пакетов от мыши PS/2 теряется и не доходит по порта COM.
[/q]
Вполне возможно. У COM-овских протоколов ограничено до 9600 1200 бодов. А PS/2, наверное, больше.

Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена ;)

Но никто-ж не запрещает изобретать новое. В любом случае, аутентичность теряется в обеих случаях (конвертор или новый 8042 c ISA-платой).
P.S. Интересно потом сравнить в лоб: конвертор или New8042. И где эта разница обнаружится.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
[/q]
Дописал сообщение выше. Там подробнее.

Предыдущее сообщение получилось несколько сумбурным. Есть неточности. Задержка в конвертере PS/2 -> COM, не в 2-3 раза, а в примерно 1,1-2,3 раза.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Ekb написал:
[q]
Могу только заверить, что "скачет в другую сторону" не замечал за последние 2 года (я изредка включал XT). Поэтому паника слегка преувеличена

Но никто-ж не запрещает изобретать новое. В любом случае, аутентичность теряется в обеих случаях (конвертор или новый 8042 c ISA-платой).
P.S. Интересно потом сравнить в лоб: конвертор или New8042. И где эта разница обнаружится.
[/q]
Хорошая шариковая COM мышь на хорошем коврике более точно передаёт движения, чем оптическая через конвертер.
Хотя, возможно, долю погрешности вносит сама оптическая мышь. Как-нибудь попробую с другой.
"New8042" будет работать точно так же, как обычный PS/2 порт на любой материнской плате.
Никаких задержек или преобразований не добавляется.

Про "скачет" возможно я неточно выразился. Появляется дискретность движений. То есть, вместо того, чтобы перемещаться плавно, попиксельно, курсор может на мгновение остановиться, потом "перепрыгнуть" сразу на два пикселя. Это заметно только если очень медленно двигать мышью. Либо не настолько медленно, но почти вертикально или почти горизонтально. При быстрых резких перемещениях что-то заметить очень сложно.

В каких-то программах это более заметно, в каких-то менее. Видимо сами программы вносят какую-то задержку на обработку входящих данных о перемещении мыши. И по-разному их обрабатывают. В теме о конвертере я писал, что наиболее заметны артефакты в игре "Цветные линии" (Lines). В Norton Commander заметить что-то практически невозможно. В Windows95 на уровне ощущений чувствуется небольшая рассинхронизация движения руки и курсора на экране. С оптической мышью, подключенной в PS/2 ощущения рассинхронизации не возникает.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Аппаратная часть проверена и отлично работает.
Проверял на 486-й материнке с биос Award 4.50PG.
В программной части оказалось достаточно подправить родной биос модбином, включить "PS/2 mouse support" enable.

Оказалось, что ещё одна 486-я и все мои 386-е имеют AMI Bios.
Каждая версия AMI Bios правится своей версией Amibcp:
[q]
BCP14.EXE (for core BIOS 07/07/91)
BCP20.EXE (for core BIOS 12/12/91)
BCP21.EXE (for core BIOS 06/06/92)
BCP21A.EXE (for core BIOS 11/11/92 and 08/08/93)
WBCP33.EXE (for core BIOS 12/15/93 (and 06/25/94?))
WBCP40.EXE (for core BIOS 06/25/94 and 07/25/94)
WBCP42.EXE (for core BIOS 07/25/94)
WBCP511.EXE (for core BIOS 10/10/94)
[/q]
Источник
Никто эти версии в глаза не видел.
Если у кого есть, шлите!

Сейчас работаю на TSR программой, которая будет выполнять все функции биос, связанные с работой PS/2 мыши.
Кто знает ассемблер, и, особенно, NASM, нужны ваши подсказки.

В частности, как реализовать задержку 15мкс?
Сделал через функцию 86h прерывания int 15h.
В некоторых источниках пишут, что эта функция нормально работает, если задержка от 1000мкс.
Но не понятно, что будет, если длительность меньше. Как я предполагаю, просто реальная задержка
будет больше заданной. Что скажете?
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
В некоторых источниках пишут, что эта функция
[/q]
не позволяет реализовать задержку меньше 976 мкс, если речь про это:
http://vitaly_filatov.tripod.com/ng/asm/asm_026.13.html
[q]
что будет, если длительность меньше
[/q]
Надо разбираться как она внутри работает, чтобы проверить это.
[q]
В частности, как реализовать задержку 15мкс?
[/q]
Ровно не получится, но вряд ли вам наносекунды будут принципиальны ;)
Самому запрограммировать таймер 8254 на нужную частоту прерываний и ловить IRQ0
https://en.wikibooks.org/wiki/...rval_Timer
Нужный делитель - 18.


Как различные ОС к такому отнесутся - ничего обещать не могу.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
pahan, спасибо за наводку. Почитаю.
Может можно как-то попроще? Или есть готовый код для таймера?
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
Сам с ним не развлекался, а примеры кода есть здесь:
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 написал:
[q]
как реализовать задержку 15мкс?
[/q]
Думаю, это самое реальное из всего возможного (подпрограмма задержки из BIOS PC/XT):



WAITF    PROC  NEAR      ; FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR
                  ; ENTRY:
                  ; (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT
                  ; MEMORY REFRESH TIMER 1 OUTPUT AT THE DMA CHANNEL 0 ADDRESS REGISTER USED AS REFERENCE.
                  
                  ; EXIT:
                  ; AFTER (CX) TIME COUNT (PLUS OR MINUS 31 MICROSECONDS)
                  ; (CX) = 0    
  
      PUSH  AX        ; SAVE WORK REGISTER (AH)
      SHR    CX,1      ; DIVIDE 15us COUNT DOWN TO 30us COUNT
      ADC    CX,0
      JCXZ  WAITF9      ; EXIT IF COUNT WAS ZERO OR ONE

      OUT    DMA+12,AL    ; CLEAR THE DMA BYTE POINTER FLIP/FLOP
WAITF1:
      PUSHF          ; SAVE INTERRUPT STATE
      CLI            ; BLOCK INTERRUPTS TILL NEXT CHANGE
WAITF3:               ; WAIT FOR REFRESH ADDRESS CHANGE
      IN    AL,DMA      ; READ CURRENT ADDRESS LOW BYTE
      AND    AL,11111110B  ; DISCARD LOW BIT (30us)
      CMP    AH,AL      ; DID VALUE JUST CHANGE
      MOV    AH,AL      ; SAVE NEW/OLD VALUE INCASE IT DID
      IN    AL,DMA      ; READ HIGH BYTE (AND IGNORE)
      JE    WAITF3      ; WAIT FOR A CHANGE IN ADDRESS BITS

      POPF          ; RESTORE INTERRUPTS
      LOOP  WAITF1      ; DECREMENT CYCLES COUNT TILL COUNT END
WAITF9:
      POP    AX        ; RESTORE (AH)
      RET            ; RETURN (CX)= 0

WAITF    ENDP



Извините за формат - тегов 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
[q]
Извините за формат - тегов CODE что-то не вижу на форуме...
[/q]
{code}


WAITF  PROC  NEAR  ; FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR
; ENTRY:
; (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT
; MEMORY REFRESH TIMER 1 OUTPUT AT THE DMA CHANNEL 0 ADDRESS REGISTER USED AS REFERENCE.

REM Oни есть. Но их нужно вводить ручками.

{/code}

Соотв. фигурные скобки меняем на квадратные. :)
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
justontime, большое спасибо!
Буду разбираться.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
justontime, этот код для XT, но в AT машинах канал DMA0 освободился от функции регенерации памяти.
Соответственно, для требуемой нам AT читать DMA регистры уже не годится.
А во всех ли интересующих нас AT (286-486) канал 0 канал 1 8253 (с DMA он уже не связан) настроен на период 15мкс,
чтобы можно было его использовать? Надо будет проверить.

upd
Исправил, напутал номер канала 8253
justontime
Full Member


Откуда: СПб
Всего сообщений: 236
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
10 сен. 2016
i8088 написал:
[q]
но в AT машинах
[/q]
А, я просто неправильно понял проблему - думал, что речь идет только о решении для совсем старых машин PC/XT класса...
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 написал:
[q]
Если заработает на XT - не страшно, но и не принципиально.
[/q]
На XT не заработает - там нет 8042 вообще.


Rio444 написал:
[q]
Возможно ли использовать канал 0, таймера 8253/8254 (он же - системный таймер)? Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс.
[/q]
Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms

Канал 1 подходит, но надо проверить, на всех ли 286-486 AT машинах его настройка одинакова? Если на всех машинах он настроен на 0x12h, то как раз один тик ~15mks
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Канал 0 слишком медленно настроен (коэфф деления 65536), 1 тик ~54.9ms
[/q]
Rio444 написал:
[q]
Только не ждать, когда он "тикнет", а прочитать содержимое счетчика и подождать, когда оно уменьшится на 18 (см. выше пост pahan) - это и будут требуемые ~15мкс.
[/q]
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444, OK, я чего-то не сообразил сразу.
Приношу свои извинения!
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088, извинения излишни. :)
Значения счетчика из таймера можно читать непосредственно?
in al, 040h ?
Ничего не собьётся? Всегда ли он работает?
Нужно ли предварительно делать "Access mode" = lobyte only ?
[q]
Bits Usage
6 and 7 Select channel :
0 0 = Channel 0
0 1 = Channel 1
1 0 = Channel 2
1 1 = Read-back command (8254 only)
4 and 5 Access mode :
0 0 = Latch count value command
0 1 = Access mode: lobyte only
1 0 = Access mode: hibyte only
1 1 = Access mode: lobyte/hibyte
1 to 3 Operating mode :
0 0 0 = Mode 0 (interrupt on terminal count)
0 0 1 = Mode 1 (hardware re-triggerable one-shot)
0 1 0 = Mode 2 (rate generator)
0 1 1 = Mode 3 (square wave generator)
1 0 0 = Mode 4 (software triggered strobe)
1 0 1 = Mode 5 (hardware triggered strobe)
1 1 0 = Mode 2 (rate generator, same as 010b)
1 1 1 = Mode 3 (square wave generator, same as 011b)
0 BCD/Binary mode: 0 = 16-bit binary, 1 = four-digit BCD
[/q]
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да.
[q]
Reading The Current Count
To read the current count using the "lobyte only" or "hibyte only" access modes, you can just do an "in al,0x40" (for PIT channel 0) without problems. For frequencies higher than 4.7 KHz it can be easiest to set the high byte of the reload value to zero, and then use the "lobyte only" access mode to minimize hassles.

For the "lobyte/hibyte" access mode you need to send the latch command (described above) to avoid getting wrong results. If any other code could try set the PIT channel's reload value or read its current count after you've sent the latch command but before you've read the highest 8 bits, then you have to prevent it. Disabling interrupts works for single CPU computers. For example, to read the count of PIT channel 0 you could use something like:
[/q]
Я только рекомендую не использовать 386+ инструкции,
для совместимости с 286.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Я только рекомендую не использовать 386+ инструкции, для совместимости с 286.
[/q]
Вы зря переживаете. Я и 8086 инструкции плохо знаю. ;) 386+ для меня вообще темный лес.

i8088 написал:
[q]
По ссылке pahan как раз есть пример, думаю ответы на все Ваши вопросы -да.
[/q]
Не нравится мне пример по ссылке:read_PIT_count:
  pushfd
  cli
  mov al, 00000000b    ; al = channel in bits 6 and 7, remaining bits clear
  out 0x43, al         ; Send the latch command

  in al, 0x40          ; al = low byte of count
  mov ah, al           ; ah = low byte of count
  in al, 0x40          ; al = high byte of count
  rol ax, 8            ; al = low byte, ah = high byte (ax = current count)
  popfd
  ret

Он устанавливает собственный режим работы канала 0, нарушая работу системного таймера.

Я бы сделал
mov al, 00010110b
out 043h,al
in al,040h

Т.е. принудительно установил бы чтение/запись только младшего байта. Остальное без изменений.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Вы зря переживаете. Я и 8086 инструкции плохо знаю. ;) 386+ для меня вообще темный лес.
[/q]
Я это просто к тому, что в тех примерах полно 386+ инструкций, тот же pushd/popfd.


Rio444 написал:
[q]
Я бы сделал
mov al, 00010110b
out 043h,al
in al,040h
Т.е. принудительно установил бы чтение/запись только младшего байта. Остальное без изменений.
[/q]
Согласен, в книге Джордейна (правда для для канала 2 тоже сделано так, как Вы хотели),
к сожалению командный регистр - WO, что не позволяет сохранять настройки.
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
к сожалению командный регистр - WO, что не позволяет сохранять настройки.
[/q]
У 8254 есть команда write-back.
[q]
принудительно установил бы чтение/запись только младшего байта
[/q]
[q]
Значения счетчика из таймера можно читать непосредственно?
in al, 040h ?
Ничего не собьётся?
[/q]
Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится. Но скорее всего придётся для получения адекватной производительности (см. ниже для примера чтения всех байт). В остальном - ОК.
[q]
Нужно ли предварительно делать "Access mode" = lobyte only ?
[/q]
В теории, кто-то может и поменять режим за то время, что мы к нему обращаемся. Безопаснее ставить.
[q]
прочитать содержимое счетчика и подождать, когда оно уменьшится на 18
[/q]
Можно, но стоит серьёзно подумать, 1)насколько нам нужна такая точность (ровно 15 мкс), 2) на каких процах и 3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся.

Считаем время выполнения инструкций
(данные отсюда - 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
pahan написал:
[q]
Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится.
[/q]
Предварительно проверяем, что текущее значение >18 (лучше с запасом - больше 30). Если меньше, ждём (считываем повторно, пока не станет >18, т.е. не пройдет через 0).

pahan написал:
[q]
1)насколько нам нужна такая точность (ровно 15 мкс)
[/q]
Если реальная задержка будет 15...30мкс, думаю это устроит. Это задержка между появлением флага переполнения буфера мыши в контроллере и появлением данных в выходном регистре. Не знаю, почему именно 15мкс. Это значение в исходнике Sergey Kiselev XT биос. Он, вероятно, скопировал из исходников Award bios.

pahan написал:
[q]
2) на каких процах
[/q]
От самого младшего 286 (8МГц?), до самого старшего 486 (AMD 5x133@160)

pahan написал:
[q]
3)в каких режимах мы будем наш код использовать. Потому что на всех 486 и топовых 286-386 всё это спокойно прокатит, на младших 386 в реальном режиме (чистый DOS) - да, в режиме виртуального 8086 (DOS-окно из-под Windows) - впритык, на младших 286 даже в реальном режиме вряд ли уложимся.
[/q]
Код инициализации - из под чистого DOS (если стоит Win95, то до её загрузки, из autoexec.bat). Сама задержка - вероятно и DOS, и Windows. Но Win95 ставят только на 386 и выше (лично я предпочитаю от 486-х).

Исходя из Ваших дальнейших расчетов
pahan написал:
[q]
286 - 2+3+5+2+5+13+2=32 такта (на частоте 8-25 МГц)= 4 мкс-1,3 мкс
[/q]
думаю нормально. Эта часть быдет выполнять только в чистом DOS.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Сейчас вы будете смеяться, но в Award BIOS такой задержки нет. Или я чего-то не понимаю.
Код Sergey-XT биос:
;=========================================================================
; kbc_aux_read - read data from auxiliary device
; Input:
;  none
; Output:
;  AL = data
;  CF == 0 - data is available
;  CF == 1 - time out
;-------------------------------------------------------------------------
kbc_aux_read:
  push  cx
;  xor  cx,cx      ; XXX too much?!
  mov  cx,20      ; retry 20 times
.1:
  call  kbc_wait_aux_full
  jnz  .2      ; if ZF=0 - data is available
  loopz  .1
  jmp  .error      ; time out
.2:
  mov  cx,1
  call  delay_15us   ; !!! ЗАДЕРЖКА 15мкс (комментарий Rio444)
  in  al,kbc_output_reg
  clc
  jmp  .exit
.error:
  stc
.exit:
  pop  cx
  ret

Аналогичный участок кода Award BIOS:

;*****************************************************************************
; Procedure Name:  get_data
;  receive data from mouse if Auxiliary device Output Buffer Full
; Saves:
; Inputs:  none
; Output:  zf = 1 : no data received
;    zf = 0 : successful
;      al = data byte received
; Destroy:  ah
; Author:  Ken Chen
; Date:   06/21/90
;
; Rev  | Name  | Date    | TPR#  | Description
; ------+-------+---------------+-------+-------------------------------------
; 1.00  | Ken  | 06/21/90  | NEW  | Initial revision
;
;*****************************************************************************

GET_DATA  PROC  NEAR
    push  cx
    xor  cx,cx
gd_loop:
    push  cx
    call  out_aux_full    ; check AOBF
    pop  cx
    jnz  short receive_data
    loop  short gd_loop
    jmp  short gd_ret
receive_data:
    in  al,data8042
gd_ret:
    pop  cx
    ret
GET_DATA  ENDP
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
pahan написал:
[q]
Есть риск, что он перейдёт через 0 и тогда задержка в эти моменты сильно увеличится.
[/q]
Это как раз не страшно, тк складывать текущее знасение с 18 мы тоже будем с переполнением.

Пример.
Текущее значение счетчика (младший байт) == 0xF0
Запоминаем, складываем с 18 , 0xF0 + 0x12 = 102
Перенос вызовет установку флага CF, но на это не обращаем внимания.
Ну и собственно ждем, когда счетчик достигнет значения 0x02

Это чем-то похоже на относительные внутрисегментные безусловные
переходы в x86: смещение перехода задается формально в пределах -32768
+32767, но "дотянуться" до любого адреса внутри сегмента не проблема.

А о задержке - я думаю это носит рекомендательный характер, для
совместимости со всеми устройствами и выдерживать его прям точно до
микросекунды нет необходимости, и исходники это подтверждают.


Rio444 написал:
[q]
От самого младшего 286 (8МГц?),
[/q]
Первый 286 - 6MHz. PC/XT полюбому в пролете, там совсем другой
интерфейс клавиатуры и сама клавиатура. Ну за исключением очень
редких нестандартных XT с AT клавиатурой.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 или я Вас не понял, или Вы ошибаетесь
[q]
Каждый период синхронизации происходит уменьшение на единицу содержимого внутреннего счётчика канала, начальное значение которого устанавливается программно.
[/q]
Т.е. 18 надо вычитать, а не прибавлять.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Т.е. 18 надо вычитать, а не прибавлять.
[/q]
Ой да, забыл, что счет в обратную сторону, мои извинения!

Но сути дела это не меняет.

Пример
Исходное значение 0x04
Вычисляем, чего ждать 0x04 - 0x12 == 0xFFF2 (старшие FF это я перенос обозначил)
На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2

PS. Если бы КД канала 0 был бы не 65536, то переустановку счетчика при
переходе через 0 пришлось бы учитывать, и код был бы более сложным.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
На флаг CF не обращаем внимания, и ждем когда счетчик достигнет 0xF2
[/q]
Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет очередное считывание?
Если процессор медленный.
И, видимо, надо будет запрещать аппаратные прерывания, иначе они сильно исказят расчет.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Не может такого быть, что счетчик не достигнет 0xF2, а "перескочит" его, когда будет
очередное считывание? Если процессор медленный. И, видимо, надо будет запрещать аппаратные
прерывания, иначе они сильно исказят расчет.
[/q]
При медленном CPU я думаю возможно, тогда ловить не равенство, а что число в счетчике ниже
чем рассчитанное (сравнивать беззнаково!).

К примеру (просто первое, что сходу пришло в голову, это не проверялось, возможны
грубые ошибки!)

======================================================================
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 не трогаем и сами лезете на ней тестировать :)
[q]
при программировании канала 0 даже
тем же значением 0x36h (lsb/msb), режим 011, таймер просто перестает считать и системное
время стоит.
[/q]
А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254).
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
pahan написал:
[q]
А в каком режиме он стоит (access mode)? Потому что если в lobyte/hibyte - всё ОК, он будет ждать след. байта. А режим мы проверить не можем, потому что зачем-то тестируем на XT (таймер 8253), а не AT (8254).
[/q]
Он стоит в режиме hi/lo 011, при записи того-же режима получаем останов
счетчика и поочередно получаем hi/lo одинаковые (те например 0xe4 0xf2
0xe4 0xf2 0xe4 0xf2 итд).
При переводе в режим LSB - всегда одно значение.


pahan написал:
[q]
Обсудили же, что XT не трогаем и сами лезете на ней тестировать
[/q]
Меня интересует универсальная процедура задержки, к PS2 вопросу это не
относится. Насколько я понял, у Rio444 на AT получилось то же самое.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Пока ещё ничего не пробовал. Сегодня весь день на работе. Если завтра не буду работать, могу поэкспериментировать.
Немножко не понял, 0x36h - это что такое?
Это Вы в 43h порт пишите?
Понял. Это Вы пытаетесь установить режим, который уже должен быть по умолчанию. Т.е. 00110110b.
Что такое "LSB", "MSB"?


i8088 написал:
[q]
Я проверял на плате XT IBM5160 (у нее таймер 8253) - при программировании канала 0 даже
тем же значением 0x36h (lsb/msb), режим 011, таймер просто перестает считать и системное
время стоит.
[/q]
Сильно странно это. Таймер вообще не должен стоять.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Что такое "LSB", "MSB"?
[/q]
Да этоя по привычке, low status byte, high status byte,.
MSB вообще мой глюк:)
Здесь это не статус конечно, просто режим младший байт старший байт.


Rio444 написал:
[q]
Сильно странно это. Таймер вообще не должен стоять.
---
[/q]
Да, меня тоже это заинтересовало, неожиданно. Для пользователя
проявилось это в том что системное время "стало"
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
Ошибка оказалась простейшей!

Просто после изменения режима счетчика (даже если записывается тот же
режим, что был) нужно заново загрузить значения коэфф деления, у нас 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
i8088 написал:
[q]
хотя можно и работать в режиме hi/lo, не меняя режим на lo
[/q]
Думаю так гораздо проще. Ничего не менять, просто отбрасывать hi.

У меня прогресс. Программа пока не работает, зато уже не вешает комп))))
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
А кстати, можно не отбрасывать старший байт, тогда максимальная
задержка будет 55ms, и процедура будет более универсальной.
Но точность малых задержек будет хуже, тк процессору больше работы.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
[/q]
Тогда лучше две процедуры.
Одна для малых задержек, другая для больших.

Если не трогать 043h, в каком порядке идут байты? Сначала Low, потом High?
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Если не трогать 043h, в каком порядке идут байты? Сначала Low, потом High?
[/q]
Да, но режим 0x36 все же стоит установить, тк нет гарантии, что какая-либо
программа/процедура не читала счетчик ранее, и могла оставит в состоянии,
когда первым (в нашей процедуре) будет MSB.

MSB/LSB обозначения можно узаконить, они упоминаются в официальной
Intel manual по 8253
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
MSB/LSB обозначения можно узаконить, они упоминаются в официальнойIntel manual по 8253
[/q]
У меня они ассоциируются с битами. Как по ссылкам
Tronix написал:
[q]
https://en.wikipedia.org/wiki/Most_significant_bit
https://en.wikipedia.org/wiki/Least_significant_bit
[/q]
Если Вам удобно, используйте их. Вас поймут.

i8088 написал:
[q]
Да, но режим 0x36 все же стоит установить, тк нет гарантии, что какая-либопрограмма/процедура не читала счетчик ранее, и могла оставит в состоянии,когда первым (в нашей процедуре) будет MSB.
[/q]
Да, тут надо будет что-то придумать.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Моя идея с отлавливанием запаздывания оказалась неверной, новый вариант попробовать
ловить изменение старшего байта если конечное значение положительно. Но очень много
команд, и после 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 написал:
[q]
Если только канал 2 уже ни для чего больше не используется.
[/q]
Штатно он в основном для диагностического speaker используется.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Штатно он в основном для диагностического speaker используется.
[/q]
Кстати, да. Но не уверен, что только диагностического.
Если в системе есть звуковуха, то наверное канал 2 ей и не нужен.
А если только спикер?
Фиг с ним, если временно собьётся его работа. А если конфликт в системе, с более неприятными последствиями?
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Если какая программа использует его для измерения времени, то по
любому сама и программирует.

А штатно егоо функция например подавать гудки (тот же DOS), я не
уверен что он программирует его заново каждый раз. Ну можно по выходе оставлять настроенным на 1000Hz

Во всех руководствах по ассемблеру это самый используемый канал,
все примеры обычно на нем строятся.

Я еще подумаю.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Только для AT (не слишком новых, где есть канал 1 8254)
можно попробовать процедуру из исходников IBM AT


;--- WAITF -------------------------------------------------------------
;  FIXED TIME WAIT ROUTINE HARDWARE CONTROLLED - NOT PROCESSOR)   :
;                       :
; ENTRY:                     :
;  (CX) = COUNT OF 15.085737 MICROSECOND INTERVALS TO WAIT        :
;    MEMORY REFRESH TIMER 1 OUTPUT USED AS REFERENCE        :
; EXIT:                      :
;    AFTER (CX) TIME COUNT (PLUS OR MINUS 16 MICROSECONDS)  :
;  (CX) = 0                   :
;-----------------------------------------------------------------------

REFRESH_BIT  EQU  00010000B  ; REFRESH TEST BIT
PORT_B    EQU  061H    ; PORT B READ/WRITE DIAGNOSTIC REGISTER


WAITF  PROC  NEAR      ;  DELAY FOR (CX)*15.085737 US
  PUSH  AX      ; SAVE WORK REGISTER (AH)

WAITF1:         ;  USE TIMER 1 OUTPUT BITS
  IN  AL,PORT_B    ; READ CURRENT COUNTER OUTPUT STATUS
  AND  AL,REFRESH_BIT    ; MASK FOR REFRESH DETERMINE BIT
  CMP  AL,AH      ; DID IT JUST CHANGE
  JE  WAITF1      ; WAIT FOR A CHANGE IN OUTPUT LINE

  MOV  AH,AL      ; SAVE NEW FLAG STATE
  LOOP  WAITF1      ; DECREMENT HALF CYCLES TILL COUNT END

  POP  AX      ; RESTORE (AH)
  RET        ; RETURN (CX)= 0

WAITF  ENDP
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Очень просто, но очень неточно. Даже значение в Ah не инициализируют.
Перед WAITF1 должно быть:
IN  AL,PORT_B
MOV  AH,AL

Возможно именно этот алгоритм используется в int 15h функция 86h.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Даже значение в Ah не инициализируют.
[/q]
Мне тоже это не понравилось но я решил привести как в оригинале.

Дилемма в том, что с 8253/54 слишком много команд получается, что снизит точность.
Но при использовании канала2 будет чуть проще, тк его можно останавливать без latch.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Посмотрите вот такой вариант:

; Расчет значения счетчика для задержки 15мкс
; Выходное значение cx = значение счетчика для цикла с задержкой 15мкс
; Если cx = 0 - ошибка
  timer equ 040h    ; Используем таймер 0
  xor cx,cx  ; Обнуляем счетчик
  cli    ; Запрещаем прерывания
  in al,timer
  mov bh,al
  in al,timer
  mov bl,al  ; Теперь в bh, bl у нас два подряд считанных значения из тамера. Младший байт и старший байт. Порядок значения не имеет.
        ; Это начальные значения, с которыми будем сравнивать
start_loop:
  inc cx  ; Увеличиваем на 1 счетчик
  jz exit_15us  ; Если счетчик = 0, т.е. прошло 65536 циклов, то выходим. Ошибка.
  xchg  bl,bh  ; Меняем местами bh и bl. В первом цикле в bl 1-й принятый байт, во втором 2-й, опять 1-й, снова 2-й и т.д.
  mov ah,bl  ; То же самое теперь в ah
  in al,timer
  sub ah,al  ; Вычитаем новое значение в счетчике из начального
  cmp ah,18  ; Если разница > 18
  jb start_loop  ; Повторяем цикл
exit_15us:  
  mov word [const_15us],cx  ; Сохраняем рассчитанное значение
  sti    ; Включаем прерывания
const_15us: dw 0
  
; Теперь сам цикл с задержкой. Из-за того, что прерывания не отключаем, реальная задержка может быть больше 15мкс
  mov word cx,[const_15us]  ; Задаём начальное значение счетчика
loop_15:
  xchg  bl,bh  ; Фиктивные операции, которые бесполезны, но вносят такую же задержку, как в расчете начального значения счетчика
  mov ah,bl  ; Фиктивная
  in al,timer  ; Фиктивная
  sub ah,al  ; Фиктивная
  cmp ah,18  ; Фиктивная
  jb next_15  ; Фиктивная
next_15:  
  dec cx  ; Уменьшаем на 1 счетчик
  jnz loop_15  ; Если он не равен 0, повторяем цикл


На 386DX-40 получилось на выходе 10 циклов. Что вполне неплохо. На 286-й конечно точность будет очень низкая.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу?

В принципе оба варианта (IBM и Ваш) могут использоваться, в
зависимости от целей.

А Вы пробовали проверить реальную задержку осциллографом?

Я проверял так

LPT_DATA_PORT  EQU  0378H

  MOV  DX, LPT_DATA_PORT
  MOV  AX, 55H
  OUT  DX, AL
  MOV CX,  0
CLI
LPT_LOOP:
  CALL  NEAR PTR DLY
  IN  AL, DX
  XOR  AL, 0FFH
  OUT  DX, AL
  LOOP  LPT_LOOP
STI

Это делает 65536 импульсов и пауз в порт принтера.
Проверить, насколько изменится длительность импульсов и паузы
если заккоментировать CALL DLY (для уменьшения потерь времени можно заменить макроопределением). Разность и даст задержку.

Цикл у Вас в конце лучше сделать так

loop_15:
  xchg  bl,bh  ; Фиктивные операции, которые бесполезны, но вносят такую же задержку, как в расчете начального значения счетчика
  mov ah,bl  ; Фиктивная
  in al,timer  ; Фиктивная
  sub ah,al  ; Фиктивная
  cmp ah,18  ; Фиктивная
  jb next_15  ; Фиктивная
next_15:  
  loop loop_15  ; Если он не равен 0, повторяем цикл
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Те Вы предлагаете сделать пре-калибровку, а потом всюду использовать найденную константу?
[/q]
Собственно я так изначально предлагал
Rio444 написал:
[q]
Вообще, первая мысль была - использовать тупой цикл, со счетчиком.Вопрос только, где брать начальное значение счетчика? Оно будет зависеть от скорости процессора.Это начальное значение можно считать на этапе инициализации (т.е. только один раз).Но нужен какой-то таймер, который работает на всех вышеуказанных машинах, и работает одинаково.
[/q]
i8088 написал:
[q]
Цикл у Вас в конце лучше сделать так
[/q]
Смысл в том, что сохраняется число тактов на один проход цикла. Весь код совпадает, только меняется порядок инструкций, и inc cx меняется на dec cx.
Будут ли по числу тактов loop и dec(inc) cx jnz равноценны?
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Будут ли по числу тактов loop и dec(inc) cx jnz равноценны?
[/q]
Навряд-ли, loop должна быть быстрее. Тогда оставим как есть.

Теперь осталось проверить реально получающуюся задержку.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Осциллограф далеко и барахлит, поэтому проверил программно:
org 0100h
; Расчет значения счетчика для задержки 15мкс
; Выходное значение cx = значение счетчика для цикла с задержкой 15мкс
; Если cx = 0 - ошибка
  timer equ 040h    ; Используем таймер 0
  xor cx,cx  ; Обнуляем счетчик
  cli    ; Запрещаем прерывания
  in al,timer
  mov bh,al
  in al,timer
  mov bl,al  ; Теперь в bh, bl у нас два подряд считанных значения из таймера. Младший байт и старший байт. Порядок значения не имеет.
        ; Это начальные значения, с которыми будем сравнивать
start_loop:
  inc cx  ; Увеличиваем на 1 счетчик
  jz exit_15us  ; Если счетчик = 0, т.е. прошло 65536 циклов, то выходим. Ошибка.
  xchg  bl,bh  ; Меняем местами bh и bl. В первом цикле в bl 1-й принятый байт, во втором 2-й, опять 1-й, снова 2-й и т.д.
  mov ah,bl  ; То же самое теперь в ah
  in al,timer
  sub ah,al  ; Вычитаем новое значение в счетчике из начального
  cmp ah,18  ; Если разница > 18
  jb start_loop  ; Повторяем цикл
exit_15us:  
  mov word [const_15us],cx  ; Сохраняем рассчитанное значение
  sti    ; Включаем прерывания
  
  mov ah, 09h
  mov dx, start_string
  int 21h      ; вывод строки на экран

  xor cx,cx
start_main_loop:
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  call delay_15us
  loop start_main_loop
  
  
  mov ah, 09h
  mov dx, end_string
  int 21h      ; вывод строки на экран  
  
  int 20h ; Выходим из программы


delay_15us:  ; Подпрограмма задержки 15 микросекунд
  mov word dx,[const_15us]  ; Задаём начальное значение счетчика
loop_15:
  xchg  bl,bh  ; Фиктивные операции, которые бесполезны, но вносят такую же задержку, как в расчете счетчика
  mov ah,bl  ; Фиктивная
  in al,timer  ; Фиктивная
  sub ah,al  ; Фиктивная
  cmp ah,0  ; Фиктивная
  jb next_15  ; Фиктивная
next_15:  
  dec dx  ; Уменьшаем на 1 счетчик
  jnz loop_15  ; Если он не равен 0, повторяем цикл
  ret
  
const_15us: dw 0
start_string: db 'Program start$'
end_string: db 10,13,'Program end$'

С метки 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
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 написал:
[q]
[/q]
Спасибо!
Дя, обломчик с int 15 86h.
Странно, что в большинстве источников не указан такой принципиальный момент.

Но, по большому счету, в TSR программе вообще нельзя использовать int.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Не прошло и месяца, как появились хоть немного заметные подвижки)))
Наконец есть рабочая "альфа" версия программы.
Работает пока через одно место, не со всеми драйверами и многое не понятно. Но работает.
Довольно много драйверов мыши "плюют" на "штатный" обработчик прерывания мыши 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 написал:
[q]
В процессе инициализации размаскировываю прерывание Irq12, но к концу программы какая-то хрень снова его маскирует.
Не могу понять какая. Сейчас перед выходом из программы приходится повторно его размаскировывать.
[/q]
Это под чистым DOS делается? По идее кроме драйвера мыши
заниматься манипуляциями с irq12 некому? Он уже загружен при
запуске программы?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Спасибо!

i8088 написал:
[q]
Это под чистым DOS делается?
[/q]
Да, MS-DOS 6.22

i8088 написал:
[q]
По идее кроме драйвера мышизаниматься манипуляциями с irq12 некому? Он уже загружен призапуске программы?
[/q]
Нет. Ни один драйвер мыши не грузится до запуска проги. Чтобы не запутаться, пусть прога будет называться "ps2supp.com".

Программа 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
[q]
Но как пишут в источниках, биос мождет хранить там и другие данные.
[/q]
Не "может", а обязательно будет. И формат её не стандартизирован...
[q]
может быть какое-то действие в
программе вызывает маскирование, как побочный эффект (вызов
какой-либо функции BIOS, хотя в TSR это ограничено)?
[/q]
Скорее всего это именно куски биоса и возможно недокументированные.
Рекомендую ещё глянуть обработчики всех остальных прерываний (аппартаных, IRQx) - скорее всего "гадит" кто-то из-них.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Относительно маскирования - а может быть какое-то действие впрограмме вызывает маскирование, как побочный эффект (вызовкакой-либо функции BIOS, хотя в TSR это ограничено)?
[/q]
Тоже об этом подумал. Но это ещё не TSR (точнее не резидентная часть) , это инициализация, которая выполняется один раз, как обычная программа.

i8088 написал:
[q]
А если попробовать в программу через определенные интервалывставлять чтение регистра маски secondary int controller, 0a1h ?И в debug пронаблюдать, когда происходит маскирование?
[/q]
Что-то подобное попробую сделать.

pahan написал:
[q]
[q]
Но как пишут в источниках, биос мождет хранить там и другие данные.
[/q]
Не "может", а обязательно будет. И формат её не стандартизирован...
[/q]
Если "будет", то это ещё проще. В этом случае область EBDA уже выделена. И можно использовать её готовую.
Но пока на платах без поддержки PS/2 она отсутствует в принципе. В ячейке BDA, хранящей указатель на EBDA - "0000h".
pahan
Advanced Member


Откуда: Химки, М.О.
Всего сообщений: 1070
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мар. 2015
[q]
В этом случае область EBDA уже выделена. И можно использовать её готовую.
Но пока на платах без поддержки PS/2 она отсутствует в принципе.
[/q]
Учитывая, что она появилась в IBM PS/2 и оттуда была скопирована остальными - ожидаемо.
Так что или она сразу есть и там полно и других данных или её изначально нет. Были ли платы (точнее, биосы) с EBDA, но без PS/2-мыши - если только экспериментально проверять.
[q]
В ячейке BDA, хранящей указатель на EBDA - "0000h".
[/q]
Раньше (до появления EBDA) она определялась как адрес порта LPT4.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Причина отключения irq12 оказалась весьма нетривиальной.
Помехой послужила операция чтения статусного регистра 8042: "in al,064h".
Если размаскирование irq12 выполнить после этой операции, то всё работает.
Если до - irq12 по-прежнему отключено.
Вот участок кода с "in al,064h":
kbc_wait_aux_full:
  push  cx
  xor  cx,cx
.1:
  in  al,kbc_status_reg  ; kbc_status_reg = 064h
  test  al,kbc_stat_obf
  loopz  .1    ; Если буфер клавиатуры свободен, идем дальше
  or  cx,cx
  pop  cx
  jz  .error    ; Закончились попытки, ошибка
  test  al,kbc_stat_aobf  ; Проверяем, есть ли данные в буфере мыши
.error:
  ret

Для размаскирования irq12 вставлял код:
  push ax
  mov al,0Dh ; Только для проверки, в данной системе исходно 1Dh
  out 0A1h,al
  pop ax

Сразу не понял в чем дело.
Между этими операциями не должно быть никакой связи.
Видимо причина в том, что контроллер прерываний слишком тормознутый, и, если после операции записи в него, через короткое время следует операция с другим портом (или именно 064h??), он не успевает считать данные.
Эксперимент это подтвердил. Если в Debug запускать сразу весь участок кода - маска прерываний не меняется. Если в режиме трассировки (когда появляются паузы) - всё работает.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Роман, очень ценное наблюдение, я думаю, мне тоже пригодится!!

А Вы пробовали поставить небольшую задержку после размаскирования
8259 (перед чтением регистра статуса 8042), для проверки гипотезы?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Буду пробовать. Не хватает времени плотно заняться. Приходится урывками.

UPD
Не могу повторить утренний результат.
Запуск pa2supp.com вызывает маскирование irq12 (маска 1Dh), даже если оно было ранее замаскировано (маска 0Dh).
В Debug код
mov AL,0D
out A1,AL
in AL,64
in AL,A1

работает как ни в чем не бывало.
Т.е. в результате в регистре 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
Нашел ещё одну ошибку.
Теперь работает :)
Пока не выкладываю, программа ещё сыровата. Надо ещё тестировать и оптимизировать. Но если кто-то оперативно повторит схему, пишите - поделюсь, в состоянии "как есть". Заодно потестируете.

Проверял:
- 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 написал:
[q]
Нашел ещё одну ошибку.
Теперь работает :)
[/q]
Отлично!


Rio444 написал:
[q]
Код для размаскирования/добавления очень простой и короткий. Но не знаю, куда и как его вставить до загрузки Win.
[/q]
Можно рассмотреть вставление кода модифицировав какой либо менеджер загрузки с
открытыми исходниками.

Правильно однако сделать нормальный драйвер, сам по себе он простейший, но по
деталям не подскажу, тк не использую windows.

В качестве плана - найти DDK для NT3.51, посмотреть примеры кодов и сделать драйвер
который может даже не регистрироваться в системе, и не отвечать на команды OS. По
аналогии с DOS драйвером - он должен выполнить инициализацию, выполнить требуемый код и далее освободить память (как это делается, если устройства, с которым дрвйвер
работает не найдено).
Tronix
Advanced Member


Откуда: Москва
Всего сообщений: 1749
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 янв. 2008
i8088 написал:
[q]
найти DDK для NT3.51
[/q]
https://winworldpc.com/product/windows-sdk-ddk/nt-3x
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
В качестве плана - найти DDK для NT3.51, посмотреть примеры кодов и сделать драйвер
[/q]
Но тогда придется делать драйвер для каждой оси.
Это, как минимум, 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
Rio444 написал:
[q]
Мне видится более интересным вариант модификации MBR. Делают же это как-то вирусы?

Другие, возможные варианты:
- дополнение кода bios в ПЗУ,
- отдельное ПЗУ (например на сетевой карте).
[/q]
Все варианты возможны, кстати модификация BIOS для Award (если достаточно размаскировать IRQ12
итп, те есть отлаженный код) довольно простая.

Надо или внедрится в POST jump table (после настройки 8259, на место dummy,онми всегда есть)
Или добавить ISA module в BIOS, с помощью CBROM (это менее надежно).
[q]
С этим вопросом перекликается другой, очень интересный. Возможно ли создание контроллера PS/2 мыши на отдельной ISA плате?
[/q]
Основная здесь сложность (если не требовать спец драйвера, те если контроллер kbd+mouse по
стандартным адресам, и также минимум доработок платы), это полностью отключить встроенный
контроллер, те сть весь функционал переложить на ISA плату.

Возможно, достаточно изъять 8042 из панели, или если он запаян, организовать посоянно RESET или
отсутствие выборки #CS для него. (8042 - не совсем 8048, он специально предназначен для работы в
составе микропроцессорных систем, есть изменения, в виде наличия A0 и CS в частности).
Если он подключен к шине данных ISA без дополнительных буферов (типа LS 245, это легко
проверить), то изымания должно быть достаточно, тк вместо встроенного быдет выбираться внешний,
а дешифратор буден на ISA плате, те ситуации когда на шине ISA окажутся два устройства по одному
адресу, не должно быть.

upd.
В оригинальной AT буфер есть, отделяющий внутреннние устройства, от устройств на ISA. Тогда правильнее контроллер по нестандартным адресам, со своим драйвером.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
В оригинальной AT буфер есть, отделяющий внутреннние устройства, от устройств на ISA.
[/q]
Не совсем понял, как это влияет?

i8088 написал:
[q]
Основная здесь сложность... это полностью отключить встроенныйконтроллер
[/q]
Это мне кажется совсем не сложным. Прямой и грубый вариант - откусить ногу /CS и повесить её через резистор на +5В.
Возможно, есть какие-то программные варианты.

i8088 написал:
[q]
те сть весь функционал переложить на ISA плату.
[/q]
Возможно ли это? Помимо обслуживания мыши и клавиатуры, KBC, как минимум, управляет А20 Gate и программным Reset.
Схему изучал давно, но помнится, не все сигналы выведены на ISA.
Придется бросать провода с ножек 8042, что нивелирует весь смысл затеи.
Наверное, проще оставить существующий KBC, но отключать его, когда идёт обращение к портам 60h и 64h, выделяя команды для мыши и клавиатуры. Причем очень оперативно. Наверное, с помощью ПЛИС. Так, чтобы команды, связанные с А20 Gate и Reset продолжали работать.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Rio444 написал:
[q]
Не совсем понял, как это влияет?
[/q]
Даже если отключить контроллер KBC, буфер двунаправленный может быть будет
выбран при обращении к портам KBC, и будет передавать логические единицы на ISA.


Rio444 написал:
[q]
Помимо обслуживания мыши и клавиатуры, KBC, как минимум, управляет А20 Gate и программным Reset.
[/q]
Черт, я совсем забыл за это! Тогда да, полная замена KBC без проводов от ISA платы невозможна.


Rio444 написал:
[q]
Наверное, проще оставить существующий KBC, но отключать его, когда идёт обращение к портам 60h и 64h, выделяя команды для мыши и клавиатуры. Причем очень оперативно. Наверное, с помощью ПЛИС. Так, чтобы команды, связанные с А20 Gate и Reset продолжали работать.
[/q]
По моему это несколько громоздко и не очень надежно, опять таки не на всех платах 8042 в явном виде...

Мне все же кажется, правильнее делать платы по нестандартным адресам, со своим
драйвером, специально для мыши, это будет пригодно и для плат, где нет "настоящего" 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
Я тут почитал - ISA плата по стандартным адресам не будет работать,
тк чтение по адресам 0h -0ffh (при наличии устройства) не распрстраняется на шины расширения.


Rio444 написал:
[q]
Что если использовать плату, которая ОС будет видна как упомянутая выше "Bus Mouse"?
А фактически это будет переходник с "Bus Mouse" на PS/2 мышь.
[/q]
Насколько помню, Bus Mouse это просто несколько линий портов ввода-вывода, и запрос прерывания. В принципе возможно, только
такая мышь не может программироваться (если только в обработчике
OS это не имитируется возможностью изменения скорости итп), те это похоже на переход с клавиатуры AT
на XT Протоколы надо будет изучить очень тщательно, для написания
программы ля MK.

Только по скорости - не будет ли ситуации как с COM->PS2.
ISA конечно быстрее COM, но протокол BUS Mouse не вносет ли ограничения?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
i8088 написал:
[q]
Только по скорости - не будет ли ситуации как с COM->PS2.ISA конечно быстрее COM, но протокол BUS Mouse не вносет ли ограничения?
[/q]
Есть такие опасения.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Win95 после запуска драйвера подхватила PS/2 мышь легко и непринужденно, причем ещё на этапе установки.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Проверил на 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 написал:
[q]
Предлагаю в первом посте написать то, что достигнуто + фотки. Иначе 8 страниц - не осилю читать
[/q]
Наконец наступил этот "вечер", добавил в первый пост.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Продолжаю свой блог :)

Вчера попробовал запустить на WinNT 3.51, добавив в MBR такой код:
  MBR HEX
  0000 E98D01                 jmp near 0190  
  ....
  ....
  0190 E4A1                   in al, A1
  0192 24EF                   and al, EF
  0194 E6A1                   out A1, al
  0196 B84000                 mov ax, 0040
  0199 8ED8                   mov ds, ax
  019B 800E100004             or byte ptr [0010], 04
  01A0 31C0                   xor ax, ax
  01A2 FA                     cli
  01A3 E95DFE                 jmp near 0003  

Он затирает командой 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
Поигрался вчера с 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
Rio444 написал:
[q]
Залил эпоксидным клеем.Залил эпоксидным клеем.Залил эпоксидным клеем.
[/q]
А с какой целью заливали то? Сопутствующие темы про эпоксидку читал...
Если шлейф отходящий зафиксировать - так его отдельно приклеить можно.
Если схему заизолировать - лак и кисточка в руки :)
Не в плане надежности Вашей схемы, но любое покрытие ремонтопригодность снижает :frown:
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
XPOHOMETP написал:
[q]
А с какой целью заливали то?
[/q]
Для прочности. Если "поставил и забыл", думаю достаточно лаком покрыть.
У меня сейчас один экземпляр такой. Пока не сделаю несколько, буду перетыкать из платы в плату этот.
Там есть очень ненадежные с механической точки зрения места:
- 20, 38, 39, 40* ноги припаяны к дорожкам на краю платы, т.е. пропаян стык 90 градусов между ножкой и платой. Много припоя туда нельзя, будет мешать заходить ножкам в панельку;
- 38 и 39 ноги "фиктивные", согнуты буквой "Г" и приклеены на суперклей к тыльной стороне платы.
Вот за эти элементы опасения.
Шлейф приклеен к плате суперклеем до заливки эпоксидкой.

*первая нога - со стороны шлейфа.
XPOHOMETP
Advanced Member


Всего сообщений: 752
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
13 мая 2015
Rio444 написал:
[q]
Там есть очень ненадежные с механической точки зрения места
[/q]
Классическая эпоксидка конечно добавит толщины для прочности, но сама по себе она тоже вещь весьма хрупкая.
Был какой-то вариант для ремонта обуви, типа лопнувшие подошвы клеить.
Сам не пробовал, потому марку не подскажу, но от знакомых положительные отзывы слышал.
Клей именно на эпоксидной основне имелся ввиду...

Rio444 написал:
[q]
20, 38, 39, 40* ноги припаяны к дорожкам на краю платы,
[/q]
Это в любом случае штучное изделие.
Намотайте на ножку тонкий проводок, его и на плату заведите (а потом всё вместе пропаять).
Ну а в текущей ситуации ИМХО вопрос не в припое, а насколько крепко дорожка к плате держится.
Если при пайке не перегревать, то не оторвутся они. Вы же не советском гетинаксе делаете...
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
XPOHOMETP написал:
[q]
Вы же не советском гетинаксе делаете...
[/q]
Не знаю, на каком. Покупал на местном радиорынке. Подозреваю, что китайский. Но, точно стеклотекстолит, а не гетинакс.

XPOHOMETP написал:
[q]
Классическая эпоксидка конечно добавит толщины для прочности, но сама по себе она тоже вещь весьма хрупкая.
[/q]
Вы видели мою тему по эпоксидке. В конце-концов остановился на имеющейся каменской.
ММ меня успокоил. Увеличил количество отвердителя до соотношения 15:100, и стала нормально застывать.
Даже через несколько дней, после полного отвердения, она не производит впечатление хрупкой.
Вчера лишнее отпиливал дремелем. Пилилась нормально, куски не откалывались.

XPOHOMETP написал:
[q]
Намотайте на ножку тонкий проводок, его и на плату заведите (а потом всё вместе пропаять).
[/q]
Была такая мысль. Но не реализовал. И так слишком много мелкой работы.
Текущий вариант мне кажется вполне приемлемым. Единственный минус - до заливки эпоксидкой микросхема садилась глубже в панельку. Мешал только шлейф. Если срезать немного боковой стенки панельки, думаю можно было бы запихать до конца.
IdeaFix
Гость

Ссылка

А можно фоточку реализации проводника между контроллером и ISA слотом? Или такого уже нет?
Сейчас на форуме
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Можно конечно.
Вечером.
Там ничего особенного.
Обычный МГТФ с обратной стороны платы.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
Обещанное фото.

Резистор не мой, был изначально.
Плата та же самая, что на фото выше.
IdeaFix
Гость

Ссылка

Понятно. Ну и ISA слот при этом функционален.

Блин, круто!
Сейчас на форуме
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
IdeaFix написал:
[q]
Понятно. Ну и ISA слот при этом функционален.
[/q]
Конечно функционален.
И если вернуть назад обычную микросхему контроллера, всё работает как обычно.
Подключение Irq12 с ISA никак не мешает.
Более того, коллега с вогонс утверждает, что на всех его платах контроллер уже изначально подключен к IRQ12.
Либо я его неправильно понял.
Ekb
Advanced Member


Всего сообщений: 1628
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
15 июня 2014
Оффтопик: Оффтопик: Пипец как сложно искать в здешнем "Поиске", не находит то "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 написал:
[q]
Может кому пригодится, тоже извратили над PS/2 протоколом:
https://www.vogons.org/viewtop...p;start=20
[/q]
Так ссылка уже есть в 6-м сообщении этой темы. Там, где фотография с vogons.

mindforms написал:
[q]
круто! осталось подключить к usb... валяется у меня Cherry MХ5000 из далекого 1996 года.
[/q]
Спасибо! Что подключить?
mindforms
Advanced Member


Откуда: Ростов
Всего сообщений: 1085
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
31 янв. 2008
Rio444 написал:
[q]
Что подключить?
[/q]
я неверно выразился. подключить АТ к USB, но это мало того, что совершенно отдельный контроллер так еще и далеко от темы СТАРЫХ плат, сорри я начал читать тему с конца.
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
mindforms написал:
[q]
переделать АТ в USB
[/q]
AT в 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 написал:
[q]
Тут предлагали сделать ISA USB контроллер.
[/q]
Чтобы что к нему подключать ?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
justontime написал:
[q]
[/q]
В первую очередь USB flash. Также мышь.
justontime
Full Member


Откуда: СПб
Всего сообщений: 236
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
10 сен. 2016
Rio444 написал:
[q]
В первую очередь USB flash. Также мышь.
[/q]
Тогда не понимаю насчет требуемого жуткого быстродействия компьютера. Для USB flash уже есть адаптер

Для мыши можно сделать плату на базе 5-долларового микроконтроллера (плюс, скорее всего, некоторая обвязка).

Или я неправильно понял идею ?
Rio444
Гость


Откуда: Ростов-на-Дону
Всего сообщений: 8632
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
14 сен. 2014
justontime написал:
[q]
Тогда не понимаю насчет требуемого жуткого быстродействия компьютера. Для USB flash уже есть адаптер
[/q]
Не вникал в этот вопрос.
Только на собственном опыте знаю, что если в USB воткнута флешка, в системах уровня Pentium I и даже старше, снижаются результаты тестов.
Если с этой флешкой производятся операции чтения-записи, расходуется значительный ресурс процессора.
Подобные отзывы слышал от других участников форума.

justontime написал:
[q]
Для мыши можно сделать плату на базе 5-долларового микроконтроллера (плюс, скорее всего, некоторая обвязка).
[/q]
Т.е. готовое устройство будет стоить не менее 10$.
В чем смысл, если за 100-200 руб. можно купить б/у оптическую PS/2 мышь, а за ~300 руб. новую или универсальную, с переходником?
<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... .. 12 13 14 15 16 17
Печать
Полигон-2 »   IBM PC-совместимое. До 2000 года включительно »   Переделка АТ интерфейса клавиатуры в PS/2 на старых платах
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS