Pull to refresh

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

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

Алан Перлис (1922–1990) — американский учёный в области информатики.

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

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.