1/* op50n-io.S -- low-level I/O routines for the Oki OP50N eval board.
2 *
3 * Copyright (c) 1995 Cygnus Support
4 *
5 * The authors hereby grant permission to use, copy, modify, distribute,
6 * and license this software and its documentation for any purpose, provided
7 * that existing copyright notices are retained in all copies and that this
8 * notice is included verbatim in any distributions. No written agreement,
9 * license, or royalty fee is required for any of the authorized uses.
10 * Modifications to this software may be copyrighted by their authors
11 * and need not follow the licensing terms described here, provided that
12 * the new terms are clearly indicated on the first page of each file where
13 * they apply.
14 */
15
16mon_start       .EQU    0xd0000000
17where_dp        .EQU    mon_start+4*4
18where_ci        .EQU    mon_start+14*4
19where_co        .EQU    mon_start+15*4
20where_read	.EQU	mon_start+22*4
21where_write	.EQU	mon_start+23*4
22
23/*
24 *int c = inbyte(wait);
25 */
26	.space $TEXT$
27	.align 4
28        .EXPORT inbyte,CODE,ARGW0=GR,RTNVAL=GR
29inbyte
30	.PROC
31	.CALLINFO CALLER,FRAME=64,SAVE_RP
32	.ENTRY
33        stw     %r2,-20(0,%r30)
34        ldo     64(%r30),%r30
35        stw     %r27,-56(0,%r30) 	; save my dp
36 	ldil    l%where_dp,%r27    	; load monitors dp
37	ldw	r%where_dp(0,%r27),%r27
38	ldil	l%where_ci,%r1
39	ldw	r%where_ci(0,%r1),%r1
40        ble     0(0,%r1)
41        copy    %r31,%r2
42        ldw     -56(0,%r30),%r27 	; load my dp
43        ldw     -84(0,%r30),%r2
44        ldo     -64(%r30),%r30
45        bv      %r0(%r2)
46	nop
47        .EXIT
48        .PROCEND
49
50/* int c = outbyte(c);
51*/
52        .EXPORT outbyte,CODE,ARGW0=GR,RTNVAL=GR
53outbyte
54        .PROC
55        .CALLINFO CALLER,FRAME=64,SAVE_RP
56        .ENTRY
57        stw     %r2,-20(0,%r30)
58        ldo     64(%r30),%r30
59        stw     %r27,-56(0,%r30) 	; save my dp
60 	ldil    l%where_dp,%r27    	; load monitors dp
61	ldw	r%where_dp(0,%r27),%r27
62	ldil	l%where_co,%r1
63	ldw	r%where_co(0,%r1),%r1
64        ble     0(0,%r1)
65        copy    %r31,%r2
66        ldw     -56(0,%r30),%r27 	; load my dp
67        ldw     -84(0,%r30),%r2
68        ldo     -64(%r30),%r30
69        bv      %r0(%r2)
70	nop
71        .EXIT
72        .PROCEND
73
74#if 0
75/* cnt = read(fd, bufp, cnt);
76*/
77	.EXPORT	read,CODE,ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RTNVAL=NO
78read
79	.PROC
80	.CALLINFO FRAME=64,CALLS,SAVE_RP
81	.ENTRY
82	stw	%r2,-20(0,%r30)
83	ldo	64(%r30),%r30
84	stw	%dp,-56(0,%r30)	; save my dp
85	ldil	l%where_dp,%dp	; load monitors dp
86	ldw	r%where_dp(0,%dp), %dp
87	ldil	l%where_read,%r1
88	ldw	r%where_read(0,%r1), %r1
89	ble	0(0,%r1)
90	copy	%r31,%r2
91	ldw	-56(0,%r30),%dp	; load my dp
92	ldw	-84(0,%r30),%r2
93	bv	%r0(%r2)
94	ldo	-64(%r30),%r30
95	.EXIT
96	.PROCEND
97
98/* cnt = write(fd, bufp, cnt);
99*/
100	.EXPORT	write,CODE,ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RTNVAL=NO
101write
102	.PROC
103	.CALLINFO FRAME=64,CALLS,SAVE_RP
104	.ENTRY
105	stw	%r2,-20(0,%r30)
106	ldo	64(%r30),%r30
107	stw	%dp,-56(0,%r30)	; save my dp
108	ldil	l%where_dp,%dp	; load monitors dp
109	ldw	r%where_dp(0,%dp), %dp
110	ldil	l%where_write,%r1
111	ldw	r%where_write(0,%r1), %r1
112	ble	0(0,%r1)
113	copy	%r31,%r2
114	ldw	-56(0,%r30),%dp	; load my dp
115	ldw	-84(0,%r30),%r2
116	bv	%r0(%r2)
117	ldo	-64(%r30),%r30
118	.EXIT
119	.PROCEND
120#endif
121