Вход

Просмотр полной версии : Клавиатура



radpzc
15.07.2008, 12:44
Подскажите, сколько одновременно нажатых клавиш можно определить на спектруме?
В нескольких эмуляторах видел "странную", на мой взгляд, эмуляцию порта клавиатуры, когда нажатые в одном полуряду кнопки влияют на другой полуряд. Схемотехнически с чем это связано, различается ли ввод на разных вариантах Спектрума?

goodboy
15.07.2008, 13:26
ну если взять за пример правый синклер джойстик (67890) то опрос одновременно нажатых трёх клавиш обычная ситуация на реале, а вот в эмулях на PC могут быть проблемы (из за устройства клавиатуры). в фирменных спектрумах (может в каком-то конкретном issue) есть ситуация когда одновременно нажатые кнопки выдают совсем другой результат (на форуме WoS была такая тема).

radpzc
15.07.2008, 13:41
Вот цитата из книги "Как написать игру на ассемблере для 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 клавиатуры. На реальном Спекртуме, к сожалению проверить не могу.

goodboy
15.07.2008, 14:32
Нажимаю "k"+"l"+ "x": 249 249 (а должно быть 249 251)


проверил на `зелёном` скорпионе - 249,249

radpzc
15.07.2008, 14:42
проверил на `зелёном` скорпионе - 249,249

Значит это как раз тот случай, когда выдаётся другой результат :)

goodboy
15.07.2008, 14:58
Нажимаю "k"+"l"+ "x": 249 249 (а должно быть 249 251)

а вот на эмуле CBSpeccy (Amiga) 249,251

radpzc
15.07.2008, 16:41
В UnrealSpeccy при keymatrix=0 всё нормально, осталось узнать что за keymatrix..

molodcov_alex
15.07.2008, 17:03
Взгляните на схему самой клавы и все поймете :D
Когда вы нажимаете скажем 'j' и 'k' линии D1 и D2 замыкаются на соответствующую этому ряду адресную линию. То есть D1 и D2 оказываются замкнутыми. Так при опросе любой другой линии, при нажатии на клавиши соответствующие этим D1 или D2, автоматически будет "нажиматься" и вторая клавиша.
Если так не понятно, то могу кусочек схемки, демонстрирующей это дело, кинуть.

radpzc
15.07.2008, 17:14
Так адрес же другой?

molodcov_alex
15.07.2008, 17:32
Адрес тут не причем. Вот картинки. Картинка номер раз: аналогичная спековской клаве, только кнопки 4.
Картинка номер 2: наша ситуация.
Скажем на A0 ничего (все таки через диод подключено, то есть здесь лог. 1), а A1 замыкается на землю (в общем эта линия выбрана, лог. 0). Что происходит: кроме того, что ток течет через 3ю кнопку от D0 к A1, он также течет и от D1 через 2ю, затем 1ю, а затем и саму 3ю кнопку. Таким образом получается что оба D0 и D1 замкнуты на землю (лог. 0).

radpzc
15.07.2008, 17:49
Паняно :) Спасибо, имелось ввиду наверное "что ток течет через 3ю кнопку от D0 к A1"

molodcov_alex
15.07.2008, 17:55
Паняно :) Спасибо, имелось ввиду наверное "что ток течет через 3ю кнопку от D0 к A1"
Ага. Исправим.

radpzc
16.07.2008, 09:24
А существуют ли модели Спектрума, где нет этого эффекта?

denisv
16.07.2008, 12:07
Навскидку можно предположить, что это те, у которых контроллер PC клавы подключен/встроен.
Например Speccy 2007 (но надо будет поточнее проверить).
Возможно на ZXMC не будет этого эффекта.

Vladimir
16.07.2008, 12:10
Эффекта не будет, если каждую кнопку через диод включить.
Не помню, чтоб где-то так было сделано штатно, но если надо, реалезуемо на любом клоне