Annotation of researchv9/jerq/src/lib/sys/acia.c, revision 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.