CD_OUT_SRC/SUPERVGA.ASM
2021-09-03 17:50:32 +02:00

164 lines
3.2 KiB
NASM

.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