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

📄 io.h

📁 一个完整的GUI界面OS,单盘启动 实现了多线程、FAT32文件读写
💻 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 + -