www.pudn.com > czxtsycx1.zip > COS_GDT.ASM
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 ;setup to start************* IDT GDT_DESC;92H=P ,DPL=0,TYPE=2 IDT_SEL = IDT - GDT 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 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 GDT_ASDATA GDT_DESC GDT_ASDATA_SEL = GDT_ASDATA - GDT TOS_TSSASDATA GDT_DESC TOS_TSSASDATA_SEL = TOS_TSSASDATA - GDT USER_PsTSS_mov GDT_DESC ;9AH=exec/read ,DPL=0 USER_PsTSS_mov_SEL = USER_PsTSS_mov - GDT USER_PsLDT_mov GDT_DESC ;11 USER_PsLDT_mov_SEL = USER_PsLDT_mov - GDT ;+ 04H DATASEG GDT_DESC ;92H=P ,DPL=0,TYPE=2 DATA_SEL = DATASEG - GDT ;***************V86 ;***************V86 V86_CODE GDT_DESC <0FFFFH,V86CODESEG,0,0fAH,0,0> V86_CODE_SEL = (V86_CODE - GDT) V86_DATA_GDT GDT_DESC <0FFFFH,V86_DATASEG,0,92H,0,0> V86_DATA_GDT_SEL = (V86_DATA_GDT - GDT) V86TSS GDT_DESC ;89H=386TSS DPL=0 V86TSS_SEL =V86TSS - GDT V86TSS_ASDATA GDT_DESC ;89H=386TSS DPL=0 V86TSS_ASDATA_SEL =V86TSS_ASDATA - GDT V86LDTS GDT_DESC ;82H=LDT DPL=0 V86LDT_SEL =V86LDTS - GDT ;***************V86 ;***************V86 GDT_INIT_COUNT = ($ - GDT_INIT_BEGIN)/(SIZE GDT_DESC) ; seg_mode -->start USER_segs_mov GDT_DESC <0ffffh,0,0C0H,92H,0FH,0> ;9AH=exec/read ,DPL=0 USER_segs_mov_SEL = USER_segs_mov - GDT ; seg_mode -->end ;setup to end ******************************************* V86_VRAM GDT_DESC <0FFFFH,8000H,0BH,092H,0,0> ;92H=P ,DPL=0,TYPE=2 V86_VRAM_SEL = V86_VRAM - GDT ;60h ;;;;;;;;file system V_SFT GDT_DESC <0FFFFH,0,0FFH,92H,0,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFF0000H V_SFT_SEL = V_SFT - GDT V_FILE_BUF GDT_DESC <0FFFFH,0,0FEH,92H,0,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFE0000H V_FILE_BUF_SEL = V_FILE_BUF - GDT ;;;;;;;;file system ;;for schedule V_PCB GDT_DESC <0ffFFH,0,080H,92H,0fH,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFF0000H ;LIMIT=1m V_PCB_SEL = V_PCB - GDT ;LIMIT=4m 21 V_TOS_TSSASDATA GDT_DESC ;89H=386TSS DPL=0 V_TOS_TSSASDATA_SEL = V_TOS_TSSASDATA - GDT V_GDT_ASDATA GDT_DESC <0FFFFH,2000H,40H,92H,0,0C0H> V_GDT_ASDATA_SEL = V_GDT_ASDATA - GDT ;V_USER_SEGS GDT_DESC <04FFH,0,40H,92H,10H,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFF4000H ;LIMIT=4m V_USER_SEGS GDT_DESC <0FFFFH,0,40H,92H,0FH,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFF4000H ;LIMIT=1m V_USER_SEGS_SEL = V_USER_SEGS - GDT V_STACK0 GDT_DESC <4095,0,40H,92H,0,0FFH> ;92H=P ,DPL=0,TYPE=2 ,base=FFFD0000H V_STACK0_SEL = V_STACK0 - GDT V_USER_PsTSS GDT_DESC ;9AH=exec/read ,DPL=0 V_USER_PsTSS_SEL = V_USER_PsTSS - GDT USER_PsTSS_D GDT_DESC ;9AH=exec/read ,DPL=0 USER_PsTSS_D_SEL = USER_PsTSS_D - GDT V_USER_PsLDTT GDT_DESC <4095,2000h,40h,82H,0,0FFH> ;82H=LDT V_USER_PsLDT_SEL = V_USER_PsLDTT - GDT USER_PsLDTT_ASDATA GDT_DESC <4095,2000H,40H,92H,0,0FFH> ;82H=LDT USER_PsLDTT_ASDATA_SEL = USER_PsLDTT_ASDATA - GDT ;37 ;;for schedule ;***********prepare page_memory G_PDT GDT_DESC <0FFFH,2000H,21H,92H,0,0>;92H=P ,DPL=0,TYPE=2 ,base=2M+68k G_PDT_SEL = G_PDT - GDT G_PT0 GDT_DESC <0FFFFH,3000H,21H,92H,0,0>;92H=P ,DPL=0,TYPE=2 ,base=2M+72k ;16 PAGES G_PT0_SEL = G_PT0 - GDT G_MOVSEG GDT_DESC <0FFFFH,0,20H,92H,0FH,0> ;92H=P ,DPL=0,TYPE=2 ,base=2M G_MOV_SEL = G_MOVSEG - GDT ;LIMIT=1M ;***********next for page_memory V_DOS_CODE GDT_DESC <0FFFFH,0,0,9AH,0FH,0> ;9AH=exec/read ,DPL=0 V_DOS_CODE_SEL = V_DOS_CODE - GDT G_VRAM GDT_DESC <0FFFFH,0,0,92H,0,0C0H> ;92H=P ,DPL=0,TYPE=2 G_VRAM_SEL = G_VRAM - GDT ;G_BUF GDT_DESC <1024,0,40H,92H,80H,0> ;92H=P ,DPL=0,TYPE=2 ,base=4M G_BUF GDT_DESC <0FFFFh,0,40H,92H,0FH,0> ;92H=P ,DPL=0,TYPE=2 ,base=4M G_BUF_SEL = G_BUF - GDT V_G_PT0 GDT_DESC <0FFFFH,3000H,41H,92H,0,0C0H> V_G_PT0_SEL = V_G_PT0 - GDT V_TOS_TSS GDT_DESC ;89H=386TSS DPL=0 V_TOS_TSS_SEL = V_TOS_TSS - GDT V_TOS_CODE GDT_DESC <0FFFFH,3000H,42H,9AH,0,0C0H> ;9AH=exec/read ,DPL=0 ;limit must be 0ffffh for returnning to real_mode V_TOS_CODE_SEL = V_TOS_CODE - GDT ;31 V_TOS_STACK GDT_DESC <01000H,3000H,43H,92H,0,0C0H> ;96H=R/W ,DOWN 93 V_TOS_STACK_SEL = V_TOS_STACK - GDT V_TOS_DATA GDT_DESC <0FFFFH,4000H,43H,92H,0,0C0H> ;92H=P ,DPL=0,TYPE=2 V_TOS_DATA_SEL = V_TOS_DATA - GDT ps_to_tos_sel =$ GDTLEN = $ - GDT GDTSEGLEN = $ GDTSEG ENDS