mirror of
https://github.com/0Nera/BMOSP.git
synced 2025-01-23 13:02:13 +03:00
Графическое выделение важного текста
This commit is contained in:
parent
ef5e8cc0ab
commit
076c87badf
16
include/fb.h
16
include/fb.h
@ -10,19 +10,35 @@
|
|||||||
#ifndef FB_H
|
#ifndef FB_H
|
||||||
#define FB_H
|
#define FB_H
|
||||||
|
|
||||||
|
#include <arch.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <tool.h>
|
#include <tool.h>
|
||||||
|
|
||||||
|
enum colors {
|
||||||
|
WHITE = 0xFFFFFF,
|
||||||
|
BLACK = 0x000000,
|
||||||
|
RED = 0xFF0000,
|
||||||
|
GREEN = 0x00D000,
|
||||||
|
PRIMA_GREEN = 0x00FF00,
|
||||||
|
BLUE = 0x0000FF,
|
||||||
|
DARK_GREEN = 0x013220,
|
||||||
|
};
|
||||||
|
|
||||||
#define GET_TICK_BIG arch_get_tick_b( )
|
#define GET_TICK_BIG arch_get_tick_b( )
|
||||||
#define GET_TICK_lOW arch_get_tick_l( )
|
#define GET_TICK_lOW arch_get_tick_l( )
|
||||||
|
|
||||||
|
#define SCREEN_WIDTH width
|
||||||
|
#define SCREEN_HEIGHT height
|
||||||
|
#define SCREEN_BUFFER fb_addr
|
||||||
|
|
||||||
#define LOG(...) \
|
#define LOG(...) \
|
||||||
fb_printf("[%u]%s() (%s:%d) ", GET_TICK_BIG, __func__, __FILE__, \
|
fb_printf("[%u]%s() (%s:%d) ", GET_TICK_BIG, __func__, __FILE__, \
|
||||||
__LINE__); \
|
__LINE__); \
|
||||||
fb_printf(__VA_ARGS__)
|
fb_printf(__VA_ARGS__)
|
||||||
|
|
||||||
|
void fb_set_text_color(uint32_t color);
|
||||||
void fb_init( );
|
void fb_init( );
|
||||||
void fb_print_buf(size_t x, size_t y, size_t h, size_t w, uint32_t *buf);
|
void fb_print_buf(size_t x, size_t y, size_t h, size_t w, uint32_t *buf);
|
||||||
void fb_printf(char *str, ...);
|
void fb_printf(char *str, ...);
|
||||||
|
18
kernel/fb.c
18
kernel/fb.c
@ -15,15 +15,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <tool.h>
|
#include <tool.h>
|
||||||
|
|
||||||
enum colors {
|
|
||||||
WHITE = 0xFFFFFF,
|
|
||||||
BLACK = 0x000000,
|
|
||||||
RED = 0xFF0000,
|
|
||||||
GREEN = 0x00FF00,
|
|
||||||
BLUE = 0x0000FF,
|
|
||||||
DARK_GREEN = 0x013220,
|
|
||||||
};
|
|
||||||
|
|
||||||
static volatile struct limine_framebuffer_request framebuffer_request = {
|
static volatile struct limine_framebuffer_request framebuffer_request = {
|
||||||
.id = LIMINE_FRAMEBUFFER_REQUEST,
|
.id = LIMINE_FRAMEBUFFER_REQUEST,
|
||||||
.revision = 0,
|
.revision = 0,
|
||||||
@ -44,9 +35,9 @@ uint16_t bpp;
|
|||||||
uint64_t pos_x = 4;
|
uint64_t pos_x = 4;
|
||||||
uint64_t pos_y = 4;
|
uint64_t pos_y = 4;
|
||||||
|
|
||||||
#define SCREEN_WIDTH width
|
void fb_set_text_color(uint32_t color) {
|
||||||
#define SCREEN_HEIGHT height
|
text_color = color;
|
||||||
#define SCREEN_BUFFER fb_addr
|
}
|
||||||
|
|
||||||
// Настройка прослойки графики ядра
|
// Настройка прослойки графики ядра
|
||||||
void fb_init( ) {
|
void fb_init( ) {
|
||||||
@ -64,7 +55,9 @@ void fb_init( ) {
|
|||||||
for (uint64_t i = 0; i < width * height; i++) { fb_addr[i] = background; }
|
for (uint64_t i = 0; i < width * height; i++) { fb_addr[i] = background; }
|
||||||
|
|
||||||
LOG("0x%x %ux%u\n", fb_addr, width, height);
|
LOG("0x%x %ux%u\n", fb_addr, width, height);
|
||||||
|
|
||||||
if (framebuffer_response->framebuffer_count == 1) { return; }
|
if (framebuffer_response->framebuffer_count == 1) { return; }
|
||||||
|
|
||||||
LOG("Инициализация дополнительных: %u мониторов\n",
|
LOG("Инициализация дополнительных: %u мониторов\n",
|
||||||
framebuffer_response->framebuffer_count);
|
framebuffer_response->framebuffer_count);
|
||||||
|
|
||||||
@ -130,6 +123,7 @@ void scroll_fb( ) {
|
|||||||
|
|
||||||
// Вывод одного символа
|
// Вывод одного символа
|
||||||
static void fb_putchar(char c) {
|
static void fb_putchar(char c) {
|
||||||
|
pause( );
|
||||||
if (c == '\t') {
|
if (c == '\t') {
|
||||||
pos_x += FONT_6X8_SLIM_CHAR_WIDTH * 4;
|
pos_x += FONT_6X8_SLIM_CHAR_WIDTH * 4;
|
||||||
} else if (c == '\n') {
|
} else if (c == '\n') {
|
||||||
|
@ -23,14 +23,23 @@ void _start( ) {
|
|||||||
arch_init( );
|
arch_init( );
|
||||||
mem_init( );
|
mem_init( );
|
||||||
|
|
||||||
|
fb_set_text_color(0x00FF00);
|
||||||
LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем "
|
LOG("\t\t\t\t *** Базовая Модульная Платформа Операционных Систем "
|
||||||
"версии %u.%u.%u ***\n",
|
"версии %u.%u.%u ***\n",
|
||||||
VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD);
|
VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD);
|
||||||
|
|
||||||
LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__);
|
LOG("\t\t\t\t *** Дата сборки: %s %s ***\n", __DATE__, __TIME__);
|
||||||
|
fb_set_text_color(0x00D000);
|
||||||
|
|
||||||
mod_init( );
|
mod_init( );
|
||||||
pit_init( );
|
// pit_init( );
|
||||||
LOG("Готово! Для выхода из симуляции: ESCAPE\n");
|
|
||||||
|
mod_list_show( );
|
||||||
|
|
||||||
|
fb_set_text_color(0x00FF00);
|
||||||
|
LOG("Готово! Для выхода из симуляции удерживайте: ESCAPE\n");
|
||||||
|
fb_set_text_color(0x00D000);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
uint64_t byte = inb(0x60);
|
uint64_t byte = inb(0x60);
|
||||||
if (byte == 0x1) {
|
if (byte == 0x1) {
|
||||||
|
Loading…
Reference in New Issue
Block a user