VGA library (libvga)

Contents

General information

libvga is designed to interface with VGA-compatible display hardware. This library provides both low-level hardware access and high-level functionality to manage VGA display settings, modes, and memory.

Mode Adjustment Flags

Adjustment flags are used to modify the behavior of the VGA display modes.

VGA_HSYNCP: Set for HSync positive polarity.

VGA_VSYNCP: Set for VSync positive polarity.

VGA_CLKDIV: Indicates the pixel clock is divided by 2.

VGA_DBLSCAN: Enables double scanning.

VGA_INTERLACE: Activates interlace mode.

Structures

  • vga_cfg_t - Holds the configuration for a VGA mode, including pixel clock, horizontal and vertical timings, and mode adjustment flags.
typedef struct {
    /* Pixel clock */
    unsigned int clkidx; /* Pixel clock source index */
    unsigned int clk;    /* Pixel clock frequency (kHz) */
    /* Horizontal timings */
    unsigned int hres;   /* Horizontal resolution */
    unsigned int hsyncs; /* Horizontal sync start */
    unsigned int hsynce; /* Horizontal sync end */
    unsigned int htotal; /* Horizontal total pixels */
    /* Vertical timings */
    unsigned int vres;   /* Vertical resolution */
    unsigned int vsyncs; /* Vertical sync start */
    unsigned int vsynce; /* Vertical sync end */
    unsigned int vtotal; /* Vertical total lines */
    /* Mode adjustments */
    unsigned char flags; /* Mode adjustment flags */
} vga_cfg_t;
  • vga_state_t - Represents the state of the VGA, including various registers, color map, text, and font data.
typedef struct {
    unsigned char mr;     /* Miscellaneous register */
    unsigned char cr[25]; /* CRT controller registers */
    unsigned char sr[5];  /* Sequencer registers */
    unsigned char gr[9];  /* Graphics controller registers */
    unsigned char ar[21]; /* Attribute controller registers */
    unsigned char *cmap;  /* Color map */
    unsigned char *text;  /* Plane 0 and 1 text */
    unsigned char *font1; /* Plane 2 font */
    unsigned char *font2; /* Plane 3 font */
} vga_state_t;

Low-Level Interface (Hardware Abstraction Layer)

Memory and Register Access

  • vgahw_mem - Returns the mapped VGA memory address.
void *vgahw_mem(void *hwctx)
  • vgahw_status - Reads from the input status register.
unsigned char vgahw_status(void *hwctx)
  • vgahw_readfcr - Read operations for the feature control register.
unsigned char vgahw_readfcr(void *hwctx)
  • vgahw_writefcr - Write operations for the feature control register.
void vgahw_writefcr(void *hwctx, unsigned char val)
  • vgahw_readmisc - Read operations for the miscellaneous register.
unsigned char vgahw_readmisc(void *hwctx)
  • vgahw_readmisc - Write operations for the miscellaneous register.
void vgahw_writemisc(void *hwctx, unsigned char val)
  • vgahw_readcrtc - Read operations for CRT controller registers.
unsigned char vgahw_readcrtc(void *hwctx, unsigned char reg)
  • vgahw_writecrtc - Write operations for CRT controller registers.
void vgahw_writecrtc(void *hwctx, unsigned char reg, unsigned char val)
  • vgahw_readseq - Read operations for sequencer registers.
unsigned char vgahw_readseq(void *hwctx, unsigned char reg)
  • vgahw_writeseq - Write operations for sequencer registers.
void vgahw_writeseq(void *hwctx, unsigned char reg, unsigned char val)
  • vgahw_readgfx - Read operations for graphics controller registers.
unsigned char vgahw_readgfx(void *hwctx, unsigned char reg)
  • vgahw_writegfx - Write operations for graphics controller registers.
void vgahw_writegfx(void *hwctx, unsigned char reg, unsigned char val)
  • vgahw_readattr - Read operations for attribute controller registers.
unsigned char vgahw_readattr(void *hwctx, unsigned char reg)
  • vgahw_writeattr - Write operations for attribute controller registers.
void vgahw_writeattr(void *hwctx, unsigned char reg, unsigned char val)
  • vgahw_readdac - Read operations for DAC controller registers.
unsigned char vgahw_readdac(void *hwctx, unsigned char reg)
  • vgahw_writedac - Write operations for DAC controller registers.
void vgahw_writedac(void *hwctx, unsigned char reg, unsigned char val)

Color Map Management

  • vgahw_enablecmap - Enables the color map.
void vgahw_enablecmap(void *hwctx)
  • vgahw_disablecmap - Disables the color map.
void vgahw_disablecmap(void *hwctx)

VGA Handle Management

  • vgahw_init - Initializes the VGA handle.
int vgahw_init(void *hwctx)
  • vgahw_done - Destroys the VGA handle.
void vgahw_done(void *hwctx)

High-Level Interface

VGA Register and Mode Management

  • vga_lock - Lock CRTC[0-7] registers.
void vga_lock(void *hwctx)
  • vga_unlock - Unlock CRTC[0-7] registers.
void vga_unlock(void *hwctx)
  • vga_mlock - Protect/release VGA registers and memory during mode switch.
void vga_mlock(void *hwctx)
  • vga_munlock - Protect/release VGA registers and memory during mode switch.
void vga_munlock(void *hwctx)
  • vga_blank - Blanks the screen.
void vga_blank(void *hwctx)
  • vga_unblank - Un blanks the screen.
void vga_unblank(void *hwctx)

VGA State Management

  • vga_savemode - Save the VGA mode.
void vga_savemode(void *hwctx, vga_state_t *state)
  • vga_restoremode - Restore the VGA mode.
void vga_restoremode(void *hwctx, vga_state_t *state)
  • vga_savecmap - Save the VGA color map.
void vga_savecmap(void *hwctx, vga_state_t *state)
  • vga_restorecmap - Restore the VGA color map.
void vga_restorecmap(void *hwctx, vga_state_t *state)
  • vga_savetext - Save VGA fonts and text.
void vga_savetext(void *hwctx, vga_state_t *state)
  • vga_restoretext - Restore VGA fonts and text.
void vga_restoretext(void *hwctx, vga_state_t *state)
  • vga_save - Save all VGA settings.
void vga_save(void *hwctx, vga_state_t *state)
  • vga_restore - Restore all VGA settings.
void vga_restore(void *hwctx, vga_state_t *state)

VGA Configuration

  • vga_initstate - Initializes the VGA state for a given mode configuration.
void vga_initstate(vga_cfg_t *cfg, vga_state_t *state)

Using libvga

To use functions provided by libvga please add the library to the LIBS variable in Makefile and include the required header file.

See also

  1. Phoenix-RTOS core libraries
  2. Phoenix-RTOS Graphics Library
  3. Table of Contents