[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]

    (*
    >>> procedure newkbdint; interrupt;   { new keyboard handler }
    >>> begin
    >>> keydown[port[$60] and $7f] := (port[$60] and $80) = $00;
    >>> port[$20] := $20;
    >>> end;
    >>
    >>> On the XT I tested that code on, it accepted the first keystroke but
    >>> then acted like I never released the key or pressed another.
    >>
    >> I believe sending the EOI is insuficient. You also need to signify
    >> the keyboard through port 61... But then again I might be wrong.

    > What do you mean by "signify the keyboard through port 61h"?  Also, would
    > that be specific to XTs?  I don't have problems with my 386, or my
    > sister's, or a friend's, or another friend's 286 ...

    Well I was hoping you might know what I was talking about ;-)

        It's just that I noticed you weren't calling the old interrupt routine and
    I noticed most keyboard routines, including TP/BP's keyboard routine, seem to
    interract with port $61. It might be some kind of handshaking between the
    keyboard controller and the PC. Maybe it is specific to models prior to the AT
    and that could be why you have problems with the XT only.

    Here is what I found in HelpPc:

    Ports 60-67 are linked to the 8255 (PPI) on PCs, XTs and Jr's
    Ports 60-6F are linked to the 8042 on ATs and PS/2s

        Port 61 is Port B Status on 8255
                And System Control port on the 8042 (For compatibility with 8255)

    So port 61 manipulation would be for XT compatibility reasons.

    And here is more help from Tech Help

    Port  Description
    ßßßß  ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
    060H  þPC/XTþ  PPI port A.  Read keyboard scan code:
          IN   al,60H  ;fetches most recent scan code.

    061H  þPC/XTþ PPI (Programmable Peripheral Interface) port B.
          Ö7Â6Â5Â4Â3Â2Â1Â0·
          º ³ ³ ³ ³ ³0³ ³ º
          ÓÒÁÒÁÒÁÒÁÒÁÄÁÒÁÒ½ bit
           º º º º º   º ÈÍ 0: Timer 2 gate (speaker)  ÍËÍ OR 03H=speaker ON
           º º º º º   ÈÍÍÍ 1: Timer 2 data  ÍÍÍÍÍÍÍÍÍÍÍ¼  AND 0fcH=speaker OFF
           º º º º ÈÍÍÍÍÍÍÍ 3: 1=read high switches; 0=read low switches(see 62H)
           º º º ÈÍÍÍÍÍÍÍÍÍ 4: 0=enable RAM parity checking; 1=disable
           º º ÈÍÍÍÍÍÍÍÍÍÍÍ 5: 0=enable I/O channel check
           º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍ 6: 0=hold keyboard clock low
           ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ 7: 0=enable keyboard; 1=disable keyboard

    062H  þPC/XTþ PPI port C.
          Ö7Â6Â5Â4Â3Â2Â1Â0·
          º ³ ³ ³0³equip'tº
          ÓÒÁÒÁÒÁÄÁÄÁÄÁÄÁÄ½ bit
           º º º   ÈÍÍÍÍÍÊÍ 0-3: values of DIP switches.  See Equipment List
           º º ÈÍÍÍÍÍÍÍÍÍÍÍ 5: 1=Timer 2 channel out
           º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍ 6: 1=I/O channel check
           ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ 7: 1=RAM parity check error occurred.

    063H  þPC/XTþ PPI Command/Mode Register.  Selects which PPI ports are input
          or output.  BIOS sets to 99H (Ports A and C are input, B is output).

    With this and a look at BP 7's RTL source for the keyboard routines you should
    be able to determine what's the problem.
    *)

[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]