"Системы состоят из подсистем, подсистемы — из под подсистем и так до бесконечности — именно поэтому мы проектируем снизу вверх."
Алан Перлис (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
На этом пока всё. Будет интересно почитать ваше мнение и мысли о таком проекте.