PDA

Просмотр полной версии : "Океан-240": подключение клавиатуры



tnt23
07.11.2018, 15:50
В "Океане-240", согласно современным представлениям, поддержаны только интеллектуальные клавиатуры того времени, то есть выдававшие параллельный 7-битный код нажатой клавиши, сопровождая его стробом. Вариантов тут немного.

Первый - собрать (уже не единственный известный на сегодняшний день) контроллер такой клавиатуры на рассыпухе (см. вложение). Он несколько громоздок, зато рассчитан на привычные клавиатурные матрицы типа 11x8. Рекомендован к сборке неленивым людям или конченным любителям старины глубокой.

Второй вариант - собрать лаконичный контроллер из 4 микросхем малой степени интеграции и немножечко пропатчить Монитор для перекодировки сканкодов в ASCII для одиночных нажатий. Про комбинации клавиш, похоже, в этом варианте лучше забыть, но можно будет насладиться директивами Монитора.

http://sensi.org/~tnt23/pics/ps2ocean

Третий вариант - взять имеющиеся в изобилии PS/2 и USB самодельные контроллеры для самодельных ПК и перекроить их на выдачу параллельного кода со стробом. Вариация этого варианта - взять ардуино или рпи по вкусу, и соорудить собственный закат вручную. Из бонусов - нереальная гибкость, возможность делать сброс ПК по комбинации Alt-Ctrl-Del, приятное щекотание ЧСВ.

Четвертый вариант - разновидность первого, авторства rw6hrm. Он (вариант) с меньшим количеством микросхем, но с большим количеством транзисторов, на радость любителям сладкой парочки КТ315/КТ361: https://qsl.net/rw6hrm/html/ascii_kbrd2.htm

UPD свалка ссылок да будет тут.

http://sbc.rictor.org/pckbavr.html

rw6hrm
07.11.2018, 16:04
Поскольку принадлежу к

конченным любителям старины глубокой
и это обеспечивает мне

приятное щекотание ЧСВ ;),
то обошёлся простой ПЗУ с кучкой транзисторов, https://qsl.net/rw6hrm/html/ascii_kbrd2.htm. Гибкость, конечно, чуть более чем реальная, решается перепрошивкой ПЗУ по самым извращённым желаниям.
Тем не менее лентяи требуют использования привычных клавиатур - приходится делать переходник на ПИКе. Но это - очень неспешно, ибо мне оно пока не нужно...

UPD:
1. В качестве клавы можно использовать таковую из комплекта "Ириши". Скорее всего потребуется схемная корректировка.
2. Если патчить Монитор, то можно использовать в качестве основы https://zx-pk.ru/threads/26406-podklyuchenie-at-klaviatury-k-8-bitkam.html , но нужно будет перетранслировать код с 6502 для 8080

perestoronin
07.11.2018, 17:12
взять имеющиеся в изобилии PS/2 и USB самодельные контроллеры для самодельных ПК
Есть в изобилии маленькие чистые платки от проекта для Специалиста МХ2 для подключения клавиатуры PS/2 вместо матричной на кнопках.
Причем под два вида м.к. в smd и dip на выбор.
Кому нужны на опыты для Океанов пишите, халява, попробую отправить обычным письмом, чтобы дешево получилось а Вам бесплатно, но надежнее при встрече в Москве.

tnt23
07.11.2018, 17:15
Есть в изобилии маленькие чистые платки от проекта для Специалиста МХ2 для подключения клавиатуры PS/2 вместо матричной на кнопках.
Причем под два вида м.к. в smd и dip на выбор.
Кому нужны на опыты для Океанов пишите, халява, попробую отправить обычным письмом, чтобы дешево получилось а Вам бесплатно, но надежнее при встрече в Москве.

А можно поподробнее? со ссылками или картинками.

PS нашел вот это - https://zx-pk.ru/threads/20586-ps-2-adapter-klaviatury-dlya-spetsialista/page12.html - со своим лайком даже. Склерозъ неотвратимъ.

perestoronin
07.11.2018, 17:28
нашел вот это
И еще в догонку (https://zx-pk.ru/threads/26473-spetsialist-m-i-ps-2-klaviatera.html)

tnt23
07.11.2018, 17:40
perestoronin, этот контроллер хорош как полуфабрикат, но придется по нему выпиливать лобзиком художественно. Потому что см. пост №1 - в "Океане" не поддерживаются матричные клавиатуры.

- - - Добавлено - - -



1. В качестве клавы можно использовать таковую из комплекта "Ириши". Скорее всего потребуется схемная корректировка.

Я, конечно, знатный собиратель хлама, но клавиатур из комплекта "Ириши" у меня дома не завалялось, насколько я помню.


2. Если патчить Монитор, то можно использовать в качестве основы https://zx-pk.ru/threads/26406-podklyuchenie-at-klaviatury-k-8-bitkam.html , но нужно будет перетранслировать код с 6502 для 8080

Да ну, чего там патчить. Ближе к концу процедуры CI: добавить переход в конец свободной области, где разместить тупую таблицу перекодировки в 128 байт с таким же умственно продвинутым кодом, и возврат назад.

perestoronin
07.11.2018, 17:40
в "Океане" не поддерживаются матричные клавиатуры.
Не уверен что не поддерживаются.
Впрочем по любому пилить придется не только лобзиком но и кодом, чтобы выдать на ножках м.к не только 7 битный код но и строб.

tnt23
07.11.2018, 17:42
Не уверен что не поддерживаются.
Впрочем по любому пилить придется не только лобзиком но и кодом, чтобы выдать на ножках м.к не только 7 битный код но и строб.

Я немножечко поискал по ПЗУ Монитора обращения к портам 40H-42H, их там исчезающе мало, и ничто не намекает на матрицу:



;П\П ВВОДА С КЛАВИАТУРЫ
CI: ;E2A6
CALL CSTS
ORA A
JZ CI
IN 40H
ANI 7FH
PUSH PSW
MVI A,80H
OUT 42H
XRA A
OUT 42H
POP PSW
RET

Mick
07.11.2018, 18:45
Третий вариант - взять имеющиеся в изобилии PS/2 и USB самодельные контроллеры для самодельных ПК и перекроить их на выдачу параллельного кода со стробом. Вариация этого варианта - взять ардуино или рпи по вкусу, и соорудить собственный закат вручную. Из бонусов - нереальная гибкость, возможность делать сброс ПК по комбинации Alt-Ctrl-Del, приятное щекотание ЧСВ.

С таким же успехом пропатчить монитор и подключить 40-ногий контроллер клавы со старой ATшки. Зато профит сразу в скан кодах - все по взрослому.

tnt23
07.11.2018, 20:59
С таким же успехом пропатчить монитор и подключить 40-ногий контроллер клавы со старой ATшки. Зато профит сразу в скан кодах - все по взрослому.

Условия задачи (неясно выраженные) не позволяют что-либо резать или припаивать к плате. Как в этом случае интерфейситься с 40-ногим контроллером, через все те же 7 параллельных бит и строб, я не понимаю.

Mick
08.11.2018, 09:29
Условия задачи (неясно выраженные) не позволяют что-либо резать или припаивать к плате. Как в этом случае интерфейситься с 40-ногим контроллером, через все те же 7 параллельных бит и строб, я не понимаю.

Тогда вопрос снят. Хотя можно более изящнее поступить. Взять дешевенькую или убитую PS/2 или USB клаву, выкинуть плату - а вместо нее поставить какую нибудь мегу. Профит в том что сразу делается как нужно без всяких переходников PS/2 то чего то там. Минус этой идеи в том, что плата (если она культурно выглядит) будет заточена под конкретную клаву (вернее корпус с кнопками)

tnt23
08.11.2018, 09:58
Тогда вопрос снят. Хотя можно более изящнее поступить. Взять дешевенькую или убитую PS/2 или USB клаву, выкинуть плату - а вместо нее поставить какую нибудь мегу. Профит в том что сразу делается как нужно без всяких переходников PS/2 то чего то там. Минус этой идеи в том, что плата (если она культурно выглядит) будет заточена под конкретную клаву (вернее корпус с кнопками)

Такой вариант тоже неплох. В старых клавиатурах контроллер занимает маленькую плату и переделать ее не составит труда. Но вот шнур с пятью проводками от клавы уже не заюзать (7 бит + строб, земля и питание и еще сброс со стороны компа). Промежуточное решение - контроллер PS2 в 7+stb посадить внутрь компа.

Mick
08.11.2018, 11:04
Но вот шнур с пятью проводками от клавы уже не заюзать (7 бит + строб, земля и питание и еще сброс со стороны компа).

Стандартный шнур да, не получится использовать, но тут можно и от VGA кабеля взять шнур или шнур от RS-232 кабеля.

tnt23
10.11.2018, 20:00
https://www.pjrc.com/teensy/td_libs_PS2Keyboard.html (библиотека PS/2 Keyboard для Arduino здесь https://github.com/PaulStoffregen/PS2Keyboard)

tnt23
11.11.2018, 16:13
Подключил PS/2 клавиатуру через Arduino с простым скетчем. "Турбо-Монитор" странно воспринимает нажатия клавиш, например, пробел ему видится семеркой, а практически все остальные клавиши воспринимаются как листание назад.

Какое-то странное у этого Монитора представление о клавиатуре. В частности, строб сброса он выдает не на PC7, а на PC4:


sub_e103h: ld a,093h ;e103 3e 93
out (043h),a ;e105 d3 43
ld a,010h ;e107 3e 10
out (042h),a ;e109 d3 42
xor a ;e10b af
out (042h),a ;e10c d3 42
xor a ;e10e af
ld (0bffah),a ;e10f 32 fa bf
ret ;e112 c9


Возможно, его тяжело патчили когда-то.

Да и сам ввод с клавиатуры презанятный:

l
e131h:
push bc ;e131 c5
ld b,a ;e132 47
in a,(042h) ;e133 db 42
and 00fh ;e135 e6 0f
ld c,a ;e137 4f
in a,(041h) ;e138 db 41 ; чтение из порта B. Клавиши-модификаторы?
rra ;e13a 1f
and 030h ;e13b e6 30
or c ;e13d b1
ld c,a ;e13e 4f
ld a,010h ;e13f 3e 10
out (042h),a ;e141 d3 42
xor a ;e143 af
out (042h),a ;e144 d3 42
ld a,b ;e146 78
ld b,0ffh ;e147 06 ff
le149h:
inc b ;e149 04
rra ;e14a 1f
jp nc,le149h ;e14b d2 49 e1
ld a,c ;e14e 79
rla ;e14f 17
rla ;e150 17
rla ;e151 17
и так далее


Получается, у нас есть 2 разных монитора. Один с надписью "240/7 MONITOR", назовем его классическим, рассчитанный на клавиатуру с собственным контроллером. И второй с надписью "HARDWARE MONITOR" и встроенным редактором памяти от AZMASTER, назовем его "Turbo Monitor", определенно использующий клавиатуру матричного типа.

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

rw6hrm
11.11.2018, 18:31
хм... гонять кортекс ради простой перекодировки (бррр, аж мурашки побежали).., придётся всё же плотнее взяться за свой проект на ПИКе (если смогу врубиться в бгмерзкий сишный код)...

tnt23
11.11.2018, 19:35
А там кортекс разве? дохлая ATmega328, и безумно сложный код:


#include <PS2Keyboard.h>

const int DataPin = 4;
const int IRQpin = 3;
const byte ACKpin = 2;


const int nSTB = 5;


PS2Keyboard keyboard;


void setup() {

// PD5 is low active out strobe
pinMode (nSTB, OUTPUT);
digitalWrite (nSTB, HIGH);


// PD6, PD7 map to Ok240's PA6 and PA7
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);


// PB0-PB5 map to Ok240's PA0-PA5
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
pinMode (13, OUTPUT);


// PD2 ACK strobe from OK240's PC7
pinMode(ACKpin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ACKpin), ClearSTB, RISING);


keyboard.begin (DataPin, IRQpin);
}


void loop() {


if (keyboard.available()) {

// read the next key
char c = keyboard.read();

if (c & 0x01) {digitalWrite (8, HIGH);} else {digitalWrite (8, LOW);}
if (c & 0x02) {digitalWrite (9, HIGH);} else {digitalWrite (9, LOW);}
if (c & 0x04) {digitalWrite (10, HIGH);} else {digitalWrite (10, LOW);}
if (c & 0x08) {digitalWrite (11, HIGH);} else {digitalWrite (11, LOW);}
if (c & 0x10) {digitalWrite (12, HIGH);} else {digitalWrite (12, LOW);}
if (c & 0x20) {digitalWrite (13, HIGH);} else {digitalWrite (13, LOW);}


if (c & 0x40) {digitalWrite (6, HIGH);} else {digitalWrite (6, LOW);}
if (c & 0x80) {digitalWrite (7, HIGH);} else {digitalWrite (7, LOW);} // Probably not needed for OK240


// Strobe low
digitalWrite (nSTB, LOW);
}
}


void ClearSTB () {
// Strobe high
digitalWrite (nSTB, HIGH);

}

В общем, взял монитор 240-7, с ним клавиатура зажила долго и счастливо.

- - - Добавлено - - -


хм... гонять кортекс ради простой перекодировки (бррр, аж мурашки побежали).., придётся всё же плотнее взяться за свой проект на ПИКе (если смогу врубиться в бгмерзкий сишный код)...

Там не совсем уж простая перекодировка. Клавы же генерят скан-коды на нажатие и отпускание, и они бывают до четырех байт длиной. Опять же нужно сделать, чтобы на составные нажатия типа Ctrl+C генерился однобайтовый код 0x03. И еще внешний сброс пристроить по Alt+Ctrl+Del, и проч.

(И если выбирать между PIC и AVR, так по мне лучше AVR)

rw6hrm
11.11.2018, 21:22
дохлая ATmega328
...ну да, конечно, дохлая... https://zx-pk.ru/threads/26871-8-bitnyj-displejnyj-modul.html
Попробую на Атмега8. А перекодировка реально простая, гляньте код из http://knzl.de/ps2-keyboard-for-apple-ii/ . Там не нужно всё принимать во внимание. И, кстати, сброс там тоже есть ;)

tnt23
11.11.2018, 23:03
...ну да, конечно, дохлая... https://zx-pk.ru/threads/26871-8-bit...nyj-modul.html

Да это понятно, что мега могуча: и композитное видео потянет, и MFM поток разобрать сможет. Я сваял на 328, потому что а) есть готовая хорошая библиотека PS2Keyboard для ардуины, б) смог отобрать Uno R3 у ребенка, и в) Nano 3 в Питере можно купить за 210р.

- - - Добавлено - - -

Переходник для PS/2 клавиатуры под Arduino Uno R3:

66887

tnt23
12.11.2018, 09:33
Есть в изобилии маленькие чистые платки от проекта для Специалиста МХ2 для подключения клавиатуры PS/2 вместо матричной на кнопках.

Посмотрел, этот контроллер тоже можно перезаточить под "параллельный+строб".

tnt23
13.11.2018, 11:12
Видео работы клавиатуры https://www.youtube.com/watch?v=gu6Bp3OBnOE

Контроллер работает хорошо, но не мапит пока Ctrl+ комбинаций. Дело поправимое, PS2Keyboard доступен в исходниках https://github.com/PaulStoffregen/PS2Keyboard и даже содержит зачатки разумного:



// CTRL, ALT & WIN keys could be added
// but is that really worth the overhead?
state &= ~(BREAK | MODIFIER);

L Juriy
22.11.2018, 15:08
Подключение клавиатуры Consul 262 к компьютеру Океан.

tnt23
30.11.2018, 19:48
Как раз когда уже успел про неё забыть, приехала платка Arduino Nano с али за 140р. Отличное сырье для клавиатурного контроллера.

67088

MacBuster
28.12.2018, 09:57
Вот тут кое-что на тему подключения клавиатуры (https://zx-pk.ru/threads/29901-(at)ps-2-ascii-adapter-na-pic16f684.html) ;)

tnt23
28.12.2018, 23:18
Я свой вариант сделаю на ATmega328. Arduino Nano 3 стоит меньше трехсот рублей, программируется через USB и требует под себя несложную переходную плату.

tnt23
11.01.2019, 16:33
Между прочим, контроллер клавиатуры от AZMaster (http://azmaster.narod.ru/Ocean-240/Hard/KKeyb.jpg) несколько отличается по подключению от журнального варианта. И в альтернативной версии Монитора (http://azmaster.narod.ru/Ocean-240/Bios/0xE000_Monitor.bin), будем называть ее 240.Т, подпрограммы работы с клавиатурой рассчитаны на эту схему.

В частности, подтверждение приема символа ACK выдается на линию PC4, а не PC7, как в журнале.

И это малость обескураживает, потому что в Мониторе 240/7 есть поддержка "журнальной" клавиатуры, но нет ничего про работу с НГМД, а в Мониторе 240.T есть процедуры работы с НГМД, но поддержана другая клавиатура.

ЗЫ Теперь понятно, почему при работе с ней у меня не получалось толком ничего нажать.
ЗЗЫ А еще непонятно, что за сигналы такие JST1, JST2 и JST3, заведенные на линии PB5, PB6 и PB7. Шифты-контролы-руслаты? JST1 - CTRL, JST2 - SHIFT.

ivagor
03.02.2019, 16:59
Вспомнил еще один свой давний вопрос по океану. Несколько лет назад собирался и на океан конверснуть msx-ные игрушки. Но меня тогда совершенно не устроила работа клавиатуры без автоповтора. Пробовал, я конечно, в emu, причем тогда, насколько помню, был только конфиг Okean-240, варианта с fdd не было. Собственно вопрос - у океана клавиатура действительно работает без автоповтора? Или это я не разобрался, или это особенность конфига без fdd (там видна разница и по клавиатуре)?

tnt23
03.02.2019, 17:16
Из анализа двух вариантов клавиатурного ввода в двух BIOS могу предположить, что реализация автоповтора целиком ложится на внешний контроллер клавиатуры.

В обоих вариантах анализируется бит прерывания в ВН59, соответствующий линии строба от клавиатуры. Если он взведен, то данные от клавиатуры готовы для считывания в порт, после считывания в сторону клавиатуры отправляется строб подтверждения.

Если для конверсии MSX игр не хватает только автоповтора, то добавить его в прошивки контроллеров PS2-ASCII клавиатур несложно.

ivagor
03.02.2019, 17:26
Известно ли, как оригинальные контроллеры клавиатуры реагировали на удержание клавиши нажатой при получении контроллером подтверждения о принятии кода компьютером?

tnt23
03.02.2019, 17:43
Полностью оригинальных контроллеров известно два, оба варианта на жесткой логике с опросом матрицы кнопок. Есть ли там автоповтор, сказать не могу.

Третий вариант - подключение готовых клавиатур от промышленных терминалов, вроде Consul или Mera. В них автоповтор есть, скорее всего.

А зачем автоповтор нужен в играх? он же унылый: нажал клавишу и ждешь секунду, пока не затараторит.

ivagor
03.02.2019, 17:48
Обычное управление главным героем - нажал вправо, и пока держишь, он идет или едет вправо. А тут нажал, он один раз передвинулся и все. Чтобы он поехал в желаемом направлении нужно много раз жать клавишу.

tnt23
03.02.2019, 17:54
Считай, что автоповтор у нас в кармане. Давай, порть :)

ivagor
03.02.2019, 18:09
Стоп, стоп, не надо портить (ухудшать) аутентично работающие контроллеры, с прицелом на то, что некто то ли портирует, то ли нет. Возможно стоит наоборот подождать, пока будет игрушка и только потом что-то менять в железках. Кроме того в эмуляторах останется аутентичный вариант и автоповторной клавиатурой смогут насладиться только многочисленные обладатели реалов.

tnt23
17.02.2019, 16:46
Автоповтор обычной PS/2 клавиатуры через адаптер (ардуиноподобная PS2Lib) работает: при удержании клавиши пауза в 1.5-2 секунды, потом идет пулеметная очередь.

ivagor
17.02.2019, 18:07
Это хорошо, особенно для набора текста, но для игрушек имхо не очень. И в эмуляторе нет автоповтора.

tnt23
17.02.2019, 18:43
Можно похачить прошивку ардуины так, чтобы автоповтор был равномерный и прямолинейный, но а) неясно, какие у него должны быть параметры для удобства игрока, и б) могут быть неприятности при работе в обычных приложениях.

Или перейти на матричные клавиатуры, что в XXI веке как-то, знаете ли, эээ.

svofski
17.02.2019, 21:43
А нельзя придумать посылку брейк-кода так, чтобы и совместимо со старым софтом (которого, как я понимаю, целых два) и оставалась возможность отслеживать нажатие-отпускание для нового софта (которого зреют уже тыщи)?

tnt23
17.02.2019, 22:12
Придумать можно, а что такое брейк-код, и кто куда его должен посылать?

Старый софт - это весь CP/M, как минимум.

svofski
17.02.2019, 22:39
PS/2 клавиатура посылает мейк-код, когда клавиша нажимается и брейк-код, когда клавиша отпускается. Дальше уже драйвер делает из этого нажатия, автоповторы итд. Может быть можно было бы придумать как посылать брейк-коды в Океан так, чтобы старый софт не принимал их за что-то еще. Тогда можно написать новый драйвер, который бы позволял знать нажата или отпущена клавиша в момент опроса.

Вряд ли весь бесконечно ценный софт для CP/M общается напрямую с железом клавиатуры на Океане. Он будет рад сгенеренному новым умным драйвером автоповтору.

tnt23
18.02.2019, 09:46
Про мейк-брейк это я знатно стормозил.

Драйвинга во времена "Океана-240" еще не существовало. Есть пара ассемблерных вызовов, один проверяет статус готовности очередного кода клавиши, другой этот самый код считывает из порта. Можно их переписать вполне (заодно приделать к клавиатурному ППА джойстики), например, расширив количество бит в коде клавиши с 7 до 8. Наружу для CP/M так и будут торчать вызовы KBDSTAT и KBDREAD.

svofski
18.02.2019, 12:58
Это и есть драйвер, просто тогда еще не научились делать драйвера мышки на триста мегабайт с рекламой.

В общем все выглядит так, как будто бы никаких проблем сделать более полноценную обработку клавиатуры у Океана на самом деле нет?

tnt23
18.02.2019, 13:27
В общем все выглядит так, как будто бы никаких проблем сделать более полноценную обработку клавиатуры у Океана на самом деле нет?

Ну как сказать. Есть некоторые конструкционные особенности, которые следует принять во внимание, если мы не хотим заниматься глубокой евгеникой. Это сигналы STB и ACK, а также однонаправленный 7-битный порт данных. А так ограничений практически нет.

tnt23
19.05.2019, 15:51
Между прочим, контроллер клавиатуры от AZMaster (http://azmaster.narod.ru/Ocean-240/Hard/KKeyb.jpg) несколько отличается по подключению от журнального варианта. И в альтернативной версии Монитора (http://azmaster.narod.ru/Ocean-240/Bios/0xE000_Monitor.bin), будем называть ее 240.Т, подпрограммы работы с клавиатурой рассчитаны на эту схему.


Эта клавиатура - известная по УКНЦ и наборам КР отечественная пленочная клавиатура МС 7007.

tnt23
28.05.2019, 09:49
Как раз когда уже успел про неё забыть, приехала платка Arduino Nano с али за 140р. Отличное сырье для клавиатурного контроллера.

67088

Не прошло и полугода. В рамках операции по причесыванию "Океана" и расчистке рабочего места сбацал платку-нахлобучку:

69111

5 штук на JLCPCB обошлись в 530р вместе с доставкой. Ждемс.

tnt23
10.06.2019, 10:07
https://sensi.org/~tnt23/ok240/ok240ps2.jpg

tnt23
12.06.2019, 10:07
Правильно собранное устройство в настройке не нуждается, как писали когда-то в журнале "Радио".

692866928869287

Не хватает сброса по Ctrl+Alt+Del, и еще надо поправить определения кодов стрелок в PS2Keyboard.h.

ivagor
12.06.2019, 10:31
Проздравляю с! А для тех кто мимо крокодил - теперь настройка параметров автоповтора станет легкой как никогда прежде?

tnt23
12.06.2019, 10:58
Проздравляю с! А для тех кто мимо крокодил - теперь настройка параметров автоповтора станет легкой как никогда прежде?

Спасибо за! Настройка автоповтора и раньше была такой же непринужденной (и тут и там одинаковая ардуина). В смысле - я еще не разбирался :) Посмотрю, поддерживает ли версия PS2Library 2.4.0 двустороннюю беседу с клавиатурой.

tnt23
12.06.2019, 14:57
Есть более продвинутая версия библиотеки PS2KeyboardAdvanced - https://github.com/techpaul/PS2KeyAdvanced - двунаправленная, т.е. с управлением светодиодами, поддержкой всех модификаторов и т.д. To be tested.

Пока в рамках подготовки к Ctrl+Alt+Del завел A0 ардуины на линию сброса клавиатуры "Океана". Как приятное побочное следствие этого пропала необходимость вручную нажимать кнопку сброса после включения.

(Новости ардуиностроения. Штатный бутлоадер передает управление коду скетча спустя примерно 2.5сек, но наука разработала альтернативный скоростной бут https://github.com/Optiboot/optiboot)

tnt23
14.06.2019, 12:07
Приделал Ctrl+Alt+Del. И как люди жили раньше без этого?

С автоповтором дело обстоит следующим образом. Его можно или подстроить в ограниченных пределах (частота от десятков до единиц нажатий в секунду, задержка от 0.25 до 1 секунды), или просто игнорировать для некоторых клавиш (в данном случае для стрелок управления курсором). В принципе это все можно сделать настраиваемым и отключаемым прямо с клавиатуры же.

ivagor
14.06.2019, 12:19
Его можно или подстроить в ограниченных пределах (частота от десятков до единиц нажатий в секунду, задержка от 0.25 до 1 секунды), или просто игнорировать для некоторых клавиш
Супер!


игнорировать для некоторых клавиш (в данном случае для стрелок управления курсором)
А почему игнорировать для курсора? Меня больше всего в emuшном океане как раз разочаровало отсутствие автоповтора для курсора (для игрушек).

tnt23
14.06.2019, 14:47
А почему игнорировать для курсора? Меня больше всего в emuшном океане как раз разочаровало отсутствие автоповтора для курсора (для игрушек).

Ну или действительно, можно автоповтор сохранить, но убрать начальную паузу.

ivagor
14.06.2019, 14:59
автоповтор сохранить, но убрать начальную паузу.
Да, да, да! Для курсора в игрушках самое то, только наверно лучше чтобы начальная пауза (если она не складывается) была равна интервалу между повторами.

tnt23
14.06.2019, 15:21
Да, да, да! Для курсора в игрушках самое то, только наверно лучше чтобы начальная пауза (если она не складывается) была равна интервалу между повторами.

Ну вот если использовать стандартные настройки typematic, встроенные в PS/2 клавиатуру, то невозможно полностью убрать задержку или сделать ее менее 0.25с. Частоту автоповтора-то можно подобрать в 4 cps, так что будет неотличимо. Но! не знаю про твои игрушки, а в Океаноиде с такими тормозами играть невозможно.

ivagor
14.06.2019, 15:27
4 cps совсем мало, тогда снимаю свое предложение по выравниванию. Тут надо по конкретной игрушке на реале настраивать.

tnt23
14.06.2019, 20:30
Вариантов на самом деле множество, если в центре будет все тот же ардуиноконтроллер: от завести с "Океана" в ардуину неиспользуемые линии клавиатурного ППА и рулить контроллером прямо из новодельных игр, до (как я уже писал) снабдить контроллер комбинациями для настроек, вроде Ctrl+Plus, Ctrl-Minus и проч.

sergey_sitnik
17.01.2024, 11:01
Всем доброго дня!!! Кто ни будь собирал эту схему, просто не понятно.. в области транзистора...кто что может пояснить... что куда и как..80115

tnt23
17.01.2024, 21:02
Транзистор коротит на землю сигнал RESET (цепь 7, контакт разъема 18).

АлександрПП
18.01.2024, 10:08
С этим все понятно.Не понятно еще вот это. 6 вывод элемента К155ЛН3 идет в 18 цепь. Резистор 5.6к - в цепь питания. На схеме же они соединены. Все будет понятно, если линию от вывода 6 к эмиттеру транзистора считать шиной. Но она ведь тонкая на схеме.
Вот такие сомнения.

tnt23
18.01.2024, 18:16
По-моему, узел на инверторе предназначен для сброса как кнопкой, так и при включении питания.

Вот зачем там другой узел для прерывания RST0 - загадка.

tnt23
19.01.2024, 11:57
АлександрПП, выход инвертора 6 (цепь 18) идет на строб готовности данных с клавиатуры RST1 (контакт 30 системного разъема). Резистор 9К1 в базе транзистора идет на цепь 6 и только.

Всякие материалы по океаническим клавиатурам собраны тут - https://www.sensi.org/~tnt23/ok240/keyboard.html

АлександрПП
19.01.2024, 16:45
Спасибо, уже разобрался.

tnt23
29.03.2024, 18:37
АлександрПП, скетч для ардуино можно взять здесь - https://github.com/timtashpulatov/ok240/blob/master/ps2kbd/ok240ps2.ino

UncleDim
11.08.2024, 15:54
Поясните начинающему пловцу, нативная клавиатура на рассыпухе авто повторяет нажатое? Вот прям с частотой сканирования? А если в одном ряду несколько нажатых оказывается? Никак не решусь раскурить эту схему, доисторические кмопы как-то мимо прошли и не особо хочется)

UncleDim
12.08.2024, 17:12
(сам вроде как оклавиатурен по третьему варианту авторства четвертого (см. классификацию из стартового поста), от себя только заточка под несколько другой пик, 16ф628, ну и протокол-полярности)
Хочется в идеале чтоб как нативная рассыпушная работала, при этом не собирая ее)

UncleDim
15.08.2024, 21:51
из книги по океану номер два:
TOM 6. "ИГРЫ
!!! "'" - ИГРЫ ТРЕБУЮТ НЕСТРОБИРУЕМОГО ОБМЕНА С КЛАВИАТУРОЙ (ДОРАБОТКА СХЕМЫ)

вот да, замечено, если не реагировать на ACK и держать строб активным - скорострельность автоповтора зашкаливает. не в этом ли заключается доработка? держать строб, пока нажато.

UncleDim
21.08.2024, 20:43
зачем там другой узел для прерывания RST0 - загадка.
тем более, что висит он одиноко в воздухе. либо предполагалось наличие еще одной кнопки, помимо целой кучи в 7007, либо переназначение кнопки стоп, путем переноса соотв. резистора

tnt23
21.08.2024, 21:10
Может, для чисто океанических применений. Там что-то такое в статье упоминалось про RSTx на плате клавиатуры (?)

UncleDim
21.08.2024, 22:14
вопчем почти раскурил схему, пока пытался отрисовать ее в протеусе. недорисовал, вроде понимание настигло раньше)
от генератора с делителями считают счетчики, от счетчиков дешифратор, через диоды на столбцы матрицы. 8 разрядов со строк матрицы складываются, и, буде что в конкретном столбце вдруг нажато - генерится строб. счетчики при этом, похоже, приостанавливаются. далее монитор+ читает номер опрашиваемого контроллером столбца (порт С0..3, 42h), добавляет к нему пару бит состояния Ctrl и Shift (биты порта C5, С6, пододвигаемые, как видим, вплотную к С3..0 в процедуре) и далее, по идее, должен считать порт А(=40h), оно же состояние строк матрицы. по выдаче ack процесс продолжается.
т.е., теоретически есть возможность отработать комбинации нажатых клавиш (с точностью до того, что 7007 это всё же пленка, а не тру механик с персональным диодиком на клавишу),
есть возможность не тратить (почти? прерывания вообще кроме теста задействованы?)) время, когда ничего не нажато,
пока нет пониманиятеперь и ежу понятно, как пробел (20h?) превращается в семерку, на "старом" контроллере,
и получается нет нужды в нестробируемом обмене для вот той части игр из списка книги2.

- - - Добавлено - - -

а также
адаптер на пике под это дело не заточить ввиду отсутствия ног,
на атмеге - можно, ввиду наличия.