www.pudn.com > czxtsycx1.zip > CHG_TASK.ASM


;exec.asm 
.MODEL HUGE 
.386P 
include \tc\g\include\g_def.asm 
include \tc\g\include\tos_seg.asm 
include \tc\g\include\user_p1.asm 
TOS_CODESEG SEGMENT PARA USE16 
            ASSUME CS:TOS_CODESEG,DS:DATA_TOS,SS:TOS_STACKSEG 
TOS_BEGIN:    
            TOS_BEGIN0 
            CALL DISP_TOS_IN_TOS 
 
            MOV BX,USER_P1LDT_SEL 
            LLDT BX 
            MOV AX,TOS_DATA_SEL 
            MOV DS,AX 
            DB 0EAH 
            DW 0 ;DS:G_WORK[6]   
            dw USER_P1TSS_SEL 
COMEBACK_TO_TOS: 
            JMP TURN_TO_REAL_MODE  
 
TURN_TO_REAL_MODE: 
            CALL TURN_TO_REAL 
            include \tc\g\include\tos_used.asm 
TOS_CODELEN = $ 
TOS_CODESEG ENDS 
 
GDTSEG      SEGMENT PARA USE16 
GDT         LABEL BYTE 
G_NULL      GDT_DESC <> 
REAL_SEG    GDT_DESC <0FFFFH,0,0,92H,0,0> 
REAL_SEL    = REAL_SEG - GDT 
GDT_INIT_BEGIN LABEL BYTE 
TOS_CODE    GDT_DESC <0FFFFH,TOS_CODESEG,0,9AH,0,0> ;9AH=exec/read ,DPL=0 
            ;limit must be 0ffffh for returnning to real_mode 
TOS_CODE_SEL = TOS_CODE - GDT 
TOS_DATA    GDT_DESC  ;92H=P ,DPL=0,TYPE=2 
TOS_DATA_SEL = TOS_DATA - GDT 
DATASEG    GDT_DESC  ;92H=P ,DPL=0,TYPE=2 
DATA_SEL = DATASEG - GDT 
TOS_STACK   GDT_DESC    ;96H=R/W ,DOWN 
TOS_STACK_SEL = TOS_STACK - GDT 
TOS_TSS     GDT_DESC  ;89H=386TSS DPL=0 
TOS_TSS_SEL  = TOS_TSS - GDT 
USER_P1TSS     GDT_DESC  ;9AH=exec/read ,DPL=0 
USER_P1TSS_SEL  = USER_P1TSS - GDT 
USER_P1TSS_D     GDT_DESC  ;9AH=exec/read ,DPL=0 
USER_P1TSS_D_SEL  = USER_P1TSS_D - GDT 
USER_P1LDTT     GDT_DESC  ;82H=LDT 
USER_P1LDT_SEL = USER_P1LDTT - GDT 
GDT_ASDATA  GDT_DESC  
GDT_ASDATA_SEL = $ - GDT 
GDT_INIT_COUNT  = ($ - GDT_INIT_BEGIN)/(SIZE GDT_DESC) 
G_VRAM      GDT_DESC <0FFFFH,08000H,0BH,92H,0,0>   ;92H=P ,DPL=0,TYPE=2 
G_VRAM_SEL   =  G_VRAM - GDT  ;60h 
G_BUF       GDT_DESC <0FFFFH,0,30H,92H,0,0> ;92H=P ,DPL=0,TYPE=2 ,base=3M 
G_BUF_SEL    = G_BUF - GDT 
ps_TO_TOS_SEL   = $ 
V_TOS_CODE_SEL = $ 
V_TOS_DATA_SEL = $ 
GDTLEN      = $ - GDT 
GDTSEG      ENDS 
            include \tc\g\include\COS_DATA.asm 
            include \tc\g\include\COS_IDT0.asm 
 
CODE        SEGMENT PARA USE16 ;PUBLIC 'CODE' ;/////real_mode segment--->start 
            ASSUME CS:CODE,DS:DATA,SS:STACK 
            include \tc\g\include\a20.asm 
MAIN        PROC FAR 
START:       
            REAL_BEGIN_PAGE 
 
TURN_TO_PROTECT_MODE: 
            CALL GDT_INIT 
            CALL USER_P1_LDT_INIT 
            TURN_TO_PROTECT_page 
REAL_MODE:   
            TO_DOS 
MAIN        ENDP 
include \tc\g\include\g_real.asm 
include \tc\g\include\p1_ldt.asm 
CODE        ENDS 
;////////////////////real_mode segment----->end 
include \tc\g\include\DOS_DATA.asm 
            END START