го пікселя - нулевойCurY; CurY - вказує наступний рядок: dx; відновимо d xendp
; ф-ія для установки режиму відео і квітів палітри.procah, 0Fh; ф-ія BIOS для отримання номера поточного відеорежіма10hOldScreenMode, al; сохранітьah, ah; ah = 0 - ф-ія для встановлення графічного режімаal , 13h; al = 13h установка режиму 320x200 c 256 цветамі10h; встановлюємо графічний режим за допомогою переривання BIOSdx, 3c8h; порт відео палітри (3C8h) al, 0; встановити індекс палітриdx, al
; Встановити колір фону в чорний
; (0,0,0) - чернийdx, 3c9h; порт 3C9hal, 0; краснийdx, alal, 0; зеленийdx, alal, 0; сінійdx, aldx, 3c8h; порт відео палітри (3C8h) al, 1; встановити індекс палітри 1dx, al
; зробимо білий колір (63, 63, 63) dx, 3c9h; порт запису 3C9hal, 63; краснийdx, alal, 63; зеленийdx, alal, 63; сінійdx, alendp
; процедура для обробки блоку растра
; вхід: в регістрі ax - розмір даних у блоці
; за адресою Rastr розташовується бітовий масив растраproc
; збережемо значення регістрів в стеку, щоб нічого не попортітьaxbxcxdxsi, Rastr; si вказує на нульовий байт в масиві растраcx, ax; тепер в cx кол-во байтів растра в даному блоці
; циклічна обробка кожного байта растра в блоці: cx; зберігаємо кількість ітерацій в стекеdl, [si]; копіюємо поточний байт в регістр dlDrawByte; викликаємо ф-ію відтворення байта растраsi; переходимо до наступного байтуcx; відновлюємо значення лічильника ітераційBCycle; виконуємо цикл, поки не опрацюємо всі байти
; відновимо регістриdxcxbxaxendp
; процедура для відтворення пікселів, записаних в одному байті
; вхід: dl - байт для отрісовкіprocbl, 10000000b; в bl - маска для вибірки першого зліва бітаcx, 8; кількість ітерацій = кількості біт в байті
; будемо зрушувати маску вправо і виокремлювати значення бітів за допомогою логічного І: cx; збережемо значення лічильника ітераційdl, bl; логічне І між нашим байтом і маскою. результат - зміна флаговWhite; якщо біт = 1, то колір пікселя белийal, 0; якщо ні, то чернийSkipColor; пропускаємо установку кольору в білий: al, 1; al = 1. 1 - індекс палітри для білого кольору (див. SetDisplay): DrawPixel; малюємо даний піксель на екранеbl, 1; зсуваємо маску вправоcx; відновити лічильник ціклаShrCycle; виконуємо алгоритм для кожного бітаendp
; ф-ія для обчислення кількості ігнорованих бітів в рядку растра. (Вони додаються для вирівнювання рядка по параграф)
; вхід: -
; вихід: IgnoredBitsproc
; збережемо всяк випадок значення регістрів в стекaxcxdxbxax, word ptr [biWidth]; в ax - ширина ізображеніяbl, 32; будемо ділити на 32. Звідки 32? (BiWidth/8)/4 == biWidth/32. Ненульовий залишок від ділення ...