📄 bootsetup.c.svn-base
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -