📄 coreutils.h
字号:
/* coreutils.h
* 系统核心实用函数库声明文件.
*
* Copyright(c) 2007, Alex P.Wonder
* phoenixwonder@gmail.com
*
*/
#ifndef _COREUTILS_H
#define _COREUTILS_H
#ifndef BYTE
# include "OS_CPU.H"
#endif
#define NULL 0
/*************************************************/
/*************** 文本模式下的显示 ****************/
/*************************************************/
#define SCREEN_W 80
#define SCREEN_H 25
#define DISP_FGND_BLACK 0x00
#define DISP_FGND_BLUE 0x01
#define DISP_FGND_GREEN 0x02
#define DISP_FGND_CYAN 0x03
#define DISP_FGND_RED 0x04
#define DISP_FGND_PURPLE 0x05
#define DISP_FGND_BROWN 0x06
#define DISP_FGND_LIGHT_GRAY 0x07
#define DISP_FGND_DARK_GRAY 0x08
#define DISP_FGND_LIGHT_BLUE 0x09
#define DISP_FGND_LIGHT_GREEN 0x0A
#define DISP_FGND_LIGHT_CYAN 0x0B
#define DISP_FGND_LIGHT_RED 0x0C
#define DISP_FGND_LIGHT_PURPLE 0x0D
#define DISP_FGND_YELLOW 0x0E
#define DISP_FGND_WHITE 0x0F
#define DISP_BGND_BLACK 0x00
#define DISP_BGND_BLUE 0x10
#define DISP_BGND_GREEN 0x20
#define DISP_BGND_CYAN 0x30
#define DISP_BGND_RED 0x40
#define DISP_BGND_PURPLE 0x50
#define DISP_BGND_BROWN 0x60
#define DISP_BGND_LIGHT_GRAY 0x70
#define DISP_BLINK 0x80
#define PC_DispChar(x, y, c, color) \
os_putchar((c), (int)(x), (int)(y), (int)(color))
#define PC_DispStr(x, y, str, color) \
os_putstring((int)(x), (int)(y), (int)(color), (char *)(str))
#define PC_DispClrScr(color) \
os_clrscr((int)(color))
#define IO_KB_CUR_IDX 0x3d4 /* 寄存器索引 */
#define IO_KB_CUR_DATA 0x3d5 /* 数据寄存器 */
int os_sprintf(char *out, const char *format, ...);
void os_putchar(char chr, int x, int y, int color);
void os_putstring(int x, int y, int color, char *str);
void os_clrscr(unsigned char color);
void os_gotoxy(int x, int y); /* 移动光标 */
/*************************************************/
/************ ucOS_II相关辅助例程 ****************/
/*************************************************/
OS_STK *init_task_stk(void (*task)(void *pd), void *pdata, OS_STK *ptos);
/*************************************************/
/************** C系统基本系统函数 ***************/
/*************************************************/
/* 内存块操作 */
void os_memset(void *buf, char chr, int n);
void os_memcpy(void *dest, const void *src, int n) ;
/* 随机数 */
int random(void);
/* I/O端口操作 */
#define outp(port, val) os_outb(port, val)
#define outpw(port, val) os_outw(port, val)
#define inp(port) os_inb(port)
#define inpw(port) os_inw(port)
int os_outb(int port, unsigned char val);
int os_outw(int port, unsigned short val);
unsigned char os_inb(int port);
unsigned short os_inw(int port);
void enable_8259_irq();
void reset_cursor();
/*************************************************/
/************** x86中断(保护模式) ****************/
/*************************************************/
#define IRQ_BASE 0x20 /* 8259外部中断基地址 */
#define PC_VectSet(vectno, isr) os_setvect(vectno, isr)
#define PC_VectGet(vectno) os_getvect(vectno)
void os_setvect(int vectno, void (*isr)(void)); /* 设置中断处理程序 */
void *os_getvect(int vectno); /* 获得对应中断号上的处理程序地址 */
/*************************************************/
/****************** 8254定时器 *******************/
/*************************************************/
#define TICK_T0_8254_CWR 0x43 /* 8254 PIT Control Word Register address. */
#define TICK_T0_8254_CTR0 0x40 /* 8254 PIT Timer 0 Register address. */
#define TICK_T0_8254_CTR1 0x41 /* 8254 PIT Timer 1 Register address. */
#define TICK_T0_8254_CTR2 0x42 /* 8254 PIT Timer 2 Register address. */
#define TICK_T0_8254_CTR0_MODE3 0x36 /* 8254 PIT Binary Mode 3 for Counter 0 control word. */
#define TICK_T0_8254_CTR2_MODE0 0xB0 /* 8254 PIT Binary Mode 0 for Counter 2 control word. */
#define TICK_T0_8254_CTR2_LATCH 0x80 /* 8254 PIT Latch command control word */
#define PC_SetTickRate(freq) os_set_tick(freq)
void os_set_tick(unsigned short freq);
/*************************************************/
/****************** 时间处理 *********************/
/*************************************************/
struct ftime {
unsigned ft_tsec:5; /* 0-29, double to get real seconds */
unsigned ft_min:6; /* 0-59 */
unsigned ft_hour:5; /* 0-23 */
unsigned ft_day:5; /* 1-31 */
unsigned ft_month:4; /* 1-12 */
unsigned ft_year:7; /* since 1980 */
};
struct date {
short da_year;
char da_day;
char da_mon;
};
struct time {
unsigned char ti_min;
unsigned char ti_hour;
unsigned char ti_hund;
unsigned char ti_sec;
};
/*
index Function
00 Current second for RTC
01 Alarm second
02 Current minute
03 Alarm minute
04 Current hour
05 Alarm hour
06 Current day of week(01=Sunday)
07 Current date of month
08 Current month
09 Current year(final two digits,eg:93)
*/
enum RtcRegs {
rrSec = 0,
rrAlmSec,
rrMin,
rrAlmMin,
rrHour,
rrAlmHour,
rrWeekday,
rrMDay,
rrMonth,
rrYear
};
unsigned char read_rtc_regs(int index); /* 读RTC时钟寄存器驱动 */
void os_getdate( struct date *dp); /* 读日期 */
void os_gettime( struct time *tp); /* 读时间 */
#endif /* #ifndef _COREUTILS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -