4 * Dump information about what VESA graphics modes are supported.
12 #include "../lib/sys/vesa/vesa.h"
14 /* Wait for a keypress */
15 static void wait_key(void)
18 while (fread(&ch
, 1, 1, stdin
) == 0)
22 static void print_modes(void)
25 struct vesa_general_info
*gi
;
26 struct vesa_mode_info
*mi
;
27 uint16_t mode
, *mode_ptr
;
30 /* Allocate space in the bounce buffer for these structures */
31 gi
= &((struct vesa_info
*)__com32
.cs_bounce
)->gi
;
32 mi
= &((struct vesa_info
*)__com32
.cs_bounce
)->mi
;
34 gi
->signature
= VBE2_MAGIC
; /* Get VBE2 extended data */
35 rm
.eax
.w
[0] = 0x4F00; /* Get SVGA general information */
36 rm
.edi
.w
[0] = OFFS(gi
);
38 __intcall(0x10, &rm
, &rm
);
40 if ( rm
.eax
.w
[0] != 0x004F ) {
41 printf("No VESA BIOS detected\n");
43 } else if ( gi
->signature
!= VESA_MAGIC
) {
44 printf("VESA information structure has bad magic, trying anyway...\n");
47 printf("VBE version %d.%d\n"
48 "Mode attrib h_res v_res bpp layout rpos gpos bpos\n",
49 (gi
->version
>> 8) & 0xff, gi
->version
& 0xff);
53 mode_ptr
= GET_PTR(gi
->video_mode_ptr
);
55 while ((mode
= *mode_ptr
++) != 0xFFFF) {
61 rm
.eax
.w
[0] = 0x4F01; /* Get SVGA mode information */
63 rm
.edi
.w
[0] = OFFS(mi
);
65 __intcall(0x10, &rm
, &rm
);
67 /* Must be a supported mode */
68 if ( rm
.eax
.w
[0] != 0x004f )
71 printf("0x%04x 0x%04x %5u %5u %3u %6u %4u %4u %4u\n",
72 mode
, mi
->mode_attr
, mi
->h_res
, mi
->v_res
, mi
->bpp
,
73 mi
->memory_layout
, mi
->rpos
, mi
->gpos
, mi
->bpos
);
79 openconsole(&dev_rawcon_r
, &dev_stdcon_w
);