From gmb@ncrcol.columbiasc.NCR.COM Fri Jul 17 15:16:18 1992 Return-Path: Received: from ncrcom.DaytonOH.NCR.COM by cygnus.com (4.1/SMI-4.1) id AA05832; Fri, 17 Jul 92 11:28:22 PDT Received: from ncrcae by ncrcom.DaytonOH.NCR.COM id ad01182; 17 Jul 92 14:27 EDT Received: by ncrcol.ncr.com ( 5.52 (84)/BSD4.3) id AA01755; Fri, 17 Jul 92 14:02:57 EDT Received: by ncrcol.ColumbiaSC.NCR.COM ( 5.52 (84)/BSD4.3) id AA01719; Fri, 17 Jul 92 14:02:41 EDT From: gmb@ncrcol.columbiasc.NCR.COM Message-Id: <9207171802.AA01719@ncrcol.ColumbiaSC.NCR.COM> Name: gmb (Gary Beihl) Date: Fri, 17 Jul 92 14:02:40 EDT To: "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! eichin%cygnus.com"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! johnsonm%stolaf.edu"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! ken%ms.uky.edu"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! klaus%cnix.co.uk"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! peteg%seismo.css.gov"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! phys169%csc.canterbury.ac.nz"@ncrcol.columbiasc.NCR.COM, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! tytso%athena.mit.edu"@ncrcol.columbiasc.NCR.COM Subject: patch to pcm0.65 SUB: patch to pcm0.65 SUM: , gmb@ncrcol.columbiasc.NCR.COM->"ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! eichin%cygnus.com"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! johnsonm%stolaf.edu"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! ken%ms.uky.edu"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! klaus%cnix.co.uk"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! peteg%seismo.css.gov"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! phys169%csc.canterbury.ac.nz"@ncrcol.columbiasc.NCR.COM,, "ncrcae!ncrcol.ColumbiaSC.NCR.COM! ncrcae! tytso%athena.mit.edu"@ncrcol.columbiasc.NCR.COM Here's a patch to pcm that fixes a bug in programs that steal the int 9 keyboard ISR. The keyboard status bit in port 0x61 wasn't being used to determine whether or not reads from port 0x60 should return a new character. Gary Beihl (gary.beihl@columbiasc.ncr.com) ----- *** /tmp/,RCSt1a09889 Fri Jul 17 14:04:06 1992 --- port.c Fri Jul 17 11:47:12 1992 *************** *** 69,80 **** return pc; } wport(port, val, size) unsigned short port, val; unsigned int size; { switch(port) { case 0x20: break; ! case 0x61: break; default: #ifndef TTY fprintf(stderr,"wportb: 0x%x to port 0x%x\n",val,port); --- 69,89 ---- return pc; } + unsigned char keystatus; /* keyboard status port 0x61 */ + unsigned char oktoread = 1; /* if true, "in al,0x60" calls readchar() */ + unsigned char last_60; /* last char. read from port 0x60 */ + wport(port, val, size) unsigned short port, val; unsigned int size; { switch(port) { case 0x20: break; ! case 0x61: ! if ((keystatus & 0x80) && !(val & 0x80)) { ! oktoread = 1; ! } ! keystatus = val; ! break; default: #ifndef TTY fprintf(stderr,"wportb: 0x%x to port 0x%x\n",val,port); *************** *** 91,99 **** AL = intmask; break; case 0x60: /* keyboard data */ ! AL = readchar(); break; case 0x61: /* keyboard status */ break; default: printf("warning: reading unknown port 0x%x\n",port); --- 100,113 ---- AL = intmask; break; case 0x60: /* keyboard data */ ! if (oktoread) { ! last_60 = readchar(); ! oktoread = 0; ! } ! AL = last_60; break; case 0x61: /* keyboard status */ + AL = keystatus; break; default: printf("warning: reading unknown port 0x%x\n",port);