ZX-Ревю 1993 №5-6 1992 г.

Читатель - читателю - процедура проявления экрана "распахнутые двери или открытый занавес".


Темы статьи: Программирование  

РАСПАХНУТЫЕ ДВЕРИ ИЛИ ОТКРЫТЫЙ ЗАНАВЕС?

Глубокоуважаемая редакция!

Вот уже третий год я являюсь достоянным читателем Вашего журнала "ZX-РЕВЮ", неизменно следя за всеми публикациями, касающимися как "секретов" ZX-Spectrum, так и приемов программирования на языке Ассемблера Z-80. Сам я занимаюсь созданием микропроцессорных систем с начала 1988 года и не могу не оценить той услуги, которую Вы мне оказываете. Надо полагать, что эту услугу Вы оказываете всем читателям Вашего журнала!

За время работы со своим компьютером (я три года эксплуатировал "Новосибирский вариант", а сейчас уже год как построил "Москву-128" с Beta Disk Interface) мной создана довольно обширная библиотека процедур в машинных кодах, которую я широко использую при написании собственных программ.

Руководствуясь тем, что долги надо возвращать (а я, получая от Вас информацию, считаю себя Вашим должником), а также желая поделиться с другими читателями собственными разработками (негоже каждый раз изобретать заново велосипед), я отдаю на Ваш суд одну из своих разработок. Если сочтете необходимым, поступите с ней по Вашему усмотрению.

К написанию этой процедуры меня натолкнул эффект раздвигающихся дверей в игровой программе "ROBIN OF THE WOOD" фирмы "ODIN". Отсюда и название ее "DOORS". Не зная, как этот эффект достигается в фирменной программе (я ее не вскрывал, как-то еще не доходили руки), но встретив в '^-РЕВЮ-92" статью "40 лучших процедур", сразу все понял и спустя чуть больше двух часов подпрограмма была готова.

Предлагаемая процедура осуществляет очистку области пикселов и установку рабочих атрибутов экрана, но в отличие от стандартной процедуры ПЗУ CLS (#0D6B) этот процесс сопровождается сравнительно плавным перемещением пикселов влево и вправо от центра экрана (каждый раз на одно знакоместо слева и справа от центра) и заполнением свободных от пикселов столбиков новыми атрибутами, то есть довольно точно имитируется эффект раздвигающихся дверей. Процедура занимает 101 байт и еще один байт необходим для хранения данных - текущих атрибутов экрана (или вновь устанавливаемых атрибутов). Столь небольшой ее объем получен за счет использования всех регистровых пар как основного, так и альтернативного блоков, причем основной блок участвует в перемещении пикселов, а альтернативный - в установке атрибутов. Для обеспечения корректного выхода из процедуры требуется сохранение исходного адреса в регистровой паре H'L', что также осуществляется в ней, давая возможность ее использования и как машинно-кодовой вставки в BASIC-программы.

Для полной очистки всех строк пикселов экрана (#C0 - устанавливается в регистре C) требуется #0F пар перемещений знакомест (устанавливается в регистре B), тогда как число пар атрибутов, устанавливаемых в процессе работы, должно быть равно числу знакомест в полустроке, то есть #10. С этой целью в регистр A копируется константа #0F из регистра B, процесс перемещения пикселов завершается при обнулении регистра B, а процесс установки атрибутов - до появления отрицательного числа в аккумуляторе (контролируется флаг знака).

В регистровой паре HL устанавливается начальный адрес #4000 области пикселов, в регистровой паре H'L' - начальный адрес $5800 области атрибутов экрана. В регистровых парах DE и D'E' - количество знакомест в строке (#0020), а в регистре C - константа #18(24) -число знакорядов в экранной области.

В приведенном ниже листинге предлагаемой процедуры:

1) В адресах C000 - С009 - установка новых атрибутов экрана. Если предполагается сохранять атрибуты неизменными, то эти команды можно исключить вместе с константой в адресе C065 (ATTR) и устанавливать их непосредственно в командах по меткам A1 и A2. В

этом случае размер процедуры сокращается на 10 байт;

2) В адресах C015 - С01Е перемещение пикселов на одну пару знакомест во всех 192 (#C0) строках экранной области. При этом в адресах С016 - С020 - перемещение в левой половине экрана, начиная с левого края, а в адресах C023^02E - перемещение в правой половине экрана, начиная с правого края;

3)В адресах C03F - С045 - перемещение атрибутов на одну пару знакомест во всех 24 (#18) знакорядах экрана. При этом освободившиеся знакоместа заполняются новыми атрибутами. В адресах С040-С04В - операции в левой половине экрана, начиная с левого края, а в адресах С04Е-С054 - операции в правой половине экрана, начиная с правого края.

*********************************

C032

F1

POP

AF

(С)

SpySoft PROGRAM

"DOORS"

C033

3D

DEC

A

Written by

M. N.

Stinov

C034

D5

PUSH

DE

KHABAROVSK-1993

C035

06

EX

AF,AF'

*********************************

C036

D9

EXX

C000

ORG

#C000

C037

D1

POP

DE

C000

3A65TO

LD

A,(ATTR)

C038

E5

PUSH

HL

С003

3249С0

LD

(A1+1),A

C039

210058

LD

HL,#5800

C006

3258C0

LD

(A2+1),A

C03C

01180F

LD

DC,#OF18

C009

112000 DOORS

LD

DE,#0020

C03F

С5

L6

PUSH

BC

C00C

060F

LD

B,#0F

C040

E5

PUSH

HL

C00E

78

LD

A,B

C041

23

L3

INC

HL

C00F

F5

L7

PUSH

AF

C042

7E

LD

A,(HL)

C010

0EC0

LD

C,#C0

C043

2B

DEC

HL

C012

210040

LD

HL,#4000

C044

77

LD

(HL),A

C015

C5

L5

PUSH

BC

C045

23

INC

HL

C016

E5

PUSH

HL

C046

10F9

DJNZ

L3

C017

23

L1

INC

HL

C048

3500

A1

LD

(HL),#00

C018

7E

LD

A,(HL)

C04A

E1

POP

HL

C019

2B

DEC

HL

C04B

19

ADD

HL,DE

C01A

77

LD

(HL),A

C04C

C1

POP

BC

C01B

23

INC

HL

C04D

C5

PUSH

BC

C01C

10F9

DJNZ

L1

C04E

E5

PUSH

HL

C01E

72

LD

(HL),D

C04F

2B

DEC

HL

C01F

E1

POP

HL

C050

2B

L4

DEC

HL

C020

19

ADD

HL,DE

C051

7E

LD

A,(HL)

C021

C1

POP

BC

C052

23

INC

HL

C022

C5

PUSH

BC

C053

77

LD

(HL),A

C023

E5

PUSH

HL

C054

2B

DEC

HL

C024

2B

DEC

HL

C055

10F9

DJNZ

L4

C025

2B

L2

DEC

HL

C057

3500

A2

LD

(HL),#00

C026

7E

LD

A,(HL)

C059

E1

POP

HL

C027

23

INC

HL

C05A

C1

POP

BC

C028

77

LD

(HL),A

C05B

0D

DEC

C

C029

2B

DEC

HL

C05C

20E1

JR

NZ,L6

C02A

10F9

DJNZ

L2

C05E

E1

POP

HL

C02C

72

LD

(HL),D

C05F

D9

EXX

C02D

E1

POP

HL

C060

08

EX

AF,AF'

C02E

C1

POP

BC

C061

F20FCO

JP

P,L7

C02F

0D

DEC

C

C064

C9

RET

С030

20E3

JR

NZ,L5

C065

28

ATTR

DEFB

#28




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Системки - Оберон и ассемблер: Сопряжение с ассемблером (часть 2).
Listh language news - down pros and cons of lists vs. heap.
Премьера - Color Lines
Новости - Газете 2 года.
CSP`00 reроrt - отчет с Crazy Siberian Party 2000.

В этот день...   26 апреля