www.pudn.com > czxtsycx1.zip > V86_USED.OK


COS_INT08   PROC FAR 
            PUSH EAX 
            PUSH EBX 
            PUSH ECX 
            PUSH EDX 
            PUSH GS 
            PUSH FS 
            PUSH ES 
            PUSH DS 
            MOV  EAX,ESP 
            ADD  EAX,36 
            PUSH EAX          ;ESP 
            PUSH SS           ;ss 
            PUSH ESI 
            PUSH EDI 
            PUSH EBP 
            MOV AX,V86_DATA_GDT_SEL 
            MOV FS,AX 
            DEC BYTE PTR FS:[TIME_COUNT] 
            MOV AL,0 
            CMP BYTE PTR FS:[TIME_COUNT],AL 
            JNZ INT08_11 
            ; display time 
            MOV BYTE PTR FS:[TIME_COUNT],18 
            MOV BX,OFFSET COS_TIME 
            ADD BX,7 
            INC BYTE PTR FS:[BX] 
            CMP BYTE PTR FS:[BX],3AH   ;SECOND 1 
            JNZ INT08_2 
            MOV BYTE PTR FS:[BX],30H 
            DEC BX 
            INC BYTE PTR FS:[BX] 
            CMP BYTE PTR FS:[BX],36H   ;SECOND 10 
            JNZ INT08_2 
            MOV BYTE PTR FS:[BX],30H 
            DEC BX 
            DEC BX 
            INC BYTE PTR FS:[BX] 
            ; 
            CMP BYTE PTR FS:[BX],3AH   ;MONUTE 1 
            JNZ INT08_2 
            MOV BYTE PTR FS:[BX],30H 
            DEC BX 
            INC BYTE PTR FS:[BX] 
            CMP BYTE PTR FS:[BX],36H   ;MINUTE 10 
            JNZ INT08_2 
            MOV BYTE PTR FS:[BX],30H 
            DEC BX 
            DEC BX 
            INC BYTE PTR FS:[BX] 
            ; 
            CMP WORD PTR FS:[BX-1],3234H   ;HOUR 24 
            JNZ INT08_3 
            MOV WORD PTR FS:[BX-1],3030H 
            JMP INT08_2 
INT08_3:    CMP WORD PTR FS:[BX],3AH      ;HOUR 1 
            JNZ INT08_2 
            MOV BYTE PTR FS:[BX],30H 
            DEC BX 
            INC BYTE PTR FS:[BX] 
INT08_2: 
            MOV AX,G_VRAM_SEL 
            MOV ES,AX 
            MOV AH,41H   
            MOV BX,OFFSET COS_TIME 
            MOV AL,BYTE PTR FS:[BX]      ;HOUR10 
            MOV WORD PTR ES:[3982],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;HOUR10 
            MOV WORD PTR ES:[3984],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;: 
            MOV WORD PTR ES:[3986],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;MINUTE10 
            MOV WORD PTR ES:[3988],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;MINUTE1 
            MOV WORD PTR ES:[3990],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;: 
            MOV WORD PTR ES:[3992],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;SECOND10 
            MOV WORD PTR ES:[3994],AX 
            INC BX 
            MOV AL,BYTE PTR FS:[BX]      ;SECOND1 
            MOV WORD PTR ES:[3996],AX 
            ; display time 
INT08_1: 
            MOV AX,V_TOS_DATA_SEL 
            MOV DS,AX 
            CMP BYTE PTR DS:[NEED_RESCHED],1 
            JNZ INT08_11 
 
;jmp int08_11 
;;;;;;1.    save to TSS of PCB 
            MOV AX,V_PCB_SEL  
            MOV FS,AX 
            MOV EBP,DS:[CURRENT] 
;mov eax,ebp 
;call disp_ax 
            ; next for return to the procedure of before time_interrupt 
            POP EAX ;EBP 
            MOV FS:[EBP+138+60],EAX 
            POP EAX ;EDI 
            MOV FS:[EBP+138+68],EAX 
            POP EAX ;ESI 
            MOV FS:[EBP+138+64],EAX 
            POP AX  ;;;;;;;;;;;;;;;;;;;;;;;;SS 
            MOV FS:[EBP+138+80],EAX 
            POP EAX ;;;;;;;;;;;;;;;;;;;;;;;;ESP 
            MOV FS:[EBP+138+56],EAX 
            POP AX ;DS 
            MOV FS:[EBP+138+84],AX 
            POP AX ;ES 
            MOV FS:[EBP+138+72],AX 
            POP AX ;FS 
            MOV FS:[EBP+138+88],AX 
            POP AX ;GS 
            MOV FS:[EBP+138+92],AX 
            POP EDX 
            MOV FS:[EBP+138+48],EDX 
            POP ECX 
            MOV FS:[EBP+138+44],ECX 
            POP EBX 
            MOV FS:[EBP+138+52],EBX 
            POP EAX 
            MOV FS:[EBP+138+40],EAX 
            POP EAX 
            MOV FS:[EBP+138+32],EAX    ;EIP 
            POP EAX 
            MOV FS:[EBP+138+76],EAX    ;CS 
            POP EAX 
            MOV FS:[EBP+138+36],EAX    ;EFLAG 
;;;;;;1.    save to TSS of PCB 
            MOV AL,20H 
            OUT 20H,AL 
            MOV AX,V_TOS_CODE_SEL    ;turn to schedule 
            MOVZX EAX,AX 
            PUSH EAX 
            MOV EAX,OFFSET SCHED 
            PUSH EAX 
            RETD 
 
INT08_11: 
 
MOV AX,V_TOS_DATA_SEL 
MOV DS,AX 
CMP DS:[CURRENT],0 
JE  s1233 
 
;mov eax,DS:[CURRENT] 
;call disp_ax 
 
            POP EBP 
            POP EDI 
            POP ESI 
            POP AX  ;SS          ;pop ss&esp:error 
            POP EAX ;ESP 
            POP DS 
            POP ES 
            POP FS 
            POP GS 
            POP EDX 
            POP ECX 
            POP EBX 
 
            MOV AL,20H 
            OUT 20H,AL 
;test 
mov eax,0BFffffh  ;ok  
s123: 
dec eax 
;jnz s123 
            POP EAX 
            IRETD 
s1233: 
            POP EBP 
            POP EDI 
            POP ESI 
            POP SS 
            POP EAX ;ESP         ;pop ss&esp:error 
            POP AX  ;DS 
            POP ES 
            POP FS 
            POP GS 
            POP EDX 
            POP ECX 
            POP EBX 
 
            MOV AL,20H 
            OUT 20H,AL 
            POP EAX 
            IRETD 
COS_INT08   ENDP 
 
 
COS_TIME_INIT   PROC FAR 
      PUSH FS 
      MOV AX,V86_DATA_GDT_SEL 
      MOV FS,AX 
      MOV AX,G_VRAM_SEL 
      MOV ES,AX 
      MOV AH,02H  
      INT 8AH 
      MOV BX,OFFSET COS_TIME 
      MOV AH,41H   
      MOV AL,DH 
      AND AL,00001111B 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX+7],AL 
      MOV AL,DH 
      SHR AL,4 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX+6],AL 
      MOV AL,CL 
      AND AL,00001111B 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX+4],AL 
      MOV AL,CL 
      SHR AL,4 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX+3],AL 
      MOV AL,CH 
      AND AL,00001111B 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX+1],AL 
      MOV AL,CH 
      SHR AL,4 
      ADD AL,30H 
      MOV BYTE PTR FS:[BX],AL 
      POP FS 
      RET 
COS_TIME_INIT ENDP 
 
COS_DOSINT  PROC FAR 
            ; 10H02/03 13H02/03 16H10 21H09 21H0A 
COS_DOSINT10: 
            PUSH EBP 
            MOV BP,10H      ;interrupt number 
            JMP DO_DOSINTX 
COS_DOSINT13: 
            PUSH EBP 
            MOV BP,13H      ;interrupt number 
            JMP DO_DOSINTX 
COS_DOSINT16: 
            PUSH EBP 
            MOV BP,16H      ;interrupt number  read 1 charater 
            JMP DO_DOSINTX 
COS_DOSINT1A: 
            PUSH EBP 
            MOV BP,1AH      ;interrupt number REAL TIMER 
            JMP DO_DOSINTX 
COS_DOSINT21: 
            PUSH EBP 
            MOV BP,21H       
            JMP DO_DOSINTX 
DO_DOSINTX: 
            PUSH EAX 
            PUSH EBX 
            PUSH ECX 
            PUSH EDX 
            PUSH ESI 
            PUSH EDI 
            PUSH DS          ;ADD 
            PUSH ES          ;ADD 
            PUSH FS          ;ADD 
            PUSH GS 
 
            PUSH AX 
            MOV AX,V86_DATA_GDT_SEL 
            MOV GS,AX 
            POP AX 
            MOV GS:G_INT,BP 
            MOV GS:V86_AX,AX 
            MOV GS:V86_BX,BX 
            MOV GS:V86_CX,CX 
            MOV GS:V86_DX,DX 
            MOV GS:V86_ES,ES 
            MOV GS:V86_DS,DS 
 
            CMP BP,13H       
            JE  BIOS13H 
            CMP BP,16H       
            JE  BIOS16H 
            CMP BP,21H       
            JE  DOS21H 
            JMP COSINT_A  ;10H,1AH NOTHING TO DO 
BIOS13H:    CMP AH,03H    ;13H02 NOTHING TO DO 
            JE  BIOS13H03   
            JMP COSINT_A   
BIOS13H03:  JMP COSINT_A   
 
BIOS16H:    CMP AH,00H    ;16H00 NOTHING TO DO 
            JE  BIOS16H00   
            JMP COSINT_A   
BIOS16H00:  JMP COSINT_A   
 
DOS21H:     CMP AH,09H 
            JE DOS21H09 
            CMP AH,4CH 
            JE  DOS21H4C 
            CMP AH,4EH 
            JE  DOS21H4E 
            JMP COSINT_A  ;21H0A NOTHING TO DO 
DOS21H09:    
            MOV SI,DX 
            XOR DI,DI 
DOS21H09_1: MOV AH,DS:[SI] 
            MOV GS:V86_BUFFER[DI],AH 
            CMP AH,24H 
            JE DOS21H09_END 
            INC SI 
            INC DI 
            CMP DI,4096                ;int 09H one time 4096 bytes 
            JL DOS21H09_1 
DOS21H09_END: 
            MOV AH,24H 
            MOV GS:V86_BUFFER[4096],AH 
            MOV CX,DI 
            MOV GS:V86_CX,CX          ;len of string 
            JMP COSINT_A   
            ;*******************************enter TO V86 TASK 
            ;*******************************enter TO V86 TASK 
COSINT_A:    
            ; FOLLOWS:INITIAL  
            MOV AX,V86TSS_ASDATA_SEL 
            MOV DS,AX 
 
            MOV DS:[4],V86_STACK0LEN 
            MOV DS:[32],V86BEGIN 
            MOV DS:[36],3000H 
            MOV DS:[38],2 
            MOV DS:[56],V86_STACK3LEN 
            MOV DS:[60],0 
            MOV DS:[76],V86CODESEG 
            MOV DS:[80],V86_STACK3SEG 
            MOV DS:[84],V86_DATASEG 
            MOV AX,V86_DATA_GDT_SEL 
            MOV DS,AX 
            SLDT DS:CURRENT_LDT 
            STR DS:CURRENT_TR 
            MOV AX,V_TOS_DATA_SEL 
            MOV DS,AX 
            MOV AX,SS 
            MOV DS:CURRENT_SS,AX 
            LIDT FWORD PTR DS:V86_IDTSIZE 
            MOV BX,V86LDT_SEL 
            LLDT BX 
 
            PUSH ES 
            PUSH FS 
             
            MOV AX,REAL_SEL 
            MOV ES,AX 
            MOV FS,AX 
            MOV GS,AX 
            MOV DS,AX 
            MOV SS,AX 
            jmp COSINT_A_jmp 
COSINT_A_jmp:    
            DB 0EAH  ;CALL=9AH  ;JMP=0EAH  ; 
            DW 0;V86BEGIN 
            DW V86TSS_SEL 
FROM_V86:    
            MOV AX,V_TOS_DATA_SEL 
            MOV DS,AX 
            MOV AX,DS:CURRENT_SS 
            MOV SS,AX 
            LIDT FWORD PTR DS:IDTSIZE 
            POP FS 
            POP ES 
             
;  push gs 
;  mov ebx,01fffffh 
;df123: 
;  MOV AX,G_VRAM_SEL 
;  MOV gS,AX 
;  MOV AL,'-' 
;  MOV AH,41H   
;  MOV WORD PTR gS:[804],AX 
;  dec ebx 
;  jnz df123 
;  pop gs 
; test 
 
            MOV AX,V86_DATA_GDT_SEL  ;END_DEAL 
            MOV GS,AX 
 
            MOV AX,GS:G_INT 
            CMP AX,10H 
            JE  G10H_END 
            CMP AX,13H 
            JE  G13H_END 
            CMP AX,16H 
            JE  G16H_END 
            CMP AX,1AH 
            JE  G1AH_END 
            CMP AX,21H 
            JE  G21H_END 
            JMP COS_DOSINT_END 
G10H_END:   MOV AX,GS:V86_AX 
            CMP AH,03H 
            JE G10H03_END 
            JMP COS_DOSINT_END 
G10H03_END: 
            MOV BP,SP 
            MOV AX,GS:V86_DX_O 
            MOV WORD PTR [BP+16],AX     ;OLD=10 
            JMP COS_DOSINT_END 
G13H_END:   MOV AX,GS:V86_AX 
            CMP AH,02H 
            JE G13H02_END 
            JMP COS_DOSINT_END 
G13H02_END: MOV BX,GS:V86_BX 
            MOV DX,GS:V86_ES 
            PUSH DS 
            MOV DS,DX 
            MOV CX,512 
            MOV AX,OFFSET V86_BUFFER 
            MOV SI,AX 
G13H02_LOOP:  
            MOV  AL,GS:[SI]    ;V86_BUFFER 
            MOV  DS:[BX],AL       ;USER BUFFER 
            INC  BX 
            INC SI 
            LOOP G13H02_LOOP 
            POP  DS 
            JMP COS_DOSINT_END 
 
G16H_END:   MOV AX,GS:V86_AX_O 
            JMP COS_DOSINT_END 
G1AH_END:    
            MOV CX,GS:V86_CX_O 
            MOV DX,GS:V86_DX_O 
            ; 
            POP GS 
            POP FS 
            POP ES 
            POP DS 
            POP EDI 
            POP ESI 
            POP EBP            ;POP EDX  REMAINS DX 
            POP EBP            ;POP ECX  REMAINS CX 
            POP EBX 
            POP EAX             
            POP EBP 
sti 
            IRETD 
            ; 
G21H_END:   MOV AX,GS:V86_AX 
            CMP AH,0AH 
            JE  G21H0A_END 
            JMP COS_DOSINT_END 
G21H0A_END: MOV BX,GS:V86_DX 
            MOV DX,GS:V86_DS 
            PUSH DS 
            MOV DS,DX            ;DS:BX  USER_BUF 
            MOV AX,OFFSET V86_BUFFER ;GS:SI  V86_BUFFER 
            MOV SI,AX 
            INC SI 
            MOV CL,GS:[SI] 
            INC BX               ;SECOND FOR USER_BUF 
            MOV CH,0 
            MOV DS:[BX],CL 
            INC SI 
            INC BX 
            CMP CL,0 
            JLE G21H0A_0 
G21H0A_LOOP:  
            MOV  AL,GS:[SI]       ;V86_BUFFER 
            MOV  DS:[BX],AL       ;USER BUFFER 
            INC  BX 
            INC  SI 
            LOOP G21H0A_LOOP 
G21H0A_0: 
            MOV  DS:[BX],0       ;ADDITION 'NULL' 
            POP  DS 
            JMP  COS_DOSINT_END 
DOS21H4C: 
            POP GS 
            POP FS 
            POP ES 
            POP DS 
            POP EDI 
            POP ESI 
            POP EDX 
            POP ECX 
            POP EBX 
            POP EBP            ;POP EAX  REMAINS AX 
            POP EBP 
            jmp DOS21H4C1 
DOS21H4C1:   
            DB 0EAH  ;CALL=9AH  ;JMP=0EAH  ; 
            DW 0;V86BEGIN 
            DW V_TOS_TSS_SEL 
             
DOS21H4E: 
            CALL DO_DOS21H4E 
 
COS_DOSINT_END:             
;mmmmmmmmmmm 
;  push gs 
;  mov ebx,02fffffh 
;dff123: 
;  MOV AX,G_VRAM_SEL 
;  MOV gS,AX 
;  MOV AL,'+' 
;  MOV AH,41H   
;  MOV WORD PTR gS:[804],AX 
;  dec ebx 
;  jnz dff123 
;  pop gs 
;mmmmmmmmmmmm 
 
            POP GS 
            POP FS 
            POP ES 
            POP DS 
            POP EDI 
            POP ESI 
            POP EDX 
            POP ECX 
            POP EBX 
            POP EBP            ;POP EAX  REMAINS AX 
            POP EBP 
            IRETD 
            ;*******************************enD V86 TASK 
            ;*******************************enD V86 TASK 
COS_DOSINT  ENDP 
;test 
  ;PUSH ES 
  ;PUSH AX 
  ;MOV AX,G_VRAM_SEL 
  ;MOV ES,AX 
  ;MOV AL,'z' 
  ;MOV AH,41H   
  ;MOV WORD PTR ES:[804],AX 
  ;POP AX 
  ;POP ES 
; test 
 
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm 
COS_INT09   PROC FAR 
            PUSH EAX 
            PUSH EBX 
            PUSH ECX 
            PUSH EDX 
            PUSH GS 
            PUSH FS 
            PUSH ES 
            PUSH DS 
            ;PUSH ESP 
            ;PUSH SS 
            PUSH ESI 
            PUSH EDI 
            PUSH EBP 
 
            MOV AX,G_VRAM_SEL 
            MOV ES,AX 
            MOV AH,41H   
            MOV AL,'G' 
            MOV WORD PTR ES:[3996],AX 
             
            POP EBP 
            POP EDI 
            POP ESI 
            ;POP SS 
            ;POP ESP 
            POP DS 
            POP ES 
            POP FS 
            POP GS 
            POP EDX 
            POP ECX 
            POP EBX 
tt1239: 
;            MOV AL,20H 
;            OUT 20H,AL 
tt12329: 
            POP EAX 
            IRETD 
COS_INT09   ENDP 
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm