; ********************************************************** ; Name: VESA Graphic Device Interface ; Autor: Peter Kleissner ; Version: 1.00 ; Date: 04.08.2007 21:52 ; last Update: 04.08.2007 21:52 ; see document: ToasterOS.pdf ; ********************************************************** [BITS 32] CPU 386 %define Type_System %include "interface.asm" org VESA_GDI ; VGA, SVGA, VESA Interface port registers ; ; Attribute Controller Registers ; ; Index/Data Register 3C0h [Write] ; Data Register 3C1h [Read] ; ; Indexes of the Attribute Controller Register ; Palette Registers 00h - 0Fh ; Attribute Mode Control Register 10h ; Overscan Color Register 11h ; Color Plane Enable Register 12h ; Horizontal Pixel Panning Register 13h ; Color Select Register 14h ; Miscellanenous 16h [undocumented, na] ; ; Miscellaneous Registers ; ; Miscellaneous Output Register 3C2h [Write] ; Miscellaneous Output Register 3CCh [Read] ; Input Status 0 Register 3C2h [Read] ; Video Subsystem Enable 3C3h (46E8h) ; ; Sequencer Registers ; ; TS Index Register 3C4h [EGA, Write] ; TS Data Register 3C5h [EGA, Write] ; ; Sequence Index Register 3C4h [VGA] ; Sequence Data Register 3C5h [VGA] ; ; Digital-Analog Converter Registers ; ; PEL Mask Register 3C6h [MCGA=0FFh, VGA] ; DAC State Register 3C7h [Read] ; PEL Address Register 3C7h [Write] ; PEL Address Register 3C8h [Write-Mode] ; PEL Data Register 3C9h ; ; Graphics Device Controller Position Registers ; ; Feature Control Register 3CAh [Read] ; Graphics 2 Position Register 3CAh [Write] ; Segment Select Register 3CBh ; Graphics 1 Position Register 3CCh [Write] ; Select Segment Register 3CDh ; ; Graphics Device Controller Registers ; ; Index Register 3CEh [EGA, Write] ; Data Register 3CFh [EGA, Write] ; Address/Index Register 3CEh [VGA] ; Graphics Register 3CFh [VGA, unused, undocumented] ; ; Clear Flip/Flop Registers (for Port 3C2h) ; ; EGA/VGA mono Feature Control Register 3BAh ; VGA graphics Feature Control Register 3DAh ; VBE Interface port registers [bochs, qemu] ; VBE Display Interface I/O Port Index 1CEh ; VBE Display Interface I/O Port Data 1CFh ; ; Indexes: ; ; VBE Display Index Idendification 0 ; VBE Display Index X resolution 1 ; VBE Display Index Y resolution 2 ; VBE Display Index Bits per Pixel 3 ; VBE Display Index Enable 4 ; VBE Display Index Bank 5 ; VBE Display Index Virtual Width 6 ; VBE Display Index Virtual Height 7 ; VBE Display Index X Offset 8 ; VBE Display Index Y Offset 9 ; ; Data Values: ; ; VBE Display Index Disabled 0 ; VBE Display Index Enabled 1 ; VBE Display Index Get Capabilities 2 ; VBE Display Index 8 Bit Digital-Analog-Converter 20h ; VBE Display Index Linear Frame Buffer Enabled 40h ; VBE Display Index No Clear Memory 80h ; ************************************************************* ; Function: Write Index/Value to Attribute Control Register ; ; Input: ; al Index ; ah Data ; ************************************************************* Send_Attribute_Control_Register: ; clear flip/flop [for both Text Mode and graphics Mode] mov bl,al mov dx,3BAh in al,dx mov dx,3DAh in al,dx mov al,bl ; send the Index mov al,bl mov dx,3C0h out dx,al ; send the Data mov al,ah out dx,al ret ; ************************************************************* ; Function: Write Value to Miscellaneous Output Register ; ; Input: ; al Value ; ************************************************************* Send_Miscellaneous_Output_Register: ; send the Data mov dx,3C2h out dx,al ret ; ************************************************************* ; Function: Write Index/Value to Sequencer Register ; ; Input: ; al Index ; ah Data ; ************************************************************* Send_Sequencer_Register: ; if Index = 1 assume EGA (whyever) cmp al,1 jne Send_Sequencer_Register_1 ; send something mov bl,ah mov ax,0100h mov dx,3C4h out dx,ax ; send the Index mov al,1 out dx,al ; send the Data mov al,bl inc dx out dx,al dec dx ; send something else mov ax,0300h out dx,ax ret Send_Sequencer_Register_1: ; send the Index mov dx,3C4h out dx,al ; send the Data mov al,ah inc dx out dx,ah ret ; ************************************************************* ; Function: Write Value to DAC Mask Register ; ; Input: ; al Value ; ************************************************************* Send_DAC_Mask_Register: ; send the Data mov dx,3C6h out dx,al ret ; ************************************************************* ; Function: Write Index/Value to Graphics Controller Register ; ; Input: ; al Index ; ah Data ; ************************************************************* Send_Graphics_Controller_Register: ; send the Index mov dx,3CEh out dx,al ; send the Data mov al,ah inc dx out dx,al ret ; ************************************************************* ; Function: Write Index/Value to CRTC Controller ; ; Input: ; al Index ; ah Data ; ************************************************************* Send_CRTC_Controller: ; send the Index mov dx,3D4h out dx,al ; send the Data mov al,ah inc dx out dx,al ret ; ************************************************************* ; Function: VBE Port I/O write ; ; Input: ; al Index ; ah Data ; ************************************************************* Write_VBE_Port: ; write the Index mov dx,1CEh out dx,al ; write the Data mov al,ah inc dx out dx,al ret