20000317 sourceware import
This commit is contained in:
120
libgloss/pa/op50n-io.S
Normal file
120
libgloss/pa/op50n-io.S
Normal file
@ -0,0 +1,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
|
Reference in New Issue
Block a user