Естесственно, кнопки SHIFT и CTRL читаются, совершенно спокойно и независимо от других клавиш. Читаются как биты порта F402.
символьные клавиши читаются из F401. Т.е. отдельно, как и на оригинальной РК-клавиатуре
попробую :)
Вид для печати
Естесственно, кнопки SHIFT и CTRL читаются, совершенно спокойно и независимо от других клавиш. Читаются как биты порта F402.
символьные клавиши читаются из F401. Т.е. отдельно, как и на оригинальной РК-клавиатуре
попробую :)
По клавиатуре, в проекте используется модуль ps2_keyboard у которого есть такие интересные выходы:
rx_extended,
rx_released,
rx_shift_key_on,
rx_data_ready
Нука напомните кто там что хотел :)
Я тут нашел следующее по адресу: http://kazus.ru/articles/18.html
"Комбинации клавиш с Shift, Alt и Ctrl передаются как последовательность двух скан-кодов. С точки зрения контроллера эти клавиши ничем не отличаются от всех остальных. Точно так же на аппаратном уровне не различаются режими Num Lock и Caps Lock - они различаются на программном уровне программой, которая обслуживает прерывания от клавиатуры.
Коротко хочу остановиться на реализации режима автоповтора. Как правило функции автоповтора возлагаются на саму клавиатуру - через определенное время, если клавиша не отпущена, то клавиатура посылает еще один точно такой же скан-код. Если в это время нажать еще одну клавишу, то к контроллеру "полетит" уже другой скан-код и будет считаться, что нажата только одна клавиша. В играх эта проблема решена элементарно - клавиша считается нажатой, пока не прийдет соответствующий скан-код с префиксом 0F0h."
Об этом и речь. Что вариант "нажали Ctrl - отпустили - нажали С - отпустили" в текущей реализации получается эквивалентен "нажали Ctrl - нажали С - отпустили - отпустили" и оба раза реализуется в последовательную трансляцию кодов "Ctrl " и "С". Т.е. драйверу никак не понять одновременно нажаты эти кнопки или последовтельно. А если лазать за этим разъяснением в порт f40х, так уже готовый драйвер есть для этого порта, без всяких дополнительных клавиатурных извратов.
Т.е. я - за порт PS2, но думаю его придется серьезно доделывать. Пускай и после писалки на SD. :) Простейший вариант что приходит на ум - допонительно как-то транслировать и коды отпускания клавишь.
Соответствие кнопок в эмуляторе (RK=PC):
УСТ = Home
ПС = End
СТР = Ins
ЗБ = BackSpace
AP2 = Esc
F1..F5 = F1..F5
Ctrl+G = Del
Ctrl+R = PgUp
Ctrl+C = PgDown
РусLat = F8=F9=Scroll (смотря как настроено в настройках эмулятора на закладке "keyboard")
C учетом "TurboPascal-style"-расширителя (включается в настройках эмулятора на закладке "keyboard") добавляются PC-комбинации Ctrl+кнопка для курсорных и фукциональных кнопок, которые транслируются Ориону в "CTRL-Q-кнопка"-сочетания. За соответствием (если кому-то нужно, в чем я по правде сказать - сомневаюсь) - добро пожаловать в исходники (mod8255.pas).
Спокойно, без паники! Думаю, ты не правильно интерпретировал (возможно не понял) приведенную мною выдержку. Будешь ты нажимать последовательно или одновременно клавиши CTRL+C, клавиатура выдаст два скан-кода один за другим, а значит будет два прерывания подряд. Аналогично при нажатии трех клавиш! По получении скан-кода 14Н (Ctrl(L)) - поднимается (в драйвере) программный флаг, а затем по получении скан-кода 21Н (С) принимается решение. Только перед этим следует проверить не появился ли код F0+14H (тоже будет прерывание по отпусканию клавиши (Ctrl(L)), т.е. проверяем ситуацию, когда нажали и отпустили клавишу Ctrl, так и не нажав еще что-то. И так далее! Что здесь сложного?
Сейчас уже абсолютно понятно, что от клавиатуры PS/2 необходимо принимать два байта, иначе не определить в каком состоянии клавиша - нажата или отпущена. Остальное все делается в драйвере.
При старте Монитора (и после Ресет) все прерывания должны быть выключены. Далее, когда идет инициализация Монитора - настраиваются и вектора прерываний. Единственное, что меня волнует в этом вопросе - это поведение при вложенных прерываниях от разных векторов. Как будет вести себя контроллер прерываний, и насколько правильно мы определили приоритеты векторов.
Я почему так активно защищаю наличие прерывания от PS/2-клавиатуры? Меня всегда убивало на Орионе то, что запустив какую-то программу, она начинает, временами, "жить" сама по себе не реагирую на клавиши - потому что "не желает" обращаться к клавиатуре. И без Ресет с этой унизительной ситуацией не справиться! Такого безобразия нет на ПС! Там есть три заветные клавиши (на крайний случай!), которые в 99% случаев возьмут ситуацию под контроль. Мне хочется, чтобы так было и на Орионе.
P.S. Спасибо за "Соответствие кнопок в эмуляторе (RK=PC)"!
---------- Post added at 16:41 ---------- Previous post was at 15:24 ----------
Коллега! А можно менее загадочно?
В общем, пока не смог заставить часы работать. Сейчас отпинаю плату ногами и постучу кувалдой, может заработает.
По моему молчанию можно понять, что симулятор ничего не показывает. с тех самых пор, как в проект добавляется ончипПЗУ, для симулятора ядро процессора отсутствует.
Интел-шина также не работает.
Пока экспериментирую с тактировкой проца, удалось уменьшить вдвое время доступа для видеоконтроллера.
С часами пока глухо, отвлекся на причесывание версии 05.
Теперь за один такт клока читаются два адреса ОЗУ.
Шины соответственно несколько разгрузились от посягательств видеоконтроллера.
Маленько разогнал процик.
Раз по 10 прогнал запуск СР/М в разных турборежимах.
Доволен как слон :)
П.С. может плюнем на 512ВИ1 и пересядем на PCF8583? Дрова часов в СР/М придется переписывать под I2C... На Скорпионе это работает применительно к NVRAM 24С16, исходники драйвера есть. А Т80 вероятно все же маленько отличается по времянкам от Z80, 512ВИ1 не хочет дружить. Завтра продолжу.