Просмотр полной версии : Клавиатура
Подскажите, сколько одновременно нажатых клавиш можно определить на спектруме?
В нескольких эмуляторах видел "странную", на мой взгляд, эмуляцию порта клавиатуры, когда нажатые в одном полуряду кнопки влияют на другой полуряд. Схемотехнически с чем это связано, различается ли ввод на разных вариантах Спектрума?
ну если взять за пример правый синклер джойстик (67890) то опрос одновременно нажатых трёх клавиш обычная ситуация на реале, а вот в эмулях на PC могут быть проблемы (из за устройства клавиатуры). в фирменных спектрумах (может в каком-то конкретном issue) есть ситуация когда одновременно нажатые кнопки выдают совсем другой результат (на форуме WoS была такая тема).
Вот цитата из книги "Как написать игру на ассемблере для ZX Spectrum"
(Евдокимов А. А. Капульцевич. ГЛАВА ВОСЬМАЯ):
Из-за упрощенной аппаратной реализации клавиатуры, примененной в ZX Spectrum, достоверно (в общем случае) можно определить одновременное нажатие не более двух каких-либо клавиш
А теперь мой пример (проверялось в UnrealSpeccy):
10 print at 0,0;in 49150
20 print at 1,0;in 65278
30 goto 10
1.
Нажимаю только "x": результат 255 251
Нажимаю "k"+"l": 249 255
Нажимаю "k"+"l"+ "x": 249 249 (а должно быть 249 251)
2.
Нажимаю "c": 255 247
Нажимаю "k"+"l"+ "c": 249 247 (правильно)
Ошибочная ситуация в первом случае связана с тем, что x и k находятся на одинаковой позиции (но в разных полурядах) и такое поведение порта клавиатуры в эмуляторе сделано СПЕЦИАЛЬНО, и не связано с работой контроллера PC клавиатуры. На реальном Спекртуме, к сожалению проверить не могу.
Нажимаю "k"+"l"+ "x": 249 249 (а должно быть 249 251)
проверил на `зелёном` скорпионе - 249,249
проверил на `зелёном` скорпионе - 249,249
Значит это как раз тот случай, когда выдаётся другой результат :)
Нажимаю "k"+"l"+ "x": 249 249 (а должно быть 249 251)
а вот на эмуле CBSpeccy (Amiga) 249,251
В UnrealSpeccy при keymatrix=0 всё нормально, осталось узнать что за keymatrix..
molodcov_alex
15.07.2008, 17:03
Взгляните на схему самой клавы и все поймете :D
Когда вы нажимаете скажем 'j' и 'k' линии D1 и D2 замыкаются на соответствующую этому ряду адресную линию. То есть D1 и D2 оказываются замкнутыми. Так при опросе любой другой линии, при нажатии на клавиши соответствующие этим D1 или D2, автоматически будет "нажиматься" и вторая клавиша.
Если так не понятно, то могу кусочек схемки, демонстрирующей это дело, кинуть.
molodcov_alex
15.07.2008, 17:32
Адрес тут не причем. Вот картинки. Картинка номер раз: аналогичная спековской клаве, только кнопки 4.
Картинка номер 2: наша ситуация.
Скажем на A0 ничего (все таки через диод подключено, то есть здесь лог. 1), а A1 замыкается на землю (в общем эта линия выбрана, лог. 0). Что происходит: кроме того, что ток течет через 3ю кнопку от D0 к A1, он также течет и от D1 через 2ю, затем 1ю, а затем и саму 3ю кнопку. Таким образом получается что оба D0 и D1 замкнуты на землю (лог. 0).
Паняно :) Спасибо, имелось ввиду наверное "что ток течет через 3ю кнопку от D0 к A1"
molodcov_alex
15.07.2008, 17:55
Паняно :) Спасибо, имелось ввиду наверное "что ток течет через 3ю кнопку от D0 к A1"
Ага. Исправим.
А существуют ли модели Спектрума, где нет этого эффекта?
Навскидку можно предположить, что это те, у которых контроллер PC клавы подключен/встроен.
Например Speccy 2007 (но надо будет поточнее проверить).
Возможно на ZXMC не будет этого эффекта.
Vladimir
16.07.2008, 12:10
Эффекта не будет, если каждую кнопку через диод включить.
Не помню, чтоб где-то так было сделано штатно, но если надо, реалезуемо на любом клоне
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot