File:  [Research Unix] / researchv9 / jerq / src / lib / sys / acia.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:59 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

#include <jerq.h>
#include <queue.h>
#include <setup.h>
/*static*/ int dtr;
aciainit(speed)
char speed;
{
	/* init	the host side */
	int i;

	DUART->a_cmnd=RESET_RECV|DIS_TX|DIS_RX;
	DUART->a_cmnd=RESET_TRANS;
	DUART->a_cmnd=RESET_ERR;
	DUART->a_cmnd=RESET_MR;
	DUART->mr1_2a=CHAR_ERR|NO_PAR | CBITS8;
	DUART->mr1_2a=NRML_MOD|ONEP000SB;
	DUART->a_sr_csr=speed;
	DUART->a_cmnd=ENB_TX|ENB_RX; /* enable TX and RX last */
	/* configure the output	port */
	DUART->ip_opcr=0x70;
	DUART->scc_ropbc=0xff;	/* make sure the port is reset first */
	DUART->scc_sopbc=0x01;	/* make sure DTR is on */
	if(VALSCREENCOLOR)
		BonW();
	else
		WonB();
	for(i=0; i<255; i++)
		;		/*delay	for stupid device */
	dtr=1;
}
rcvchar(){
	register c=qgetc(&RCVQUEUE);
	if(c!=-1)
		c&=0xFF;
	return c;
}
sendchar(c){
	qputc(&OUTQUEUE, c);
	aciatrint();
}
aciatrint(){
	register sr, c;
	sr=spl5();
	/* should check	here for carrier fail */
	DUART->a_cmnd=ENB_TX;		/* done	here so	flags are right	*/
	if(DUART->a_sr_csr&(XMT_EMT|XMT_RDY)){
		if((c=qgetc(&OUTQUEUE))==-1 || dtr==0)
			DUART->a_cmnd=DIS_TX;		/* forget it */
		else
			DUART->a_data=c;		/* send the char */
	}
	splx(sr);
}
sendbreak(){
	register int sr,i;
	sr=spl5();
	DUART->a_cmnd=(STRT_BRK|ENB_TX);
	i= 0x27106;
	while(--i>0)
		;
	DUART->a_cmnd=(STOP_BRK|DIS_TX);
	kbdinit();
	splx(sr);
}
dtrctl(flg) {
	dtr=flg;
	aciatrint();
}
tstdcd() {
	return((DUART->ip_opcr & 0x40) != 0);
}
aciapaws()
{
	int i;
	for(i=0 ; i<16; i++);
}
/*
 * disconnect will drop the DTR line for approx. 1/2 second.
 */
disconnect() {
	register long i, sr;
	
	if(dtr==0)
		return;	/* already being disconnected */
	sr=spl5();
	dtr=0;
	DUART->scc_ropbc=0x01;	/* disable DTR	*/
	i=0x30d48;
	while(--i>0)
		;
	DUART->scc_sopbc=0x01;	/* Turn back on DTR */
	dtr=1;	/* allow disconnects again */
	kbdinit();
	splx(sr);
}

unix.superglobalmegacorp.com

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