ZXNet эхоконференция «code.zx»


тема: Быстрейший кидальщик экрана



от: Alexey Voskresensk
кому: All
дата: 01 Jul 1997

Hi, кодирующий All!!!

Предлагаю вашему вниманию процедурку,
которая может быть вам полезна, а многих
натолкнет на различные идейки.
Это, по сути, инсталлятор другой проце-
дуры - "Быстрое кидалово экрана", в кото-
рый пакуется картинка. В среднем переброс-
ка 6912 байтов занимает 30000...60000 так-
тов. Почему такой разброс значений? А по-
тому что процедурой проводится "частотный
анализ данных", и, естесственно, переброс-
ка наполовину пустого экрана или заполнен-
ного частоповторяющимися значениями будет
занимать гораздо меньше времени, чем пе-
реброска полностью заполненного экрана.
Hо довольно лирики... Как же использо-
вать эту программу?
Во-первых, в рег. паре IX указать адрес
в памяти, где будет располагаться выбрасы-
ва9щая процедура вместе с запакованной
внутрь нее картинкой.
Во-вторых, в рег. паре HL указать адрес
конца картинки +1. Картинка должна быть
загружена в (#4000-$5B00).
В-третьих, рег. пара BC должна указывать
длину картинки, деленную пополам (напри-

мер, 6144/2). Затем можно вызвать процеду-
ру INSTALL. В результате ее работы:
1) с адреса IX будет раскрунчена картин-
ка в виде: ...LD DE,nn: PUSH DE: PUSH DE: LD DE,nn...;
2) после работы процедуры IX будет ука-
зывать на следующую ячейку памяти после
"кидалова экрана";
3) рег. пара BC будет содержать значе-
ние, равное количеству тактов, за которое
получившийся "кидальщик" будет выполнять
свою задачу.
Остальные комментарии по ходу процедуры.

====================== линия разгрыза =========================

; (c) 1997 Sudden Prodigy Incorporated

INSTALL LD IX,адрес расположения процедуры (напр., #8000)
LD HL,адрес конца экрана +1 (напр., #5B00)
LD BC,длина экрана/2 (напр., 6912/2=3456)

DI
EXX
LD BC,#0A ;количество тактов для подсчета (LD DE,nn -
; 10 тактов процессора Z80 :)
LD DE,#37 ;количество тактов на всякие подготовитель-
; ные операции
PUSH HL
LD H,D
LD L,H ;обнуляем HL
ADD HL,SP ;сохраняем SP
EX DE,HL
LD (IX+0),#F3 ;подготовительные операции:
LD (IX+1),#21 ; DI
LD (IX+2),H ; LD HL,#0000
LD (IX+3),H ; ADD HL,SP
LD (IX+4),#39 ; LD SP,nn
LD (IX+5),#31 ;
EXX
LD (IX+6),L ;адрес конца
LD (IX+7),H ; экрана
LD DE,#08
ADD IX,DE
LD SP,HL ;снимаем со стека
DEC SP ; первые 2 байта
DEC SP ; данных
POP HL ; экрана
PUSH HL
JR NEXT
AGAIN DEC SP ;снимаем
DEC SP ; со стека
POP HL ; текущие 2 байта
PUSH HL ; экрана
LD A,H ;частотный анализ :)
CP D ; если текущие два
JR NZ,NEXT ; байта данных
LD A,L ; не равны предыдущим
CP E ; двум байтам, то ОК, иначе
JR Z,YES! ; переход на YES!
NEXT EXX
ADD HL,BC ;прибавляем число тактов (LD DE,nn)
EXX
LD (IX+0),#11 ;LD DE,nn
LD (IX+1),L ; nn - текущие два
LD (IX+2),H ; байта экрана
INC IX
INC IX
INC IX
YES! EXX
ADD HL,BC ;прибавляем 11 тактов (PUSH DE)
INC HL
EXX
LD (IX+0),#D5 ;PUSH DE
INC IX
EX DE,HL ;сохраняем текущие 2 байта для сравнения
DEC BC ;если
LD A,B ; не все -
OR C ; тогда
JR NZ,AGAIN ; снова
LD (IX+0),#F9 ;LD SP,HL
LD (IX+1),#FB ; EI
LD (IX+3),#C9 ; RET
INC IX
INC IX
INC IX ;IX указывает на следующую
; ячейку после процедуры
EXX
EX DE,HL
LD SP,HL ;восстанавливаем SP
POP HL ;восстанавливаем HL (для BASIC'а)
PUSH DE
EXX
POP BC ;BC - количество тактов, которое
EI ; потребуется процедуре,
RET ; чтобы "кинуть" экран
; (PRINT USR INSTALL :)

================== линия разгрыза ============================

С приветом, LAS of "Sudden Prodigy Inc."

P.S. Компьютера у меня сейчас нету, так
что пинайте Юрия Буравцова за допущенные
ошибки при перепечатке :) - 812/01.14

P.P.S. Thanks to OneSOFT for help.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Железо - схема Псевдо Турбо для Скорпиона (ускорение 3%).
И смех и грех - Юмор, анекдоты.
Приложение - Presentation, Wanted.
Software - Обзор новых игровых программ: Mortal Kombat, Magic Stripes, Return to Home 4, Чёрный Ворон, Athena, Rescate Atlantida, Skull & Crossbones, Mario Islands demo.
Юмор - 10 новогодних анекдотов.

В этот день...   29 марта