📄 io.h
字号:
//------------------------------------------------------------------
//
//
// I/O 端口操作 模块
//
//
//
//
//
//
//
//-------------------------------------------------------------------
#ifndef IO_H
#define IO_H
//------------------------------------------------------------------
//
// 向端口发送一个字
//
//
//
//------------------------------------------------------------------
#define outb(value,port) \
__asm__ ("outb %%al,%%dx": :"a" (value),"d" (port))
//------------------------------------------------------------------
//
// 从端口输入一个字
//
//
//
//------------------------------------------------------------------
#define inb(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \
_v; \
})
//------------------------------------------------------------------
//
// 向端口发送一个字 (带延迟)
//
//
//
//------------------------------------------------------------------
#define outb_p(value,port) \
__asm__ ("outb %%al,%%dx\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:": :"a" (value),"d" (port))
//------------------------------------------------------------------
//
// 向端口发送一个字 (带延迟)
//
//
//
//------------------------------------------------------------------
#define inb_p(port) ({ \
unsigned char _v; \
__asm__ volatile ("inb %%dx,%%al\n" \
"\tjmp 1f\n" \
"1:\tjmp 1f\n" \
"1:":"=a" (_v):"d" (port)); \
_v; \
})
//--------------------------------------------------------------------------------------------------------------------------//// 读取 CMOS 端口////--------------------------------------------------------------------------------------------------------------------------
extern __inline unsigned char ReadCmos(int reg)
{
outb(reg,0x70);
return (unsigned char) inb(0x71);
}
//--------------------------------------------------------------------------------------------------------------------------//// IO设备延迟////--------------------------------------------------------------------------------------------------------------------------
#define io_wait() inb(0x80)
//--------------------------------------------------------------------------------------------------------------------------//// 核心延迟////--------------------------------------------------------------------------------------------------------------------------
#define kernelDelay() \
__asm__ __volatile__ ("pushal \n\t"\
"mov $0x3F6, %dx \n\t" \
"inb %dx, %al \n\t" \
"inb %dx, %al \n\t" \
"inb %dx, %al \n\t" \
"inb %dx, %al \n\t" \
"popal")
//--------------------------------------------------------------------------------------------------------------------------//// 保存标志位寄存器信息////--------------------------------------------------------------------------------------------------------------------------
static __inline unsigned save_eflags(unsigned *flags)
{
unsigned ret_val;
__asm__ __volatile__("pushfl\n"
"popl %0\n"
"cli"
: "=a"(ret_val)
:);
*flags = ret_val;
return ret_val;
}
//--------------------------------------------------------------------------------------------------------------------------//// 恢复标志位寄存器信息////--------------------------------------------------------------------------------------------------------------------------
static __inline void restore_eflags(unsigned flags)
{
__asm__ __volatile__("pushl %0\n"
"popfl"
:: "m"(flags));
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -