#include <dpmi.h>
#include <stdio.h>
#include <go32.h>
#include <string.h>

struct VbeInfoBlock {
  char  VbeSignature[4];
  int   VbeVersion;
  int  *OemStringPtr;
  char  Capabilities[4];
  int  *VideoModePtr;
  int   TotalMemory;
  int   OemSoftwareRev;
  int  *OemVendorNamePtr;
  int  *OemProductNamePtr;
  int  *OemProductRevPtr;
  char  Reserved[222];
  char  OemData[256];
} __attribute__((packed));

int detect_vesa(void) {
  __dpmi_regs regs;
  char vesainfo[512];
  FILE *f;
  int i;

  memcpy(vesainfo, "VBE2", 4);
  regs.x.ax = 0x4F00;
  regs.x.di = __tb&0x0f;
  regs.x.es = (__tb>>4)&0xFFFF;
  dosmemput(&vesainfo, sizeof(vesainfo),__tb);
  __dpmi_int(0x10,&regs);
  dosmemget(__tb, sizeof(vesainfo), &vesainfo);

  f = fopen("dump.txt", "w");
  for(i = 0; i < 512; i++) {
    fputc(vesainfo[i],f);
  }
  fputc('\0', f);
  fclose(f);

/*  printf("VBE sig: %s\n", vesainfo.VbeSignature);
  printf("VBE version: %d\n", vesainfo.VbeVersion);
 printf("VESA info: %s\n", vesainfo.OemData); */

  return 0;
}

int main(int argc, char *argv[]) {
  detect_vesa();

  return 0;
}
