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


USER_P1_STACK0SEG SEGMENT PARA USE16      
USER_P1_STACK0LEN = 1024 
                DB USER_P1_STACK0LEN DUP(0) 
USER_P1_STACK0SEG ENDS 
 
USER_P1TSSSEG SEGMENT PARA USE16  
             DD 0              ;LINK 
             DW USER_P1_STACK0LEN,0      ;0_STACK USER_P1_STACK0LEN 
             DW USER_P1_STACK0_SEL,0 
             DD 0              ;1_STACK 
             DW ?,0 
             DD 0              ;2_STACK 
             DW ?,0 
             DD 0 ;CR3 
             DW USER_P1BEGIN,0 ;EIP 
             DD 0 ;EFLAGS 
             DD 0 ;EAX 
             DD 0 ;ECX 
             DD 0 ;EDX 
             DD 0 ;EBX 
             DW USER_P1_STACK0LEN,0 ;ESP USER_P1_STACK0LEN 
             DD 0 ;EBP 
             DD 0 ;ESI 
             DD 0 ;EDI 
             DW G_VRAM_SEL,0 ;ES 
             DW USER_P1_SEL,0       ;CS 
             DW USER_P1_STACK0_SEL,0 ;SS 
             DW ?,0 ;TOS_DATA_SEL,0      ;DS 
             DW ?,0 ;USER_P1LDT_ASDATA_SEL,0 ;FS 
             DW ?,0  ;GS 
             DW USER_P1LDT_SEL,0 
             DW 0 
             DW $ + 2 
             DB 0FFH 
USER_P1TSSLEN = $  
USER_P1TSSSEG  ENDS      
 
USER_P1LDTSEG SEGMENT 
USER_P1LDT    LABEL BYTE 
USER_P1LDT_NULL      GDT_DESC <>   
USER_P1_LDT_INIT_BEGIN LABEL BYTE 
USER_P1       GDT_DESC <0FFFFH,USER_P1SEG,0,9AH,0,0> ;EXE DPL=0 
USER_P1_SEL    = USER_P1 - USER_P1LDT + 04H 
USER_P1LDT_ASDATA  GDT_DESC  
USER_P1LDT_ASDATA_SEL = USER_P1LDT_ASDATA - USER_P1LDT + 04H 
USER_P1_STACK0   GDT_DESC    ;96H=R/W ,DOWN 
USER_P1_STACK0_SEL = (USER_P1_STACK0 - USER_P1LDT) + 04H 
USER_P1_LDT_INIT_COUNT  = ($ - USER_P1_LDT_INIT_BEGIN)/(SIZE GDT_DESC) 
P1_TO_TOS      GAT_DESC <0,TOS_TSS_SEL,0,85H,0>  ;85h:task gate 
P1_TO_TOS_SEL  = (P1_TO_TOS - USER_P1LDT) + 04H 
USER_P1LDTLEN  = $ - USER_P1LDT 
USER_P1LDTSEG ENDS 
 
 
USER_P1SEG  SEGMENT PARA USE16 
            ASSUME CS:USER_P1SEG,DS:DATA ;,SS:USER_P1_STACKSEG 
USER_P1BEGIN: 
 
            MOV AX,TOS_DATA_SEL 
            MOV DS,AX 
            MOV AH,9 
            MOV CX,0300H  ;15 row 21 column 
            MOV DX,OFFSET user_p_run 
            INT 21H 
 
            ; two segs_call   error becaise two tasks 
            ;MOV AX,04242H 
            ;mov cx,0240H 
            ;CALL16 tos_code_sel,disp_ext_ax 
 
USER_P1_end: 
            DB 0EAH 
            DW OFFSET COMEBACK_TO_TOS 
            DW p1_to_tos_sel 
 
USER_P1LEN   = $  
USER_P1SEG   ENDS