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