www.pudn.com > czxtsycx1.zip > 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