Annotation of researchv9/jerq/src/lib/sys/acia.c, revision 1.1.1.1

1.1       root        1: #include <jerq.h>
                      2: #include <queue.h>
                      3: #include <setup.h>
                      4: /*static*/ int dtr;
                      5: aciainit(speed)
                      6: char speed;
                      7: {
                      8:        /* init the host side */
                      9:        int i;
                     10: 
                     11:        DUART->a_cmnd=RESET_RECV|DIS_TX|DIS_RX;
                     12:        DUART->a_cmnd=RESET_TRANS;
                     13:        DUART->a_cmnd=RESET_ERR;
                     14:        DUART->a_cmnd=RESET_MR;
                     15:        DUART->mr1_2a=CHAR_ERR|NO_PAR | CBITS8;
                     16:        DUART->mr1_2a=NRML_MOD|ONEP000SB;
                     17:        DUART->a_sr_csr=speed;
                     18:        DUART->a_cmnd=ENB_TX|ENB_RX; /* enable TX and RX last */
                     19:        /* configure the output port */
                     20:        DUART->ip_opcr=0x70;
                     21:        DUART->scc_ropbc=0xff;  /* make sure the port is reset first */
                     22:        DUART->scc_sopbc=0x01;  /* make sure DTR is on */
                     23:        if(VALSCREENCOLOR)
                     24:                BonW();
                     25:        else
                     26:                WonB();
                     27:        for(i=0; i<255; i++)
                     28:                ;               /*delay for stupid device */
                     29:        dtr=1;
                     30: }
                     31: rcvchar(){
                     32:        register c=qgetc(&RCVQUEUE);
                     33:        if(c!=-1)
                     34:                c&=0xFF;
                     35:        return c;
                     36: }
                     37: sendchar(c){
                     38:        qputc(&OUTQUEUE, c);
                     39:        aciatrint();
                     40: }
                     41: aciatrint(){
                     42:        register sr, c;
                     43:        sr=spl5();
                     44:        /* should check here for carrier fail */
                     45:        DUART->a_cmnd=ENB_TX;           /* done here so flags are right */
                     46:        if(DUART->a_sr_csr&(XMT_EMT|XMT_RDY)){
                     47:                if((c=qgetc(&OUTQUEUE))==-1 || dtr==0)
                     48:                        DUART->a_cmnd=DIS_TX;           /* forget it */
                     49:                else
                     50:                        DUART->a_data=c;                /* send the char */
                     51:        }
                     52:        splx(sr);
                     53: }
                     54: sendbreak(){
                     55:        register int sr,i;
                     56:        sr=spl5();
                     57:        DUART->a_cmnd=(STRT_BRK|ENB_TX);
                     58:        i= 0x27106;
                     59:        while(--i>0)
                     60:                ;
                     61:        DUART->a_cmnd=(STOP_BRK|DIS_TX);
                     62:        kbdinit();
                     63:        splx(sr);
                     64: }
                     65: dtrctl(flg) {
                     66:        dtr=flg;
                     67:        aciatrint();
                     68: }
                     69: tstdcd() {
                     70:        return((DUART->ip_opcr & 0x40) != 0);
                     71: }
                     72: aciapaws()
                     73: {
                     74:        int i;
                     75:        for(i=0 ; i<16; i++);
                     76: }
                     77: /*
                     78:  * disconnect will drop the DTR line for approx. 1/2 second.
                     79:  */
                     80: disconnect() {
                     81:        register long i, sr;
                     82:        
                     83:        if(dtr==0)
                     84:                return; /* already being disconnected */
                     85:        sr=spl5();
                     86:        dtr=0;
                     87:        DUART->scc_ropbc=0x01;  /* disable DTR  */
                     88:        i=0x30d48;
                     89:        while(--i>0)
                     90:                ;
                     91:        DUART->scc_sopbc=0x01;  /* Turn back on DTR */
                     92:        dtr=1;  /* allow disconnects again */
                     93:        kbdinit();
                     94:        splx(sr);
                     95: }

unix.superglobalmegacorp.com

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