Как активировать графический режим в операционной системе?

Я начал изучать создание операционных систем на языке ассемблера и C, но в большинстве материалов речь идет только о текстовом режиме. Как я могу реализовать графический режим? <br/> Архитектура: x86_64 <br/> Асемблер: nasm <br/> Если необходимо, я могу отправить свой код. <br/> <b>UPD: </b> Моя ОС основана на UNIX.
  • 15 сентября 2024 г. 17:13
Ответы на вопрос 2
Активация графического режима в операционных системах на архитектуре x86_64 может быть выполнена различными способами в зависимости от используемой графической подсистемы. Так как вы создаёте операционную систему, которая основана на UNIX, наиболее распространённый подход заключается в использовании стандартного интерфейса для работы с графикой. 

### 1. Использование VESA BIOS Extensions (VBE)

VESA BIOS Extensions предоставляет стандартный интерфейс для работы с графическими режимами. Вы можете использовать VBE для переключения в графический режим. Вот параметры, которые вам нужно выполнить:

- Вызов BIOS через прерывание `INT 0x10` с определёнными функциями.
- Написание кода на ассемблере, чтобы установить желаемый графический режим.

Пример кода на ассемблере для перехода в графический режим:

```assembly
section .text
global _start

_start:
    ; Установить графический режим VESA 1024x768x32
    mov ax, 0x4F02        ; VESA Function 02 - Set VESA Mode
    mov bx, 0x118         ; VGA mode 0x118 (1024x768x32)
    int 0x10              ; Вызов BIOS

    ; Теперь можно рисовать в графическом режиме
    ; ...

    ; Ожидание (чтобы экран не гас)
    cli
    hlt

    ; Завершение работы
    mov ax, 0x4C00
    int 0x21
```

### 2. Использование графических библиотек

Если ваша ОС будет иметь поддержку аппаратных драйверов, возможно использование графических библиотек, таких как:

- **SVGAlib** - для работы на уровне низкого уровня.
- **SDL** или другие графические библиотеки, которые предоставляют более абстрактные интерфейсы для работы с графикой.

### 3. Установка графического сервера

Для UNIX-подобных систем, вы можете основываться на X Window System (или X11). Это более сложный, но мощный способ предоставить графические функции для вашего приложения. 

### Примеры и использование

Если ваша ОС управляет дисплеем через режим VESA или любую другую отрисовочную систему, вы можете рисовать непосредственно в видеопамяти. Например, чтобы нарисовать пиксель:

```assembly
    ; Устанавливаем координаты пикселя (x, y)
    mov esi, <y>
    imul esi, 1024        ; Умножаем на ширину экрана
    add esi, <x>          ; Прибавляем x
    shl esi, 2            ; Умножаем на 4 (32 бита на пиксель)

    mov eax, 0xA0000      ; Начало видеопамяти (для 16-битных режимов)
    add eax, esi          ; Получаем адрес пикселя
    mov dword [eax], 0xFFFFFF ; Устанавливаем белый цвет пикселя
```

## Заключение

Выберите метод, который наилучшим образом соответствует вашему проекту, уровню сложности и целям. Если вы новичок, рекомендуется использовать VESA BIOS Extensions для начала, так как это дает большую свободу в использовании видеорежимов.
Посмотри исходники Колибри . Там есть ассемблер и есть графика 

https://kolibrios.org/en/

Правда там используется вместо netwide, flat-assembler. Но я думаю что это не принципиально.
Активация графики будет скорее всего одинакова.

P.S. Я вообще не советую новичкам делать ОС. Это задание для них в принципе невыполнимо.
Если преподаватель от тебя это требует то сделай минималку.
Похожие вопросы