diff options
Diffstat (limited to 'libgloss/sparc/erc32-io.c')
-rw-r--r-- | libgloss/sparc/erc32-io.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/libgloss/sparc/erc32-io.c b/libgloss/sparc/erc32-io.c new file mode 100644 index 000000000..082d9f9c5 --- /dev/null +++ b/libgloss/sparc/erc32-io.c @@ -0,0 +1,47 @@ +#define USE_PORT_A + +#define RXADATA (int *) 0x01F800E0 +#define RXBDATA (int *) 0x01F800E4 +#define RXSTAT (int *) 0x01F800E8 + +void +outbyte (int c) +{ + volatile int *rxstat; + volatile int *rxadata; + int rxmask; + + rxstat = RXSTAT; +#ifdef USE_PORT_A + rxadata = RXADATA; + rxmask = 6; +#else + rxadata = RXBDATA; + rxmask = 0x60000; +#endif + + while ((*rxstat & rxmask) == 0); + + *rxadata = c; +} + +int +inbyte (void) +{ + volatile int *rxstat; + volatile int *rxadata; + int rxmask; + + rxstat = RXSTAT; +#ifdef USE_PORT_A + rxadata = RXADATA; + rxmask = 1; +#else + rxadata = RXBDATA; + rxmask = 0x10000; +#endif + + while ((*rxstat & rxmask) == 0); + + return *rxadata; +} |