Цитата Сообщение от barsik Посмотреть сообщение
Так маску надо не накладывать, а просто записывать в ОЗУ. В этом-то и сюжет, - программное маскирование объектов на фоне заменяется аппаратным. Если маску выводить через регистр, не только отпадет необходимость коммутировать банки, но и можно быстрее двигать по фону вертикальные линии и прямоугольники, а также есть выирыш для окон, - чтобы открыть окно для сообщения, мы заносим в регистр маски FF и очищаем окно в плоскости объектов (плоскость фона не изменяется, но не видна). Получается, в 2.5 раза быстрее, чем писать маску как в обычное ОЗУ, переключая банки для каждого байта. Для вывода спрайта читаем два байта, первый байт сразу кидаем в регистр маски, а второй пишем в экран. Регистр маски экономит время, т.к отпадает переключение банок.
Эээ, минуточку. Нельзя вот так вот просто взять и записать маску. Потому что при наложении (причём даже не попиксельном, а поадресном) двух спрайтов "будит бида". Маска верхнего уничтожит маску нижнего спрайта, и он окажется уродливо обрезанным по прямой. А вот чтобы этого избежать, нужен либо хитрый контроллер записи (чуть ли не на уровне EGA, а не один какой-то жалкий регистр на запись) с режимами объединения и очистки; либо плоскость маски должна быть доступна по чтению, и работать с ней приходится как обычно; либо надо выделять буфер в памяти под операции с масками, и "просто записывать" из него, что совсем не упростит и не ускорит игровой код.