00_header.asm文件用于保存代码中使用的一些常量。
其中,“struc proc_ctrl”结构体为进程控制块,用于保存系统/用户进程的核心信息。该结构体在“04_process.asm”文件中被广泛使用。
;===============================================================================
;=== 该处用于保存常量 ===
;===============================================================================
flat_4gb_code_seg_sel equ 0x0008 ;平坦模式的代码段选择子
flat_mode_code equ 0x0008 ;平坦模式的代码段选择子
flat_mode_data equ 0x0010 ;平坦模式的数据段选择子
;-------------------------------------------------------------------------------
show_mem_addr equ 0xc00b8000 ;文本显示区域的起始地址
pic_mem_addr equ 0xc00a0000 ;图形显示区域的起始地址
gdt_base_address equ 0xc0008000 ;gdt表的虚拟地址
idt_linear_address equ 0xc0019000 ;中断描述符表的线性基地址(100K处)
mouse_buf_addr equ 0xc0020000 ;存放鼠标数据的缓冲区基地址
mouse_buf_end equ 8192 ;存放鼠标数据的缓冲区大小(一共8K)
keyboard_buf_addr equ 0xc0023000 ;存放键盘数据的缓冲区基地址
keyboard_buf_end equ 4096 ;存键盘数据的缓冲区大小(一共4K,到0xc0024000)
sound_file_address equ 0xc0030000 ;音乐文件存放的内存地址
;-------------------------------------------------------------------------------
;常数,ldt表中代码段的高双字 base-0x0;TYPY-8 只执行;P-1;DPL-3;DT-1;G-1;D-1;limit-0xf;base-0;
ldt_code_high_dd equ 0x00cff800
;常数,ldt表中代码段的低双字 limit-0xffff;base-0x0;
ldt_code_low_dd equ 0x0000ffff
;常数,ldt表中数据段的高双字 base-0x0;TYPY-2 读/写;P-1;DPL-3;DT-1;G-1;D-1;limit-0xf;base-0;
ldt_data_high_dd equ 0x00cff200
;常数,ldt表中数据段的低双字 limit-0xffff;base-0x0;
ldt_data_low_dd equ 0x0000ffff
;-------------------------------------------------------------------------------
task_running equ 0xa5a5 ;常数,表示进程正在运行
task_spending equ 0xaaaa ;常数,表示进程暂定运行
task_closed equ 0x5555 ;常数,表示进程已经停止运行
;-------------------------------------------------------------------------------
;进程控制管理结构。还是使用双向链表便于查找
struc proc_ctrl
.num: resw 1 ;进程编号
.state: resw 1 ;当前状态
.wakeup: resd 1 ;进程休眠的截止时间(ticks)
.pre_task: resd 1 ;上一个进程控制结构的地址
.next_task: resd 1 ;下一个进程控制结构的地址
.task_rsvr: resd 1 ;保留
.task_sel: resw 1 ;进程在gdt中的选择子
.ldt_rsvr: resd 1 ;保留
.ldt_sel: resw 1 ;ldt在gdt中的选择子
.ldt: resb 16 ;任务对应的ldt段
.tss: resb 104 ;任务对应的tss段
.cmd resb 8 ;命令缓冲区(这里主要用于鼠标点击动作)
.sys_page resd 1 ;记录分配的系统页(用于进程就一个权限0的堆栈页)
.usr_page resd 8 ;记录分配的用户页(一个用户进程最多8页)
.left_x resw 1 ;进程窗口的左上角x坐标
.left_y resw 1 ;进程窗口的左上角y坐标
.len_x resw 1 ;进程窗口的长度
.len_y resw 1 ;进程窗口的高度
endstruc