#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; }