Несколько лет назад я программировал для MS-DOS на ассемблере. Одна из доступных вещей заключалась в том, чтобы сообщить BIOS координату x, координату y и цвет (выраженный в виде целого числа), затем вызвать функцию, и BIOS немедленно сделает это.
Конечно, это очень тяжелая работа и отнимает много времени, но компромисс заключался в том, что вы получали именно то, что хотели, именно в то время, когда вы этого хотели.
Я много лет пытался писать в MacOS API, но обнаружил, что это сложно или невозможно, поскольку вообще ничего не задокументировано. (Что, черт возьми, такое NSNumber? Почему все элементы управления возвращают бесполезный объект?)
На самом деле у меня сейчас нет никаких конкретных проектов, но я хотел бы иметь возможность писать на C++, который может рисовать пиксели во многом таким же образом. Может, я сумасшедший, но мне нужен такой контроль.
Пока я не смогу преодолеть это, я ограничен написанием программ, которые запускаются в консоли, путем печати текста и прокрутки вверх по мере заполнения экрана.
Мой совет - изучить структуру графического интерфейса, такую как Qt или, возможно, что-то вроде sfml.





Современные операционные системы x86 больше не работают под реальный режим.
У вас есть несколько вариантов:
Запустите виртуальную машину и установите ОС реального режима (например, MS-DOS).
Используйте слой, имитирующий реальный режим (например, DOSBox).
Используйте библиотеку графического интерфейса (например, Qt, GTK, wxWidgets, Win32, X11) и используйте холст или аналогичный элемент управления, где вы можете рисовать.
Используйте 2D-API (например, 2D-компоненты SDL, SFML, Allegro).
Используйте 3D API (например, OpenGL, Direct3D, Vulkan, Metal; возможно, предоставленный SDL, SFML или Allegro, если вы хотите его переносить) для потоковой передачи текстуры, которую вы заполнили пикселем за пикселем с процессором в каждом кадре.
Пишите фрагментные шейдеры (либо с помощью 3D API, либо, что гораздо проще, в веб-приложении с помощью WebGL).
Если вы хотите узнать, как на самом деле делается графика в наши дни, вам следует выбрать последние 2 варианта.
Обратите внимание: если вам нравится рисовать «пиксель за пикселем», вы, вероятно, будете писать фрагментные шейдеры прямо на GPU и любовь писать все удивительные эффекты, которых можно достичь с их помощью. См. Некоторые примеры в ShaderToy!
Вы можете попробовать использовать Windows GDI:
#include <windows.h>
int main()
{
HDC hdc = GetDC(GetConsoleWindow());
for (int x = 0; x < 256; ++x)
for (int y = 0; y < 256; ++y)
SetPixel(hdc, x, y, RGB(127, x, y));
}
Нарисовать что-то довольно легко (если это то, о чем вы спрашиваете), как вы могли видеть из приведенного выше примера.
В наши дни вам, скорее всего, потребуется использовать opengl или какой-либо другой api, потому что современные ОС обычно не позволяют писать напрямую в графический процессор (ну, если вы не пишете драйвер устройства, но это лучше оставить производителю графического процессора.