#ifndef VESA_H #define VESA_H #include #include // VESA BIOS Extension 2.0 Function Calls #define VBE_FUNCTION_SET_MODE 0x4F02 #define VBE_FUNCTION_GET_MODE_INFO 0x4F01 #define VBE_FUNCTION_GET_CONTROLLER_INFO 0x4F00 #define VBE_FUNCTION_SET_DISPLAY_START 0x4F05 // VESA Mode Information Structure (VBE 2.0) typedef struct { uint16_t ModeAttributes; // Mode attributes uint8_t WinAAttributes; // Window A attributes uint8_t WinBAttributes; // Window B attributes uint16_t WinGranularity; // Window granularity uint16_t WinSize; // Window size uint16_t WinASegment; // Window A segment address uint16_t WinBSegment; // Window B segment address uint32_t WinFuncPtr; // Function pointer for window uint16_t BytesPerScanLine; // Bytes per scanline uint16_t XResolution; // Horizontal resolution in pixels uint16_t YResolution; // Vertical resolution in pixels uint8_t XCharSize; // Character cell width uint8_t YCharSize; // Character cell height uint8_t NumberOfPlanes; // Number of memory planes uint8_t BitsPerPixel; // Bits per pixel uint8_t NumberOfBanks; // Number of banks uint8_t MemoryModel; // Memory model type uint8_t BankSize; // Bank size in kB uint8_t NumberOfImagePages; // Number of image pages uint8_t Reserved0; // Reserved uint8_t RedMaskSize; // Red mask size uint8_t RedFieldPosition; // Red field position uint8_t GreenMaskSize; // Green mask size uint8_t GreenFieldPosition; // Green field position uint8_t BlueMaskSize; // Blue mask size uint8_t BlueFieldPosition; // Blue field position uint8_t RsvdMaskSize; // Reserved mask size uint8_t RsvdFieldPosition; // Reserved field position uint8_t DirectColorModeInfo; // Direct color mode info uint32_t PhysBasePtr; // Physical base address of the linear framebuffer uint32_t OffScreenMemOff; // Offset to off-screen memory uint16_t OffScreenMemSize; // Size of off-screen memory uint8_t Reserved1[206]; // Reserved } __attribute__((packed)) vbe_mode_info_t; // VESA Controller Information typedef struct { uint8_t VESAVersion[2]; // VESA version uint32_t OEMStringPtr; // Pointer to OEM string uint8_t Capabilities[4]; // Capabilities of the controller uint32_t VideoModePtr; // Pointer to supported video modes uint16_t TotalMemory; // Total video memory (in 64KB) uint8_t Reserved[4]; // Reserved } __attribute__((packed)) vbe_controller_info_t; // Function Prototypes bool vesa_set_mode(uint16_t mode); bool vesa_get_mode_info(uint16_t mode, vbe_mode_info_t* info); bool vesa_get_controller_info(vbe_controller_info_t* info); void* vesa_get_framebuffer(void); void vesa_clear_screen(uint32_t color); #endif // VESA_H