Annotation of researchv9/jerq/src/mux/term/kbd.c, revision 1.1.1.1

1.1       root        1: #include <jerq.h>
                      2: #include <queue.h>
                      3: #include <kbd.h>
                      4: #include <setup.h>
                      5: 
                      6: int    kbdrepeat;
                      7: int    rptcount;
                      8: int    kbdstatus;
                      9: 
                     10: kbdchar(){
                     11:        return qgetc(&KBDQUEUE);
                     12: }
                     13: kbdinit()
                     14: {
                     15:        /* init the keyboard */
                     16:        DUART->b_cmnd=RESET_RECV|DIS_TX|DIS_RX;
                     17:        DUART->b_cmnd=RESET_TRANS;
                     18:        DUART->b_cmnd=RESET_ERR;
                     19:        DUART->b_cmnd=RESET_MR;
                     20:        DUART->mr1_2b=CHAR_ERR|NO_PAR|CBITS8;
                     21:        DUART->mr1_2b=NRML_MOD|ONEP000SB;
                     22:        DUART->b_sr_csr=BD300BPS;
                     23:        DUART->b_cmnd=RESET_MR|ENB_TX|ENB_RX;
                     24:        DUART->scc_ropbc=0x08; /* set output pins for kbd tx port*/
                     25: #ifdef ftang
                     26:        /* turn chirps on/off depending on BRAM */
                     27:        if(VALKEYTONE)
                     28:                kbdstatus=0;    /* no chirp */
                     29:        else
                     30:                kbdstatus=TTY_CHIRP;    /* chirp, chirp */
                     31:        DUART->b_data=kbdstatus|0x02; /* request status */
                     32: #endif
                     33: }
                     34: auto2(){
                     35:        register unsigned s, c;
                     36:        s=DUART->b_sr_csr;
                     37:        c=DUART->b_data;
                     38:        if(s&(FRM_ERR|OVR_RUN)) 
                     39:                return;
                     40: #ifdef ftang
                     41:        if(s&PAR_ERR){  /* control word: caps lock or repeat */
                     42:                checkbram();
                     43:                VALCAPS=(c&0x04)? 0 : 1; /* set the caps lock flag */
                     44:                setbram();
                     45:                if(c&0x10)      /* turn repeat off */
                     46:                        kbdrepeat=rptcount=0;
                     47:                else            /* the next character is to be repeated */
                     48:                        kbdrepeat=RPTON;
                     49:                /*
                     50:                 * Don't actually set the repeat bit until the character
                     51:                 * after the control code
                     52:                 */
                     53:        }else{          /* ordinary character */
                     54:                rptcount=0;     /* new char so restart repeat timer */
                     55:                if(c&0x80)
                     56:                        c=defkeymap[c&0x7f];
                     57:                qputc(&KBDQUEUE, (int)c);
                     58:                if((kbdrepeat&RPTMASK) == RPTON){
                     59:                        kbdrepeat=RPTHAVECHR|RPTON;
                     60:                        kbdrepeat|=c;
                     61:                }
                     62:        }
                     63: #else
                     64:        qputc(&KBDQUEUE, (int)c);
                     65: }
                     66: kbdrpt(){
                     67: #ifdef ftang
                     68:        qputc(&KBDQUEUE, kbdrepeat&0xff);
                     69: #endif
                     70: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.