VESA_CHECK1: db "VESA: get modes!",0 VESA_CHECK2: db "VESA: get info on target mode!",0 VESA_CHECK3: db "VESA: switching to target mode!",0 VESA_PAUSE: db "[Press any key to switch to VESA 0x114]",0 VesaSetup: pusha ;VESA: get all available vesa modes! mov ax,0 ; set target address in es:di (0:offset) mov es,ax mov di,VESA_MODES mov ax,0x4f00 ;vesa function: Get Controller Info int 0x10 ; call the interrupt to get the data from the bios! vesa_err: mov bx, VESA_CHECK1 call print_string call print_nextline cmp ax,0x004f je vesa_ok jmp vesa_err vesa_ok: ; ;VESA: get vesa info on mode of interest mov ax,0 ; set target address in es:di (0:offset) mov es,ax mov di,VESA_MODE_INFO mov ax,0x4f01 ;vesa function: Get Mode Info mov cx,VESA_MODE_SELECT int 0x10 ; call the interrupt to get the data from the bios! vesa_err2: mov bx, VESA_CHECK2 call print_string call print_nextline cmp ax,0x004f je vesa_ok2 jmp vesa_err2 vesa_ok2: ;show press any key ; call print_nextline ; mov bx, VESA_PAUSE ; call print_string ; call print_nextline ;preempt keyboard buffer next_key: mov ah,0x1 ;get scnacode from kb (non-blocking) int 0x16 jnz get_key ; nothing to preempt jmp wait_key get_key: mov ah,0 ;get key from buffer int 0x16 ; mov al,ah ; call print_hex_byte ; call print_nextline jmp next_key ;;;;;;;;;;;;;;;;; wait_key: ; mov ah,0 ; block waiting for keyboard scancode ; int 0x16 ;VESA: finally switch to the mode of choice! mov ax,0x4f02 ;vesa function: Set Mode mov bx,VESA_MODE_SELECT int 0x10 cmp ax,0x004f je vesa_ok3 vesa_err3: mov bx, VESA_CHECK3 call print_string call print_nextline jmp vesa_err3 vesa_ok3: popa ret