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 | |
---|
16 | mon_start .EQU 0xd0000000 |
---|
17 | where_dp .EQU mon_start+4*4 |
---|
18 | where_ci .EQU mon_start+14*4 |
---|
19 | where_co .EQU mon_start+15*4 |
---|
20 | where_read .EQU mon_start+22*4 |
---|
21 | where_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 |
---|
29 | inbyte |
---|
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 |
---|
53 | outbyte |
---|
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 |
---|
78 | read |
---|
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 |
---|
101 | write |
---|
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 |
---|