bootsetup.c.svn-base

来自「SImple Microkernel Distributed Operating」· SVN-BASE 代码 · 共 88 行

SVN-BASE
88
字号
#include <string.h>#include <system.h>#include "bootsetup.h"struct gdt_desc{	__word	lim_0_15;	__word	bas_0_15;	__byte	bas_16_23;	__byte 	access;	__byte 	gran;	__byte 	bas_24_31;}__attribute__((packed));struct idt_desc{	__word	bas_0_15;	__word	sel;	__byte	always0;	__byte	flags;	__word	bas_16_31;}__attribute__((packed));struct table_reg{	__word	  table_lim;	__dword   table_linear;	}__attribute__((packed));struct task_state{}__attribute__((packed));struct gdt_desc		gdt[3];struct idt_desc	   	idt[256];struct table_reg   	app_gdt_ram;struct table_reg   	app_idt_ram;extern void gdt_flush();extern void idt_load();void gdt_set_gate(unsigned short n, __dword base, \		__dword limit, __byte access, __byte gran){	gdt[n].bas_0_15 = (base & 0xFFFF);	gdt[n].bas_16_23 = (base >> 16) & 0xFF;	gdt[n].bas_24_31 = (base >> 24) & 0xFF;	gdt[n].lim_0_15 = (limit & 0xFFFF);	gdt[n].gran = ((limit >> 16) & 0x0F);	gdt[n].gran |= (gran & 0xF0);	gdt[n].access = access;}void idt_set_gate(unsigned short n, __dword base, \		__word sel, __byte flags){	return;}void gdt_install(){	app_gdt_ram.table_lim       	 = (sizeof(struct gdt_desc) * 3) - 1;	app_gdt_ram.table_linear	 = (__dword)gdt;	gdt_set_gate(0, 0, 0, 0, 0);	gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);	gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);	gdt_flush();}void idt_install(){	app_idt_ram.table_lim    = (sizeof(struct idt_desc) * 256) - 1;	app_idt_ram.table_linear = (__dword)idt;	memset(&idt, 0, sizeof(struct idt_desc) * 256);	idt_load();}void install_desc(){	idt_install();	gdt_install();}

⌨️ 快捷键说明

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