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