KrNews
#10
20 августа 1999 |
|
CODING - Почему он так режет? (о выводе картинок на экран).
_ НУ ПОЧЕМУ ОН ТАК РЕЖЕТ? или как бороться с головной болью _ (C) Cannibal/Paradox'99 - 1 - Лично мне непонятно, почему появилось много высококлассных программ (это боль- ше относится к системкам), где при выво- де на весь экран картинок режет луч (QSV v1.0), хотя бывают и такие варианты, где ничего не режет, но зато хранится в рас- пакованном виде (Intro for Enigma Maga- zine). А все,видимо, из-за лени авторов, а ведь начинающий программист посмотрит как это делают профессионалы -подумает: "раз они так делают, значит так правиль- но!" и тоже начнет так делать... Или такой случай: человек написал кра- сивый вывод картинки, а она занимает слишком много памяти... Вот мой метод: 1. Пакуем картинку любимым экранным компрессором (предпочтительнее LASER COMPACT'ом). 2. Загружаем STS. Далее грузим запако- ванный экран. 3. Декомпресор имеет примерно следую- щий вид: LD C,#F9 CALL 8134 LD DE,#8C ADD HL,DE LD DE,#4000 ... Он может выглядеть по другому (смотря чем паковали), но главное здесь -найти число 16384 (#4000) и увеличить старший байт на 128 (в результате получится #C000). Теперь ищем команды CP #58 и тоже уве- личиваем на 128. Только смотрите, не пе- рескочите распаковщик и не измените за- пакованные данные экрана... 4. Если мы имеем дело не с со всем эк- раном,а с его третями,то поступаем ана- логичным способом, только здесь может быть не #4000, а другое число. 5. Сохраняем измененный декомпрессор (разумеется с запакованной картинкой!) и в каком-нибудь ассемблере набиваем сле- дующий бред: DEPACK EQU 25000 EI LD A,23 LD BC,#7FFD OUT (C),A CALL DEPACK CALL MOVE LD A,16 LD BC,#7FFD OUT (C),A .... Где DEPACK - запакованный экран, а в метку MOVE можно поместить красивое проявление экрана или просто перебросить экран LDIR' ом. - 2 - Многие замечали,если запустить с TRDOS какую-нибудь игрушку и после старта лоадера меняется цвет (черный), очень все режет, сначала меняется бордер,затем экран (или наоборот), то есть полное от- сутствие синхронизации -такое я видел в 90% софта (!), хотя ради справедливости нужно заметить, что в современных прог- раммах все цивильно. А все очень просто. Чтобы все было плавно и не резало при смене экрана нуж- но пользоваться командой HALT. Пример: XOR A ; LD A,7 LD HL,#5800 LD DE,#5801 LD BC,767 LD (HL),L ; LD (HL),63 HALT OUT (#FE),A LDIR ... Warning! Перед запуском прерывания до- лжны быть разрешены! Рад, если эта информация кому-нибудь окажется полезной. Cannibal ... 22.06.99 █
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября