Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с "графикой"
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Account
Поставлена вот такая задача:
Нарисовать 8 разноцветных полос (не линий) во весь экран, режим например использовать 640х350 параллельных главной диагонали.

Пример результата в прикрепленной картинке
IUnknown
Вот так:
Нажмите для просмотра прикрепленного файла
(по непонятной причине ASM-файл загружаться отказался. Странно, почему PAS можно, и CPP можно, а ASM-нельзя)

Но задача решена "в лоб", с выводом напрямую в видеопамять в этом режиме заморачиваться не очень хочется, поэтому вывод сделан через BIOS, откуда и быстродействие: ниже плинтуса, тем более, что запускалось это всё в эмуляторе. Хочешь - измени вывод пиксела на запись в видеопамять - будет на порядок (если не на 2) быстрей. Картинка получается очень похожая на ту, что ты показал... Да, там можно, разумеется, код еще подшлифовать, но пока я этого делать не стал...
IUnknown
Похоже, эта тема интересна мне одному, но оставить недоделанным это задание я не мог. Вот версия, которая пишет напрямую в видеопамять.
Нажмите для просмотра прикрепленного файла

Работает гораздо быстрее, чем предыдущая. Компилировалось TASM 3.0 :
>tasm lines8v.asm
>tlink lines8v.obj

Account
Цитата(IUnknown @ 13.10.2011 13:10) *

Похоже, эта тема интересна мне одному, но оставить недоделанным это задание я не мог. Вот версия, которая пишет напрямую в видеопамять.


Ну как это, не только тебе одному (свой скромный результат я тебе показывал). Мне она тоже интересна, просто я пока не смог разобраться с прямым выводом в видеопамять в графическом режиме, знаний мало и способности видимо нет. Так же голова забита о предстоящей в скором времени сессии, предпоследней перед Дипломным проектом, в поиске темы для которого я сейчас так же нахожусь.(((

Остальное в приват отправил.
IUnknown
Значит, по поводу артефактов...

Большую часть убрал, со ступенчатостью, извини, сделать ничего не могу, это все-таки не горизонтальные/вертикальные, а диагональные линии, причем соотношение сторон в этом граф. режиме тоже не самое благоприятное.

Касаемо черных точек, проскакивающих в некоторых местах - еще раз проверил всю работу с битами в начальном/конечном неполных байтах (уверен, проблема - именно там, какой-нибудь бит маски неправильно выставляется, или что-то в этом роде, отсюда и "битый пиксель", опять же - заметил, что появляются эти черные только на стыках разных цветов, а не в середине?). Пока ничего некорректного в коде найти не могу, потом еще покопаюсь.

Что касается правого нижнего угла - это вообще для меня загадка, я уже ограничил входные данные в процедуре ScanLine, теперь физически линия не может заходить на предыдущую/последующую строки (а очень похоже на то, что где-то все-таки происходит выход за пределы 0 .. 639 и пиксель уходит на соседнюю строку). Прогнал несколько раз в отладчике - не вижу, где проблема (то есть, время возникновения - как раз увидел, эта фигня проявляется, когда рисуется нижняя часть малиновых штановой полосы, но опять же, как с этим бороться - пока без понятия). Найду - напишу. Может, еще кто посмотрит и найдет что не так...
Account
Цитата(IUnknown @ 13.10.2011 18:15) *

Значит, по поводу артефактов...

Большую часть убрал, со ступенчатостью, извини, сделать ничего не могу, это все-таки не горизонтальные/вертикальные, а диагональные линии, причем соотношение сторон в этом граф. режиме тоже не самое благоприятное.

Касаемо черных точек, проскакивающих в некоторых местах - еще раз проверил всю работу с битами в начальном/конечном неполных байтах (уверен, проблема - именно там, какой-нибудь бит маски неправильно выставляется, или что-то в этом роде, отсюда и "битый пиксель", опять же - заметил, что появляются эти черные только на стыках разных цветов, а не в середине?). Пока ничего некорректного в коде найти не могу, потом еще покопаюсь.

Что касается правого нижнего угла - это вообще для меня загадка, я уже ограничил входные данные в процедуре ScanLine, теперь физически линия не может заходить на предыдущую/последующую строки (а очень похоже на то, что где-то все-таки происходит выход за пределы 0 .. 639 и пиксель уходит на соседнюю строку). Прогнал несколько раз в отладчике - не вижу, где проблема (то есть, время возникновения - как раз увидел, эта фигня проявляется, когда рисуется нижняя часть малиновых штановой полосы, но опять же, как с этим бороться - пока без понятия). Найду - напишу. Может, еще кто посмотрит и найдет что не так...


По поводу ступенчатости. Я понимаю что от нее не деться. Я там обвел только в одном месте что то слишком торчало))
Далее, верхний левый угол, такое ощущение что не с 0-го пикселя (по оси Y) начинало рисовать, я стрелочкой показал. При том что это только на первой полоске от главной диагонали почему то.

//-----------------------------------------------------

Посмотрел последнюю версию. Все шикарно и быстро. Только уголок остался.))
Цитата(IUnknown @ 13.10.2011 18:15) *

Может, еще кто посмотрит и найдет что не так...


Честно, гложет большое сомнение, что кто то захочет копаться в чужом коде на данном языке). Но время покажет, может и ошибаюсь...
TarasBer
Цитата(IUnknown @ 13.10.2011 13:10) *

Похоже, эта тема интересна мне одному, но оставить недоделанным это задание я не мог. Вот версия, которая пишет напрямую в видеопамять.


Париться с "удобным" устройством видеопамяти в 640х350 мало кому интересно. Возни много, а толку? 320х200, 256 цветов намного интереснее.
IUnknown
Надо ж было так ошибиться... Account, исправь (строка 494):

	; Рисуем пиксели из конечного неполного байта
mov al, [di] ; <--- Вот тут было mov AX, [di]
stosb

, я ж говорил, что проблема - с замыкающим байтом...
Account
Цитата(IUnknown @ 14.10.2011 14:02) *

Надо ж было так ошибиться... Account, исправь (строка 494):

	; Рисуем пиксели из конечного неполного байта
mov al, [di] ; <--- Вот тут было mov AX, [di]
stosb

, я ж говорил, что проблема - с замыкающим байтом...


От ошибок никто не застрахован, особенно в этом языке.

Подправил, проверил. Ну что тут можно сказать, супер, быстро и красиво. А ты как всегда на высоте.
can you buy plaquenil over the c
Viagra For Sale In Alaska
what to do when lasix doesn'
Discount Celebrex Online
what is better levitra viagra ci
Arrow Roxithromycin
azithromycin dosage for chlamydi
Outdated Amoxicillin
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.