|
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 █
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября