be3 wrote:Пока не смог найти это драйвер выше, поищу более детально (но скорее всего он платный + не оч. распространен и как следствие бесплатно не скачать).
Да это понятно - время  DOS давненько ушло...  
 
 
И все эти утилиты скорее всего надо искать по страницам типа "Старый 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
 - 
это прерывание от клавиатуры: Keyboard Interrupt (Hardware Handler). 
Что в этой ситуации плохо - некоторые программы сами подменяют INT 9 и работают с клавиатурой
напрямую. Они либо не будут работать, либо драйвер их должен обманывать. 
Я сталкивался с такой ситуацией - так поступает QBasic. Долго мучался как его обмануть...
Но в целом исходники понятные, хорошо прокомментированные и удобочитаемые. Я правда, не знаю,
насколько в них отражены и как помешают особенности работы Newton Keyboard.