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

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/pa/op50n-io.S')
-rw-r--r--libgloss/pa/op50n-io.S120
1 files changed, 120 insertions, 0 deletions
diff --git a/libgloss/pa/op50n-io.S b/libgloss/pa/op50n-io.S
new file mode 100644
index 000000000..25328ef22
--- /dev/null
+++ b/libgloss/pa/op50n-io.S
@@ -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