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