Это пояснило о чём речь.
Т.е речь идёт не о лобовой эмуляции кнопок, а о "химии", чтобы совпадали надписи на клавишах. При лобовой эмуляции кнопок таких проблем нет. И как упомянуто выше, я проблему соответствия надписей решал со стороны 8-ми разрядки, а не со стороны PC. Да и проблема несоответствия надписей важна только для текстовых редакторов, а их всего несколько.
Клавиша <НР> ROM-BIOS-ом вообще отдельно не контроллируется (а только при нажатиях клавиш на основном поле). Но есть драйвер отдельно контроллирующий <НР>, где на саму эту клавишу возложена функция смены режима клавиатуры (аналогично русификаторам на PC). Но всё-равно этот нюанс не проблема, т.к лишь приведёт при вводе '@' к смене режима клавиатуры.
В оригинальном журнальном Специалисте клавиш <F1>...<F5>, <АР2>, <СТР>, <ТАБ> не было, что делало невозможным использование системных программ от РК86. Потому вскоре Зверков, опубликовал улучшенную версию "загрузчика" в которой были изменены коды клавиш. Клавишу <ТАБ> Зверков добавил в неиспользуемом узле матрицы. А клавишу <Control> Зверков программно ввести не смог, т.к тут нужны апп.доработки.
В журнале МК 03.1987 стр.37 другие названия клавиш, т.к это для волковского загрузчика, который с тех пор никто не использует. У меня клавиши верхнего ряда называются F1...F9, NOINV, INV, СТР, АР2. И клавиша <ТАБ> на моей клавиатуре тоже есть и как и положено она возвращет код 9.
Хотя п/п-мы ввода C337, C803, C81B вводят, но п/п-ммы вывода C037 и C809 не обслуживают код TAB. Вот здесь я недавно положил редактор, в котором всякий может убедиться, что клавиша <TAB> существует и работает. В данном редакторе шаг табуляции не 8, а 4, но так принято на 8-ми разрядках, потому что удобнее для ассемблера.
Этот образный пример вообще ничего не поясняет.
В моём MSDOS эмуляторе ОРИОНА эмуляция матрицы делается так. Перехватываются Z80-команды чтения портов ППА-клавиатуры. Надо перехватывать не только команду LD A,(mem_port), но и LD A,(RR), а для РК86 и IN A,(io_port).
Как только программа читает порт ППА, то смотрится, во-первых, в какой режим запрограммирован ППА, затем смотрится, что за байт записан в другой порт ППА. И если читаемый порт настроен на ввод, другой порт на вывод и в другом порту есть "бегущий 0" по какому-то разряду, то смотрится нажата ли клавиша на PC. И если есть нажатая PC-клавиша и она расположена на матрице эмулируемой клавиатуры по той линии где есть "бегущий ноль", то по таблице берётся возвращаемый код, иначе FF. Эмулируются и двойные нажатия.
Точно также работают и контроллеры PS/2 клавиатуры на Atmega от vinxru.
Да тут владельцев реального Специалиста - пол-форума, да и эмуляторы, возможно, позволят что-то проверить.
Вы, похоже, собираетесь проверять нелегальную работу с клавиатурой, когда на порты выдаётся не 0, а сочетание нулей и единиц и нажимаются сразу две клавиши, что приводит к замыканию ППА-выхода с нулём на ППА-выход с единицей (т.к диодов нет).
Но зачем это надо? Нет программ занимающихся вредительством, да и сжечь ППА не получится, его разработали не идиоты. Кроме того это делать бессмысленно, т.к у всех разные резисторы привязки, отчего на разных машинах будут разные результаты.





Ответить с цитированием