blob: be01f6dc66bf522c237ea6fd13856c59b8ed6453 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include "video.h"
#include "utils.h"
#include "io.h"
void init_video(multiboot_info_t* p_multiboot_info) {
#ifdef DEBUG
macaroni_assert(p_multiboot_info->framebuffer_width == MULTIBOOT_GODS_WIDTH, "not gods width");
macaroni_assert(p_multiboot_info->framebuffer_height == MULTIBOOT_GODS_HEIGHT, "not gods height");
macaroni_assert(p_multiboot_info->framebuffer_bpp == MULTIBOOT_VIDEO_BPP, "not gods bpp");
macaroni_assert(p_multiboot_info->framebuffer_type == MULTIBOOT_FRAMEBUFFER_TYPE_RGB, "not video fbtype");
#endif
#ifdef DEBUG
serial_puthex((uint32_t) p_multiboot_info->framebuffer_red_field_position);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_red_mask_size);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_green_field_position);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_green_mask_size);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_blue_field_position);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_blue_mask_size);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_bpp);
serial_puthex((uint32_t) p_multiboot_info->framebuffer_pitch);
#endif // DEBUG
video_framebuffer = (uint8_t*) (uint32_t) p_multiboot_info->framebuffer_addr;
pixel_width = (p_multiboot_info->framebuffer_bpp / 8);
pitch = p_multiboot_info->framebuffer_pitch;
}
void put_pixel(macaroni_color color, uint16_t x, uint16_t y) {
video_framebuffer[x * pixel_width + y * pitch] = color & 0xFF;
video_framebuffer[x * pixel_width + y * pitch + 1] = (color >> 8) & 0xFF;
video_framebuffer[x * pixel_width + y * pitch + 2] = (color >> 16) & 0xFF;
}
|