Welcome to mirror list, hosted at ThFree Co, Russian Federation.

op50n-io.S « pa « libgloss - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 25328ef2245ab89c48dfce70f45bf6212ce465d7 (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
109
110
111
112
113
114
115
116
117
118
119
120
/* op50n-io.S -- low-level I/O routines for the Oki OP50N eval board.
 *
 * Copyright (c) 1995 Cygnus Support
 *
 * The authors hereby grant permission to use, copy, modify, distribute,
 * and license this software and its documentation for any purpose, provided
 * that existing copyright notices are retained in all copies and that this
 * notice is included verbatim in any distributions. No written agreement,
 * license, or royalty fee is required for any of the authorized uses.
 * Modifications to this software may be copyrighted by their authors
 * and need not follow the licensing terms described here, provided that
 * the new terms are clearly indicated on the first page of each file where
 * they apply.
 */

mon_start       .EQU    0xd0000000
where_dp        .EQU    mon_start+4*4
where_ci        .EQU    mon_start+14*4
where_co        .EQU    mon_start+15*4
where_read	.EQU	mon_start+22*4
where_write	.EQU	mon_start+23*4

/* 
 *int c = inbyte(wait);
 */
	.space $TEXT$
	.align 4
        .EXPORT inbyte,CODE,ARGW0=GR,RTNVAL=GR
inbyte
	.PROC
	.CALLINFO CALLER,FRAME=64,SAVE_RP
	.ENTRY
        stw     %r2,-20(0,%r30)
        ldo     64(%r30),%r30
        stw     %r27,-56(0,%r30) 	; save my dp
 	ldil    l%where_dp,%r27    	; load monitors dp
	ldw	r%where_dp(0,%r27),%r27
	ldil	l%where_ci,%r1
	ldw	r%where_ci(0,%r1),%r1
        ble     0(0,%r1)
        copy    %r31,%r2
        ldw     -56(0,%r30),%r27 	; load my dp
        ldw     -84(0,%r30),%r2
        ldo     -64(%r30),%r30
        bv      %r0(%r2)
	nop
        .EXIT
        .PROCEND
 
/* int c = outbyte(c);
*/
        .EXPORT outbyte,CODE,ARGW0=GR,RTNVAL=GR
outbyte
        .PROC
        .CALLINFO CALLER,FRAME=64,SAVE_RP
        .ENTRY
        stw     %r2,-20(0,%r30)
        ldo     64(%r30),%r30
        stw     %r27,-56(0,%r30) 	; save my dp
 	ldil    l%where_dp,%r27    	; load monitors dp
	ldw	r%where_dp(0,%r27),%r27
	ldil	l%where_co,%r1
	ldw	r%where_co(0,%r1),%r1
        ble     0(0,%r1)
        copy    %r31,%r2
        ldw     -56(0,%r30),%r27 	; load my dp
        ldw     -84(0,%r30),%r2
        ldo     -64(%r30),%r30
        bv      %r0(%r2)
	nop
        .EXIT
        .PROCEND

#if 0
/* cnt = read(fd, bufp, cnt);
*/
	.EXPORT	read,CODE,ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RTNVAL=NO
read
	.PROC
	.CALLINFO FRAME=64,CALLS,SAVE_RP
	.ENTRY
	stw	%r2,-20(0,%r30)
	ldo	64(%r30),%r30
	stw	%dp,-56(0,%r30)	; save my dp
	ldil	l%where_dp,%dp	; load monitors dp
	ldw	r%where_dp(0,%dp), %dp
	ldil	l%where_read,%r1
	ldw	r%where_read(0,%r1), %r1
	ble	0(0,%r1)
	copy	%r31,%r2
	ldw	-56(0,%r30),%dp	; load my dp
	ldw	-84(0,%r30),%r2
	bv	%r0(%r2)
	ldo	-64(%r30),%r30
	.EXIT
	.PROCEND

/* cnt = write(fd, bufp, cnt);
*/
	.EXPORT	write,CODE,ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RTNVAL=NO
write
	.PROC
	.CALLINFO FRAME=64,CALLS,SAVE_RP
	.ENTRY
	stw	%r2,-20(0,%r30)
	ldo	64(%r30),%r30
	stw	%dp,-56(0,%r30)	; save my dp
	ldil	l%where_dp,%dp	; load monitors dp
	ldw	r%where_dp(0,%dp), %dp
	ldil	l%where_write,%r1
	ldw	r%where_write(0,%r1), %r1
	ble	0(0,%r1)
	copy	%r31,%r2
	ldw	-56(0,%r30),%dp	; load my dp
	ldw	-84(0,%r30),%r2
	bv	%r0(%r2)
	ldo	-64(%r30),%r30
	.EXIT
	.PROCEND
#endif