www.pudn.com > czxtsycx1.zip > PROTECT.SEG


TOS_STACKSEG    SEGMENT PARA USE16      
TOS_STACKLEN    = 4096 
                DB TOS_STACKLEN DUP(0) 
TOS_STACKSEG    ENDS 
USER_P_STACKSEG SEGMENT PARA USE16      
USER_P_STACKLEN = 1024 
                DB USER_P_STACKLEN DUP(0) 
USER_P_STACKSEG ENDS 
 
USER_P1_STACKSEG SEGMENT PARA USE16      
USER_P1_STACKLEN = 1024 
                DB USER_P1_STACKLEN DUP(0) 
USER_P1_STACKSEG ENDS 
USER_P1_STACK0SEG SEGMENT PARA USE16      
USER_P1_STACK0LEN = 1024 
                DB USER_P1_STACK0LEN DUP(0) 
USER_P1_STACK0SEG ENDS 
 
TOS_TSSSEG  SEGMENT PARA USE16 
TOS_TASK    TASKSS <> 
            DB 0FFH 
TOS_TSSLEN  = $ 
TOS_TSSSEG  ENDS 
USER_PsTSSSEG SEGMENT PARA USE16  
USER_Ps_TASK  TASKSS <> 
            DB 0FFH 
USER_PsTSSLEN = $  
USER_PsTSSSEG  ENDS      
 
USER_P1TSSSEG SEGMENT PARA USE16  
             DD 0              ;LINK 
             DD USER_P1_STACK0LEN,0              ;0_STACK 
             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 
             DD USER_P1_STACKLEN ;ESP 
             DD 0 ;EBP 
             DD 0 ;ESI 
             DD 0 ;EDI 
             DW G_VRAM_SEL,0 ;ES 
             DW USER_P1_SEL,0       ;CS 
             DW ?,0 ;USER_P1_STACK_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_PSEG   SEGMENT PARA USE16 
            ASSUME CS:USER_PSEG,DS:DATA,SS:USER_P_STACKSEG 
USER_PBEGIN: 
            MOV AX,TOS_DATA_SEL 
            MOV DS,AX 
 
            ; disp 'A' 
            MOV AX,G_VRAM_SEL 
            MOV ES,AX 
            MOV AH,24H;07 for white/black 
            mov al,41h 
            mov es:322,ax 
            ; disp 'A' 
 
            MOV AH,9 
            MOV CX,0204H ;15 row 21 column 
            MOV DX,OFFSET user_p_run 
            INT 21H 
 
            ; two segs_call 
            MOV AX,04242H 
            mov cx,0240H 
            CALL16 tos_code_sel,disp_ext_ax 
 
            cli 
            MOV AX,REAL_SEL 
            MOV ES,AX 
            MOV FS,AX 
            MOV GS,AX 
            MOV SS,AX 
            MOV DS,AX 
 
            MOV EAX,CR0 
            AND EAX,0FFFFFFFEH 
            MOV CR0,EAX 
            DB 0EAH 
            DW OFFSET PROTECT_RET 
            DW CODE 
USER_PLEN   = $  
USER_PSEG   ENDS 
 
USER_P1SEG   SEGMENT PARA USE16 
            ASSUME CS:USER_P1SEG ;,DS:DATA ;,SS:USER_P1_STACKSEG 
USER_P1BEGIN: 
;jmp USER_P1_end 
 
            ;MOV AX,TOS_DATA_SEL 
            ;MOV DS,AX 
 
            ; disp 'A' 
            MOV AX,G_VRAM_SEL 
            MOV ES,AX 
            MOV AH,24H;07 for white/black 
            mov al,48h 
            mov es:3040,ax 
            ; disp 'A' 
 
jmp USER_P1_end 
 
            MOV AH,9 
            MOV CX,0204H ;15 row 21 column 
            MOV DX,OFFSET user_p_run 
            INT 21H 
 
            ; two segs_call 
            MOV AX,04242H 
            mov cx,0240H 
            CALL16 tos_code_sel,disp_ext_ax 
USER_P1_end: 
            DB 0EAH 
            DW 0  ;OFFSET PROTECT_RET 
            DW p1_to_tos_sel 
 
            cli 
            MOV AX,REAL_SEL 
            MOV ES,AX 
            MOV FS,AX 
            MOV GS,AX 
            MOV SS,AX 
            MOV DS,AX 
 
            MOV EAX,CR0 
            AND EAX,0FFFFFFFEH 
            MOV CR0,EAX 
            DB 0EAH 
            DW 0  ;OFFSET PROTECT_RET 
            DW p1_to_tos_sel 
USER_P1LEN   = $  
USER_P1SEG   ENDS