🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.os.msdos.programmer
Article #5377

Key Checking on a PS/2 Model 25

#5377
From: David J Leitko
Date: Fri, 22 Mar 1991 02:19
99 lines
3215 bytes
I am working on a program that needs to be able to do keychecks very
quickly.  Since, I'm timing very short events, I have disabled
interrupts, and have been using direct port reads to check for
keypresses.  I'd rather not have to resort to interrupts.

Unfortunately, the methods I have been using do not work with the
PS/2 Model 25, and maybe other computers as well.

Does anybody have any suggestions on how this can be accomplished
on a PS/2?

As a second question, does anybody have an up to date listing of
all the possible setting of the Model/SubModel information located
in F000:FFFE?  The latest version I have is from "The _New_ Peter
Norton Programmer's Guide to the IBM PC & PS/2", page 64.  Any 
additional information would be greatly appreciated.

I am enclosing a sample program to demonstrate what I am trying to
do.  Note that this is not the code I need a solution for, it just
demonstrates what I'm doing for key checks now.  This code works
on PCs, XTs, and ATs.  IT WILL LOCK UP ON A PS/2 MODEL 25.  (This 
is written for TASM...)

--
  DOSSEG
  .MODEL SMALL
  .STACK 100h
  .DATA
    KeyMsg       DB  'Key Pressed', 13, 10, '$'
    NotFoundMsg  DB  'System not recognized', 13, 10, '$'
    KEYBOARD     EQU 060h
    NO_KEY       EQU 09Ch
  .CODE
    MOV  AX, @DATA
    MOV  DS, AX

    CLI

    MOV  AX, 0F000h               ; Figure out the machine model
    MOV  ES, AX
    MOV  BH, ES:0FFFEh

TOP_OF_LOOP:

    CMP  BH, 0FEh
    JGE  PC_XT_TEST

    CMP  BH, 0FCh
    JE   AT_TEST

    CMP  BH, 0FAh
    JE   PS2_TEST

NOT_FOUND:
    MOV  AH, 9                    ; System not recognized
    MOV  DX, OFFSET NotFoundMsg
    INT  21h

    STI

    MOV  AH, 04Ch                 ; Clean exit to DOS
    INT  21h

PC_XT_TEST:
    IN   AL, KEYBOARD             ; Quick and dirty..  PC/XT only
    AND  AL, 00010000b
    JNZ  KEY_PRESSED
    JMP  TOP_OF_LOOP

AT_TEST:
    IN   AL, KEYBOARD             ; Quick and dirty..  seems to work
    CMP  AL, NO_KEY               ;   on most systems..  other than
    JNZ  KEY_PRESSED              ;   PC, XT, or PS/2 Model 25
    JMP  TOP_OF_LOOP

PS2_TEST:
    <PLEASE HELP ME!>             ; Can't get anything to work right

    JMP  TOP_OF_LOOP

KEY_PRESSED:
    MOV  AH, 9                    ; Display success
    MOV  DX, OFFSET KeyMsg
    INT  21h

    STI

    MOV  AH, 04Ch                 ; Clean exit to DOS
    INT  21h

  END
--

Thanks for any help you might provide.
--
  David J Leitko                 "Bleah!..."         davidjl@eecs.cs.pdx.edu
  Computer Science Department             ..!uunet!tektronix!pdxgate!davidjl
  Portland State University
  Portland, Oregon                      This space intentionally left blank.
Technical Details
Message-ID: <2033@pdxgate.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!wuarchive!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!emory!ogicse!pdxgate!eecs!davidjl

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!wuarchive!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!emory!ogicse!pdxgate!eecs!davidjl
From: davidjl@eecs.cs.pdx.edu (David J Leitko)
Newsgroups: comp.os.msdos.programmer
Subject: Key Checking on a PS/2 Model 25
Keywords: high speed
Message-ID: <2033@pdxgate.UUCP>
Date: 22 Mar 91 02:19:34 GMT
Sender: news@pdxgate.UUCP
Lines: 99