?? g_def.asm
字號:
GDT_DESC STRUC
LIMIT DW ?
BASE_L DW ?
BASE_M DB ?
ACCESS DB ?
GRAN DB ?
BASE_H DB ?
GDT_DESC ENDS
SZ_GDT_DESC EQU SIZE GDT_DESC
PE_ON EQU 01H
GDT_CS_SEL EQU 08H
GDT_DS_SEL EQU 10H
GDT_SS_SEL EQU 18H
VRAM_SEL EQU 20H
GDT_BUF_SEL EQU 28H
G_BUF_BASE = 040H ;4M
G_PDT_ADDR = 212000H ;PHISICAL MEMORY
G_PT0_ADDR = 213000H ;
GAT_DESC STRUC
OFFSET_L DW 0
SELECTOR DW 0
DCOUNT DB 0
GTYPE DB 0
OFFSET_H DW 0
GAT_DESC ENDS
IDT_DESC STRUC
OFF_L DW ?
SELECTOR DW ?
ATTR DW ?
OFF_H DW ?
IDT_DESC ENDS
TASKSS STRUC
TRLINK DW 0,0
TRESP0 DW 0,0
TRSS0 DW 0,0
TRESP1 DW 0,0
TRSS1 DW 0,0
TRESP2 DW 0,0
TRSS2 DW 0,0
TRCR3 DD 0
TREIP DW 0,0
TREFLAG DD 0
TREAX DD 0
TRECX DD 0
TREDX DD 0
TREBX DD 0
TRESP DW 0,0
TREBP DD 0
TRESI DD 0
TREDI DD 0
TRES DW 0,0
TRCS DW 0,0
TRSS DW 0,0
TRDS DW 0,0
TRFS DW 0,0
TRGS DW 0,0
TRLDT DW 0,0
TRFLAG DW 0
;TRIOMAP DW $ +2
TRIOMAP DW 0068h
dd 5 dup(0)
TASKSS ENDS
TO_DOS MACRO
CLTS
cli
CALL CLOSE_A20
MOV AX,DATA
MOV DS,AX
MOV SS,SAVE_SS
MOV SP,SAVE_SP
LGDT FWORD PTR SAVE_GDT
LIDT FWORD PTR SAVE_IDT
MOV AL,11111100B ;open clock&keyboard
OUT 21H,AL
sti
sti
LEA DX,OK_MSG
mov cx,0C00H
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
ENDM
TURN_TO_PROTECT_PAGE MACRO
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SAVE_SS,AX
MOV SAVE_SP,SP
; save current GDTR & IDTR
SGDT FWORD PTR SAVE_GDT
SIDT FWORD PTR SAVE_IDT
cli
LGDT FWORD PTR GDT_ADDR
MOV AX,DATA_TOS
MOV DS,AX
LIDT FWORD PTR DS:IDTSIZE
CALL OPEN_A20
MOV EAX,CR0
OR EAX,1
MOV CR0,EAX
TOS_ENTRY_PAGE: ;run tos
JMP EDS_FLUSH2_PAGE ;clear instructors
EDS_FLUSH2_PAGE: DB 0EAH
DW OFFSET TOS_BEGIN
DW TOS_CODE_SEL
ENDM
REAL_BEGIN_PAGE MACRO
CLI
MOV AX,STACK
MOV SS,AX
STI
;set gdt_desc for g_buf
MOV AX,GDTSEG
MOV DS,AX
MOV DI,OFFSET G_BUF
MOV [DI].BASE_L,0 ;base_addr=4M
MOV [DI].BASE_M,G_BUF_BASE
MOV [DI].GRAN,0FH ;limit=1M
;set idt_desc for IDT21
MOV AX,IDTSEG
MOV DS,AX
MOV DI,OFFSET IDT21
MOV AX,OFFSET GINT21H
MOV DS:[DI].OFF_L,AX
;setup idt
CLI
MOV AX,DATA_TOS
MOV DS,AX
MOV AX,IDTSEG
MOV CX,10H
MUL CX
ADC DX,0 ;DX:AX=32 address for IDT
MOV DS:IDTLOAD,AX
MOV DS:IDTLOAD+2,DX
MOV AX,OFFSET IDTLEN
ADD AX,1
MOV DS:IDTSIZE,AX
MOV AX,DATA
MOV DS,AX
ENDM
TOS_BEGIN0 MACRO
cli
MOV AX,TOS_DATA_SEL
MOV DS,AX
MOV ES,AX
MOV AX,DATA_SEL
MOV FS,AX
MOV AX,G_BUF_SEL
MOV GS,AX
MOV AX,TOS_STACK_SEL
MOV SS,AX
MOV AX,TOS_STACKLEN
dec ax
MOV SP,AX
MOV AX,G_VRAM_SEL
MOV ES,AX
;
MOV AX,TOS_TSS_SEL
LTR AX
ENDM
;***********Page_add
G_MOV MACRO s_selector,d_selector,s_offset,d_offset,mlen
LOCAL G_MOV1
MOV AX,s_selector
MOV DS,AX
MOV AX,d_selector
MOV ES,AX
MOV SI,s_offset
MOV EDI,d_offset
MOV CX,mlen
G_MOV1:
mov al,ds:[si]
mov es:[edi],al
inc si
inc edi
loop G_MOV1
MOV AX,g_vram_sel
MOV ES,AX
MOV AX,TOS_data_sel
MOV dS,AX
ENDM
SEGMAP_DESC STRUC
PH_ADDR DD ?
LO_ADDR DD ?
SEGMAP_DESC ENDS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -