embox

Форк
0
/
vesa_modes.c 
86 строк · 3.9 Кб
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

14
static 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

25
static 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

35
static 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

66
const struct video_resbpp * video_resbpp_by_vesamode (enum video_vesa_mode mode) {
67
	static_assert(VESA_MODE_MDA_80x25 - VESA_MODE_TEXT_40x25x16_M
68
			== ARRAY_SIZE(vesa_mode_text_descriptions) - 1, "");
69
	if ((mode >= VESA_MODE_TEXT_40x25x16_M) && (mode <= VESA_MODE_MDA_80x25)) {
70
		return &vesa_mode_text_descriptions[mode - VESA_MODE_TEXT_40x25x16_M];
71
	}
72

73
	static_assert(VESA_MODE_VGA_320x200x256 - VESA_MODE_EGA_320x200x16
74
			== ARRAY_SIZE(vesa_mode_vga_descriptions) - 1, "");
75
	if ((mode >= VESA_MODE_EGA_320x200x16) && (mode <= VESA_MODE_VGA_320x200x256)) {
76
		return &vesa_mode_vga_descriptions[mode - VESA_MODE_EGA_320x200x16];
77
	}
78

79
	static_assert(VESA_MODE_SVGA_1600x1200x256 - VESA_MODE_SVGA_640x480x256
80
			== ARRAY_SIZE(vesa_mode_svga_descriptions) - 1, "");
81
	if ((mode >= VESA_MODE_SVGA_640x480x256) && (mode <= VESA_MODE_SVGA_1600x1200x256)) {
82
		return &vesa_mode_svga_descriptions[mode - VESA_MODE_SVGA_640x480x256];
83
	}
84

85
	return NULL;
86
}
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.