#include "../include/osd.h" #include void setup(void) { // 8-N-1 at 115200 bps outw(0x8000, IO_UART1_MSR); outw(14, IO_UART1_BRSR); // Mask all interrupts outw(0, IO_INTC_EINT0); outw(0, IO_INTC_EINT1); outw(0, IO_INTC_EINT2); } void putc(char ch) { // Wait for room in FIFO while ((inw(IO_UART1_TFCR) & 0x3f) >= 0x20); // Write character outw(ch, IO_UART1_DTRR); } void put(const char *str) { while (*str) { putc(*str++); } } void nl(void) { putc('\r'); putc('\n'); } void puthex(unsigned long n) { unsigned int i; for (i = 0; i != 8; i++) { unsigned int digit = n >> 28; putc(digit >= 10 ? digit - 10 + 'A' : digit + '0'); n <<= 4; } } void putbin(unsigned short n) { unsigned int i; for (i = 0; i != 16; i++) { putc((n >> 15) ? '1' : '0'); n <<= 1; if (i == 7) { putc(' '); } } } #define truth(x) ((x) ? "true" : "false") #define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) char getc(void) { // Wait for FIFO to contain something while ((inw(IO_UART1_RFCR) & 0x3f) == 0); // Read character return (char)inw(IO_UART1_DTRR); } struct { unsigned int greg; unsigned int mask; const char *name; } gios[] = { {IO_GIO_BITSET0, 1 << 0, " 0"}, {IO_GIO_BITSET0, 1 << 1, " 1"}, {IO_GIO_BITSET0, 1 << 3, " 3"}, {IO_GIO_BITSET0, 1 << 8, " 8"}, {IO_GIO_BITSET0, 1 << 9, " 9"}, {IO_GIO_BITSET0, 1 << 11, "11"}, {IO_GIO_BITSET0, 1 << 13, "13"}, {IO_GIO_BITSET0, 1 << 14, "14"}, {IO_GIO_BITSET1, 1 << 8, "24"}, {IO_GIO_BITSET1, 1 << 9, "25"} }; int main(void) { setup(); nl(); nl(); put("uart-gio-ins rev 1"); nl(); for (;;) { unsigned int i; for (i = 0; i < ARRAY_SIZE(gios); i++) { put(gios[i].name); putc(':'); putc((inw(gios[i].greg) & gios[i].mask) ? '*' : ' '); putc(' '); } putc('\r'); } return 0; }