Подключение PS/2 клавиатуры через COM порт

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

Shaos wrote:незнаю как эта клава была подключена к линуксовому серваку...
Вариантов особых нет - через COM порт. :mrgreen:
Странно, что я не нахожу информации по ним, или гуглю не так, или умный гугл меня не понимает...


P.S. Хотя я глянул - по заказу может быть любой интефейс по желанию заказчика.

P.P.S. Вот здесь, кстати, есть какой-то фришный софт:
Free RS-232 to keyboard software
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

Прямо очень странное дело! :o
Весь интернет только и занят тем, что делает и продает переходники для клавиатур:
PS/2 -> RS-232
А поскольку RS-232 отжил своё, то и переходники RS-232 -> USB .

А реальную ASCII Serial Keyboard я увидел только у одного джентльмена - он это своё
старьё очень любит и не расстался с ним! :ewink:
http://projects.worsleyassociates.com/S ... index.html

Image

Еще пару штук видел на Е-бее, но там непонятно что...
iLavr
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Re: Подключение PS/2 клавиатуры через COM порт

Post by VituZz »

А почему такой клавиатуре просто не эмулировать какой-нибудь терминал? Например, VT-100. Очень стандартное решение, на мой взгляд, и очень поддержанное программным обеспечением.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

VituZz wrote:А почему такой клавиатуре просто не эмулировать какой-нибудь терминал? Например, VT-100.
Виталий, так я и хочу это узнать- какой стандартный протокол используют Serial-клавиатуры, но нигде не могу пока это узнать... :osad:
Понятное дело, что я собираюсь подключать её к Windows-98(ХР), как рассказывал в этом топике.
Значит они должны друг друга как-то понимать...
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: Подключение PS/2 клавиатуры через COM порт

Post by jdigreze »

Судя по тому, что пишут тут: http://hiprog.com/forum/read.php?id_for ... theme=3859
...там просто ASCII подают на вход. А дальше крутитесь аки хотитесь ;)
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

jdigreze wrote:...там просто ASCII подают на вход. А дальше крутитесь аки хотитесь ;)
Ну мне что-то в это не верится, мы же увидели, что есть клавиатуры промышленного дизайна
с RS-232, а клавиатуру - воткнул и должно работать.

Вот даже пример выше это мужика с любимой старой serial-клавиатурой, она у него и Ctrl и
Alt отрабатывет как положено - просто слишком старА, чтобы взять её за образец...
Хотя... если ничего лучше не найду - её и возьму за образец, хоть подробно всё расписано. :-?
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

Lavr wrote:Весь интернет только и занят тем, что делает и продает переходники для клавиатур: PS/2 -> RS-232[/b...
Ага!... Оказывается, приличные ASCII Serial клавиатуры - просто дифицит! :o
Because PC keyboards are so cheap and because of the difficulty of obtaining an ASCII keyboard it makes sense to use a PC keyboard with an 8-bit computer.
The difficulty with PC keyboards is that they produce serial scan codes which are synchronized with a clock signal. In addition the scan codes bear no relation to ASCII code...
Whereas an ASCII keyboard is completely different - it produces 7-bit parallel data that is not synchronized.

Using a PC style keyboard as an ASCII keyboard
iLavr
be3
Junior
Posts: 5
Joined: 06 Jun 2018 04:13

Re: Подключение PS/2 клавиатуры через COM порт

Post by be3 »

Lavr wrote: Под DOS - я понимаю, как это сделать... а вот под Вендой - "меня терзают смутные сомнения..." :-?
Подскажите, а как всетаки подключить rs232 клавиатуру под DOS?

Пытаюсь переделать клавиатуру Palm portable keyboard под rs232 (она кстати и так работает с кпк palm, по rs232), для подключения к старинному кпк HP 200lx
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

be3 wrote:
Lavr wrote:Под DOS - я понимаю, как это сделать... а вот под Вендой - "меня терзают смутные сомнения..." :-?
Подскажите, а как всетаки подключить rs232 клавиатуру под DOS?
Извините, вот под DOS сейчас никак не подскажу... :(

Материалы я эти гуглил довольно давно, и под DOS мне даже попробовать не пришлось.
Хорошо это получилось нативными средствами Win98 - WinXP.

Под более старшими вендами это средство почему-то убрали, и нужна сторонняя утилита.

P.S. Чисто по памяти предполагаю, что под DOS прерывание клавиатуры надо заменить прерыванием от COM-порта,
возможно, с некоторыми доработками...
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

В общем, есть в природе такой драйвер для подключения Serial(RS-232) keyboard под DOS: cdrvkeyb.exe.
The utility cdrvkeyb.exe is a simple keyboard buffer stuffer. Any data received from the specified serial port will be placed in the keyboard buffer. In effect, this allows both the serial port and the keyboard to control the computer.
COMM-DRV/Dos – High speed MS-DOS serial communications driver

и вроде бы как его дают скачать вот здесь (я сам не пробовал):

Download Dos Serial Port Driver
iLavr
be3
Junior
Posts: 5
Joined: 06 Jun 2018 04:13

Re: Подключение PS/2 клавиатуры через COM порт

Post by be3 »

Lavr, спасибо :idea: за наводку, протестирую и отпишусь о результатах.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

be3 wrote:Lavr, спасибо :idea: за наводку, протестирую и отпишусь о результатах.
Мне самому стало интересно, поскольку сам бы я сел писать драйвер под DOS на ассемблере... :wink:
iLavr
be3
Junior
Posts: 5
Joined: 06 Jun 2018 04:13

Re: Подключение PS/2 клавиатуры через COM порт

Post by be3 »

Пока не смог найти это драйвер выше, поищу более детально (но скорее всего он платный + не оч. распространен и как следствие бесплатно не скачать).

Существует драйвер под DOS (c исходниками на ASM :exclaim: - NTKEY2LX.COM) от клавиатуры Apple Newton Keyboard, которая работает по rs232, возможно драйвер универсален, или его можно "отвязать" от особенностей работы Newton Keyboard. (драйвер прикрепил)
В ассемблере не разбираюсь, но буду пробовать все варианты :rotate: .

Второй вариант, это спаять адаптер "Переходник из PS/2 в RS232" прошивка которого, как раз написана под - Windows CE драйвер Newton Keyboard и под MS DOS использовать драйвер NTKEY2LX.COM.
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

be3 wrote:Пока не смог найти это драйвер выше, поищу более детально (но скорее всего он платный + не оч. распространен и как следствие бесплатно не скачать).
Да это понятно - время DOS давненько ушло... :osad:
И все эти утилиты скорее всего надо искать по страницам типа "Старый DOS" и спрашивать на
тематических форумах по старым компам...
Я, к сожалению, сейчас по своей работе занят, поэтому не могу активно вам помочь. :-?

Но если решите справиться с проблемой сами, я бы порекомендовал подсматривать в «Справочник
программиста персональных компьютеров типа IBM PC, XT и AT» автора Р. Джордейна - в нем хорошо
расписаны все эти вопросы под DOS.

Я скачал ваши материалы - если случится свободная минутка - тоже посмотрю, мне чисто интересно.


P.S. Посмотрел исходник сразу - там именно это и делают, что я и предполагал:
Lavr wrote:под DOS прерывание клавиатуры надо заменить прерыванием от COM-порта,
возможно, с некоторыми доработками
Вот фрагмент кода, где вектор прерывания подменяют:

Code: Select all

; Hook vectors
;
; IN:  none.
; OUT:  none.
;
  EVEN
vecthook  proc near
  pushf
  cli

  push  ax
  push  bx
  push  es

  mov  ax,0000h
  mov  es,ax

  mov  bx,ki_hook_vec * 4

  mov  ax,es:[bx]    ; original vector offset value
  mov  ki_org_off,ax
  mov  ax,es:[bx+2]    ; original vector segment value
  mov  ki_org_seg,ax

  mov  ax,offset key_hook
  mov  es:[bx],ax
  mov  ax,cs
  mov  es:[bx+2],ax

  mov  bx,tt_hook_vec * 4

  mov  ax,es:[bx]    ; original vector offset value
  mov  tt_org_off,ax
  mov  ax,es:[bx+2]    ; original vector segment value
  mov  tt_org_seg,ax

  mov  ax,offset tim_hook
  mov  es:[bx],ax
  mov  ax,cs
  mov  es:[bx+2],ax

  mov  bx,(SER_IRQ+8)*4  ; make INT vector offset.

  mov  ax,es:[bx]
  mov  com_org_off,ax
  mov  com_reh_off,ax
  mov  ax,es:[bx+2]
  mov  com_org_seg,ax
  mov  com_reh_seg,ax

;;;  mov  ax,offset com_hook
;;;  mov  es:[bx],ax
;;;  mov  ax,cs
;;;  mov  es:[bx+2],ax

  pop  es
  pop  bx
  pop  ax

  popf

  ret
vecthook  endp
;
; Unhook vectors
;
; IN:  none.
; OUT:  AX  resident program segment
;
  EVEN
vectunhook  proc  near
  push  es
  push  ds
  push  bx

  xor  ax,ax
  mov  es,ax      ; INT9 vector segment

  mov  bx,ki_hook_vec * 4  ; INT9 vector offset
  mov  ax,es:[bx+2]    ; get resident program segment.
  mov  ds,ax

  pushf
  cli

  mov  bx,ki_hook_vec * 4

  mov  ax,ki_org_off    ; use resident program segment.
  mov  es:[bx],ax
  mov  ax,ki_org_seg    ; use resident program segment.
  mov  es:[bx+2],ax

  mov  bx,tt_hook_vec * 4

  mov  ax,tt_org_off    ; use resident program segment.
  mov  es:[bx],ax
  mov  ax,tt_org_seg    ; use resident program segment.
  mov  es:[bx+2],ax

  mov  bx,(SER_IRQ+8)*4  ; make INT vector offset.

  mov  ax,com_org_off    ; use resident program segment.
  mov  es:[bx],ax
  mov  ax,com_org_seg    ; use resident program segment.
  mov  es:[bx+2],ax

  popf

  mov  ax,ds      ; save resident program segment.

  pop  bx
  pop  ds
  pop  es
  ret
vectunhook  endp
INT 9 - это прерывание от клавиатуры: Keyboard Interrupt (Hardware Handler).

Что в этой ситуации плохо - некоторые программы сами подменяют INT 9 и работают с клавиатурой
напрямую. Они либо не будут работать, либо драйвер их должен обманывать.
Я сталкивался с такой ситуацией - так поступает QBasic. Долго мучался как его обмануть...

Но в целом исходники понятные, хорошо прокомментированные и удобочитаемые. Я правда, не знаю,
насколько в них отражены и как помешают особенности работы Newton Keyboard.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Подключение PS/2 клавиатуры через COM порт

Post by Lavr »

Потратил я немного времени, чтобы посмотреть какую-либо техническую информацию по этим
самым клавиатурам с RS-232 интерфейсом: Palm portable keyboard и Apple Newton Keyboard...

Заинтересовало, поскольку по ASCII Serial keyboard я тут в первый заход ничего путного не нашел. :osad:
Теперь хоть знал - что конкретно искать, хотя задачу это сильно не облегчило - уходит эта информация,
ссылки битые, на других ссылках уже и информация другая... :-?

Но по Palm portable keyboard я некоторую техническую информацию нашел! :wink:
http://wb9kzy.com/palm.htm ; http://www.splorp.com/pdf/stowawayhwref.pdf
Palm Portable Keyboard.gif
В мануале stowawayhwref.pdf расписаны особенности RS-232 интерфейса к Palm и приведена
таблица кодов: Key Code Matrix.
Key Code Matrix.gif
При взгляде на таблицу, возникает мысль, что Palm portable keyboard - это не ASCII Serial keyboard, и, возможно,
в драйвере придется сделать перекодировку либо в скан-коды, либо - сразу в ASCII-коды.

Насколько я успел посмотреть, в тексте драйвера NTKEY2LX.COM какая-то перекодировка вроде тоже есть...


P.S. По драйверу NTKEY2LX.COM см. предыдущую страницу.
You do not have the required permissions to view the files attached to this post.
iLavr