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


 
;程序文件:\TC\G\DOSEXE_P.ASM 清单 
; base on g_page.asm 
.MODEL HUGE 
.386P 
include \tc\g\include\g_def.asm   ; 描述符结构、常量、宏定义,清单见程序1-1 
include \tc\g\include\cos_def.asm ; 描述符结构、常量、宏定义,清单见程序1-1 
include \tc\g\include\tos_seg.asm ; 定义TOS堆栈段TOS_STACKSEG与TOS任务状态段TOS_TSSSEG 
                                  ; 清单见程序1-2 
include \tc\g\include\ps_seg.asm  ; 
TOS_CODESEG SEGMENT PARA USE16    ; TOS操作系统的代码段 
            ASSUME CS:TOS_CODESEG,DS:DATA,SS:TOS_STACKSEG 
TOS_BEGIN:    
            COS_INIT    ; TOS任务初始处理,在包含\tc\g\include\g_def.asm文件中 
            ;CALL V_SEL_SETUP       ;setup v_sel  CUT OFF 
            ;***********move to 2M  
            CALL SEGS_MOV_2M ;all tos_segs(6 segs) --->2M idt_m 
            CALL PGT_INIT 
            COS_PAGE_INIT   ;in cos_def 
            ; HAVE ENTERED PAGE_MODE 
 
            ;setup cursor 
            MOV BH,0 
            MOV DX,0400H  ;4 ROW 0 COLUMN 
            MOV AH,2 
            INT 80H  ;=dos 10h 
 
            MOV AX,V_TOS_DATA_SEL 
            MOV DS,AX 
            MOV DX,OFFSET V86_10H02 
            MOV AH,9H 
            INT 21H 
 
            ;setup cursor 
            MOV BH,0 
            MOV DX,0500H  ;5 ROW 0 COLUMN 
            MOV AH,2 
            INT 80H  ;=dos 10h 
 
            MOV AX,V_TOS_DATA_SEL 
            MOV DS,AX 
            MOV DX,OFFSET V86_10H09 
            MOV AH,9H 
            INT 21H 
 
            ;display "CCCCCCCCCC" 
            MOV BH,0 
            MOV AL,43H   ; char "C" 
            MOV BL,41H 
            MOV CX,10    ;write 10 chars "CCCCCCCC" 
            MOV AH,9 
            INT 80H  ;=dos 10h 
 
            ;MOV AX,G_VRAM_SEL 
            ;MOV DS,AX 
            ;MOV AL,41H  ;"A" 
            ;MOV AH,41H 
            ;MOV DS:1782,AX 
 
COMEBACK_TO_TOS:             ; 21h---4ch return 
            JMP PAGE_END 
ERR_EXEFIL: 
            MOV AH,9 
            MOV CX,1100H  
            MOV DX,OFFSET ERR_EXEFILE 
            INT 21H     
PAGE_END:   ;*********************     should have  next 3 lines    
            DB 0EAH 
            DW OFFSET TURN_TO_REAL_MODE 
            DW TOS_CODE_SEL 
TURN_TO_REAL_MODE: 
            MOV EAX,CR0 ;  ;关闭分页模式 
            AND EAX,7FFFFFFFH 
            MOV CR0,EAX 
            JMP SHORT FROM_PAGE 
FROM_PAGE: 
            CALL TURN_TO_REAL      ;返回实模式,在\tc\g\include\tos_used.asm;中 
            include \tc\g\include\tos_used.asm ; 
            include \tc\g\include\COS_USED.ASM ; 
            include \tc\g\include\V86_USED.ASM ; 
 
DO_DOS21H4E PROC FAR 
 
            RET 
DO_DOS21H4E ENDP 
TOS_CODELEN = $ 
SCHED       PROC FAR 
            RET 
SCHED       ENDP 
TOS_CODESEG ENDS 
            include \tc\g\include\COS_GDT.asm 
            include \tc\g\include\COS_DATA.asm 
            include \tc\g\include\COS_IDT.asm 
            include \tc\g\include\v86_seg.asm 
 
;*************************************************next DOS 
CODE        SEGMENT PARA USE16 ;PUBLIC 'CODE'  ;实模式代码段 
 
            ASSUME CS:CODE,DS:DATA,SS:STACK 
MAIN        PROC FAR 
START:       
            REAL_PAGE_INIT  ;in cos_def.asm  
            CALL V86_IDT_INIT  ;in V86_REAL.ASM 
            ;在\tc\g\include\g_def.asm中,见程序1-1 
TURN_TO_PROTECT_MODE: 
            CALL GDT_INIT       ;初始化GDT表,在\tc\g\include\g_real.asm中,见程序1-2 
 
            MOV AX,V86LDTSEG 
            CALL USER_Px_LDT_INIT ;in px_ldt.asm 
 
            cli 
            TURN_TO_PROTECT_PAGE   
            ;*****进入TOS任务,在\TC\G\INCLUDE\G_DEF.ASM中,见程序1-1 
REAL_MODE:   
            TO_DOS      ;回到DOS 在\TC\G\INCLUDE\G_DEF.ASM中,见程序1-1 
MAIN        ENDP 
            include \tc\g\include\g_real.asm 
            include \tc\g\include\V86_REAL.ASM      ;见程序1-1 
            include \tc\g\include\a20.asm      ;见程序1-1 
            include \tc\g\include\PX_LDT.ASM      ;见程序1-1 
tsrline     label byte 
CODE        ENDS 
            include \tc\g\include\DOS_DATA.ASM      ;见程序1-1 
END START