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

    {
    > There has been MANY times that I've wanted to read MORE THAN ONE key at
    > the same time.. with ReadKey, it seems impossible!  For programming games,
    > it seems fall quite short!  So I began to look directly at the
    > keyboard buffer..  but it all seemed to be CRIPTIC!
    With readkey it is impossible. The keyboard buffer doesnt help either. Take a
    look at this code:
    }

    {$M 2000,0,0}
    {$R-,S-,I-,D-,F+,V-,B-,N-,L+}
    Program BinClock;
    Uses DOS,CRT;
    Var Old_Keyb:Pointer;
        Keyz:Set Of 0..127;
        Loop:Byte;

    Procedure STI;
     Inline($FB);

    Procedure CLI;
     Inline($FA);

    Procedure CallOld(Sub:Pointer);
     Begin
      Inline($9C/$FF/$5E/$06);
     End;

    Procedure My_Keyb;
     Interrupt;
    Var B:Byte;
    Begin
     CallOld(Old_Keyb);
     B:=Port[$60];
     If B>=$80 Then
      Keyz:=Keyz-[B And $7F]
     Else
      Keyz:=Keyz+[B];
     STI;
    End;

    Begin
     ClrScr;
     Keyz:=[];
     GetIntVec($09,Old_Keyb);
     SetIntVec($09,@My_Keyb);
     Repeat
      While KeyPressed Do
       If ReadKey=#0 Then;
      GotoXY(1,1);
      ClrEol;
      For Loop:=1 To 127 Do
       Begin
        If Loop In Keyz Then
         Write('*',Loop,'*');
       End;
     Until 1 In Keyz;
    End.

    {
    > Did I miss something is KBD 101 class?  Could anyone here shed some light
    > on  this.. a lookup chart would be a great thing, but algorithms are
    > useful too ;)

    each key has it's own number. On the origonal PC keyboard,you start at <ESC>
    (1) and read across... <!>=2, <@>=3 (I've used shifted to diferentiate
    between the key 2 and the scancode 2 etc), then down... but that got shifted
    around... I usually use the above program to find the correct key, then code
    it into my prog...
    }

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