Обновить
145
4
Евгений @JordanCpp

Разработчик

Отправить сообщение

Ненормальность в том, в каждом процессоре уже сидит тензорная алгебра, а мы всё юзаем BRUSH.

Это только начало. Этот режим нужен для совместимости со старыми windows. Потом будет режим рисования в буфер, потом opengl и directx. Поверх 2d абстракции с единып api. В этом цель.

Я сейчас на windows простенькое окно вывожу. Без обработки ввода. 4,5 КБ для 32 бит и 5,5 КБ для 64 бит.

Потом это все я оберну в абстракции единого API для linux и windows.

Это не требуется. Код будет собираться и быть совместимым и со стандартным STL и libc идущий в поставке компилятора. Но, что бы добиться минимального бинарника на всех платформах, дополнительно пишу свои совместимые прослойки.

В следующих статьях я буду использовать для сборки под старые системы visual C++ 6.0, а может ещё древнее версию. Под старые версии linux, gcc 3. Куда уж легаснее?

Почти допилил linux версию, осталось реализовать malloc и free. Начал пилить графику.

Приходите в кафе, открываете сумку, ставите на стол эту бандурину.

Люблю пописать асм под 286 за чашечкой кофе:)

Спасибо за статью, интересно.

Ещё один аргумент за С++, это нормальная ООП абстракция типизированная на шаблонах. А не как в glibc.

Вот пример. Работает на windows 32/64, linux 32/64, ms dos 16/32.

https://github.com/JordanCpp/LDLHOL

Вы все правильно пишите. И у меня уже есть похожий проект в репе. Где я пишу все на С++ и полагаюсь на поставляемые libc. И как одна из опций сборки это будет работать. Но мне хотелось бы обеспечить поддержку именно своей версии минимальной libc и STL. Уже успешно доковырял linux версию. Осталось сделать malloc и free, на основе mmap и unmap. Системные вызовы linux уже вызываются. Можете посмотреть в репе. Делаю по примерам в интернете.

Да и я много кода скопирую и для себя осмыслю. И в статье все шаги опишу. Мне интересно как оно все под капотом работает. Интересно же.

Только С++, на С программировать желания нет.

Мне понравилась эта статья. Приложение X11 на ассемблере.

https://habr.com/ru/articles/840590/

И стало интересно, а возможно ли добиться примерно такого же размера. Но на С++ и STL. Конечно настолько малого бинарника не получится, но хотя бы приблизиться получится.

Это было долго, но мы справились!

Мы написали (очень простую) программу с графическим интерфейсом на чистом ассемблере, без каких-либо зависимостей и уложившись в 600 строк кода.

  • Как далеко мы можем зайти в оптимизации бинарника?

  • C отладочной информацией: 10744 байт (10 Кб)

  • Без отладочной информации (stripped): 8592 байт (8 Кб)

  • С оптимизациями stripped and OMAGIC (--omagic это ключ линковщика, из рукводства: Set the text and data sections to be readable and writable. Also, do not page-align the data segment): 1776 байт (1 Kб)

Вообщем вот такая программка с интерфейсом размером в 1 Кб.

Вывод на экран графики. Примитивы, картинки. Опционально загрузчик разных форматов.

Не понимаю, почему статья не заминумована...

Возможно плюсующим нравится?

printf без константной строки (формата), круто! Это же круто! (мало нам дыр, добавим ещё)

И ваша статья уже устарела... Или так и планировалось?

Это же только начало. Я же упомянул в статье, что сделаем нормальный printf.

Да. При загрузке палитровое изображение конвертируется в rgb.

Правда жесткое ограничение, одна палитра на одно изображение и нельзя менять палитру динамически.

Не так сложно, под msdos графика только палитровая, на других ос, палитровая графика эмулируется. Для всех систем единое апи.

Предлагаете вообще не использовать STL?

Нет, без STL будет слишком много ручной работы.

О чем пункт про осмысленность программы? Разве это само собой не разумеется?

Я решил добавить данный пункт. Что это не будет, что то бессмысленное. Типа только привет мир. Более сложное.

Ассемблер зачем вообще, можете пояснить? И как это сочетается с кросс-платформенностью?

Ассемблер при необходимости. Скорее всего он будет в сочетании с вызовами bios в ms dos. Прерывания вызывать.

Только кроссплатформенность, иначе смысл теряется. То, что работает под ms-dos должно работать и под другими ОС. В этом смысл.

Иметь единое API для старых и новых ОС. В том числе и для графики.

Что то мало картинок живых ноутов в статье. Это бы улучшило восприятие. Мне пришлось, гуглить самому. Как они хоть выглядят.

Всем спасибо за советы и предложения, коллективный разум это сила!

Спасибо за ссылки, посмотрю.

Информация

В рейтинге
1 150-й
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer, Database Developer
Lead
SQL
Linux