syslinux/com32/modules/vesainfo.c
<<
>>
Prefs
   1/*
   2 * vesainfo.c
   3 *
   4 * Dump information about what VESA graphics modes are supported.
   5 */
   6
   7#include <string.h>
   8#include <stdio.h>
   9#include <console.h>
  10#include <com32.h>
  11#include <inttypes.h>
  12#include "../lib/sys/vesa/vesa.h"
  13
  14/* Wait for a keypress */
  15static void wait_key(void)
  16{
  17    char ch;
  18    while (fread(&ch, 1, 1, stdin) == 0) ;
  19}
  20
  21static void print_modes(void)
  22{
  23    static com32sys_t rm;
  24    struct vesa_general_info *gi;
  25    struct vesa_mode_info *mi;
  26    uint16_t mode, *mode_ptr;
  27    int lines;
  28
  29    /* Allocate space in the bounce buffer for these structures */
  30    gi = &((struct vesa_info *)__com32.cs_bounce)->gi;
  31    mi = &((struct vesa_info *)__com32.cs_bounce)->mi;
  32
  33    gi->signature = VBE2_MAGIC; /* Get VBE2 extended data */
  34    rm.eax.w[0] = 0x4F00;       /* Get SVGA general information */
  35    rm.edi.w[0] = OFFS(gi);
  36    rm.es = SEG(gi);
  37    __intcall(0x10, &rm, &rm);
  38
  39    if (rm.eax.w[0] != 0x004F) {
  40        printf("No VESA BIOS detected\n");
  41        return;
  42    } else if (gi->signature != VESA_MAGIC) {
  43        printf("VESA information structure has bad magic, trying anyway...\n");
  44    }
  45
  46    printf("VBE version %d.%d\n"
  47           "Mode   attrib h_res v_res bpp layout rpos gpos bpos\n",
  48           (gi->version >> 8) & 0xff, gi->version & 0xff);
  49
  50    lines = 1;
  51
  52    mode_ptr = GET_PTR(gi->video_mode_ptr);
  53
  54    while ((mode = *mode_ptr++) != 0xFFFF) {
  55        if (++lines >= 23) {
  56            wait_key();
  57            lines = 0;
  58        }
  59
  60        rm.eax.w[0] = 0x4F01;   /* Get SVGA mode information */
  61        rm.ecx.w[0] = mode;
  62        rm.edi.w[0] = OFFS(mi);
  63        rm.es = SEG(mi);
  64        __intcall(0x10, &rm, &rm);
  65
  66        /* Must be a supported mode */
  67        if (rm.eax.w[0] != 0x004f)
  68            continue;
  69
  70        printf("0x%04x 0x%04x %5u %5u %3u %6u %4u %4u %4u\n",
  71               mode, mi->mode_attr, mi->h_res, mi->v_res, mi->bpp,
  72               mi->memory_layout, mi->rpos, mi->gpos, mi->bpos);
  73    }
  74}
  75
  76int main(void)
  77{
  78    openconsole(&dev_rawcon_r, &dev_stdcon_w);
  79
  80    print_modes();
  81    return 0;
  82}
  83
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.