|
VST Operating System 1.0 Stable
Сердце нашей операционки на C++
|
Сердце нашей операционки. Подробнее...
#include <stddef.h>#include <stdint.h>Перечисления | |
| enum | vga_color { VGA_COLOR_BLACK = 0 , VGA_COLOR_BLUE = 1 , VGA_COLOR_GREEN = 2 , VGA_COLOR_CYAN = 3 , VGA_COLOR_RED = 4 , VGA_COLOR_MAGENTA = 5 , VGA_COLOR_BROWN = 6 , VGA_COLOR_LIGHT_GREY = 7 , VGA_COLOR_DARK_GREY = 8 , VGA_COLOR_LIGHT_BLUE = 9 , VGA_COLOR_LIGHT_GREEN = 10 , VGA_COLOR_LIGHT_CYAN = 11 , VGA_COLOR_LIGHT_RED = 12 , VGA_COLOR_LIGHT_MAGENTA = 13 , VGA_COLOR_LIGHT_BROWN = 14 , VGA_COLOR_WHITE = 15 } |
| Таблица цветов для VGA. Подробнее... | |
Функции | |
| static void | outb (uint16_t port, uint8_t val) |
| Это наши "руки" для работы с портами | |
| static uint8_t | inb (uint16_t port) |
| Забирает байт из порта | |
| static void | io_wait (void) |
| Маленькая задержка | |
| size_t | strlen (const char *str) |
| Считаем длину строки | |
| bool | strcmp (const char *s1, const char *s2) |
| Сравниваем две строки | |
| void | memset (void *dest, char val, size_t count) |
| Просто забиваем кусок памяти нужным символом | |
| void | terminal_initialize (void) |
| Чистим экран при запуске и ставим курсор в начало | |
| void | terminal_scroll () |
| Скроллинг экрана | |
| void | terminal_putentryat (char c, uint8_t color, size_t x, size_t y) |
| Вспомогательная штука, чтобы положить символ в конкретную точку экрана | |
| void | terminal_putchar (char c) |
| Основная функция печати символа | |
| void | terminal_write (const char *data) |
| Просто печатаем строку целиком | |
| void | terminal_writeln (const char *data) |
| Печать строки с переходом на новую | |
| void | terminal_backspace () |
| Стираем последний символ | |
| void | cmd_reboot () |
| Жесткий метод перезагрузки | |
| void | cmd_poweroff () |
| Попытка выключить комп | |
| void | cmd_led (int status) |
| Управление лампочками на клаве | |
| void | execute_command () |
| Наш обработчик команд | |
| void | kernel_main (void) |
| Точка входа в ядро | |
Переменные | |
| static const size_t | VGA_WIDTH = 80 |
| Ширина текстового экрана (почти везде по дефолту 80). | |
| static const size_t | VGA_HEIGHT = 25 |
| Высота текстового экрана (почти везде по дефолту 25). | |
| uint16_t *const | VGA_MEMORY = (uint16_t *)0xB8000 |
| Волшебный адрес VGA_MEMORY. | |
| size_t | terminal_row |
| Текущая строка курсора | |
| size_t | terminal_column |
| Текущий столбец курсора | |
| uint8_t | terminal_color |
| Текущий цвет текста | |
| uint16_t * | terminal_buffer |
| Указатель на буфер экрана | |
| char | kbd_US [128] |
| Карта клавиш | |
| char | cmd_buffer [128] |
| Буфер, куда мы записываем то, что печатает юзер, пока он не нажмет энтер | |
| int | cmd_len = 0 |
| Длина текущей введенной команды | |
Сердце нашей операционки.
так, ну погнали. Это основной файл ядра.
См. определение в файле kernel.cpp
| enum vga_color |
Таблица цветов для VGA.
Стандартные 16 цветов из эпохи DOS.
См. определение в файле kernel.cpp строка 89
| void cmd_led | ( | int | status | ) |
Управление лампочками на клаве
CapsLock, NumLock и т.д.
См. определение в файле kernel.cpp строка 301
Перекрестные ссылки inb() и outb().
| void cmd_poweroff | ( | ) |
Попытка выключить комп
Работает в эмуляторах типа QEMU.
См. определение в файле kernel.cpp строка 288
Перекрестные ссылки outb() и terminal_writeln().
| void cmd_reboot | ( | ) |
Жесткий метод перезагрузки
Через контроллер клавиатуры.
См. определение в файле kernel.cpp строка 270
Перекрестные ссылки inb() и outb().
| void execute_command | ( | ) |
Наш обработчик команд
Это простейший парсер ввода.
См. определение в файле kernel.cpp строка 324
Перекрестные ссылки cmd_buffer, cmd_led(), cmd_len, cmd_poweroff(), cmd_reboot(), strcmp(), terminal_color, terminal_initialize(), terminal_write(), terminal_writeln(), VGA_COLOR_LIGHT_CYAN, VGA_COLOR_LIGHT_GREEN, VGA_COLOR_LIGHT_GREY и VGA_COLOR_LIGHT_RED.
|
inlinestatic |
Забирает байт из порта
Так мы узнаем, какую клавишу нажали.
| port | Порт устройства |
См. определение в файле kernel.cpp строка 27
|
inlinestatic |
Маленькая задержка
Иногда железо слишком медленное для проца.
См. определение в файле kernel.cpp строка 38
Перекрестные ссылки outb().
| void kernel_main | ( | void | ) |
Точка входа в ядро
Именно сюда GRUB передаст управление после загрузки.
См. определение в файле kernel.cpp строка 403
Перекрестные ссылки cmd_buffer, cmd_len, execute_command(), inb(), kbd_US, terminal_backspace(), terminal_color, terminal_initialize(), terminal_putchar(), terminal_write(), terminal_writeln(), VGA_COLOR_LIGHT_GREY и VGA_COLOR_WHITE.
| void memset | ( | void * | dest, |
| char | val, | ||
| size_t | count ) |
Просто забиваем кусок памяти нужным символом
| dest | Адрес начала |
| val | Чем забиваем |
| count | Сколько байт |
См. определение в файле kernel.cpp строка 78
|
inlinestatic |
Это наши "руки" для работы с портами
Процессор общается с железками через них.
| port | Порт устройства |
| val | Байт, который шлем (например, скомандовать клавиатуре мигнуть лампочкой) |
См. определение в файле kernel.cpp строка 16
| bool strcmp | ( | const char * | s1, |
| const char * | s2 ) |
Сравниваем две строки
Чтобы понимать, какую команду ввел юзер.
См. определение в файле kernel.cpp строка 62
| size_t strlen | ( | const char * | str | ) |
Считаем длину строки
Пока нет стандартной библиотеки, пишем всё сами.
| str | Указатель на строку |
См. определение в файле kernel.cpp строка 49
| void terminal_backspace | ( | ) |
Стираем последний символ
Нужно для работы Backspace.
См. определение в файле kernel.cpp строка 234
Перекрестные ссылки outb(), terminal_color, terminal_column, terminal_putentryat(), terminal_row и VGA_WIDTH.
| void terminal_initialize | ( | void | ) |
Чистим экран при запуске и ставим курсор в начало
См. определение в файле kernel.cpp строка 130
Перекрестные ссылки terminal_buffer, terminal_color, terminal_column, terminal_row, VGA_COLOR_BLACK, VGA_COLOR_LIGHT_GREY, VGA_HEIGHT, VGA_MEMORY и VGA_WIDTH.
| void terminal_putchar | ( | char | c | ) |
Основная функция печати символа
Она обрабатывает перевод строки и двигает курсор.
См. определение в файле kernel.cpp строка 181
Перекрестные ссылки outb(), terminal_color, terminal_column, terminal_putentryat(), terminal_row, terminal_scroll(), VGA_HEIGHT и VGA_WIDTH.
| void terminal_putentryat | ( | char | c, |
| uint8_t | color, | ||
| size_t | x, | ||
| size_t | y ) |
Вспомогательная штука, чтобы положить символ в конкретную точку экрана
См. определение в файле kernel.cpp строка 171
Перекрестные ссылки terminal_buffer и VGA_WIDTH.
| void terminal_scroll | ( | ) |
Скроллинг экрана
Если дошли до низа экрана, надо всё сдвинуть вверх.
См. определение в файле kernel.cpp строка 151
Перекрестные ссылки terminal_buffer, terminal_color, terminal_row, VGA_HEIGHT и VGA_WIDTH.
| void terminal_write | ( | const char * | data | ) |
Просто печатаем строку целиком
См. определение в файле kernel.cpp строка 215
Перекрестные ссылки strlen() и terminal_putchar().
| void terminal_writeln | ( | const char * | data | ) |
Печать строки с переходом на новую
См. определение в файле kernel.cpp строка 224
Перекрестные ссылки terminal_putchar() и terminal_write().
| char cmd_buffer[128] |
Буфер, куда мы записываем то, что печатает юзер, пока он не нажмет энтер
См. определение в файле kernel.cpp строка 316
| int cmd_len = 0 |
Длина текущей введенной команды
См. определение в файле kernel.cpp строка 318
| char kbd_US[128] |
Карта клавиш
Железо присылает номер кнопки, а мы превращаем его в букву.
См. определение в файле kernel.cpp строка 259
| uint16_t* terminal_buffer |
Указатель на буфер экрана
См. определение в файле kernel.cpp строка 125
| uint8_t terminal_color |
Текущий цвет текста
См. определение в файле kernel.cpp строка 123
| size_t terminal_column |
Текущий столбец курсора
См. определение в файле kernel.cpp строка 121
| size_t terminal_row |
Текущая строка курсора
См. определение в файле kernel.cpp строка 119
|
static |
Высота текстового экрана (почти везде по дефолту 25).
См. определение в файле kernel.cpp строка 112
| uint16_t* const VGA_MEMORY = (uint16_t *)0xB8000 |
Волшебный адрес VGA_MEMORY.
Сюда надо писать буквы, чтобы они появились на мониторе.
См. определение в файле kernel.cpp строка 116
|
static |
Ширина текстового экрана (почти везде по дефолту 80).
См. определение в файле kernel.cpp строка 110