Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ - EmuStudio (http://zx-pk.ru/showthread.php?t=18027)

Titus 15th April 2012 12:35

Quote:

Originally Posted by hobot (Post 494263)
Что там с шифтами я вообще не понимаю,
но дело в том, что в 0.06а залипают комбинации L$SHIFT+<any_key>
Ты продолжаешь писать что всё соответствует IBM, но ЭТО НЕ ТАК!!!
У тебя сейчас (ну сам потыркай) все знаки на цифрах соответствуют
УКНЦ а не IBM (левая круглая скобка на 8!!!). Вот и получается и не IBM и не УКНЦ - а вообще непонятное что-то !!!

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

hobot 15th April 2012 13:36

Quote:

Originally Posted by Titus (Post 494272)
Еще раз повторюсь, что нажимать надо правый шифт, а не левый.

Да как это возможно то? Под левый шифт всегда есть мизинец, а под правый ???
Понимаешь ли на буке он "маленький" и расположен так, что его как-бы и нет совсем И вообще не понимаю я зачем и почему ты их различаешь, То есть я реально не понимаю ))) Залипает - вот тут кстати ещё один момент !!!
Клавиатура вообще при старте эмулятора стала "тормозной" какой-то что ли, хотя
скорость самой эмуляции (скорость игр) вроде осталась прежней - то есть по прежнему надо скорость "занижать", а вот реакция на кнопки стала какая-то "резиновая", некоторое нажатия shift+" проходят не с первого раза!!!
Если быстро не отпустить и оставить шифт зажатым символ продолжает печататься.
Я использую левый шифт !!! У меня есть для него палец и он удобно расположен
и на буке и на десктопе с полноразмерной клавой.
Титус просто прикинь мои просьбы и доводы на самом деле "очень правильные".
Другое дело, будешь ли ты переделывать что-то, я пока сделал откат на 5f версию,
с ней покрайней мере небыло "резиновости" в работе с кнопками.
ДА!!! Вот (если я что то пропустил просьба ткнуть) ОЧЕНЬ БЫ пригодился режим паузы !!! Что то типа кнопочки "run" в UKNCBTL.
Если перелопачивать и переходить на линейку версий 0.06 так всё ближе и ближе к идеалу ! )))

---------- Post added at 12:36 ---------- Previous post was at 12:31 ----------

Quote:

Originally Posted by Titus (Post 494272)
Левый остался, как и раньше.

а что раньше??? что это значит ???

Titus 16th April 2012 13:55

1 Attachment(s)
Немножко обновил версию.
Теперь оба шифта работают одинаково.
Яркость ТВ режима и Монохром немного понизил.
А так же перенес клавишу смены масштабирования видеорежима с NumLock на освободившуюся Delete.
Теперь Delete - циклическая смена масштаба по X в режиме УКНЦ,
a LCtr + Delete - переключение режима сканлайнов (обычные / приближенные к телевизионным).

---------- Post added at 12:55 ---------- Previous post was at 12:54 ----------

А на счет залипания клавиш - так и не смог добиться.

Для справки для Хобота - залипание - это когда при отпускании ВСЕХ клавиш на клавиатуре, продолжает печататься како-либо символ на экране. А вовсе не когда хочешь напечатать один, а печатается другой)

Patron 16th April 2012 15:10

Quote:

Originally Posted by Titus (Post 494664)
Для справки для Хобота - залипание - это когда при отпускании ВСЕХ клавиш на клавиатуре, продолжает печататься како-либо символ на экране.

У меня сложилось впечатление, что у hobotа, при вводе символа с нажатым шифтом ( например ':' ) - этот символ непрерывно печатается до тех пор, пока не отпустишь шифт.

Titus 16th April 2012 15:19

Quote:

Originally Posted by Patron (Post 494681)
У меня сложилось впечатление, что у hobotа, при вводе символа с нажатым шифтом ( например ':' ) - этот символ непрерывно печатается до тех пор, пока не отпустишь шифт.

Нет, там алгоритм следующий.
Есть обычные клавиши, когда каждой PC-клавише ставится в соответствие УКНЦ-клавиша.
А есть режим 'эксклюзивных' клавиш. Т.е. если нажат Shift, и при этом какая-либо эксклюзивная клавиша, то отжимаются все нажатые клавиши, и нажимается заданная комбинация.
Допустим, если нажат Shift + '0', то отпускаются все клавиши, в том числе Shift + '0', потом нажимается Shift + '9', чтобы получилась скобка, как на PC-клавише. И удерживается нажатым, пока не отпустили либо '0', либо 'Shift'. Причем одновременное нажатие любых других клавиш в это время блокируется, чтобы не было неправильных комбинаций.

Vamos 16th April 2012 19:07

У меня залипание на ноуте было так: <Fn> + <*> отпускаю все клавиши но на экране продолжает печататься :::::::::::::, если нажать еще раз комбинацию (обнаружил случайно), то печать ":" останавливалась. Кстати на предпоследней версии один раз так произошло, на более ранних версиях залипание было постоянно, сейчас нет. Такое впечатление что это происходило когда были запущены еще какие то программы.

Titus 16th April 2012 19:17

Quote:

Originally Posted by Vamos (Post 494771)
У меня залипание на ноуте было так: <Fn> + <*> отпускаю все клавиши но на экране продолжает печататься :::::::::::::, если нажать еще раз комбинацию (обнаружил случайно), то печать ":" останавливалась. Кстати на предпоследней версии один раз так произошло, на более ранних версиях залипание было постоянно, сейчас нет. Такое впечатление что это происходило когда были запущены еще какие то программы.

Поищу причину.
У меня не ноут, ничего не залипает. Хотя комп не очень шустрый.
Если еще чего найдется - пишите.

---------- Post added at 18:13 ---------- Previous post was at 18:13 ----------

И еще не забывайте присылать в тему скриншоты окна с эмулятором.

---------- Post added at 18:17 ---------- Previous post was at 18:13 ----------

Хм... это очень странно. Может глючит Direct-Input? Ведь на самом деле алгоритм простой. Каждый кадр считывается массив состояний всех PC-клавиш, и сравнивается, не была ли какая-то из них отпущена или нажата. Если да, то соответственно отправлялся код контроллеру клавиатуры УКНЦ. Даже не представляю, как можно при таком раскладе упустить клавишу. Так может глюкнуть контроллер клавиатуры УКНЦ, но никак не PC.

Vamos 16th April 2012 19:28

Разобрался с нижними 11 видео строками:
http://zx.pk.ru/showpost.php?p=472495&postcount=372
http://zx.pk.ru/showpost.php?p=472501&postcount=373
http://zx.pk.ru/showpost.php?p=472505&postcount=374
Мое мнение совпадает с мнением Alex_K.
Для компромиса может через батник или ИНИ файл сделать настройку экрана при запуске?

Titus 16th April 2012 19:34

Quote:

Originally Posted by Vamos (Post 494777)
Разобрался с нижними 11 видео строками:
http://zx.pk.ru/showpost.php?p=472495&postcount=372
http://zx.pk.ru/showpost.php?p=472501&postcount=373
http://zx.pk.ru/showpost.php?p=472505&postcount=374
Мое мнение совпадает с мнением Alex_K.
Для компромиса может через батник или ИНИ файл сделать настройку экрана при запуске?

Хорошо, учту.

Patron 16th April 2012 20:12

Quote:

Originally Posted by Titus (Post 494773)
Каждый кадр считывается массив состояний всех PC-клавиш

У меня есть ощущение, что эта функция Windows иногда глючит.

В любом случае, при реализации работы с клавиатурой через разбор WM_KEYDOWN / WM_KEYUP - описанных проблем не возникает.

Titus 16th April 2012 20:43

Quote:

Originally Posted by Patron (Post 494793)
У меня есть ощущение, что эта функция Windows иногда глючит.

В любом случае, при реализации работы с клавиатурой через разбор WM_KEYDOWN / WM_KEYUP - описанных проблем не возникает.

Но не позволяет отличить Enter основной от того, что на дополнительной клавиатуре?

Patron 16th April 2012 21:23

Quote:

Originally Posted by Titus (Post 494802)
Но не позволяет отличить Enter основной от того, что на дополнительной клавиатуре?

В lParam передаётся много полезной инфы:

Quote:

lParam Bits Meaning

0-15 The repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.

16-23 The scan code. The value depends on the OEM.

24 Indicates whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.

25-28 Reserved; do not use.

29 The context code. The value is always 0 for a WM_KEYDOWN message.

30 The previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.

31 The transition state. The value is always 0 for a WM_KEYDOWN message

Titus 16th April 2012 21:36

Quote:

Originally Posted by Patron (Post 494818)
В lParam передаётся много полезной инфы:

Это все, конечно, интересно, но на вопрос, различает ли оно точно Enter основной и дополнительной клавиатуры, ты не ответил)

Ксати, интересует так же вопрос, как при активном окне отключить влияние системных клавиш (Alt, CapsLock, Num Lock, Scroll Lock, F10) на лампочки, режимы ввода и системные функции.
А так же, как самому загорать и потухать лампочки на клаве.

Patron 16th April 2012 21:50

Quote:

Originally Posted by Titus (Post 494822)
Это все, конечно, интересно, но на вопрос, различает ли оно точно Enter основной и дополнительной клавиатуры, ты не ответил)

Скан-код - это индивидуальный номер каждой клавиши.

Можно сделать так:
Code:

                case WM_SYSKEYDOWN:
                case WM_KEYDOWN:
                {
                        int uScan = HIWORD( lParam );
                        uScan &= 0x1FF;

И затем добавить вывод значения переменной uScan. Потом понажимать на клавиши и всё станет ясно.

Quote:

Originally Posted by Titus (Post 494822)
Ксати, интересует так же вопрос, как при активном окне отключить влияние системных клавиш (Alt, CapsLock, Num Lock, Scroll Lock, F10) на лампочки, режимы ввода и системные функции.

Есть разница.

Для Alt и F10 достаточно не передавать управление из WM_SYSKEYDOWN в DefWindowProc.

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

Quote:

Originally Posted by Titus (Post 494822)
как самому загорать и потухать лампочки на клаве.

Нужно симулировать нажатие клавиш:

Code:

void SetScrollLock( bool bState )
{
        BYTE keyState[256];

        GetKeyboardState((LPBYTE)&keyState);
        if( (bState && !(keyState[VK_SCROLL] & 1)) ||
          ( !bState &&  (keyState[VK_SCROLL] & 1)) )
        {
        // Simulate a key press
        keybd_event( VK_SCROLL,
                                  0,
                                  KEYEVENTF_EXTENDEDKEY | 0,
                                  0 );

        // Simulate a key release
        keybd_event( VK_SCROLL,
                                  0,
                                  KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                                  0);
        }
}


Titus 16th April 2012 21:57

Quote:

Originally Posted by Patron (Post 494828)
Остальное нереально сложно. Нужно устанавливать глобальный хук клавиатуры, а это влечёт гору проблем. Кроме того, многие антивирусы распознают установку глобального хука клавиатуры, как вредоносную активность.

Нужно симулировать нажатие клавиш

Эмулятор Амиги очень ловко это все делает. На него антивирус тоже ругается?

Patron 16th April 2012 22:05

Quote:

Originally Posted by Titus (Post 494834)
Эмулятор Амиги очень ловко это все делает. На него антивирус тоже ругается?

Нужно у hobotа спросить. Это его антивирус мой эмулятор посадил в карантин.

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

Titus 16th April 2012 22:52

Quote:

Originally Posted by Patron (Post 494837)
Хотя, кто знает - может я всё усложняю, а на самом деле есть какой-то более простой способ делать то же самое без глобального хука клавиатуры.

Вот я тоже не знаю. Я не виндовый писатель-системщик.

---------- Post added at 21:52 ---------- Previous post was at 21:07 ----------

Quote:

Originally Posted by Patron (Post 494828)
Для Alt и F10 достаточно не передавать управление из WM_SYSKEYDOWN в DefWindowProc

А вот за это спасибо. Отключил реакцию на оба альта и F10. Теперь они ФИКС, ГРАФ и F10... что-нибудь)

hobot 17th April 2012 06:14

Quote:

Originally Posted by Titus (Post 494839)
Отключил реакцию на оба альта и F10. Теперь они ФИКС, ГРАФ и F10... что-нибудь)

это реализовано в последнем архиве или только у тебя пока ?

Quote:

Originally Posted by Patron (Post 494837)
Нужно у hobotа спросить. Это его антивирус мой эмулятор посадил в карантин.

Да но не сам антивирус, а встроенная система "SONAR", антивирус ругается даже на
ещё не запущенные программы и на архивы, поэтому (но тут ещё один момент, позже)
не совсем корректно говорить про антивирус в целом.
Произошло с эмуляторм ДВК вот что. Предыдущая версия вообще не волновала антивирус и "СОНАР". Но антивирус перестал обновляться. Я забрал бесплатный (тот же), но новый релиз 2012 года, а там и "СОНАР" обновился (скажем так), это также совпало с обновлением ДВК эмулятора до вот текущей версии.
В новом антивире я все настройки (по возможности) продублировал от старой версии и распаковал (ура!) новый архив от Patrona, ни на скаченный архив,
на распакованные файлы никакой реакции от "сканера-вирусов" естественно не было, а вот система "СОНАР" тупо глушила любую попытку запуска файла pdp.exe.
После короткого совещания с автором эмулятора, я почитал внимательней настройки, персонально списка приложений для "сонар" нет, он есть только для "файервола", поэтому я подобрал такой режим для "сонар" который перестал мне
мешать эмулятором пользоваться.


Quote:

Originally Posted by Titus (Post 494664)
Для справки для Хобота - залипание - это когда при отпускании ВСЕХ клавиш на клавиатуре

Да я понимаю, может я не ясно описал? Если не успеваешь быстро отпустить то символов печатается не один, а сразу небольшая строка типа """"""""""""""""""""
символ + на виндовой - клавише <;:Ж> у меня был с обоими шифтами!!!
И ещё момент неявности - некоторые кнопки имеют как-бы одно "абсолютное"
значение - хотя в реальности (кроме системных) таких кнопок нет !!!
Тоесть в любой комбинации с любыми шифтами эмулятор не различая выводит на экран один символ, где глюк? ))) Это всё про 6a и 5f версии, последнюю же только забрал, надо пробовать.

---------- Post added at 05:14 ---------- Previous post was at 04:12 ----------

Воспроизвести залипание очень трудно !!! Похоже оно как-то связано (могу ошибаться или быть в корне не правым) с мерцанием странного прямоугольничка в правом верхнем углу окна. Если в определённый момент будут что-то нажато оно липнет - но только в определённый момент.

Quote:

Originally Posted by Titus (Post 494834)
Эмулятор Амиги очень ловко это все делает. На него антивирус тоже ругается?

Не пользуюсь поэтому не могу сказать, бегу Амигу ))) УКНЦ и ДВК !!! Ну и АЙБИЭМ ))) Зачем мне другие спектрумы и амиги, там своих "слонов" хватает ))) с хоботАми )))

Титус мне кажется не правильным привязывать опрос клавиатуры к мерцанию экрана, так же как в UKNCBTL вся работа эмулятора нормализуется "ВКЛ ЗВУКА" - никогда не понимал этих "тонкостей". Все окна в Windows получают системные сообщения - и про кнопочки в том числе - почему эмулятор не может последнее хранить, а вот когда его значение передавать внутрь твоих алгоритмов это уже дело твоих внутренних алгоритмов )))
Я вообще не программист ))) Поэтому пытаюсь вникать на сколько могу в тему.
Поставил последний архив !!! Спасибо что пересадил переключалку (ура три раза) !!! Остальное.. погоняю посмотрю.

Titus 17th April 2012 13:31

Quote:

Originally Posted by hobot (Post 494960)
Да я понимаю, может я не ясно описал? Если не успеваешь быстро отпустить то символов печатается не один, а сразу небольшая строка типа """"""""""""""""""""

Любой символ может зависнуть или только определенные комбинации?
На сколько быстро набирается строка символов?
Не является ли эта скорость набора нормальным автоповтором под системой УКНЦ?

---------- Post added at 12:31 ---------- Previous post was at 12:30 ----------

Quote:

Originally Posted by hobot (Post 494960)
Воспроизвести залипание очень трудно !!! Похоже оно как-то связано (могу ошибаться или быть в корне не правым) с мерцанием странного прямоугольничка в правом верхнем углу окна. Если в определённый момент будут что-то нажато оно липнет - но только в определённый момент.

Что за странный прямоугольник? Скриншот можно?

Patron 17th April 2012 14:14

Quote:

Originally Posted by Titus (Post 495096)
Что за странный прямоугольник?

Если привязка автоповтора осуществляется к времени хост-машины, а не к времени эмулируемой машины, то в тех случаях, когда система хост-машины выполняет критические операции и забирает себе все кванты, полностью останавливая выполнение программы эмулятора на одну-две секунды - при следующем кванте эмулятора у него может создаться впечатление ( из-за глючности функции чтения матрицы состояний клавиатуры Windows ), что нажатая в конце предыдущего кванта клавиша - была нажата всё то время, которое система забрала себе. Поэтому эмулятор честно поделит прошедший интервал времени на скорость автоповтора и нарисует кучу повторяющихся символов.

Если же не матрицу клавиш считывать, а разбирать WM_KEYDOWN / WM_KEYUP - такая ситуация возникнуть не может.

Titus 17th April 2012 14:34

Quote:

Originally Posted by Patron (Post 495117)
Если привязка автоповтора осуществляется к времени хост-машины, а не к времени эмулируемой машины...

Нет, автоповтор - это исключительно функция УКНЦ. У меня передается лишь момент отжатия и нажатия клавиши.

---------- Post added at 13:34 ---------- Previous post was at 13:21 ----------

Quote:

Originally Posted by Patron (Post 495117)
при следующем кванте эмулятора у него может создаться впечатление ( из-за глючности функции чтения матрицы состояний клавиатуры Windows ), что нажатая в конце предыдущего кванта клавиша - была нажата всё то время, которое система забрала себе. Поэтому эмулятор честно поделит прошедший интервал времени на скорость автоповтора и нарисует кучу повторяющихся символов.

А, если речь об этом, то тоже вряд ли. Т.к. при очень высоком приоритете эмулятора в системе (а он специально устанавливается таким, чтобы не было тормозов), практически не возможно добиться, чтобы он тормознул на время привышающее 100мс.

Patron 17th April 2012 14:40

Quote:

Originally Posted by Titus (Post 495123)
У меня передается лишь момент отжатия и нажатия клавиши.

Если эти моменты определяются через время хост-машины - нормальная работа возможна только когда эмулятор получает свой квант регулярно ( в Windows это по умолчанию ~ 100 раз в секунду ). Чем нерегулярнее эмулятор получает кванты - тем больше проблем вызывает привязка событий к времени хост-машины.

Вот я, например, привязал прерывание 50 Гц к системному времени. В результате - часы RT-11 идут в "эмуляторе ДВК" строго синхронно с системными часами Windows. Но когда изредка происходят "системные затыки" и система забирает себе все кванты за, например, 100 мс - при получении эмулятором следующего кванта происходят сразу 5 прерываний по вектору 0100 подряд.

Titus 17th April 2012 15:12

Quote:

Originally Posted by Patron (Post 495132)
Вот я, например, привязал прерывание 50 Гц к системному времени. В результате - часы RT-11 идут в "эмуляторе ДВК" строго синхронно с системными часами Windows. Но когда изредка происходят "системные затыки" и система забирает себе все кванты за, например, 100 мс - при получении эмулятором следующего кванта происходят сразу 5 прерываний по вектору 0100 подряд.

У тебя немного другое постоение системы, чем у меня.

Подозреваю, что ты мой эмулятор не запускал)

Patron 17th April 2012 16:00

Quote:

Originally Posted by Titus (Post 495150)
У тебя немного другое постоение системы, чем у меня.

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

Подъём приоритета эмулятора до уровня ниже приоритета ядра Windows здесь не поможет. "Затыки" в Windows происходят на самом высоком приоритете.

У hobotа в ноутбуке наверняка используется какой-то дополнительный сервис Windows ( типа сжатия файловой системы ) или какой-то сторонний драйвер, работающий на приоритете ядра и иногда отнимающий по 600-800 мс.

hobot 17th April 2012 16:12

погонял немного 0.06b
 
Quote:

Originally Posted by Titus (Post 495096)
Что за странный прямоугольник?

Странный мерцающий прямоугольничек ))) Был в эмуляторе всегда ))) Вот же он - рядом с системными кнопками окошка эмулятора.

Quote:

Originally Posted by Titus (Post 495096)
Скриншот можно?

Всегда пожалуйста )))
http://upyourpic.org/images/201204/n9w2exdl3y.png

Сегодня гонял версию из последнего архива ! Эмоции (пока) только
положительные, и пускай раскладка конечно не УКНЦшная, зато:
1 - залипаний не было ни одного ! (попробуй в отладке в режиме D,
понажимать левый "альт" + "F" ну и другие комбинации для пробы.
2 - двоеточие! Titus спасибо и за @ тоже )))
3 - ещё что то по мелочам порадовало уже не помню )))

Ты писал - про рус и лат буковки, гляди что получается
вот на скрине PIKNIK.SAV 50 блоков с дискеты тов.Vamos
Он сразу включает РУС режим при старте, а как известно РУС это
ЛАТ только с шифтом, вот и что бы почитать папирус надо нажимать не
R, а шифт+R - это же УКНЦ.
Кстати говоря кто читал пост в "ИГРАХ УКНЦ" про Ульяновский Сталкер,
я как-то не обращал внимания, что и в этом варианте игры, под рюкзаком
надпись "Ульяновск 1987Г.".
Вот интересно кто-нибудь знает реально авторство этой игры кому принадлежит?

Patron 17th April 2012 16:18

И даже использование сообщений ( скорее всего ) тут не поможет.

В принципе, при привязке к времени хост-машины - правильная эмуляция автоповтора невозможна.

Вот, например, нажали мы клавишу, потом отпустили. Сообщение о нажатии встало в очередь на 10 мс раньше и пришло в один квант, а сообщение об отжатии встало в очередь на 10 мс позже и пришло в другой квант. А между этими квантами прошла секунда.

Спрашивается - какое время между нажатием и отжатием эмулятор сообщит эмулируемой машине ?

hobot 17th April 2012 16:41

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

---------- Post added at 15:28 ---------- Previous post was at 15:27 ----------

Quote:

Originally Posted by Patron (Post 495210)
Спрашивается - какое время между нажатием и отжатием эмулятор сообщит эмулируемой машине ?

Надо что бы последнее wm сообщалось эмулятору всегда! Разве нет?

---------- Post added at 15:29 ---------- Previous post was at 15:28 ----------

А так оно автоматом и произойдёт наверное )

---------- Post added at 15:31 ---------- Previous post was at 15:29 ----------

Если перед отправкой значения эм.машине проверить на = с последний wm как-то так например ) (я не программист!)

---------- Post added at 15:41 ---------- Previous post was at 15:31 ----------

Quote:

Originally Posted by Patron (Post 495210)
какое время между нажатием

да! сорри! не понял вопроса, вот )

Patron 17th April 2012 16:43

Quote:

Originally Posted by hobot (Post 495221)
Надо что бы последнее wm сообщалось эмулятору всегда!

Возможно, я не очень хорошо разбираюсь в системном программировании для Windows, но мне кажется, что сообщение об отжатии клавиши не содержит ни точного времени отжатия, ни информации о продолжительности нажатия. Проблемы из-за этого могут возникать только у тех программ, которые (например) пытаются симулировать автоповтор на основе промежутка времени между приёмом сообщений о нажатии и отжатии.

Как мы уже знаем, если установить в ноутбук "специальные драйверы hobotа" - промежуток времени между реальными нажатием и отжатием и промежуток времени между сообщением о нажатии и сообщением об отжатии могут отличаться между собой на сотни миллисекунд.

Да, если бы Windows добавляла к сообщению об отжатии - информацию об истинной продолжительности нажатия - тогда всё было бы просто.

Но увы - это не так.

hobot 17th April 2012 17:06

"специальные драйверы hobotа" )
 
Quote:

Originally Posted by Patron (Post 495237)
"специальные драйверы hobotа"

не понимаю о чём речь )))
нашёл вот такой пост
"немного по теме клавишь вроде"

Как правило с НОУТБУКАМИ идут спец драйвера для клавиатуры и точпада,
но я ставил только для точпада - без него он криво работает, а клавиши
это http://upyourpic.org/images/201204/xalf3rbzh8.png

Patron 17th April 2012 17:12

Quote:

Originally Posted by hobot (Post 495251)
не понимаю о чём речь )))

Чтобы "всё испортить" - драйвер Windows вовсе не обязан иметь отношение к клавиатуре.

Необходимо и достаточно, чтобы в результате работы этого драйвера ( или службы Windows ) - промежуток между выделяемыми эмулятору квантами хотя бы иногда превышал период симулируемого автоповтора. Тогда, в таких случаях даже самое мимолётное касание клавиши будет вызывать появление такого количества её дубликатов, какое равно отношению периода симулируемого автоповтора к продолжительности "украденного драйвером времени".

Titus 17th April 2012 20:39

Quote:

Originally Posted by Patron (Post 495255)
Необходимо и достаточно, чтобы в результате работы этого драйвера ( или службы Windows ) - промежуток между выделяемыми эмулятору квантами хотя бы иногда превышал период симулируемого автоповтора. Тогда, в таких случаях даже самое мимолётное касание клавиши будет вызывать появление такого количества её дубликатов, какое равно отношению периода симулируемого автоповтора к продолжительности "украденного драйвером времени".

Еще раз повторюсь, что при моем построении эмулятора, такого эффекта быть не может, на сколько бы система не тормознула, хоть на секунду, хоть на минуту.
Кроме того, я не использую сообщения с кодами клавиш от Виндовс. Я сканирую через DirectInput состояние всех клавиш каждый кадр.
Алгоритм у меня таков.

1) Сканировать состояние всех PC-клавиш
2) Сравнить таблицу состояния клавиш с такой же от предыдущего кадра
3) Если какая-либо клавиша изменила состояние, то посылаем драйверу клавиатуры УКНЦ код отпущенной или нажатой соответствующей клавиши.
Все автоповторы делает уже драйвер УКНЦ. При любом торможении хост-машины, время идущее в УКНЦ наоборот замедляется, таким образом происходит эффект обратный описанному Патроном.

Patron 17th April 2012 21:33

Quote:

Originally Posted by Titus (Post 495353)
При любом торможении хост-машины, время идущее в УКНЦ наоборот замедляется

А что происходит, когда нажатие и отпускание клавиши в эмулируемом времени совпадают ?

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

...

Когда hobot упомянул про "странный прямоугольник" - сразу возникло подозрение, что виноват какой-то драйвер, отбирающий слишком много квантов.

Какой смысл утверждать, что это не может влиять - когда "эксперименты hobotа" прямо говорят об обратном:

Quote:

Originally Posted by hobot (Post 495221)
у меня часть залипаний на буке изчезла после переустановки драйвера "точ-пада"


Titus 18th April 2012 00:40

Quote:

Originally Posted by Patron (Post 495372)
А что происходит, когда нажатие и отпускание клавиши в эмулируемом времени совпадают ?

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

Эти моменты не могут совпадать.
Т.к. сперва порту клавиатуры передастся код нажатой клавиши, потом отжатой. Даже если это будет прям-прям друг за другом.

---------- Post added at 23:40 ---------- Previous post was at 23:36 ----------

Quote:

Originally Posted by Patron (Post 495372)
Когда hobot упомянул про "странный прямоугольник" - сразу возникло подозрение, что виноват какой-то драйвер, отбирающий слишком много квантов.

Какой смысл утверждать, что это не может влиять - когда "эксперименты hobotа" прямо говорят об обратном:

Странный прямоугольник - это слайдметер, измеряющий время, затрачиваемое эмулятором на эмуляцию УКНЦ (желтый цвет) и сколько время тратит Виндовс на отрисовку экрана в окне (оранжевый цвет).

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

hobot 18th April 2012 08:08

Quote:

Originally Posted by Titus (Post 495439)
который хорошо бы поймать и описать.

Если получится поймаем, опишем )))

Quote:

Originally Posted by Patron (Post 495372)
после переустановки драйвера "точ-пада"

Patron, это напомню было связано только с эмуляторами ДВК и UKNCBTL,
EmuStudio это не касалось и переустановка драйвера действительно решила
проблему с двумя упомянутыми эмуляторами, хотя и не объяснила, например, почему залипала комбинация именно определённых символов, хотя и попыток их
нажатия не было. С каждым из эмуляторов глюк проявлялся по разному,
если UKNCBTL - он просто убивал текущую сессию (можно было только перезапуском вылечить), то эмул.ДВК позволял продолжить работу просто приходилось каждый раз при активации окна удалять "левые" циферки из командной
строки RT11. Такие дела. Причём драйвер стоит сейчас и та же версия с теми же настройками, просто удалённый и переустановленный вот и всё.


Quote:

Originally Posted by Titus (Post 495353)
Я сканирую через DirectInput состояние всех клавиш каждый кадр.

вот можно подробней, что такое каждый кадр? Каждое мерцание экрана эмулятора
или дерганье оранжевой шкалы в странном прямоугольничке? Хочу вникнуть почему привязка к видеоизображению? (спрашивать у Alex_K про привязку к звуку я наверно не буду, вроде была там сверх причина для этого или просто проще и удобней оказалось написать именно так)

Titus 18th April 2012 14:17

Quote:

Originally Posted by hobot (Post 495513)
вот можно подробней, что такое каждый кадр? Каждое мерцание экрана эмулятора
или дерганье оранжевой шкалы в странном прямоугольничке? Хочу вникнуть почему привязка к видеоизображению? (спрашивать у Alex_K про привязку к звуку я наверно не буду, вроде была там сверх причина для этого или просто проще и удобней оказалось написать именно так)

Каждый кадр - это каждый новый кадр изображения. Если у тебя развертка 60Гц, то это обновление будет 60Гц. Т.е. эмулятор подстраивается под твою развертку, чтобы все было плавно, не мерцало и не попадало под лучик.

Titus 21st April 2012 18:26

Ну что, уважаемые пользователи моего эмулятора, новая раскладка удобна? Хотя, чего я тут пишу, можно было в личку Хобота) Ведь он единственный, кто сделал скриншот, да и вообще пользуется эмулятором)

Arseny 21st April 2012 18:57

Да ладно. Следят - многие (наверняка), ну а hobot - просто активный.

hobot 21st April 2012 23:24

Quote:

Originally Posted by Arseny (Post 497055)
Да ладно. Следят - многие (наверняка), ну а hobot - просто активный.

Я о пользовании эмуляторами УКНЦ и ДВК больше могу судить по количеству посещений вот этой темы (из моей подписи)

---------- Post added at 22:24 ---------- Previous post was at 22:19 ----------

Вoт 1100 было, когда я ссылку на 6-ю бету делал, теперь просто представь, Titus,
какова реальная армия именно у EmuStudio, можно конечно сделать было опрос какой-нибудь, но возрастные люди как правило "ностальгирующие" дарами форумного движка пользуются очень несмело, кривовато и неправильно зачастую. Поэтому
лучше чем статистики посещений ничего наверное не придумать.

Titus 22nd April 2012 00:06

В этой теме 10000 просмотров, и 2 постоянных пользователя, и 10 мимолетных)

hobot 22nd April 2012 00:25

Quote:

Originally Posted by Titus (Post 497040)
Ведь он единственный, кто сделал скриншот, да и вообще пользуется эмулятором)

http://upyourpic.org/images/201204/v6dz7wfs18.png
Один в темноте ))) (С) by [hовот] => МОЯ ШУТКА
http://i.smiles2k.net/lol_smiles/139.gif
ИГРА - я помню, что в самом начале затевания всей этой бузни с архивом,
обещал всем дать пример новой такой игрушечкой (пускай может и простенькой)
для УКНЦ - пока просто один "уплывший в сеть" скриншот - не подделка - просто
разработка затягивается. Просьба ко всем набрать ещё терпения - до конца года
может даже )))
http://upyourpic.org/images/201204/391vs7y7q9.jpg


All times are GMT +4. The time now is 02:47.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.