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


;////////////////// use by tos task 
TURN_TO_REAL PROC FAR 
            cli 
            MOV AX,REAL_SEL 
            MOV ES,AX 
            MOV FS,AX 
            MOV GS,AX 
            MOV DS,AX 
            MOV SS,AX 
 
            MOV EAX,CR0 
            AND EAX,0FFFFFFFEH 
            MOV CR0,EAX 
            DB 0EAH 
            DW OFFSET REAL_MODE 
            DW CODE 
            RET 
TURN_TO_REAL ENDP 
DISP_TOS_IN_TOS PROC FAR 
            ; DISP 'COS' 
            MOV AH,24H;07 for white/black 
            mov al,43h 
            mov es:320,ax 
            mov al,4fh 
            mov es:322,ax 
            mov al,53h 
            mov es:324,ax 
            RET 
            ; DISP 'COS' 
DISP_TOS_IN_TOS ENDP 
GINT21H     PROC FAR 
            cli 
            PUSH BX 
            PUSH CX 
            PUSH DX 
            PUSH SI 
            PUSH ES 
            PUSH DS 
 
            CMP AH,4CH 
            JE  GINT21H_4C 
            CMP AH,9 
            JE  GINT21H_9 
            JNE GINT21H_END 
GINT21H_4C: 
            POP DS 
            POP ES 
            POP SI 
            POP DX 
            POP CX 
            POP BX 
 
            db 0eah 
            dw COMEBACK_TO_TOS 
            dw ps_TO_TOS_SEL 
GINT21H_9:             
            MOV AX,G_VRAM_SEL 
            MOV ES,AX 
            MOV SI,DX 
            MOV DX,CX 
            MOV DH,0 
 
            PUSH DX 
            MOV CL,CH 
            MOV CH,0 
            MOV AX,CX 
            MOV CX,160 
            MUL CX 
            MOV BX,AX 
            POP DX 
 
            ADD BX,DX 
            ADD BX,DX 
            MOV AH,24H;07 for white/black 
LGINT21H1:  MOV AL,DS:[SI] 
            CMP AL,'$' 
            JE GINT21H_END 
            MOV ES:[BX],AX 
            ADD BX,2 
            INC SI 
            LOOP LGINT21H1 
GINT21H_END: 
            POP DS 
            POP ES 
            POP SI 
            POP DX 
            POP CX 
            POP BX 
            IRETD 
GINT21H     ENDP 
 
DISP2_16    PROC FAR 
            ;in al code 2 using ah 
            ;out ah:al:code 16 
            mov ah,al 
            shr ah,4 
            cmp ah,9 
            jle disp2_16_1 
            add ah,7     
disp2_16_1: add ah,30h 
            and al,0fh 
            cmp al,9 
            jle disp2_16_2 
            add al,7 
disp2_16_2: add al,30h 
            RET 
DISP2_16    ENDP 
 
DISP_AX     PROC FAR 
            ;in cx:position call inner tos_seg  
            PUSH AX 
            PUSH BX 
            PUSH DX 
            MOV BX,AX 
            mov al,BH 
            CALL DISP2_16 
            mov DS:t_string,ah 
            mov DS:t_string[1],al 
            MOV AL,BL 
            CALL DISP2_16 
            mov DS:t_string[2],ah 
            mov DS:t_string[3],al 
            mov DS:t_string[4],'$' 
            MOV AH,9 
            MOV DX,OFFSET t_string 
            ;add dx,16 
            INT 21H 
            POP DX 
            POP BX 
            POP AX 
            RET 
DISP_AX     ENDP 
 
DISP_EXT_AX PROC FAR 
            ;in cx:position call out tos_seg 
            PUSH AX 
            PUSH BX 
            PUSH DX 
            MOV BX,AX 
            mov al,BH 
            db 9ah 
            dw DISP2_16 
            dw TOS_CODE_SEL 
            mov DS:t_string,ah 
            mov DS:t_string[1],al 
            MOV AL,BL 
            db 9ah 
            dw DISP2_16 
            dw TOS_CODE_SEL 
            mov DS:t_string[2],ah 
            mov DS:t_string[3],al 
            mov DS:t_string[4],'$' 
            MOV AH,9 
            MOV DX,OFFSET t_string 
            ;add dx,16 
            INT 21H 
            POP DX 
            POP BX 
            POP AX 
            RET 
DISP_EXT_AX     ENDP