{"id":3824,"url":"\/distributions\/3824\/click?bit=1&hash=a0d33ab5520cacbcd921c07a49fc8ac5b78623b57936b992ce15c804b99210d4","title":"\u041a\u0430\u043a\u0443\u044e \u0440\u0435\u043a\u043b\u0430\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043d\u0430 DTF \u0438 \u043a\u0442\u043e \u0435\u0451 \u0443\u0432\u0438\u0434\u0438\u0442","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"75ec9ef4-cad0-549d-bbed-1482dc44e8ee","isPaidAndBannersEnabled":false}
Zer0Sowtware

Написание нового графического API на Flat Assembler

"Системы состоят из подсистем, подсистемы — из под подсистем и так до бесконечности — именно поэтому мы проектируем снизу вверх."

Assembler умер, да здравствует король!

Всем доброго времени суток. Очень и очень мало прогрммистов сегодня работают на flat assembler, несмотря на все те возможности которые он дает. Сегодня я хочу рассказать вам о том что сподвергло меня изучать flat assembler,о том чего я добился и о том к чему иду. На самом деле программистов assembler языков осталось не так много. И в 2022 году вдруг я начал его учить.

И зачем же начинать учить ассемблер спустя десятилетие с эпохи его востребованности?

Все дело в том что уже на протяжениии некоторого времени я работал над попыткой создания своего движка для игр.

И я решил что и библиотека для графикии у меня будет своя... примитивная, но своя и я пошел к истоку графики, а именно video mode bios. Производители видеокарт не публикуют машинные коды своих изделий и я решил что нужно опираться на биос, который вшит во все пк и ноутбуки.Собственно с предисторией закончено перейду к некоторым примерам.

format binary use16 org 100h ;генерировать 16-разрядный код ;org 7c00h ;здесь я сразу определился с базовыми и фундаментальными ;переменными которые мне понадобятся для начала и будут существовать всегда x.math db 0; .math будут отвечать за просчет расположения 3х мерных объеектов z.math db 0 y.math db 0 x.macro db 0; все что имеет .macro будет вводиться в макросы. y.macro db 0 x.wiew db 100;те пиксели которые будет видеть пользователь после рендера кадра y.wiew db 100 main: mov al, 13 mov ax, 0013h ;BIOS.SetVideoMode 320x200x8 int 10h ; с параметрами положения для пикселя macro pixel [y.macro,x.macro] ;это макрос вывода одного пикселя { mov al, 13 int 10h mov cx, y.macro mov dx, x.macro mov al, 13; - розовый цвет - в дальнейшем тоже будет задоваться через переменную mov ah, 0ch int 10h mov ah,00 int 16h ret 0 } pixel y.wiew,x.wiew ;что интересно - если вводить значенияя переменных ;ТО БУДЕТ ЧЕРНЫЙ ХОЛСТ, а если все те же значения цифрами то есть ; pixel 50,50 ;на пример, то работает вывод нужного пикселя в нужном месте ret 0

Сейчас к сожалению это работеает только в OS построенных с вложеным dos. Я ищу решение как запускать код в рельном режиме на нынешних ос. Так что если у кого нибудь есть мысли на этот счет пожалуйста напишите в коментаиях, мне также будет интересно узнать мнение об этой идее.

Вообще есть мысль о попытке загрузить в озу еще до винды но не уверен насколько это возможно... Мысль появилась, потому что и загрузчик винды и граб они все тоже в реальном режиме работают.

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

Подгрузка текстур

Ах да и немного про то как я собираюсь рендерить текстуры моделей... Недавно прочел статью о том как декодировать изображения в табицы. Точнее в 3 таблици одинаковые но с разными значениями от 0 до 255. То есть на один цвет в системе RGB по 3 числа в разных таблицах но в одинаковых позициях и соответственно я планирую написать нечто подобное но пока не уверен на как лучше это сделать - делать ли библиотеку на с которая будет получать изображения от движка и передовать значения библииотеке на ассемблере?

Таблица, кстати выглядела примерно так:

r

0 234 23

0 235 89

235 67 34

g

0 234 23

0 235 89

235 67 34

b

0 234 23

0 235 89

235 67 34

На этом пока всё. Будет интересно почитать ваше мнение и мысли о таком проекте.

0
Комментарии
Читать все 0 комментариев
null