summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/dev/m88k/bugio.c
blob: 932614a29d55f2a2bb77de568dea456fde3398d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <machine/bugio.h>

#define INCHR	"0x0000"
#define INSTAT	"0x0001"
#define INLN	"0x0002"
#define READSTR	"0x0003"
#define READLN	"0x0004"
#define	DSKRD	"0x0010"
#define	DSKWR	"0x0011"
#define	DSKCFIG	"0x0012"
#define	OUTCHR	"0x0020"
#define	OUTSTR	"0x0021"
#define	PCRLF	"0x0026"
#define	TMDISP	"0x0042"
#define	DELAY	"0x0043"
#define	RTC_DSP	"0x0052"
#define	RTC_RD	"0x0053"
#define	RETURN	"0x0063"
#define	BRD_ID	"0x0070"
#define BUGTRAP	"0x01F0"

char
buginchr(void)
{
	register int cc asm("r2");
	asm("or r9,r0," INCHR);
	asm("tb0 0,r0,0x1F0");
	/*asm("or %0,r0,r2" : "=r" (cc) : );*/
	return ((char)cc & 0xFF);
}

/* return 1 if not empty else 0 */

buginstat(void)
{
	int ret;
	asm("or r9,r0," INSTAT);
	asm("tb0 0,r0,0x1F0");
	asm("or %0,r0,r2" : "=r" (ret) : );
	return (ret & 0x40 ? 1 : 0);
}

bugoutchr(unsigned char c)
{
	unsigned char cc;

	if ((cc = c) == '\n') {
		bugpcrlf();
		return;
	}
	asm("or r2,r0,%0" : : "r" (cc));
	asm("or r9,r0," OUTCHR);
	asm("tb0 0,r0,0x1F0");
}

bugoutstr(char *s, char *se)
{
	asm("or r9,r0," OUTSTR);
	asm("tb0 0,r0,0x1F0");
}

bugpcrlf(void)
{
	asm("or r9,r0," PCRLF);
	asm("tb0 0,r0,0x1F0");
}
/* return 0 on success */

bugdskrd(struct bugdisk_io *arg)
{
	int ret;
	asm("or r9,r0, " DSKRD);
	asm("tb0 0,r0,0x1F0");	
	asm("or %0,r0,r2" : "=r" (ret) : );
	return ((ret&0x4) == 0x4 ? 1 : 0);
}

/* return 0 on success */

bugdskwr(struct bugdisk_io *arg)
{
	int ret;
	asm("or r9,r0, " DSKWR);
	asm("tb0 0,r0,0x1F0");	
	asm("or %0,r0,r2" : "=r" (ret) : );
	return ((ret&0x4) == 0x4 ? 1 : 0);
}

bugrtcrd(struct bugrtc *rtc)
{
	asm("or r9,r0, " RTC_RD);
	asm("tb0 0,r0,0x1F0");
}

bugreturn(void)
{
	asm("or r9,r0, " RETURN);
	asm("tb0 0,r0,0x1F0");
}

bugbrdid(struct bugbrdid *id)
{
	struct bugbrdid *ptr;
	asm("or r9,r0, " BRD_ID);
	asm("tb0 0,r0,0x1F0");
	asm("or %0,r0,r2" : "=r" (ptr) : );
	bcopy(ptr, id, sizeof(struct bugbrdid));
}