📄 i386.h
字号:
/*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
#ifndef __I386__H_
#define __I386__H_
/*
* Optimization barrier
* The "volatile" is due to gcc bugs
*
*/
#define _barrier() __asm__ __volatile__("": : :"memory")
/*
* Selector
* see head.s 中的全局描述符表
*/
#define _KERNEL_CS 0x8
#define _KERNEL_DS 0x10
/*
* 此系统只使用Intrupt Gate 和Trap Gate,并不使用TSS Gate,Call Gate.
*/
/*
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;中断门描述符格式
;+31-----------------16|15 |14 13|12------8|7----------0-+
;| Offset 31..16 | P DPL 0 D 110 0000 0000 | 1 dword
;+---------------------+------------------+-------------+
;+31-----------------16|15-----------------------------0-+
;| Selector | Offset 15..0 | 0 dword
;+---------------------+---------------------------------+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Trap Gate
;+31-----------------16|15 |14 13|12------8|7----------0-+
;| Offset 31..16 | P DPL 0 D 111 0000 0000 | 1 dword
;+---------------------+-------------------+-------------+
;+31-----------------16|15-----------------------------0-+
;| Selector | Offset 15..0 | 0 dword
;+---------------------+---------------------------------+ align 3
;***********************
;DPL-------Descriptor Privilege Level
;Offset----Offset to procedure entry point
;P---------Segment Present flag
;Selector--Segment Selector for destination code segment
;D---------Size :1 = 32 bits; 0 = 16 bits
;***********************
; 1 dword 8---15bits 的典型值
; Interupt Gate (clear IF):8Eh or 0EEh (kernel/user)(32 bit)(用于中断或异常)
; Trap Gate(keep IF): 8Fh or 0EFh (kernel/user)(32 bit)(用于trap ?)
*/
typedef struct tagGate{
unsigned short offl; //32位偏移的低16位
unsigned short sel; // 选择子
unsigned char Res;
unsigned char attr; //门属性
unsigned short offh; // 32位偏移的高16位
}gate_t;
// Interupt Gate (clear IF):8Eh or 0EEh (kernel/user)(32 bit)(用于中断或异常)
// Trap Gate(keep IF): 8Fh or 0EFh (kernel/user)(32 bit)(用于trap ?)
#define IGA_K (unsigned char)0x8e //interupte gate kernel
#define IGA_U (unsigned char)0xee //interupte gate user
#define TGA_K (unsigned char)0x8f //trap gate kernel
#define TGA_U (unsigned char)0xef //trap gate user
void _gate_fill(short gate,unsigned int offset, unsigned char attr);
void _fill_int_gate();
/*
* @arch.c
*
*/
typedef unsigned int irq_act; //void handle (int irq) irq action
int _irq_reg(short irq, irq_act irqact);
#define cli() \
__asm__ volatile ("cli")
#define sti() \
__asm__ volatile ("sti")
/*
* @ arch.s
*/
extern void _lidt();
#endif /* __I386__H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -