ZX-Ревю 1995 №3 1994 г.

Этюды - результат благодаря паре оригинальных идей, на которых мы остановимся подробнее.


ЭТЮДЫ

SRL Е

DJNZ L1 RET

Итак, яе очфиь длинная процедура плавного гашения экраиа может выглядеть так:

можно оставить только:

L2

SRL (HL)

что даст немалую экономию. Полу-

PAUSE

EQU

4

чилась се

шее*

KopowcM процедура,

LD

E, X0111U11

ее длина

- 22

байта:

LD

B,8

L1

LD

HL,#5800

PAUSE

EQU

4

L2

LD

A,(HL)

LD

В,8

AND

E

LI

LD

HL,#5800

LD

(HL),A

L2

SRL

(HL)

INC

HL

INC

HL

LD

A,H

LD

A,H

CP

#5B

CP

#5B

JR

NZ,L2

JR

NZ,L2

LD

C,PAUSE

LD

C,PAUSE

L3

HALT

L3

HALT

DEC

С

DEC

С

JR

NZ,L3

JR

NZ,L3

SRL

E

DJNZ

LI

DJNZ

LI

RET

RET

Ассемблируем ее и смотрим, что получилось. Результат - 27 байтов. Теперь посмотрим, что в ней можно усовершенствовать.

Предложенный алгоритм с маской» присланный большинством чи-

однако изменение алгоритма проявилось в не очень приятном эффекте при работе. Это связано с тем, что значение PAPER, сдвигаясь вправо, становится INK'ом, что вызывает кратковременное "вспыхивание" последнего. Были также предложения внесто SRL (HL) использовать команду SLA (HL), что через восемь повторений также приведет к очистке экрана. Но, видимо, все-таки на такое ухудшение эффекта не стоит идти ради нескольких байтов.

Теперь обратинся к работе, которую прислал поОелиявль - А.Па-лоусов (г.Комсомольск-на-Амуре). Присланные им 24 байта пока что являются лучшим вариантом. А достигнут такой результат благодаря паре оригинальных идей, на которых мы остановимся подробнее.

Первая оригинальная идея. Команда :

LD HL,#5800

занимает 3 байта. Но в регистр L все равно заносится ноль. Этим обстоятельством удобно воспользоваться, поменяв порядок следования частей процедуры: вначале задержка, затем - уменьшение числа в файле атрибутов. При этой, используя для задержки регистр L, который к концу задержки все равно обнуляется, удалось выгадать еще один байт (см. строки 50-90 листинга ниже).

Вторая оригинальная идея. Не обязательно организовывать цикл из 8 повторений, используя регистр В и последующую команду DJNZ ... Вполне можно обойтись и регистром, в котором хранится маска. При каждом SRL-сдвиге очередная "единица" будет передаваться флагу С, и как только "единицы" кончатся, значение флага изненится, что и послужит сигналом к завершению процедуры (см. строку 180 листинга ниже).

Итак, наиболее оптинальный вариант процедуры-победителя:

00010

PAUSE

EQU

4

00020

ORG

40

00030

ENT

00040

LD

в,:

00050

L1

LD

L,1

00060

L3

HALT

00070

DEC

L

00080

JR

NZ

00090

LD

H,

00100

L2

LD

A,

00110

AND

В

00120

LD

(HL),A

00130

INC

HL

00140

LD

A,H

00150

CP

#5B

00160

JR

NZ,L2

00170

SRL

В

00180

JR

С,LI

00190

RET

Start of object: #9С40 (40000)

Length : #0018 (00024)

Executes : #9C40 (40000)

Шестнадцатиричный дамп процедуры:

9С40: 06 7F 2Е 04 76 2D 20 FC :52 9С48: 26 58 7Е АО 77 23 7С FE :94 9С50: 5В 20 F7 CB 38 38 ЕВ С9 :4D

Справедливости ради сообщаем, что вторая оригинальная идея содержалась также и в програиие, которую прислал Александр Корота (г.Краснодар), однако в целом его программа немного "не дотянула" до победы.

Теперь еще одно частное замечание, касающееся скорости очистки экрана. Может быть, нет необходимости занимать для задержки даже 6 байтов с однобайтовым регистром. Вполне приемлемый зрительный эффект получается при значении PAUSE=3 или даже PAUSED , следовательно, вместо шести иожно обойтись вообще треня байтами :

HALT HALT HALT

(или даже двуня, ускорив процедуру еще на один HALT). При этом процедура превратится в ну очень короткую, однако это совсен уж частный случай, поэтому он при подсчете байтов учитываться не будет, хотя на практике вполне ножет использоваться.

Хотим также отметить работу Антона Сидоренко (п.Мурмаши). Длина его процедуры 25 байтов, и хотя это на один байт длиннее работы А.Палоусова, но в его работе тоже содержится момент, заслуживающий внимания. Хитрость заключается в использовании для задержки все того же регистра HL, отслеживающего адрес. Вот как этот момент реализован в его процедуре (см. строки 120-150):

ЭТЮДЫ

00010

ORG

40000

00020

ENT

00030

LD

C,*01111111

00040

L1

LD

HL,#5800

00050

L2

LD

A,(HL)

00060

AND

С

00070

LD

(HL),A

00080

INC

HL

00090

LD

A,H

00100

CP

#5B

00110

JR

NZ ,L2

00120

L3

DEC

HL

00130

LD

A,H

00140

CP

#50

00150

JR

NZ,L3

00160

SRL

С

00170

JR

С,LI

00180

RET

Start of object: #9C40 (40000)

Length : #0019 (00025)

Executes : #9C40 (40000)

Задержка определяется числом в строке 140, с которым сравнивается значение HL, которое к этому моменту равно #5В00. Минимальная задержка здесь будет при сравнении с числом #5А (практически отсутствие задержки, так как это значение регистр Н примет всего после одной команды DEC HL; после #5В00 в HL станет #5AFF). Максимальную задержку даст сравнение с

числом #5В.

Иной вариант, дающий тот же результат:

L3 INC HL

LD А,Н

CP #66

JR NZ,L3

Хотя оба варианта с использованием для задержки регистра HL не дают выигрыша перед использованием однобайтового регистра (длина фрагмента тоже 6 байтов), однако такой прием может пригодиться в тех случаях, когда прерывания по какому-либо условию запрещены, так что нет возможности воспользоваться для задержки командой HALT и однобайтовым счетчиком. Иными словами можно сказать, что повышается универсальность процедуры.

Кстати, Антон Сидоренко прислал и процедуру для плавного зажигания экрана, которую можно использовать в паре с процедурой гашения экрана. Экран должен быть заранее помещен по адресу, указанному меткой BUFF.

00010

BUFF EQU

41000

00020

ORG

40025

00030

ENT

00040

LD

HL,BUFF

00050

LD

DE,16384

00060

LD

BC,614 4

00070

LDI*

00080

LD

C,0

00090

L2

LD

HL,22528

00100

LD

DE,BUFF+6144

00110

L0

LD

A,(DE)

00120

AND

С

00130

LD

(HL),A

00140

INC

HL

00150

INC

DE

00160

LD

A,H

00170

CP

91

00180

JR

NZ,L0

00190

LI

DEC

HL

00200

LD

A,H

00210

CP

65

00220

JR

NC,L1

00230

RL

С

00240

JR

NC,L2

00250

RET

Start

of

object:

#9C59 (40025)

Length

:

#0028 (00040)

Executes

#9С59 (40025)

Вместе обе процедуры занимают 65 байтов (вместо 128 у Александра Шишкина).

При переброске дисплейного файла в экран (строки 40-70), картинка сразу же проявляется цветом INK. Поэтому перед переброской экран должен быть очищен с

ЭТЮДЫ

установкой PAPER 0; INK 0 обяза

00100

LD

(DE),A

тельно no всему экрану, включая

00110

INC

DE

две нижних строки. Из Бейсика это

00120

INC

HL

можно выполнить так:

00130

DEC

ВС

00140

LD

А,В

BORDER 0: PAPER 0: INK 0:

00150

OR

С

РОКЕ 23624,0; CLS

00160

JR

NZ,LP2

00170

HALT

но проще сделать это из машинного

00180

HALT

кода, дополнив

процедуру Антона

00190

HALT

следующими строками:

00200

HALT

00210

POP

AF

00031

LD HL,16384

00220

DEC

A

00032

LD DE,16385

00230

JR

NZ,LP1

00033

LD (HL),L

00240

RET

00034

LD ВС,6911

00035

LDIR

Start of object:

Ц9С40 (40000)

Length

: #001F (00031)

что удлинит процедуру на 12 бай

Executes

: #9C40 (40000)

тов, однако повысит ее качество.

Можно

менять

. параметр в строке

Шестнадцатиричный дамп объеди

40 - это число проходов по экра

ненного блока:

ну, от которого зависит качество

очистки.

А также параметр в стро-

9С40: OE FF 21

00 58 7Е А1 77 :F8

ке 70: 6912 -

с атрибутаии; 6144

9С48: 23 7С FE

5В 20 F7 2В 7С :9А

- без атрибутов.

9С50: FE 4В 20

FA СВ 39 38 ЕА .75

При значении 6912

первый napa-

9С58: С9 21 00

40 11 01 40 75 :Е5

метр может быть меньше.

9С60: 01 FF 1А

ED ВО 21 28 АО :9С

9С68: 11 00 40

01 00 18 ED ВО :0В

Шестнадцатиричный дамп:

9С70: 0Е 00 21

00 58 11 28 В8 :84

9С78: 1А А1 77

23 13 7С FE 5В :51

9С40: 21

00 00

ЗЕ 0А

F5 11 00 :4B

9С80: 20 F6 2В

7С FE 41 30 FA :42

9С48: 40

01 00

18 1А

A6 12 13 :22

9С88: СВ 11 30

Е6 С9 00 00 00 :DF

9С50: 23

0В 78

В1 20

F6 76 76 :45

9С58: 76

76 F1

3D 20

E7 C9 00 :DE

Программы, выполняющие эффекты

с экраном (гашение или вывод кар

(С) Алексей

Соколов (Hackers

тинки) содержатся и в других

United Group),

г.Чебоксары, 1995.

письмах. Вот некоторые из них.

Предлагаю ною собственную про

цедуру в

духе гашения экрана, но

(С) Александр Корота (THREE STARS

делающую

это,

по-иоеиу, гораздо

CO.,LTD),

г.Краснодар, 1995.

эффектнее:

Процедура реализует затухание

00010

PAUSE

EQU

2500

экрана по точкам, в случайной по

00020

ORG

40000

рядке .

00030

ENT

00040

LD

DE, 7

00010

ORG 40000

00050

LD

C,7

00020

ENT

00060

L5

LD

B, 7

00030

LD HL,0

00070

LD

HL,22528

00040

LD A,10

00080

L4

PUSH

HL

00050 LP1

PUSH AF

00090

L3

LD

A,(HL)

00060

LD DE,16384

00100

AND

63

00070

LD ВС,6144

00110

SUB

8

00080 LP2

LD A,(DE)

00120

JR

C,L1

00090

AND (HL)

00130

LD

(HL),A

ЭТЮДЫ

00140 LI 00150 00160 00170 L2 00180 00190 00200 00210 00220 L6 00230 00240 00250 00260 00270 00280 00290 00300 00310

Start of object: #9C40 (40000) Length : #002E (00046)

Executes : #9C40 (40000)

Шестнадцатиричный дамп:

9C40: 11 07 00 OE 07 06 07 21 :37

9C48: 00 58 E5 7E E6 3F D6 08 :A2

9C50: 38 01 77 E6 07 28 01 35 :E7

9C58: 19 FE 5B 38 ED 21 C4 :EC

9C60: 09 2B 7C B5 20 FB El 23 :80

9C68: 10 E0 OD 20 D8 C9 00 00 :C2

Если строку 70 переименовать в 35, а строку 270 в 285, то получится не менее интересный эффект.

Следующая программа выполняет вывод на экран картинки довольно эффектным образом.

Похожий эффект мы видели в дисковой версии игры ROCK STAR. Условно назовем его "наливание экрана". При работе программы необходимо, чтобы цвет INK на экране был контрастен цвету PAPER. Хорошие результаты дает темный PAPER и светлый INK.

При разработке программы я использовал несколько измененную процедуру А.А.Иванова для расчета адреса знакоместа в экранной области . Картинка предварительно помещается по адресу, указанному меткой BUFF.

00010 BUFF EQU 41000 00020 ORG 40000

00030 ENT

AND

7

JR

Z,L2

DEC

(HL)

ADD

HL,DE

LD

A,H

CP

91

JR

C,L3

LD

HL,PAUSE

DEC

HL

LD

A,H

OR

L

JR

NZ ,L6

POP

HL

INC

HL

DJNZ

L4

DEC

С

JR

NZ,L5

RET

00040

LD

C, 191

00050

L2

LD

B,C

00060

LD

А,В

00070

CALL

ADR

00080

LD

HL,BUFF-16384

00090

ADD

HL,DE

00100

LI

LD

А,В

00110

CALL

ADR

00120

PUSH

BC

00130

PUSH

HL

00140

LD

BC, 32

00150

LDIR

00160

POP

HL

00170

POP

BC

00180

DJNZ

LI

00190

DEC

С

00200

JR

NZ ,L2

00210

LD

HL,BUFF+6144

00220

LD

DE,22528

00230

LD

BC,768

00240

LDIR

00250

RET

00260

ADR

LD

D, 0

00270

RRCA

00280

RRCA

00290

RRCA

00300

AND

31

00310

LD

E, A

00320

AND

7

00330

RRCA

00340

RRCA

00350

RRCA

00360

ADD

A,D

00370

LD

D,E

00380

LD

E,A

00390

LD

A,D

00400

AND

#18

00410

OR

#40

00420

LD

D, A

00430

LD

А,В

00440

AND

7

00450

RET

Z

00460

L3

INC

D

00470

DEC

A

00480

JR

NZ,L3

00490

RET

Start of object: #9C40 (40000) Length : #0048 (00072)

Executes : #9C40 (40000)

Шестнадцатиричный дамп:

9C40: 0E BF 41 78 CD 69 9C 21 :55

9C48: 28 60 19 78 CD 69 9C C5 :94

9C50: E5 01 20 00 ED B0 El Cl :31

9C58: 10 F1 0D 20 E5 21 28 B8 :08

9C60: 11 00 58 01 00 03 ED B0 :06

ЭТЮДЫ

9С68: С9 16 00

OF OF

OF E6 IF :15

После завершения работы первой

9С70: 5F Бб 07

OF OF

OF 82 53 :5A

программы, картинку

иожно эапи-

9С78: 5F 7А Еб

18 F6

40 57 78 :F0

сать на диск или ленту, чтобы по

9С80: Еб 07 С8

14 3D

20 FC C9 :07

том красиво выдать

ee на экран

при поиощи второй програииы:

(С) Руслан Васильков

г.Зелено-

00010 BUFF

EQU

41000

горек (Красноярск-45), 1995.

00020

ORG

40100

00030

ENT

Хочу предложить программу, ко

00040

XOR

A

торая выводит

на экран заставку,

00050

LD

(SYSTEM),A

но необычный способом. Формат эк

00060

LD

IX,BUFF

рана существенно отличается от

00070

LD

ВС,6144

стандартного

фориата - это боль-

00080

ADD

IX, ВС

шой спрайт. Первая програииа пе

00090

LD

HL,BUFF

реформатирует

картинку, эагружен-

00100

LD

B,0

ную на экран.

Реэультат будет по-

00110

CALL

LINE

иещен в буфер

, указанный меткой

00120 START

PUSH

ВС

BUFF.

00130

PUSH

IX

00140

PUSH

DE

00010 BUFF

EQU

41000

00150

LD

ВС, 32

00020

ORG

40000

00160

LDIR

00030

ENT

00170

POP

DE

00040

LD

HL,16384

00180

PUSH

DE

00050

LD

DE,BUFF

00190

LD

A,D

00060

LD

B, 192

00200

RRCA

00070 LOOP

PUSH

ВС

00210

RRCA

00080

PUSH

HL

00220

RRCA

00090

LD

ВС,32

00230

AND

3

00100

LDIR

00240

OR

88

00110

POP

HL

00250

LD

D,A

00120

POP

ВС

00260

LD

ВС, 32

00130

CALL

LINE

00270

PUSH

HL

00140

DJNZ

LOOP

00280

PUSH

IX

00150

LD

HL,BUFF

00290

POP

HL

00160

LD

DE,22528

00300

LDIR

00170

LD

ВС,6144

00310

POP

HL

00180

ADD

HL,BC

00320

POP

DE

00190

EX

DE,HL

00330

POP

IX

00200

LD

ВС,768

00340

POP

ВС

00210

LDIR

00350

LD

A,(SYSTEM)

00220

RET

00360

INC

A

00230 LINE

INC

H

00370

CP

8

00240

LD

A,H

00380

JR

NZ,GOTO

00250

AND

7

00390

XOR

A

00260

RET

NZ

00400

PUSH

ВС

00270

LD

A,L

00410

LD

ВС, 32

00280

ADD

A,32

00420

ADD

IX, ВС

00290

LD

L, A

00430

POP

ВС

00300

RET

С

00440 GOTO

LD

(SYSTEM),А

00310

LD

A,H

00450

PUSH

ВС

00320

SUB

8

00460

PUSH

DE

00330

LD

H,A

00470

PUSH

HL

00340

RET

00480 LOOP

CALL

LINE

00490

PUSH

DE

Start of object: #9040 (40000)

00500

PUSH

ВС

Length

: #0036 (00054)

00510

LD

ВС, 32

Executes

: #9C40 (40000)

00520

SBC

HL,BC

ЭТЮДЫ

00530

LDIR

00540

POP

BC

00550

POP

DE

00560

INC

В

00570

LD

А,В

00580

CP

192

00590

JR

NZ,LOOP

00600

POP

HL

00610

POP

DE

00620

POP

BC

00630

INC

в

00640

CALL

LINE

00650

LD

А,В

00660

CP

192

00670

JR

NZ,START

00680

RET

00690

LINE

LD

А,В

00700

AND

56

00710

RLCA

00720

RLCA

00730

LD

E,A

00740

LD

А,В

00750

AND

192

00760

RRCA

00770

RRCA

00780

RRCA

00790

OR

64

00800

LD

D, A

00810

LD

А,В

00820

AND

7

00830

OR

D

00840

LD

D,A

0Q850

RET

00860

SYSTEM

DEFB

0

Start of object: #9CA4 (40100)

Length : #0084 (00132)

Executes : #9CA4 (40100)

Дампы обоих процедур:

9C40:

21

00

40

11

28

AO

06

CO

:DC

9C48:

C5

E5

01

20

00

ED

BO

El

:2D

9C50:

CI

CD

57

9C

10

F2

21

28

:C8

9C58:

AO

11

00

58

01

00

18

09

: IF

9C60:

EB

01

00

03

ED

BO

C9

24

: 75

9C68:

7C

E6

07

CO

7D

C6

20

6F

: FF

9C70:

D8

7C

D6

08

67

C9

00

00

:6E

9CA4:

AF

32

27

9D

DD

21

28

AO

:AB

9CAC:

01

00

18

DD

09

21

28

AO

: 30

9CB4 :

06

00

CD

12

9D

C5

DD

E5

: 59

9CBC:

D5

01

20

00

ED

BO

DI

D5

: 91

9CC4:

7A

OF

OF

OF

E6

03

F6

58

:3E

9CCC:

57

01

20

00

E5

DD

E5

El

: 68

9CD4:

ED

BO

El

DI

DD

El

CI

ЗА

: 78

9CDC:

27

9D

3C

FE

08

20

08

AF

: 55

9CE4:

C5

01

20

00

DD

09

CI

32

:3F

9CEC: 27 9D C5 D5 E5 CD 12 9D :47

9CF4: D5 C5 01 20 00 ED 42 ED :67

9CFC: B0 CI DI 04 78 FE CO 20 :34

9D04: EC El DI CI 04 CD 12 9D :80

9D0C: 78 FE CO 20 A8 C9 78 E6 :CE

9D14: 38 07 07 5F 78 E6 CO OF :83

9D1C: OF OF F6 40 57 78 E6 07 :C9

9D24: B2 57 C9 00 00 00 00 00 :93

Эффект похож на имеющийся в ROCK STAR или на программу предыдущего корреспондента. В предлагаемой программе процесс идет сверху вниз, поэтому условно его можно было бы назвать "налива-ние-наоборотм (может быть кто-то придумает более подходящее название). Кроме этого, в процесс вовлекаются и атрибуты, отче,го эффект, безусловно, выигрывает. Зато приходится предварительно кодировать картинку. Оптимальным был бы вариант объединения положительных качеств двух этих программ.

И еще одна программа очистки экрана. Правда она довольно долго работает (около б сек.), но мне все же нравится.

00010

ORG

40000

00020

ENT

00030

START

LD

HL,16384

00040

LD

DE,6144

00050

PUSH

DE

00060

POP

BC

00070

LI

LD

A,(HL)

00080

CP

0

00090

JR

Z,L2

00100

CALL

L4

00110

LD

(HL),A

00120

JR

L3

00130

L2

DEC

DE

00140

L3

INC

HL

00150

DEC

BC

00160

LD

А,В

00170

OR

С

00180

JR

NZ ,L1

00190

LD

A,D

00200

OR

E

00210

JR

NZ,START

00220

RET

00230

L4

LD

(M2),A

00240

LD

A,(Ml)

00250

CP

0

00260

JR

Z,L5

00270 00280 00290

00300

00301

00302

00303 00310 00320 L5 00330 00340 00350 00360 00370 00380 00390 00400 N1 00410 М2

A

(Ml),A A,(M2)

Start of object: #9C40 (40000) Length : #0050 (00080)

Executes : #9C.40 (40000)

Некоторые комментарии. Эффект создается за счет сдвига битов в ячейках дисплейного файла влево (RLA) и вправо (RRA) в строках

300-301 и 350-380. Дело в том, что в авторском варианте строки

301-303 отсутствовали. Но здесь есть одна тонкость. Поскольку в ротацию вовлечен флаг С, то для полного оборота одного бита требуется девять, а не восемь команд RRA или RLA. Рассмотрим, что будет, если в строках с 300 будет одна команда RLA, а в строках с 350 - четыре команды RRA.

с

->-EbJ

Бит 5, например, после этого (еле во-вправо-вправо-вправо-вправо) окажется на месте бита 2. При следующем цикле он окажется в флаге С и, за счет этого, в дисплейном файле станет одним включенным битом меньше. Но если это будет, скажем, б бит, то его дальнейшая судьба будет такой:

6 - з - о - б ... и так далее по кругу, то есть невозможна ситуация, при которой этот бит попадает во флаг С. В

A

(Ml),A A,(M2)

XOR

LD

LD

RLA

RLA

NOP

NOP

RET

INC

LD

LD

RRA

RRA

RRA

RRA

RET

DEFB

DEFB

это время перед Вами на экране наблюдается указанное бесконечное перемещение битов, но выхода из программы не произойдет.

Поэтому, чтобы программа не зацикливалась и не зависала, необходимо, чтобы результат суммы команд RLA и RRA не был кратен трем или девяти. Для этого и добавлена еще одна команда RRA в строке 301. Но для чего еще две команды NOP ? Это сделано для возможности последующей модификации программы из Бейсика или машинного кода (снижения ее детерминированности) . Дело в том, что комбинируя различное количество команд RRA и RLA (или только одной из них) в строках 300-303 и 350-380, можно получить интересные эффекты - попробуйте.

Кроме того, нам кажется, что атрибуты, остающиеся на экране после отработки программы, оставляют впечатление незавершенности. Поэтому рекомендуем дополнить программу еще несколькими строками:

00021 LD HL,22528

00022 LD DE,22529

00023 LD (HL),7

00024 LD ВС,767

00025 LDIR

ЭТЮДЫ

В строке 23 задается любое подходящее значение атрибутов (в данном случае PAPER 0; INK 7).

Шестнадцатиричный дамп:

9С40

21

00

58

11

01

58

36

07

:FC

9С48

01

FF

02

ED

ВО

21

00

40

:Е4

9С50

11

00

18

D5

С1

FE

00

: 27

9С58

28

06

CD

77

18

01

: 87

9С60

23

OB

78

В1

20

ЕЕ

:F6

9С68

ВЗ

20

Е2

С9

32

8F

ЗА

: 19

9С70

FE

00

28

ОС

AF

32

: 49

9С78

ЗА

8F

17

17

00

:D1

9С80

00

С9

ЗС

32

ЗА

8F

: 46

9С88

1F

IF

IF

1F

С9

00

00

: 05

(С) Георгий Новиков,

г.Серпухов, 1995.

Предлагаю программу для вывода на экран картинки.

ЭТЮДЫ

00060

LD

(HL),7

00010

BUFF EQU

41000

00070

LDIR

00020

ORG

40000

00080

LD

B,#10

00030

ENT

00090

ONE

PUSH

BC

00040

XOR

A

00100

HALT

00050

LD

BC,23295

00110

LD

A,R

00060

LI

LD

HL,16384

00120

LD

L,A

00070

LD

DE,BUFF

00130

LD

B,A

00080

L2

EX

DE,HL

00140

LD

H, #23

00090

SLA

(HL)

00150

LD

DE,16384

00100

EX

DE,HL

00160

LD

BC,6144

00110

RL

(HL)

00170

LDIR

00120

INC

HL

00180

POP

BC

00130

INC

DE

00190

DJNZ

ONE

00140

PUSH

HL

00200

RET

00150

SCF

00160

SBC

HL,BC

Start

of

object:

#9C40 (40000)

00170

POP

HL

Length

: #0023 (00035)

00180

JR

NC,L3

Executes

: #9C40 (40000)

00190

JR

L2

00200

L3

INC

A

Шестнадцатиричный дамп:

00210

CP

8

00220

JR

C,L1

9C40: 21

00

58

11 01

58 01 FF :BF

00230

RET

9C48: 02

36

07

ED B0

06 10 C5 :9B

9C50: 76

ED

5F

6F 47

26 23 11 :BE

Start

of

object:

«9С40 (40000)

9C58: 00

40

01

00 18

ED B0 CI :AB

Length Executes

«0021 (00033) #9C40 (40000)

:С2

Шестнадцатиричный дамп:

9C40: АР 01 PF 21 00 40 11 :57

9С48: 28 АО ЕВ СВ 26 ЕВ СВ 16 :54

9С50: 23 13 Е5 37 ED 42 Е1 30 :7Е

9С58: 02 18 EF ЗС FE 08 38 Е4 :5В

9С60: С9 00 00 00 00 00 00 00 ;С5

(С) Владимир Маркелов,

г.Кореновск,

1995.

Меня заинтересовала ваша статья об оригинальных шрифтах, которые можно получить из стандартного. Я придумал еще одну программу формирования оригинального шрифта.

(С) Руслан Крылов,

г.Владивосток, 1995.

00010

ADR

EQU

4Ю00

00020

ORG

40000

Хочу

предложить небольшую

00030

ENT

программу,

, которая создает эффект

00040

LD

HL,15615

"помехии

на экране телевизора.

00050

LD

DE,ADR

Она может

использоваться, напри-

00060

LD

BC,768

мер так:

эапуск "помехи", затем

00070

NEXT

PUSH

DE

вывод картинки или какой-либо

00080

LD

A,(HL)

надписи.

00090

AND

X00001111

В строке 60 можно произвольно

00100

LD

D,A

задавать

цвет помехи (атрибуты

00110

LD

А,С

экрана).

00120

AND

X00000111

00130

AND

A

00010

ORG 40000

00140

JR

NZ,M1

00020

ENT

00150

LD

D, 0

00030

LD HL,22528

00160

Ml

LD

A,D

00040

LD DE,22529

00170

INC

HL

00050

LD BC,767

00180

OR

(HL)

ЭТЮДЫ

00190

LD

D,A

00200

INC

HL

00210

LD

A,(HL)

00220

DEC

HL

00230

AND

X11110000

00240

LD

E,A

00250

LD

А,С

00260

AND

300000111

00270

CP

1

00280

DR

NZ,M2

00290

LD

E, 0

00300 М2

LD

A,E

00310

OR

D

00320

POP

DE

00330

LD

(DE),A

00340

INC

DE

00350

DEC

ВС

00360

LD

А,В

00370

OR

С

00380

3R

NZ,NEXT

00390

RET

Start of object: #9C40 (40000) Length : #003A (00058)

Executes : #9040 (40000)

Можно, no желанию, дополнить процедуру парой строк, подключающих полученный символьный набор:

00381 LD HL,ADR-256

00382 LD (23606),HL

Шестнадцатиричный дамп:

9C40:

21

FF

3C

11

28

AO

01

00

: 12

9C48:

03

D5

7E

Еб

OF

57

79

E6

:E5

9C50:

07

A7

20

02

16

00

7A

23

: 6F

9C58:

B6

57

23

7E

2B

Еб

F0

5F

: 02

9C60:

79

E6

07

FE

01

20

02

IE

:A1

9C68:

00

7B

B2

D1

12

13

0B

78

: AA

9C70:

B1

20

D6

21

28

9F

22

36

:F3

9C78:

5C

C9

00

00

00

00

00

00

: 39

(С) Дмитрий Наумов,

г.Кемерово, 1995.

Предлагаю в рубрику "Этюды" свою програииу "Печатающий квадрат" . Впервые я ее увидел в книге "Как написать игру" фириы "Питер", но там она была на Бейсике и я решил сделать ее в кодах.

Текст сообщения должен располагаться в саиой первой Бейсик -строке после REM.

00010

ORG

40000

00020

ENT

00030

LD

A,2

00040

CALL

5633

00050

LD

A,22

00060

RST

16

00070

XOR

A

00080

RST

16

00090

XOR

A

00100

RST

16

00110

LD

HL,23872

00120

LOOP

LD

A,(HL)

00130

CP

13

00140

OR

Z,END

00150

RST

16

00160

LD

A,143

00170

RST

16

00180

LD

A,8

00190

RST

16

00200

INC

HL

00210

HALT

00220

HALT

00230

HALT

00240

HALT

00250

HALT

00260

DR

LOOP

00270

END

LD

A,32

00280

RST

16

00290

RET

Start of object: #9C40 (40000)

Length : #0027 (00039)

Executes : #9C40 (40000)

Шестнадцатиричный дамп:

9C40: ЗЕ 02 CD 01 16 ЗЕ 16 D7 :2В

9С48: AF D7 AF D7 21 40 5D 7E :2C

9C50: FE 0D 28 OF D7 3E 8F D7 :A9

9C58: 3E 08 D7 23 76 76 76 76 :0C

9C60: 76 18 EC 3E 20 D7 C9 00 :74

В 110 строке задается адрес расположения текста для "Спектру-ма" с дисководом. Для магнитофонного варианта должно быть 23760.

Факт, заслуживающий внимания: автору этого письма - 12 лет! А наше мнение по этому поводу такое. Если у нас в стране в 12 лет не "свихиваются" на "Денди" и "Кенге", а программируют в машинных кодах, значит у нее будет прекрасное будущее. Ради этого и

работать хочетсяt




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Вступление - нам удалось сделать журнал абсолютно "с нуля" всего за полтора месяца, начиная с раздумий и заканчивая продажей.
Полезные советы - Как определить полярность источника постоянного тока без прибора.
Железо - этот таинсвенный Sprinter!
DI-HALT'99 - Чисто Спектрумовское party - DI-HALT'99.
Сети - Сеть Релком (Relcom); Сеть "SET Bliz"; Некомерчески FTN-совметисмые сети.

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