Найти в Дзене
Самоучка

Продолжаю разбираться с графикой компьютера Спринтер

Для того, что бы не валить весь код в одну кучу, я решил часть данных касающихся портов и некоторых функций вынести в отдельные файлы.

Первый файл назвал sysport.h, куда поместил порты работающие с окнами процессора, куда должна подключаться расширенная память компьютера. Затем Y_PORT, что бы иметь возможность переключать строки при работе с графикой. Ну и ещё пара портов, о которых расскажу в последствии.

Содержимое файла sysport.h
Содержимое файла sysport.h

Также я создал новый файл graph.h, в котором буду описывать функции связанные с графикой и пока набросал в данный файл пару функций, так сказать для пробы пера. Заодно постарался освоить работу с метками и директивой ассемблера EQU. Ранее я наивно полагал, что данная директива ассемблера описывается только вначале программы (чужие файлы мне судя по всему под строгим запретом смотреть не давали), теперь же с подсказки знающих товарищей оценил пользу и решил попробовать данную директиву EQU применить.

содержимое файла graph.h
содержимое файла graph.h

Как видно из скриншота, пока данный файл содержит всего две функции. Это установка видеорежима (GRAPHMODE) и отрисовка прямоугольника (DRAWRECT). Составлены они таким образом, что их можно вызывать как со значениями по умолчанию, так и передавать параметры непосредственно в команду процессора, за что огромное спасибо всё той же EQU. Насколько правильно так поступать, я если честно не знаю, но мне такой подход нравится и пока не найду способ лучше, буду использовать этот. В любом случае, это пока только попытка присмотреться, к тому, как это вообще программировать на ассемблере. Если честно, не будучи программистом, это вынос мозга.

Но пожалуй перейду к основному коду программы, где я убрал всё что касается установки цветов палитры, понадеявшись на то, что операционной системой установлена стандартная (стандартная для данной операционной системы палитра). Подключил с помощью include созданные ранее мною файлы, один в начале кода (sysport.h), другой напротив в конце (graph.h). Можно было бы так же вначале, но тогда пришлось бы вставлять код безусловного перехода на ту часть программы, где она должна начинаться.

Первая часть листинга
Первая часть листинга

Продолжение после вызова функции DRAWRECT

Вторая часть листинга
Вторая часть листинга

Запустив код на выполнение получаю результат:

-5

Это если вызывать функции со значением по умолчанию.

Теперь же попробую задать параметры нашему прямоугольнику, увеличив его в размерах и сместив в сторону. Для этого перед вызовом функции DRAWRECT нужно указать координаты, размеры и цвет прямоугольника. Что бы не писать много кода, я координатам х и y задам сдвиг на #30 единиц. Ну а размеры, для наглядности сделаю различными. Например #50 и #70.

дополнение перед вызовом функции DRAWRECT
дополнение перед вызовом функции DRAWRECT

А вот и результат изменений:

Изменил размер прямоугольника
Изменил размер прямоугольника

Теперь полагаю стоит продемонстрировать изменение разрешения с 320 точек по х на 640 точек. Для этого перед вызовом функции GRAPHMODE также добавлю дополнительно параметр, который и укажет новое разрешение вызываемой функции. А вот атрибут прямоугольника поменяю так, что он будет рисоваться в полоску. Ровно как и линия созданная мною ранее.

Первая часть листинга
Первая часть листинга
Вторая часть листинга
Вторая часть листинга

Ну и собственно результат выполнения программы:

Результат работы программы.
Результат работы программы.

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

Жду отзывов и советов в комментариях.