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