📄 console.c
字号:
#include "types.h"#include "console.h"#include "utils.h"#include "board.h"#include <stdarg.h>#define CONSOLE_OUTPUT 1int console_init(void){ outl(0x03, ULCON0); outl(0x09, UCON0); outl(0x500, UBRDIV0); return 0;}int console_write(int ch){#ifdef CONSOLE_OUTPUT while (!(inl(USTAT0) & 0x40)); outl(ch, UTXBUF0);#endif return 0;}int console_read(void){ while (!(inl(USTAT0) & 0x20)); return (int)inl(URXBUF0);}int kbhit(void){ return (inl(USTAT0) & 0x20);}int getch(void){ return console_read();}int putch(int ch){ return console_write(ch);}int puts(const 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 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(int min, int max){ int select; int ch; while (1) { ch = getch(); if (ch >= min && ch <= max) { putch(ch); select = ch - min; break; } if (ch == KEY_ESC) { select = -1; break; } } return select;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -