⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console.c

📁 Compex BIOS for SAMSUNG S3C4510B v1.20-lt
💻 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 *getpass(char *s, int n, char prompt){	char *p;	int ch;	p = s;	while (1) {		ch = getch();		if (ch == KEY_ENTER)			break;		if (ch == KEY_BACKSPACE) {			if (p > s) {				p--;				putch(ch);				putch(' ');				putch(ch);			}		} else if ((p - s) < (n - 1)) {			/* visiable ascii chars */			if (ch >= 32 && ch <= 126) {				*p++ = (char)ch;				if (prompt)					putch(prompt);			}		}	}	*p = '\0';	return s;}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) {			if (p > s) {				p--;				putch(ch);				putch(' ');				putch(ch);			}		} else if ((p - s) < (n - 1)) {			/* visiable ascii chars */			if (ch >= 32 && ch <= 126) {				*p++ = (char)ch;				putch(ch);			}		}	}	*p = '\0';	return s;}unsigned long getul(unsigned long def, int radix){	char buf[9];	gets(buf, 9);	if (buf[0] == '\0')		return def;	return strtoul(buf, NULL, radix);}unsigned char getuc(unsigned char def, int radix){	char buf[4];	unsigned long l;		if (radix == 16)		gets(buf, 3);	else		gets(buf, 4);	if (buf[0] == '\0')		return def;	l = strtoul(buf, NULL, radix);	if (l > 255)		l = 255;	return l;}	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_0nd(char ch2, unsigned long l){	unsigned long prod, t;	int flag = 0;	unsigned char ch;	int i, j;	ch2 = ch2 - '0';	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 (!flag && !ch && i >= ch2)			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 == 'l')				ch1 = *s++;			if (ch1 == 's') {				str = va_arg(ap, unsigned char *);				puts(str);			} else if (ch1 == 'd') {				arg = va_arg(ap, unsigned long);				print_0nd('1', arg);			} else {				ch2 = *s++;				ch3 = *s++;				if (ch3 == 'l')					ch3 = *s++;				arg = va_arg(ap, unsigned long);				if (ch3 == 'd')					print_0nd(ch2, arg);				else					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;}int get_select_enter(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_ENTER) {			select = -1;			break;		}	}	return select;}int get_yes_no(int def){	int ch;		while (1) {		ch = getch();		if (ch == KEY_ENTER)			return def;		if (ch == 'y' || ch == 'Y') {			putch(ch);			return 1;		}		if (ch == 'n' || ch == 'N') {			putch(ch);			return 0;		}	}	return def;}int get_enter_esc(void){	int ch;	while (1) {		ch = getch();		if (ch == KEY_ENTER)			return 1;		if (ch == KEY_ESC)			return 0;	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -