summaryrefslogtreecommitdiffstats
path: root/ddcprobe/svgamodes.c
diff options
context:
space:
mode:
authornalin <nalin>1999-07-18 09:33:22 +0000
committernalin <nalin>1999-07-18 09:33:22 +0000
commit1aaf90f2821e49c141078f804f5fd695cbb07b98 (patch)
tree4703ffcf9b6d6daebe847fb270d2dc41cc7c6eb3 /ddcprobe/svgamodes.c
parent94514a08d74dc0cf09ee92dec8ad937a18924fdf (diff)
downloadanaconda-1aaf90f2821e49c141078f804f5fd695cbb07b98.tar.gz
anaconda-1aaf90f2821e49c141078f804f5fd695cbb07b98.tar.xz
anaconda-1aaf90f2821e49c141078f804f5fd695cbb07b98.zip
move to using vbe functions
Diffstat (limited to 'ddcprobe/svgamodes.c')
-rw-r--r--ddcprobe/svgamodes.c171
1 files changed, 63 insertions, 108 deletions
diff --git a/ddcprobe/svgamodes.c b/ddcprobe/svgamodes.c
index 8ca345848..5902db60d 100644
--- a/ddcprobe/svgamodes.c
+++ b/ddcprobe/svgamodes.c
@@ -20,45 +20,16 @@
int main(int argc, char **argv)
{
- struct vm86_struct info;
struct vbe_info *vbe_info = NULL;
- struct mode_info *mode_info = NULL;
- unsigned char *memory = NULL;
+ struct vbe_mode_info *mode_info = NULL;
u_int16_t *mode_list = NULL;
float vesa_version;
- /* Get a copy of the low megabyte for use as an address space. */
- memory = vm86_ram_alloc();
- if(memory == MAP_FAILED) {
- printf("Couldn't allocate needed memory!\n");
- exit(0);
- }
-
- /* Set up registers for a real-mode interrupt call. */
- memset(&info, 0, sizeof(info));
- info.regs.eax = 0x4f00;
- info.regs.es = 0x4000;
- info.regs.edi = 0x0000;
- info.regs.ss = 0x9000;
- info.regs.esp = 0x0000;
- info.flags = 0;
-
- /* Call the BIOS. */
- memset(&memory[info.regs.es * 16 + info.regs.edi], 0, 1024);
- bioscall(0x10, &info.regs, memory);
-
/* Interpret results. */
- vbe_info = (struct vbe_info*) &memory[info.regs.es*16 + info.regs.edi];
+ vbe_info = vbe_get_vbe_info();
- if((info.regs.eax & 0xff) != 0x4f) {
+ if(vbe_info == NULL) {
printf("VESA BIOS Extensions not detected.\n");
- vm86_ram_free(memory);
- exit(0);
- }
-
- if((info.regs.eax & 0xffff) != 0x004f) {
- printf("VESA Get SuperVGA Information request failed.\n");
- vm86_ram_free(memory);
exit(0);
}
@@ -70,8 +41,7 @@ int main(int argc, char **argv)
vesa_version = (vbe_info->version[1]) + (vbe_info->version[0]) / 10.0;
/* List supported standard modes. */
- mode_list = (u_int16_t*) &memory[vbe_info->mode_list.addr.seg * 16 +
- vbe_info->mode_list.addr.ofs];
+ mode_list = vbe_info->mode_list.list;
if(*mode_list != 0xffff) {
printf("Supported standard modes:\n");
}
@@ -86,89 +56,74 @@ int main(int argc, char **argv)
known_vesa_modes[j].colors);
}}
printf("\n");
- memset(&info, 0, sizeof(info));
- info.regs.eax = 0x4f01;
- info.regs.ecx = *mode_list;
- info.regs.es = 0x5000;
- info.regs.edi = 0x0000;
- info.regs.ss = 0x9000;
- info.regs.esp = 0x0000;
- info.flags = 0;
- memset(&memory[info.regs.es * 16 + info.regs.edi], 0, 1024);
- bioscall(0x10, &info.regs, memory);
- mode_info = (struct mode_info*) &memory[info.regs.es * 16 +
- info.regs.edi];
- if((info.regs.eax & 0xff) != 0x4f) {
+ mode_info = vbe_get_mode_info(*mode_list);
+ if(mode_info == NULL) {
printf("Get mode information not supported.\n");
- vm86_ram_free(memory);
exit(0);
}
- if((info.regs.eax & 0xffff) == 0x004f) {
- if(mode_info->w && mode_info->h && mode_info->bpp) {
- printf("\tBIOS reports %dx%d, %d bpp",
- mode_info->w, mode_info->h,
- mode_info->bpp);
+ if(mode_info->w && mode_info->h && mode_info->bpp) {
+ printf("\tBIOS reports %dx%d, %d bpp",
+ mode_info->w, mode_info->h,
+ mode_info->bpp);
+ }
+ if(mode_info->bytes_per_scanline) {
+ printf(", %d bytes per scanline.",
+ mode_info->bytes_per_scanline);
+ }
+ printf("\n");
+ printf("\t%s, ", mode_info->mode_attributes & 0x01 ?
+ "Supported" : "Not supported");
+ printf("%s ", mode_info->mode_attributes & 0x08 ?
+ "Color" : "Monochrome");
+ printf("%s.\n", mode_info->mode_attributes & 0x10 ?
+ "Graphics" : "Text");
+ if(vesa_version >= 2.0) {
+ printf("\tLFB mode %s.\n",
+ mode_info->mode_attributes & 0x80 ?
+ "supported" : "not supported");
+ printf("\t%sVGA compatible.\n",
+ mode_info->mode_attributes & 0x20 ?
+ "" : "Not ");
+ }
+ printf("\tMemory model: ");
+ switch(mode_info->memory_model) {
+ case memory_model_text: {
+ printf("text.\n");
+ break;
+ }
+ case memory_model_cga: {
+ printf("CGA.\n");
+ break;
+ }
+ case memory_model_hgc: {
+ printf("Hercules.\n");
+ break;
}
- if(mode_info->bytes_per_scanline) {
- printf(", %d bytes per scanline.",
- mode_info->bytes_per_scanline);
+ case memory_model_ega16: {
+ printf("EGA.\n");
+ break;
}
- printf("\n");
- printf("\t%s, ", mode_info->mode_attributes & 0x01 ?
- "Supported" : "Not supported");
- printf("%s ", mode_info->mode_attributes & 0x08 ?
- "Color" : "Monochrome");
- printf("%s.\n", mode_info->mode_attributes & 0x10 ?
- "Graphics" : "Text");
- if(vesa_version >= 2.0) {
- printf("\tLFB mode %s.\n",
- mode_info->mode_attributes & 0x80 ?
- "supported" : "not supported");
- printf("\t%sVGA compatible.\n",
- mode_info->mode_attributes & 0x20 ?
- "" : "Not ");
+ case memory_model_packed_pixel: {
+ printf("packed-pixel.\n");
+ break;
}
- printf("\tMemory model: ");
- switch(mode_info->memory_model) {
- case memory_model_text: {
- printf("text.\n");
- break;
- }
- case memory_model_cga: {
- printf("CGA.\n");
- break;
- }
- case memory_model_hgc: {
- printf("Hercules.\n");
- break;
- }
- case memory_model_ega16: {
- printf("EGA.\n");
- break;
- }
- case memory_model_packed_pixel: {
- printf("packed-pixel.\n");
- break;
- }
- case memory_model_sequ256: {
- printf("sequential 256.\n");
- break;
- }
- case memory_model_direct_color: {
- printf("direct color (24-bit).\n");
- break;
- }
- case memory_model_yuv: {
- printf("YUV.\n");
- break;
- }
- default : {
- printf("unknown/OEM.\n");
- }
+ case memory_model_sequ256: {
+ printf("sequential 256.\n");
+ break;
+ }
+ case memory_model_direct_color: {
+ printf("direct color.\n");
+ break;
+ }
+ case memory_model_yuv: {
+ printf("YUV.\n");
+ break;
+ }
+ default : {
+ printf("unknown/OEM.\n");
}
}
}
-
return 0;
}