+ if( gpVesa_BiosState->AX != 0x004F ) {\r
+ Log_Error("VBE", "Getting info on mode 0x%x failed (AX=0x%x)",\r
+ Code, gpVesa_BiosState->AX);\r
+ return 1;\r
+ }\r
+ return 0;\r
+}\r
+\r
+\r
+void VBE_int_FillMode_Int(tVesa_Mode *Mode, const tVesa_CallModeInfo *vbeinfo)\r
+{\r
+ #if 1\r
+ #define S_LOG(s, fld, fmt) LOG(" ."#fld" = "fmt, (s).fld)\r
+ LOG("vbeinfo[0x%x] = {", Mode->code);\r
+ S_LOG(*vbeinfo, attributes, "0x%02x");\r
+ S_LOG(*vbeinfo, winA, "0x%02x");\r
+ S_LOG(*vbeinfo, winB, "0x%02x");\r
+ S_LOG(*vbeinfo, granularity, "0x%04x");\r
+ S_LOG(*vbeinfo, winsize, "0x%04x");\r
+ S_LOG(*vbeinfo, segmentA, "0x%04x");\r
+ S_LOG(*vbeinfo, segmentB, "0x%04x");\r
+ LOG(" .realFctPtr = %04x:%04x", vbeinfo->realFctPtr.seg, vbeinfo->realFctPtr.ofs);\r
+ S_LOG(*vbeinfo, pitch, "0x%04x");\r
+\r
+ // -- Extended\r
+ S_LOG(*vbeinfo, Xres, "%i");\r
+ S_LOG(*vbeinfo, Yres, "%i");\r
+ S_LOG(*vbeinfo, Wchar, "%i");\r
+ S_LOG(*vbeinfo, Ychar, "%i");\r
+ S_LOG(*vbeinfo, planes, "%i");\r
+ S_LOG(*vbeinfo, bpp, "%i");\r
+ S_LOG(*vbeinfo, banks, "%i");\r
+ S_LOG(*vbeinfo, memory_model, "%i");\r
+ S_LOG(*vbeinfo, bank_size, "%i");\r
+ S_LOG(*vbeinfo, image_pages, "%i");\r
+ // -- VBE 1.2+\r
+ LOG(" Red = %i bits at %i", vbeinfo->red_mask, vbeinfo->red_position );\r
+ LOG(" Green = %i bits at %i", vbeinfo->green_mask, vbeinfo->green_position);\r
+ LOG(" Blue = %i bits at %i", vbeinfo->blue_mask, vbeinfo->blue_position );\r
+ #if 0\r
+ Uint8 rsv_mask, rsv_position;\r
+ Uint8 directcolor_attributes;\r
+ #endif\r
+ // --- VBE 2.0+\r
+ S_LOG(*vbeinfo, physbase, "0x%08x");\r
+ S_LOG(*vbeinfo, offscreen_ptr, "0x%08x");\r
+ S_LOG(*vbeinfo, offscreen_size_kb, "0x%04x");\r
+ // --- VBE 3.0+\r
+ S_LOG(*vbeinfo, lfb_pitch, "0x%04x");\r
+ S_LOG(*vbeinfo, image_count_banked, "%i");\r
+ S_LOG(*vbeinfo, image_count_lfb, "%i");\r
+ LOG("}");\r
+ #endif\r
+\r
+ Mode->flags = FLAG_POPULATED;\r
+ if( !(vbeinfo->attributes & 1) )\r
+ {\r
+ #if DEBUG\r
+ Log_Log("VBE", "0x%x - not supported", Mode->code);\r
+ #endif\r
+ Mode->width = 0;\r
+ Mode->height = 0;\r
+ Mode->bpp = 0;\r
+ return ;\r
+ }\r
+\r
+ // Parse Info\r
+ Mode->flags |= FLAG_VALID;\r
+ switch( vbeinfo->attributes & 0x90 ) // LFB, Graphics\r
+ {\r
+ case 0x00: // Banked, Text\r
+ case 0x10: // Banked, Graphics\r
+ case 0x80: // Linear, Text (?)\r
+ Mode->width = 0;\r
+ Mode->height = 0;\r
+ Mode->bpp = 0;\r
+ return ;\r
+ case 0x90:\r
+ Mode->flags |= FLAG_LFB;\r
+ Mode->framebuffer = vbeinfo->physbase;\r
+ Mode->fbSize = vbeinfo->Yres*vbeinfo->pitch;\r
+ break;\r
+ }\r