📄 console.c
字号:
#include "..\inc\board.h"#include "..\inc\console.h"#include <stdarg.h> #define CONSOLE_OUTPUT 1#define NULL 0int console_init(int mclk,int baud){ outl(0x00, rUFCON0); outl(0x00, rUFCON1); outl(0x00, rUMCON0); outl(0x00, rUMCON0); outl(0x03, rULCON0); outl(0x245, rUCON0);// outl(( (int)(mclk/16./baud + 0.5) -1 ), rUBRDIV0); outl(32,rUBRDIV0); return 0;}int console_write(int ch){#ifdef CONSOLE_OUTPUT while (!(inl(rUTRSTAT0) & 0x04)); outl(ch, rUTXH0);#endif return 0;}int console_read(void){ while (!(inl(rUTRSTAT0) & 0x01)); return (int)inl(rURXH0);}int kbhit(void){ return ((inl(rUTRSTAT0) & 0x01));}int getch(void){ return console_read();}int putch(int ch){ return console_write(ch);}int puts(const unsigned char *s){ while (*s != 0) { putch(*s++); } return 0;}char *gets(char *s, int n){ char *p; int ch; p = s; while (1) { ch = getch(); if (ch == KEY_ENTER) break; if (ch == KEY_BACKSPACE && p > s) { p--; putch(ch); } else if ((p - s) < (n - 1)) { *p++ = (char)ch; putch(ch); } } *p = '\0'; return s;}unsigned long getul(unsigned long def){ char buf[9]; gets(buf, 9); if (buf[0] == '\0') return def; return strtoul(buf, NULL, 16);}void print_0nx(char ch2, unsigned long l){ unsigned char ch; int i; ch2 = ch2 - '0'; for (i = ch2 - 1; i >= 0; i--) { ch = (l >> (i * 4)) & 0x0f; if (ch < 10) putch(ch + '0'); else putch(ch - 10 + 'a'); }}void print_d(unsigned long l){ unsigned long prod, t; int flag = 0; unsigned char ch; int i, j; for (i = 15; i >= 0; i--) { prod = 1; t = l; for (j = 0; j < i; j++) { prod = prod * 10; t = t / 10; } ch = t; l -= prod * t; if (ch == 0 && flag == 0) continue; if (ch < 10) putch(ch + '0'); else putch('?'); flag = 1; }}int printf(const char *s, ...){ va_list ap; unsigned long arg; const unsigned char *str; char ch1, ch2, ch3; va_start(ap, s); while (*s != 0) { if (*s == '%') { s++; ch1 = *s++; if (ch1 == 's') { str = va_arg(ap, unsigned char *); puts(str); } else if (ch1 == 'd') { arg = va_arg(ap, unsigned long); print_d(arg); } else { ch2 = *s++; ch3 = *s++; arg = va_arg(ap, unsigned long); print_0nx(ch2, arg); } } else putch(*s++); } va_end(ap); return 0;}int get_select(char min, char max){ int select; int ch; while (1) { ch = getch(); if (ch >= min && ch <= max) { putch(ch); select = ch - min + 1; break; } if (ch == KEY_ESC) { select = -1; break; } } return select;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -