;============================================================================= ; vesa_04.asm ; Test if the video mode is present ; Algorithm ; V1: Test if VBE is supported ; V2: Test if desired mode is supported ; V3: Test if there is enough memory available ; V4: Set new mode, having save the previous ; V5: Get the sizes and buffer ;(C)I don't take any responsibility for the use of this program ; Zedr0n -- connection closed ;============================================================================= ;============================================================================= ; .Com declaration ;============================================================================= .MODEL TINY ;============================================================================= ; Data definition/declaration ;============================================================================= .DATA ;----------------------------------------------------------------------------- ; Equals ;----------------------------------------------------------------------------- MODE EQU 101H ;----------------------------------------------------------------------------- ; Constants ;----------------------------------------------------------------------------- ERR_1 DB "VBE not supported!",'$' ERR_2 DB "Video mode not supported!",'$' ERR_3 DB "Not enough video memory!",'$' ERR_4 DB "Can't set the video mode",'$' ;----------------------------------------------------------------------------- ; File variables ;----------------------------------------------------------------------------- ERRORS DW OFFSET ERR_1,OFFSET ERR_2,OFFSET ERR_3,OFFSET ERR_4 OLDMODE DB ? VSIZE DW ? HSIZE DW ? ; VBUFF DW ? ; GRUNIT DW ? ; VMC DD ? BUFFER DB 256 DUP(?) ;----------------------------------------------------------------------------- ; Stack variables ;----------------------------------------------------------------------------- .CODE .386 ORG 100h ;============================================================================= ; Code segment ;============================================================================= START: XOR SI,SI V1: MOV AX,4F00H MOV DI,OFFSET BUFFER INT 10h CMP AX,4FH JNZ EXIT V2: INC SI MOV AX,4F01H MOV CX,MODE INT 10H CMP AX,4FH JNZ EXIT V3: INC SI TEST BYTE PTR [DI],1 JZ EXIT V4: ; INC SI ; MOV AX,0F00H ; INT 10H ; MOV OLDMODE,AL MOV BX,MODE ; MOV AX,4F02H ; INT 10H ; CMP AX,4FH ; JNZ EXIT ; V5: ; MOV AX,[DI+08H] ; MOV VBUFF,AX ; MOV AX,[DI+12H] ; MOV HSIZE,AX ; MOV AX,[DI+14H] ; MOV VSIZE,AX ; MOV CL,BYTE PTR [DI+4] ; MOV AX,64 ; DIV CL ; ax=64/cl MOV GRUNIT,AX ; PUSH AX ; PUSH DX MOV DL,AL MOV AH,02H ADD DL,30H ; INT 21H XOR AH,AH ; INT 16H POP DX ; POP AX MOV EAX,[DI+0CH] ; MOV VMC,EAX ; MOV AX,03H ; INT 10H RET EXIT: MOV AH,09H SHL SI,1 LEA BX,ERRORS MOV DX,[BX][SI] INT 21H MOV AX,03H ; INT 10H ; RET end start