?? g_def_no_data_tos.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
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
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
sti
LEA DX,OK_MSG
mov cx,0C00H
MOV AH,9
INT 21H
MOV AX,4C00H
INT 21H
ENDM
TURN_TO_PROTECT MACRO
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
LIDT FWORD PTR IDTSIZE
CALL OPEN_A20
MOV EAX,CR0
OR EAX,1
MOV CR0,EAX
TOS_ENTRY: ;run tos
JMP EDS_FLUSH2 ;clear instructors
EDS_FLUSH2: DB 0EAH
DW OFFSET TOS_BEGIN
DW TOS_CODE_SEL
ENDM
REAL_BEGIN0 MACRO
MOV AX,DATA
MOV DS,AX
CLI
MOV AX,STACK
MOV SS,AX
STI
;set idt_desc for IDT21
MOV DI,OFFSET IDT21
MOV AX,OFFSET GINT21H
MOV [DI].OFF_L,AX
;set gdt_desc for g_buf
MOV DI,OFFSET G_BUF
MOV [DI].BASE_L,0 ;base_addr=3M
MOV [DI].BASE_M,030H
MOV [DI].GRAN,0FH ;limit=1M
;setup idt
CLI
MOV AX,DS
MOV CX,10H
MUL CX
ADD AX,OFFSET IDT0 ;DX:AX=32 address for IDT
ADC DX,0
MOV IDTLOAD,AX
MOV IDTLOAD+2,DX
MOV AX,OFFSET IDT_SIZE
SUB AX,OFFSET IDTSIZE
ADD AX,1
MOV IDTSIZE,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
;**********************new add
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=3M
MOV [DI].BASE_M,030H
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
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
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
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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -