/* ** Copyright 2001, Brian Swetland ** All Rights Reserved. Please read the provided LICENSE file. */ #include #define REG_BASE 0x04000000 #define REG_RCNT (REG_BASE + 0x134) // General Input/Output Control #define REG_SIOCNT (REG_BASE + 0x128) // Serial Communication Control #define REG_SIODATA8 (REG_BASE + 0x12a) // 8bit Serial Communication Data void dputchar(int c) { int timeout = 5000; /* wait for previous send to finish */ while((*(vu2*) REG_SIOCNT) & 0x10) { if(--timeout == 0) return; } *(vu2*) REG_SIODATA8 = c; } int dgetchar() { if(*(vu2*) REG_SIOCNT & 0x20) return -1; return *(vu2*) REG_SIODATA8; } void dinit(int baud) { int x; switch(baud) { case 115200: x = 3; break; case 57600: x = 2; break; case 38400: x = 1; break; case 9600: default: x = 0; } *(vu2*) REG_RCNT = 0; *(vu2*) REG_SIOCNT = 0x3d80 | x | 0x0100; } void dputs(const char *x) { while(*x != 0) { dputchar(*x++); } } int strlen(const char *x) { int l; l = 0; while(*x++ != 0) l++; return l; }