xref: /csrg-svn/sys/news3400/bm/vt100if.c (revision 63256)
153889Smckusick /*
2*63256Sbostic  * Copyright (c) 1992, 1993
3*63256Sbostic  *	The Regents of the University of California.  All rights reserved.
453889Smckusick  *
553889Smckusick  * This code is derived from software contributed to Berkeley by
653889Smckusick  * Sony Corp. and Kazumasa Utashiro of Software Research Associates, Inc.
753889Smckusick  *
853889Smckusick  * %sccs.include.redist.c%
953889Smckusick  *
1053889Smckusick  * from: $Hdr: vt100if.c,v 4.300 91/06/09 06:15:02 root Rel41 $ SONY
1153889Smckusick  *
12*63256Sbostic  *	@(#)vt100if.c	8.1 (Berkeley) 06/10/93
1353889Smckusick  */
1453889Smckusick 
1553889Smckusick #ifdef IPC_MRX
1653889Smckusick #include "types.h"
1753889Smckusick #include "ioctl.h"
1853889Smckusick #else /* IPC_MRX */
1957177Sutashiro #include <sys/types.h>
2053889Smckusick #ifdef CPU_SINGLE
2157177Sutashiro #include <sys/param.h>
2253889Smckusick #endif /* CPU_SINGLE */
2357177Sutashiro #include <sys/ioctl.h>
2453889Smckusick #endif /* IPC_MRX */
2553889Smckusick 
2653889Smckusick #if CPU_SINGLE
2757177Sutashiro #include <news3400/sio/scc.h>
2857177Sutashiro #include <news3400/sio/sccparam.h>
2953889Smckusick #endif /* CPU_SINGLE */
3053889Smckusick 
3153889Smckusick #ifdef IPC_MRX
3253889Smckusick #include "scc.h"
3353889Smckusick #include "sccparam.h"
3453889Smckusick #include "cio.h"
3553889Smckusick #define SCC_KEYBOARD	0
3653889Smckusick #undef MAX_CIO
3753889Smckusick #include "object.h"
3853889Smckusick #include "process.h"
3953889Smckusick 
4053889Smckusick #include "config.h"
4153889Smckusick #define kbd_ioctl(chan, cmd, argp)      { \
4253889Smckusick         if (kb_ioctl) \
4353889Smckusick                 (*kb_ioctl)(chan, cmd, argp); \
4453889Smckusick }
4553889Smckusick extern int bitmap_use;
4653889Smckusick #endif /* IPC_MRX */
4753889Smckusick 
4853889Smckusick #ifdef IPC_MRX
4953889Smckusick #include "../../iop/kbreg.h"
5053889Smckusick #include "../../iop/keyboard.h"
5153889Smckusick #ifdef IPC_3CPU
5253889Smckusick #include "../../ubdev/msgio.h"
5353889Smckusick extern int *gcpu_semadr;
5453889Smckusick #endif /* IPC_3CPU */
5553889Smckusick #else /* IPC_MRX */
5657177Sutashiro #include <news3400/iop/keyboard.h>
5753889Smckusick #endif /* IPC_MRX */
5853889Smckusick 
5953889Smckusick #ifdef CPU_SINGLE
6057177Sutashiro #include <machine/cpu.h>
6153889Smckusick #define PRE_EMPT	need_resched()
6253889Smckusick #endif
6353889Smckusick 
6453889Smckusick int	tmode;
6553889Smckusick 
6653889Smckusick static int char_mask = 0x7f;
6753889Smckusick 
6853889Smckusick int	bm_todo;
6953889Smckusick 
vt100_write(chan,buf,count)7053889Smckusick vt100_write(chan, buf, count)
7153889Smckusick 	int chan;
7253889Smckusick 	register char *buf;
7353889Smckusick 	register int count;
7453889Smckusick {
7553889Smckusick 	bm_todo = count;
7653889Smckusick 
7753889Smckusick 	rst_dimmer_cnt();
7853889Smckusick 
7953889Smckusick #ifdef IPC_MRX
8053889Smckusick #ifdef IPC_3CPU
8153889Smckusick 	*gcpu_semadr = 1;
8253889Smckusick #endif
8353889Smckusick 	sem_wait(bitmap_use);
8453889Smckusick #endif
8553889Smckusick 
8653889Smckusick 	while (bm_todo-- > 0)
8753889Smckusick 		Putchar(*buf++ & char_mask, 0);
8853889Smckusick 	Putchar(0, 1);
8953889Smckusick 
9053889Smckusick #ifdef IPC_MRX
9153889Smckusick #ifdef IPC_3CPU
9253889Smckusick 	*gcpu_semadr = 0;
9353889Smckusick #endif
9453889Smckusick 	sem_signal(bitmap_use);
9553889Smckusick #endif
9653889Smckusick #ifdef CPU_SINGLE
9753889Smckusick 	PRE_EMPT;
9853889Smckusick #endif
9953889Smckusick 
10053889Smckusick 	return (count);
10153889Smckusick }
10253889Smckusick 
vt100_read(chan,buf,count)10353889Smckusick vt100_read(chan, buf, count)
10453889Smckusick 	int chan;
10553889Smckusick 	char *buf;
10653889Smckusick 	int count;
10753889Smckusick {
10853889Smckusick #ifdef IPC_MRX
10953889Smckusick 	if (kb_read) {
11053889Smckusick 		return ((*kb_read)(chan, buf, count));
11153889Smckusick 	} else {
11253889Smckusick 		return (-1);
11353889Smckusick 	}
11453889Smckusick #else /* IPC_MRX */
11553889Smckusick 	return (kbd_read(chan, buf, count));
11653889Smckusick #endif /* IPC_MRX */
11753889Smckusick }
11853889Smckusick 
11953889Smckusick #ifdef CPU_SINGLE
12053889Smckusick static int param;
12153889Smckusick 
bitmap_set_param(c)12253889Smckusick bitmap_set_param(c)
12353889Smckusick int c;
12453889Smckusick {
12553889Smckusick 	if ((c & CHAR_SIZE) == C7BIT) {
12653889Smckusick 		char_mask = 0x7f;
12753889Smckusick 	} else {
12853889Smckusick 		char_mask = 0xff;
12953889Smckusick 	}
13053889Smckusick #ifdef KM_JIS
13153889Smckusick 	switch (c & TERM_MODE) {
13253889Smckusick 	case CJIS:
13353889Smckusick 		tmode = KM_JIS;
13453889Smckusick 		break;
13553889Smckusick 	case CSJIS:
13653889Smckusick 		tmode = KM_SJIS;
13753889Smckusick 		break;
13853889Smckusick 	case CEUC:
13953889Smckusick 		tmode = KM_EUC;
14053889Smckusick 		break;
14153889Smckusick 	default:
14253889Smckusick 		tmode = KM_ASCII;
14353889Smckusick 		break;
14453889Smckusick 	}
14553889Smckusick #endif
14653889Smckusick 	param = c;
14753889Smckusick 	return (0);
14853889Smckusick }
14953889Smckusick 
bitmap_get_param()15053889Smckusick bitmap_get_param()
15153889Smckusick {
15253889Smckusick 	return(param);
15353889Smckusick }
15453889Smckusick 
15553889Smckusick #else /* CPU_SINGLE */
15653889Smckusick 
15753889Smckusick #ifdef IPC_MRX
15853889Smckusick #define SCC_SETPARAMS	CIO_SETPARAMS
15953889Smckusick #define SCC_GETPARAMS	CIO_GETPARAMS
16053889Smckusick #define SCC_LINE_CHG	CIO_LINE_CHG
16153889Smckusick #define SCC_NREAD	CIO_NREAD
16253889Smckusick #define SCC_FLUSH	CIO_FLUSH
16353889Smckusick #define SCC_STOP	CIO_STOP
16453889Smckusick #define SCC_START	CIO_START
16553889Smckusick #define SCC_RESET	CIO_RESET
16653889Smckusick #endif /* IPC_MRX */
16753889Smckusick 
vt100_ioctl(chan,cmd,argp)16853889Smckusick vt100_ioctl(chan, cmd, argp)
16953889Smckusick 	int chan, cmd, *argp;
17053889Smckusick {
17153889Smckusick 	static int param;
17253889Smckusick 
17353889Smckusick 	switch (cmd) {
17453889Smckusick 	case SCC_SETPARAMS:
17553889Smckusick 		param = *argp;
17653889Smckusick 		if ((param & CHAR_SIZE) == C7BIT)
17753889Smckusick 			char_mask = 0x7f;
17853889Smckusick 		else
17953889Smckusick 			char_mask = 0xff;
18053889Smckusick #ifdef KM_JIS
18153889Smckusick 		switch (param & TERM_MODE) {
18253889Smckusick 		case CJIS:
18353889Smckusick 			tmode = KM_JIS;
18453889Smckusick 			break;
18553889Smckusick 		case CSJIS:
18653889Smckusick 			tmode = KM_SJIS;
18753889Smckusick 			break;
18853889Smckusick 		case CEUC:
18953889Smckusick 			tmode = KM_EUC;
19053889Smckusick 			break;
19153889Smckusick 		default:
19253889Smckusick 			tmode = KM_ASCII;
19353889Smckusick 			break;
19453889Smckusick 		}
19553889Smckusick #endif
19653889Smckusick 		return (0);
19753889Smckusick 	case SCC_GETPARAMS:
19853889Smckusick 		*argp = param;
19953889Smckusick 		return (0);
20053889Smckusick 	case SCC_LINE_CHG:
20153889Smckusick 		return (0);
20253889Smckusick 	case SCC_NREAD:
20353889Smckusick 		kbd_ioctl(SCC_KEYBOARD, KIOCNREAD, argp);
20453889Smckusick 		return (0);
20553889Smckusick 	case SCC_FLUSH:
20653889Smckusick 	case SCC_STOP:
20753889Smckusick 	case SCC_START:
20853889Smckusick 	case SCC_RESET:
20953889Smckusick 		return (0);
21053889Smckusick 	default:
21153889Smckusick 		return (-1);
21253889Smckusick 	}
21353889Smckusick }
21453889Smckusick #endif /* CPU_SINGLE */
215