embox
1/*
2* @file
3* @brief
4*
5* @date 11.01.13
6* @author Anton Bondarev
7*/
8
9#include <assert.h>10#include <stddef.h>11#include <lib/libds/array.h>12#include <drivers/video/vesa_modes.h>13
14static const struct video_resbpp vesa_mode_text_descriptions[] = {15{ 40, 25, 4 }, /* 0x0 - VESA_MODE_TEXT_40x25x16_M */16{ 40, 25, 4 }, /* 0x1 - VESA_MODE_TEXT_40x25x16 */17{ 80, 25, 4 }, /* 0x2 - VESA_MODE_TEXT_80x25x16_M */18{ 80, 25, 4 }, /* 0x3 - VESA_MODE_TEXT_80x25x16 */19{ 320, 200, 2 }, /* 0x4 - VESA_MODE_CGA_320x200x4 */20{ 320, 200, 2 }, /* 0x5 - VESA_MODE_CGA_320x200x4_M */21{ 640, 200, 1 }, /* 0x6 - VESA_MODE_CGA_640x200x2 */22{ 80, 25, 0 } /* 0x7 - VESA_MODE_MDA_80x25 */23};24
25static const struct video_resbpp vesa_mode_vga_descriptions[] = {26{ 320, 200, 4 }, /* 0xD - VESA_MODE_EGA_320x200x16 */27{ 640, 200, 4 }, /* 0xE - VESA_MODE_EGA_640x200x16 */28{ 640, 350, 0 }, /* 0xF - VESA_MODE_EGA_640x350 */29{ 640, 350, 4 }, /* 0x10 - VESA_MODE_VGA_640x350x4 */30{ 640, 480, 1 }, /* 0x11 - VESA_MODE_VGA_640x480x1 */31{ 640, 480, 4 }, /* 0x12 - VESA_MODE_VGA_640x480x16 */32{ 320, 200, 8 } /* 0x13 - VESA_MODE_VGA_320x200x256 */33};34
35static const struct video_resbpp vesa_mode_svga_descriptions[] = {36{ 640, 480, 8 }, /* 0x101 - VESA_MODE_SVGA_640x480x256 */37{ 800, 600, 4 }, /* 0x102 - VESA_MODE_SVGA_800x600x16 */38{ 800, 600, 8 }, /* 0x103 - VESA_MODE_SVGA_800x600x256 */39{ 1024, 768, 4 }, /* 0x104 - VESA_MODE_SVGA_1024x768x16 */40{ 1024, 768, 8 }, /* 0x105 - VESA_MODE_SVGA_1024x768x256 */41{ 1280, 1024, 4 }, /* 0x106 - VESA_MODE_SVGA_1280x1024x16 */42{ 1280, 1024, 8 }, /* 0x107 - VESA_MODE_SVGA_1280x1024x256 */43{ 80, 60, 0 }, /* 0x108 - VESA_MODE_SVGA_TEXT_80x60 */44{ 132, 25, 0 }, /* 0x109 - VESA_MODE_SVGA_TEXT_132x25 */45{ 132, 43, 0 }, /* 0x10A - VESA_MODE_SVGA_TEXT_132x43 */46{ 132, 50, 0 }, /* 0x10B - VESA_MODE_SVGA_TEXT_132x50 */47{ 132, 60, 0 }, /* 0x10C - VESA_MODE_SVGA_TEXT_132x60 */48{ 320, 200, 15 }, /* 0x10D - VESA_MODE_SVGA_320x200x32K */49{ 320, 200, 16 }, /* 0x10E - VESA_MODE_SVGA_320x200x64K */50{ 320, 200, 24 }, /* 0x10F - VESA_MODE_SVGA_320x200x16M */51{ 640, 480, 15 }, /* 0x110 - VESA_MODE_SVGA_640x480x32K */52{ 640, 480, 16 }, /* 0x111 - VESA_MODE_SVGA_640x480x64K */53{ 640, 480, 24 }, /* 0x112 - VESA_MODE_SVGA_640x480x16M */54{ 800, 600, 15 }, /* 0x113 - VESA_MODE_SVGA_800x600x32K */55{ 800, 600, 16 }, /* 0x114 - VESA_MODE_SVGA_800x600x64K */56{ 800, 600, 24 }, /* 0x115 - VESA_MODE_SVGA_800x600x16M */57{ 1024, 768, 15 }, /* 0x116 - VESA_MODE_SVGA_1024x768x32K */58{ 1024, 768, 16 }, /* 0x117 - VESA_MODE_SVGA_1024x768x64K */59{ 1024, 768, 24 }, /* 0x118 - VESA_MODE_SVGA_1024x768x16M */60{ 1280, 1024, 15 }, /* 0x119 - VESA_MODE_SVGA_1280x1024x32K */61{ 1280, 1024, 16 }, /* 0x11A - VESA_MODE_SVGA_1280x1024x64K */62{ 1280, 1024, 24 }, /* 0x11B - VESA_MODE_SVGA_1280x1024x16M */63{ 1600, 1200, 8 } /* 0x11C - VESA_MODE_SVGA_1600x1200x256 */64};65
66const struct video_resbpp * video_resbpp_by_vesamode (enum video_vesa_mode mode) {67static_assert(VESA_MODE_MDA_80x25 - VESA_MODE_TEXT_40x25x16_M68== ARRAY_SIZE(vesa_mode_text_descriptions) - 1, "");69if ((mode >= VESA_MODE_TEXT_40x25x16_M) && (mode <= VESA_MODE_MDA_80x25)) {70return &vesa_mode_text_descriptions[mode - VESA_MODE_TEXT_40x25x16_M];71}72
73static_assert(VESA_MODE_VGA_320x200x256 - VESA_MODE_EGA_320x200x1674== ARRAY_SIZE(vesa_mode_vga_descriptions) - 1, "");75if ((mode >= VESA_MODE_EGA_320x200x16) && (mode <= VESA_MODE_VGA_320x200x256)) {76return &vesa_mode_vga_descriptions[mode - VESA_MODE_EGA_320x200x16];77}78
79static_assert(VESA_MODE_SVGA_1600x1200x256 - VESA_MODE_SVGA_640x480x25680== ARRAY_SIZE(vesa_mode_svga_descriptions) - 1, "");81if ((mode >= VESA_MODE_SVGA_640x480x256) && (mode <= VESA_MODE_SVGA_1600x1200x256)) {82return &vesa_mode_svga_descriptions[mode - VESA_MODE_SVGA_640x480x256];83}84
85return NULL;86}
87