Написание нового графического 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
Написание нового графического API на Flat Assembler

Сейчас к сожалению это работеает только в 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

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

33
Начать дискуссию