static void readstr(char *s, int size) { char c[2]; int ptr; c[1] = 0; ptr = 0; while(1) { c[0] = readchar(); switch(c[0]) { case 0x7f: case 0x08: if(ptr > 0) { ptr--; putsnonl("\x08 \x08"); } break; case 0x07: break; case '\r': case '\n': s[ptr] = 0x00; putsnonl("\n"); return; default: putsnonl(c); s[ptr] = c[0]; ptr++; break; } } }
void readstr(char *s, int size) { char c; int ptr; ptr = 0; while(1) { c = readchar(); switch(c) { case 0x7f: case 0x08: if(ptr > 0) { ptr--; putsnonl("\x08 \x08"); } break; case '\r': case '\n': s[ptr] = 0x00; putsnonl("\n"); return; default: writechar(c); s[ptr] = c; ptr++; break; } } }
int main(int i, char **c) { char buffer[64]; brd_desc = get_board_desc(); /* Check for double baud rate */ if(brd_desc != NULL) { if(CSR_GPIO_IN & GPIO_DIP2) CSR_UART_DIVISOR = brd_desc->clk_frequency/230400/16; } /* Display a banner as soon as possible to show that the system is alive */ putsnonl(banner); crcbios(); display_board(); display_capabilities(); boot_sequence(); splash_showerr(); while(1) { putsnonl("\e[1mBIOS>\e[0m "); readstr(buffer, 64); do_command(buffer); } return 0; }
int printf(const char *fmt, ...) { va_list args; int len; char outbuf[PRINTF_BUFFER_SIZE]; va_start(args, fmt); len = vscnprintf(outbuf, sizeof(outbuf), fmt, args); va_end(args); outbuf[len] = 0; putsnonl(outbuf); return len; }
int main(int i, char **c) { char buffer[64]; brd_desc = get_board_desc(); /* Display a banner as soon as possible to show that the system is alive */ putsnonl(banner); crcbios(); display_board(); boot_sequence(); while(1) { putsnonl("\e[1mBIOS>\e[0m "); readstr(buffer, 64); do_command(buffer); } return 0; }
/* main is from Milkymist bios. */ int port_main(int i, char **c) { /* lock gdbstub ROM */ CSR_DBG_CTRL = DBG_CTRL_GDB_ROM_LOCK; /* enable bus errors */ CSR_DBG_CTRL = DBG_CTRL_BUS_ERR_EN; CSR_GPIO_OUT = GPIO_LED1; rescue = !((unsigned int)main > FLASH_OFFSET_REGULAR_BIOS); irq_setmask(0); irq_enable(1); time_init(); uart_init(); // vga_init(!(rescue || (CSR_GPIO_IN & GPIO_BTN2))); putsnonl(banner); // crcbios(); // brd_init(); // tmu_init(); /* < for hardware-accelerated scrolling */ // usb_init(); // ukb_init(); if(rescue) printf("I: Booting in rescue mode\n"); // splash_display(); // ethreset(); /* < that pesky ethernet PHY needs two resets at times... */ // print_mac(); // boot_sequence(); // vga_unblank(); // vga_set_console(1); uart_force_sync(1); while (1) { putsnonl("\e[1mStarting CoreMark\e[0m\n"); main(); putsnonl("\e[1mCoreMark ended.\e[0m \n\n"); } return 0; }
static void dump_bytes(unsigned int *ptr, int count, unsigned addr) { char *data = (char *)ptr; int line_bytes = 0, i = 0; putsnonl("Memory dump:"); while(count > 0){ line_bytes = (count > NUMBER_OF_BYTES_ON_A_LINE)? NUMBER_OF_BYTES_ON_A_LINE : count; printf("\n0x%08x ", addr); for(i=0;i<line_bytes;i++) printf("%02x ", *(unsigned char *)(data+i)); for(;i<NUMBER_OF_BYTES_ON_A_LINE;i++) printf(" "); printf(" "); for(i=0;i<line_bytes;i++) { if((*(data+i) < 0x20) || (*(data+i) > 0x7e)) printf("."); else printf("%c", *(data+i)); } for(;i<NUMBER_OF_BYTES_ON_A_LINE;i++) printf(" "); data += (char)line_bytes; count -= line_bytes; addr += line_bytes; } printf("\n"); }