GitOS
Operating system exercise
Loading...
Searching...
No Matches
vbe_graphics.hpp
Go to the documentation of this file.
1//
2// Created by Pawel Reich on 1/23/25.
3//
4
5#pragma once
6#include <stdint.h>
8
10
11class VBEGraphics : public Graphics {
12public:
13 static Graphics* the();
14
15 virtual void draw_pixel(uint32_t x, uint32_t y, uint32_t color);
16
17 virtual void draw_char(uint32_t x, uint32_t y, char c, uint32_t color);
18
19 virtual void draw_string(uint32_t x, uint32_t y, const char* str, uint32_t color);
20
21 virtual void print_char(char c);
22
23 virtual void print_char_color(char c, TEXT_MODE_COLOR color);
24
25 virtual void print_string(const char* str);
26 virtual void print_string_color(const char* str, TEXT_MODE_COLOR color);
27
28 virtual void clear_screen();
29
30 virtual void set_cursor(uint32_t x, uint32_t y);
31 virtual uint32_t get_cursor_x();
32 virtual uint32_t get_cursor_y();
34 virtual void set_text_color(TEXT_MODE_COLOR color);
35
36 void scroll_screen(int i);
37 bool is_vbe() const;
38
39
40 uint32_t get_rrggbb_color(TEXT_MODE_COLOR color);
41 uint32_t get_framebuffer_size() const;
42 uint32_t get_bpp() const;
43 uint32_t get_height() const;
44 uint32_t get_width() const;
45 uint8_t *get_framebuffer() const;
46
47 void setup(uint8_t* framebuffer, uint32_t bpp, uint32_t width, uint32_t height);
48 void mount_fb();
49
50private:
51
52 uint8_t* FRAMEBUFFER;
53 uint32_t WIDTH;
54 uint32_t HEIGHT;
55 uint32_t BPP;
56 uint32_t PITCH;
57
58 bool m_setup = false;
59
60 MemoryFS* m_memoryfs;
61
62 const uint32_t FONT_SCALE = 1;
63
64 uint32_t current_x = 0, current_y = 0;
65 TEXT_MODE_COLOR current_color = WHITE;
66
67 const uint8_t font[128][8] = {
68 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x20
69 {0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ASCII 0x21
70 {0b00000000, 0b00000000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x22
71 {0b00000000, 0b00110000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01100000, 0b10100000}, // ASCII 0x23
72 {0b00000000, 0b00000000, 0b00100000, 0b11111000, 0b10100000, 0b01110000, 0b00101000, 0b11111000}, // ASCII 0x24
73 {0b00000000, 0b00000000, 0b11100000, 0b10100000, 0b11110000, 0b01111000, 0b00101000, 0b00111000}, // ASCII 0x25
74 {0b00000000, 0b00000000, 0b00111000, 0b00100000, 0b00110000, 0b01011000, 0b01010000, 0b00111000}, // ASCII 0x26
75 {0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x27
76 {0b00000000, 0b00010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00010000}, // ASCII 0x28
77 {0b00000000, 0b01000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01000000}, // ASCII 0x29
78 {0b00000000, 0b00000000, 0b10101000, 0b01110000, 0b01110000, 0b10101000, 0b00000000, 0b00000000}, // ASCII 0x2A
79 {0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000}, // ASCII 0x2B
80 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000}, // ASCII 0x2C
81 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00000000, 0b00000000}, // ASCII 0x2D
82 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000}, // ASCII 0x2E
83 {0b00000000, 0b00000000, 0b00010000, 0b00100000, 0b00100000, 0b01100000, 0b01000000, 0b01000000}, // ASCII 0x2F
84 {0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01101000, 0b01001000, 0b01001000, 0b00110000}, // ASCII 0x30
85 {0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // ASCII 0x31
86 {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b00001000, 0b00010000, 0b00100000, 0b01111000}, // ASCII 0x32
87 {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b00001000, 0b00110000, 0b00001000, 0b01111000}, // ASCII 0x33
88 {0b00000000, 0b00000000, 0b00010000, 0b00110000, 0b00110000, 0b01010000, 0b01111000, 0b00010000}, // ASCII 0x34
89 {0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01110000, 0b00001000, 0b00001000, 0b01110000}, // ASCII 0x35
90 {0b00000000, 0b00000000, 0b00111000, 0b01100000, 0b01000000, 0b01111000, 0b01001000, 0b00111000}, // ASCII 0x36
91 {0b00000000, 0b00000000, 0b01111000, 0b00001000, 0b00010000, 0b00010000, 0b00010000, 0b00100000}, // ASCII 0x37
92 {0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b00110000, 0b01001000, 0b01111000}, // ASCII 0x38
93 {0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01111000, 0b00001000, 0b00011000, 0b01110000}, // ASCII 0x39
94 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00100000}, // ASCII 0x3A
95 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b00100000}, // ASCII 0x3B
96 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00001000, 0b01110000, 0b01100000, 0b00011000}, // ASCII 0x3C
97 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11110000, 0b00000000, 0b11110000, 0b00000000}, // ASCII 0x3D
98 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01000000, 0b00111000, 0b00011000, 0b01100000}, // ASCII 0x3E
99 {0b00000000, 0b00000000, 0b01110000, 0b00110000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ASCII 0x3F
100 {0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01011000, 0b01011000, 0b01000000}, // ASCII 0x40
101 {0b00000000, 0b00000000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b01111000, 0b01001000}, // ASCII 0x41
102 {0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000, 0b01001000, 0b01111000}, // ASCII 0x42
103 {0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b00111000}, // ASCII 0x43
104 {0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b01110000}, // ASCII 0x44
105 {0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01000000, 0b01111000, 0b01000000, 0b01111000}, // ASCII 0x45
106 {0b00000000, 0b00000000, 0b01111000, 0b01000000, 0b01000000, 0b01111000, 0b01000000, 0b01000000}, // ASCII 0x46
107 {0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01000000, 0b01011000, 0b01001000, 0b00111000}, // ASCII 0x47
108 {0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01111000, 0b01001000, 0b01001000}, // ASCII 0x48
109 {0b00000000, 0b00000000, 0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // ASCII 0x49
110 {0b00000000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b01110000}, // ASCII 0x4A
111 {0b00000000, 0b00000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01010000, 0b01001000}, // ASCII 0x4B
112 {0b00000000, 0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01000000, 0b01111000}, // ASCII 0x4C
113 {0b00000000, 0b00000000, 0b01001000, 0b01111000, 0b01111000, 0b01111000, 0b01001000, 0b01001000}, // ASCII 0x4D
114 {0b00000000, 0b00000000, 0b01001000, 0b01101000, 0b01101000, 0b01011000, 0b01011000, 0b01001000}, // ASCII 0x4E
115 {0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000}, // ASCII 0x4F
116 {0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01111000, 0b01000000, 0b01000000, 0b01000000}, // ASCII 0x50
117 {0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000}, // ASCII 0x51
118 {0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01110000, 0b01011000, 0b01001000, 0b01000100}, // ASCII 0x52
119 {0b00000000, 0b00000000, 0b00111000, 0b01000000, 0b01110000, 0b00011000, 0b00001000, 0b01111000}, // ASCII 0x53
120 {0b00000000, 0b00000000, 0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // ASCII 0x54
121 {0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b01001000, 0b00110000}, // ASCII 0x55
122 {0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // ASCII 0x56
123 {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b01010000, 0b01010000, 0b01010000}, // ASCII 0x57
124 {0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b01001000}, // ASCII 0x58
125 {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // ASCII 0x59
126 {0b00000000, 0b00000000, 0b01111000, 0b00010000, 0b00010000, 0b00100000, 0b00100000, 0b01111000}, // ASCII 0x5A
127 {0b00000000, 0b00110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00110000}, // ASCII 0x5B
128 {0b00000000, 0b00000000, 0b10000000, 0b01000000, 0b01000000, 0b01100000, 0b00100000, 0b00100000}, // ASCII 0x5C
129 {0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01100000}, // ASCII 0x5D
130 {0b00000000, 0b00000000, 0b01100000, 0b10010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x5E
131 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x5F
132 {0b00000000, 0b00000000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ASCII 0x60
133 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01111000, 0b01001000, 0b01111000}, // ASCII 0x61
134 {0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000}, // ASCII 0x62
135 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01000000, 0b01000000, 0b00110000}, // ASCII 0x63
136 {0b00000000, 0b00001000, 0b00001000, 0b00001000, 0b00111000, 0b01001000, 0b01001000, 0b00111000}, // ASCII 0x64
137 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01111000, 0b01000000, 0b00111000}, // ASCII 0x65
138 {0b00000000, 0b00011000, 0b00100000, 0b00100000, 0b01111000, 0b00100000, 0b00100000, 0b00100000}, // ASCII 0x66
139 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01001000, 0b01001000, 0b00111000}, // ASCII 0x67
140 {0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01111000, 0b01001000, 0b01001000, 0b01001000}, // ASCII 0x68
141 {0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b01110000}, // ASCII 0x69
142 {0b00000000, 0b00100000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000}, // ASCII 0x6A
143 {0b00000000, 0b01000000, 0b01000000, 0b01000000, 0b01011000, 0b01110000, 0b01110000, 0b01011000}, // ASCII 0x6B
144 {0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // ASCII 0x6C
145 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111100, 0b01010100, 0b01010100, 0b01010100}, // ASCII 0x6D
146 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01001000, 0b01001000, 0b01001000}, // ASCII 0x6E
147 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00110000, 0b01001000, 0b01001000, 0b00110000}, // ASCII 0x6F
148 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01110000, 0b01001000, 0b01001000, 0b01110000}, // ASCII 0x70
149 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00111000, 0b01001000, 0b01001000, 0b00111000}, // ASCII 0x71
150 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01110000, 0b01000000, 0b01000000, 0b01000000}, // ASCII 0x72
151 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b01110000, 0b00001000, 0b01111000}, // ASCII 0x73
152 {0b00000000, 0b00000000, 0b00000000, 0b00100000, 0b01111000, 0b00100000, 0b00100000, 0b00111000}, // ASCII 0x74
153 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b01001000, 0b01001000, 0b01111000}, // ASCII 0x75
154 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00110000}, // ASCII 0x76
155 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b10001000, 0b10101000, 0b01110000, 0b01010000}, // ASCII 0x77
156 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00110000, 0b00110000, 0b01111000}, // ASCII 0x78
157 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b00110000, 0b00110000, 0b00100000}, // ASCII 0x79
158 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00110000, 0b00100000, 0b01111000}, // ASCII 0x7A
159 {0b00000000, 0b00110000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00110000}, // ASCII 0x7B
160 {0b00000000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // ASCII 0x7C
161 {0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01100000}, // ASCII 0x7D
162 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01111000, 0b00000000, 0b00000000}, // ASCII 0x7E
163 };
164};
uint32_t width
Definition BMPFile.hpp:1
uint32_t height
Definition BMPFile.hpp:2
uint8_t bpp
Definition GitBoot.hpp:6
uint32_t framebuffer
Definition GitBoot.hpp:14
Definition graphics.hpp:9
TEXT_MODE_COLOR
Definition graphics.hpp:14
@ WHITE
Definition graphics.hpp:30
Definition MemoryFS.hpp:15
Definition vbe_graphics.hpp:11
void mount_fb()
Definition vbe_graphics.cpp:178
virtual void draw_char(uint32_t x, uint32_t y, char c, uint32_t color)
Definition vbe_graphics.cpp:44
virtual void print_char(char c)
Definition vbe_graphics.cpp:77
virtual uint32_t get_cursor_x()
Definition vbe_graphics.cpp:70
virtual TEXT_MODE_COLOR get_current_color()
Definition vbe_graphics.cpp:73
virtual void clear_screen()
Definition vbe_graphics.cpp:133
uint32_t get_rrggbb_color(TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:183
void scroll_screen(int i)
Definition vbe_graphics.cpp:121
virtual void print_string(const char *str)
Definition vbe_graphics.cpp:113
uint32_t get_width() const
Definition vbe_graphics.cpp:157
virtual void set_cursor(uint32_t x, uint32_t y)
Definition vbe_graphics.cpp:128
uint32_t get_framebuffer_size() const
Definition vbe_graphics.cpp:145
virtual uint32_t get_cursor_y()
Definition vbe_graphics.cpp:67
virtual void set_text_color(TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:117
virtual void draw_pixel(uint32_t x, uint32_t y, uint32_t color)
Definition vbe_graphics.cpp:25
virtual void print_char_color(char c, TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:81
uint8_t * get_framebuffer() const
Definition vbe_graphics.cpp:161
bool is_vbe() const
Definition vbe_graphics.cpp:141
virtual void draw_string(uint32_t x, uint32_t y, const char *str, uint32_t color)
Definition vbe_graphics.cpp:60
void setup(uint8_t *framebuffer, uint32_t bpp, uint32_t width, uint32_t height)
Definition vbe_graphics.cpp:165
static Graphics * the()
Definition vbe_graphics.cpp:19
virtual void print_string_color(const char *str, TEXT_MODE_COLOR color)
Definition vbe_graphics.cpp:107
uint32_t get_height() const
Definition vbe_graphics.cpp:153
uint32_t get_bpp() const
Definition vbe_graphics.cpp:149