.MODEL COMPACT .286 .CODE BUFFER_SVGA DB 256 DUP (0) PUBLIC _SET_VESA _SET_VESA PROC NEAR PUSH BP MOV BP,SP PUSH DI PUSH ES VER_SVGA: MOV AX,CS MOV ES,AX MOV DI,OFFSET CS:BUFFER_SVGA MOV AX,4F00h INT 10h MOV AX,2 CMP WORD PTR CS:[BUFFER_SVGA+0],"EV" JNE NO_VESA CMP WORD PTR CS:[BUFFER_SVGA+2],"AS" JE SI_SVGA NO_VESA: MOV AX,0 JMP NO_SVGA SI_SVGA: MOV AH,4Fh MOV AL,02h MOV BX,[BP+4] INT 10h MOV AX,1 NO_SVGA: POP ES POP DI POP BP RET _SET_VESA ENDP PUBLIC _CHANGE_BANK _CHANGE_BANK PROC NEAR PUSH BP MOV BP,SP MOV AH,4Fh MOV AL,05h MOV BX,0 ;ventana de acceso MOV DX,[BP+4] ;bank INT 10h POP BP RET _CHANGE_BANK ENDP PUBLIC _APAGA_PANTALLA _APAGA_PANTALLA PROC NEAR PUSH BP MOV BP,SP PUSH SI PUSH DS MOV CH,0 MOV CL,0 SIGUE_APAGANDO: MOV DX,3C8h MOV AL,0 OUT DX,AL MOV DX,3DAh ESPERA_FIN_RETR:IN AL,DX TEST AL,00001000b JNZ ESPERA_FIN_RETR ESPERA_INI_RETR:IN AL,DX TEST AL,00001000b JZ ESPERA_INI_RETR MOV DX,3C9h LDS SI,[BP+4] OTRO_DAC: MOV AL,[SI] SUB AL,CH JGE DEC_ROJO MOV AL,0 DEC_ROJO: OUT DX,AL MOV AL,[SI+1] SUB AL,CH JGE DEC_VERDE MOV AL,0 DEC_VERDE: OUT DX,AL MOV AL,[SI+2] SUB AL,CH JGE DEC_AZUL MOV AL,0 DEC_AZUL: OUT DX,AL ADD SI,3 INC CL JNZ OTRO_DAC INC CH CMP CH,00111111b JL SIGUE_APAGANDO POP DS POP SI POP BP RET _APAGA_PANTALLA ENDP PUBLIC _ENCIENDE_PANTALLA _ENCIENDE_PANTALLA PROC NEAR PUSH BP MOV BP,SP PUSH SI PUSH DS MOV CH,00111111b MOV CL,0 SIGUE_ENCENDIEN:MOV DX,3C8h MOV AL,0 OUT DX,AL MOV DX,3DAh ESPERA_FIN_RET: IN AL,DX TEST AL,00001000b JNZ ESPERA_FIN_RET ESPERA_INI_RET: IN AL,DX TEST AL,00001000b JZ ESPERA_INI_RET MOV DX,3C9h LDS SI,[BP+4] OTR_DAC: MOV AL,[SI] SUB AL,CH JGE INC_ROJO MOV AL,0 INC_ROJO: OUT DX,AL MOV AL,[SI+1] SUB AL,CH JGE INC_VERDE MOV AL,0 INC_VERDE: OUT DX,AL MOV AL,[SI+2] SUB AL,CH JGE INC_AZUL MOV AL,0 INC_AZUL: OUT DX,AL ADD SI,3 DEC CL JNZ OTR_DAC CMP CH,00000000b JZ FIN_ENCENDER DEC CH JMP SIGUE_ENCENDIEN FIN_ENCENDER: POP DS POP SI POP BP RET _ENCIENDE_PANTALLA ENDP END