ZX-Ревю 1994 №5 1993 г.

Читатель - читателю - хочу предложить читателям свою программу "SYMBOL-NINJA".


Процедура SYMBOL-NINJA

© Дмитрий Глотов, г. Нижний Новгород, 1994 г.

Я хочу предложить читателям свою программу "SYMBOL-NINJA". Эту небольшую процедуру можно использовать и для оформления программ, и для оформления загрузчика. Программа по одной букве, оригинальным образом выводит сообщение со звуковым сопровождением. Звуки я создавал с применением программы "SPECSOUND" и после программы привожу дисассемблер этих звуков. Программа выводит одну строку сообщения с одним звуком, а другую - с другим. Итак, программа.

00010

LEN

EQU

63

Полная длина сообщения.

00020

LEN1

EQU

32

Половина длины сообщения.

00030

ADR

EQU

22464

Адрес в дисплейном файле.

00040

ORG

40000

00050

ENT

00060

LD

HL,LEN

B HL - длина сообщения.

00070

LD

(BUFF),HL

Пересылка ее в буфер.

00080

LD

BC,ADR

Место вывода сообщения на экран.

00090

LD

IY,DATA

B IY - адрес сообщения.

00100

SCROLL

LD

L, (IY)

Код первого символа сообщения.

00110

LD

H, 0

Очистка Н.

00120

PUSH

IY

Сохранение регистров на стеке

00130

PUSH

BC

для последующих расчетов.

00140

LD

DE, (23606)

Расчет места

00150

ADD

HL, HL

шаблона символа

00160

ADD

HL, HL

в символьном

00170

ADD

HL, HL

наборе.

00180

ADD

HL, DE

00190

EX

DE, HL

00200

LD

H, B

00210

LD

L, C

B HL - адрес начала вывода символа.

00220

LD

A, 1

Нач. количество выводимых линий символа

00230

LOOP

LD

B, A

Счетчик выводимых на экран линий.

00240

PUSH

DE

Адрес первой линии символа.

00250

PUSH

HL

Адрес начала вывода сообщения.

00260

PUSH

AF

в А - количество выводов на экран, для вывода всего символа - 8 повтор.

00270

LOOP1

LD

A,(DE)

Переброска одной линии

00280

LD

(HL),A

символа на экран.

00290

PUSH

BC

Вызов

00300

CALL

WAIT

процедуры

00310

POP

BC

задержки.

00320

INC

DE

Переход к следующей линии символа.

00330

INC

H

Переход к месту печати следующей линии.

00340

DJNZ

LOOP1

Повторение для всех 8 линий символа.

00350

POP

AF

Восстановление

00360

POP

HL

значений

00370

POP

DE

регистров.

00380

DEC

H

Переход для вывода на 1 линию выше.

00390

Увеличение счетчика числа выводов.

00400

CP

9

Если выведены все 8 линий (А=9),

00410

JR

Z,LOOP2

то переход к выводу звука.

00420

JR

LOOP

Иначе - возврат и повторение.

00430

LOOP2

CALL

SOUND

Вызов звука.

00440

POP

BC

Восстановление адреса вывода сообщения,

00450

POP

IY

Восстановление адреса хранения сообщени

00460

INC

BC

Переход к следующему знакоместу.

00470

INC

IY

Переход к следующему символу.

00480

LD

A, (IY)

B A - код символа.

00490

CP

0

Проверка на маркер конца (А=0).

00500

JR

Z, END

Если конец достигнут, завершение.

00510

JR

SCROLL

Иначе - вывод следующего символа.

00520

WAIT

LD

BC,500

Время задержки.

00530

WAIT1

DEC

BC

Уменьшение счетчика задержки.

00540

LD

A, B

Проверка содержимого

ЧШСЯЖЕЛЪ

00550

OR

C

BC на ноль.

00560

OR

NZ,WAIT1 ;

Если нет, то повтор.

00570

RET

Иначе - возврат.

00580

END

LD

IY,23610

Восстанов. IY для корректного завершения

00590

RET

Выход из процедуры.

00600

DATA

DEFM

" WRITTEN BY

Текст сообщения.

00610

DEFM

" (C)CRYSTAL

00620

DEFM

"SOFT 1994 ;

00630

DEFM

" N.NOVGOROD

00640

DEFM

" TEL. (8312)

00650

DEFM

"54-95-320

00660

DEFB

0

Маркер конца сообщения.

00670

BUFF

DEFW

0

Буфер.

00680

SOUND

XOR

A

Обнуление А.

00690

LD

HL,(BUFF)

B HL - длина сообщения.

00700

DEC

L

Уменьшили на единицу.

00710

LD

(BUFF),HL

Зафиксировали новую длину.

00720

LD

A, L

Проверка достижения половины.

00730

CP

LEN1 ;

Половина сообщения достигнута?

00740

JR

CSOUND2

Если да, то смена звука.

00750

SOUNDI

LD

C,1 ;

Процедура

00760

N1

LD

B, 15

"звук 1",

00770

N2

LD

HL,100

используется

00780

PUSH

BC

при выводе

00790

LD

DE,1 ;

первой

00800

PUSH

HL

ПОЛОВИНЫ

00810

CALL

#03B5

сообщения.

00820

POP

HL

00830

LD

DE,100 ;

00840

ADC

HL, DE

00850

POP

BC

00860

DJNZ

N2

00870

LD

A,2 ;

00880

INC

C

00890

LD

B, C

00900

CP

B

00910

OR

NZ, N1

00920

RET

00930

SOUND2

LD

C,1 ;

Процедура

00940

N3

LD

B, 3

"звук 2",

00950

N4

LD

HL,300

используется

00960

PUSH

BC

при выводе

00970

LD

DE,8 ;

второй

00980

PUSH

HL

половины

00990

CALL

#03B5

сообщения.

01000

POP

HL

01010

LD

DE,300 ;

01020

ADC

HL, DE

01030

POP

BC

01040

DJNZ

N4

01050

LD

A,2 ;

01060

INC

C

01070

LD

B, C

01080

CP

B

01090

JR

NZ, N3

01100

RET

Start

of object: #9C40

(40000)

Length

: #00EB

(00235)

Executes

: # 9C4 0

(40000)

Теперь, как обычно, приводим шестнадцатеричный дамп приведенной процедуры. Стартовый адрес -40000, длина - 235 байт:

9C40

21

3F

00

22

DC

9C

01

C0

97

9C48

57

FD

21

9C

9C

FD

6E

00

FC

9C50

26

00

FD

E5

C5

ED

5B

36

37

9C58

5C

29

29

29

19

EB

60

69

98

9C60

3E

01

47

D5

E5

F5

1A

77

C2

9C68

C5

CD

8E

9C

C1

13

24

10

C8

9C70

F5

F1

E1

D1

25

3C

FE

09

0C

9C78

28

02

18

E6

CD

DE

9C

C1

44

9C80

FD

E1

03

FD

23

FD

7E

00

98

9C88

FE

00

28

0B

18

BF

01

F4

21

9C90

01

0B

78

B1

20

FB

C9

FD

42

9C98

21

3A

5C

C9

20

57

52

49

C6

9CA0

54

54

45

4E

20

42

59

20

52

9CA8

28

43

29

43

52

59

53

54

6D

9CB0

41

4C

53

4F

46

54

20

31

66

9CB8

39

39

34

20

20

4E

2E

4E

04

9CC0

4F

56

47

4F

52

4F

44

20

9C

9CC8

54

45

4C

2E

28

38

33

31

3B

9CD0

32

29

35

34

2D

39

35

2D

F8

9CD8

33

32

30

00

00

00

AF

2A

E2

9CE0

DC

9C

2D

22

DC

9C

7D

FE

36

9CE8

20

38

20

0E

01

06

0F

21

41

9CF0

64

00

C5

11

01

00

E5

CD

79

9CF8

B5

03

E1

11

64

00

ED

5A

E9

9D00

C1

10

EC

3E

02

0C

41

B8

9F

9D08

20

E3

C9

0E

01

06

03

21

AA

9D10

2C

01

C5

11

08

00

E5

CD

6A

9D18

B5

03

E1

11

2C

01

ED

5A

D3

9D20

C1

10

EC

3E

02

0C

41

B8

BF

9D28

20

E3

C9

00

00

00

00

00

91

И еще несколько слов о процедурах звуковых эффектов, отмеченных в листинге метками SOUND1 и SOUND2. Те, кто хочет получить исчерпывающую информацию на эту тему, могут обратиться к материалу, подготовленному в свое время Андреем Алексеевым (см. РЕВЮ-92, № 11-12, стр. 241).

* * *




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
СС'99 - интервью: Random/CC (отмазки о слабой орагнизации СС'99).
Реклама - Редакции газеты "AMIGOZ" требуются корреспонденты.
Мир звуков Спектрума - глава 7.2: Музыкальный редактор Wham the Music Box.
Упрaжнeния в прeзeнт кoнтиниyc тeнc - Для строителей воздушных замков...
Аперативчик - Новогодний выпуск DEJA VU...

В этот день...   24 ноября