ZX-Ревю 1996 №4-5 1996 г.

Форум - процедура печати 42 символов в строке.


© Матюшев Александр, г. Сланцы, 1996.

ПРОЦЕДУРА ПЕЧАТИ 42 СИМВОЛОВ В СТРОКЕ.

В ZX-РЕВЮ 95/5 на стр. 29 Вы поместили статью Сергеева Дмитрия "Процедура печати 42 символов в строке". Идея, заложенная в процедуре, мне понравилась. Давно хотелось иметь для использования в своих программах быстродействующую процедуру печати 42 символов в строке, полностью независящую от ПЗУ компьютера. Никак не хочу обидеть автора программы, но детально разобрав работу процедуры, удалось путем замены некоторых команд, новой процедуры расчета адреса атрибутов (позаимствована у Патрахина В.В., ZX-РЕВЮ 94/6, стр. 34), использования управляющих кодов в тексте, размещения переменных "ST" и "MNB" прямо в процедуре, существенно сократить объем и увеличить быстродействие процедуры. Использование управляющего кода "АТ" (#16) осталось таким же, управляющие коды "INK", "PAPER", "BRIGHT", "FLUSH" объединены и рассчитываются стандартно: INK+PAPER*8+BRIGHT*64+FLUSH*128. В тексте это число должно стоять после кода 16(#10). Встретив его, процедура положит следующее за ним число в переменную ATTR_T (23695=#5C8F) и установит временные атрибуты печати. В итоге получилось следующее:

0010

ORG

50000

0020

ENT

0030

LD

HL,TEXT

0040

WRITE LD

A, (XTXT)

0050

CP

42

0060

JR

C, WR2

0070

LD

A, (YTXT)

0080

INC

A

0090

CP

24

0100

JR

C, WR1

A

(YTXT),A A

(XTXT),A A, (HL) HL A Z

32

C,WRIT2 PRSYM WRITE 16

N Z,WRIT3 A, (HL) (23695),A HL WR2 22

N Z,WRIT4 A, (HL) (YTXT),A HL

A,(HL) (XTXT),A HL

WRITE A, "?"

WRIT1

;FONT-256

HL L,A H, 0 HL, HL HL, HL HL, HL DE,15360 HL, DE HL

DE, (XTXT)

A, E

A, A

E,A

A, A

A, E

E, 255

L,8

E

L

NC,CHPL1 A, L H,A A, L H

(SL1-1),A

(SL2-1),A A, D #18 A, #40 H,A A, D 7

0750

RRCA

0760

ADD

A, E

0770

LD

L,A

0780

PUSH

HL

0790

AADDR LD

A, H

0800

RRCA

0810

RRCA

0820

RRCA

0830

AND

#03

0840

OR

#58

9850

LD

H,A

0860

ATTR LD

A, (23695)

0870

LD

(HL),A

0880

POP

HL

0890

POP

DE

0900

LD

C,8

0910

SCRL LD

A,(DE)

0920

LD

B, 0

0930

SL1

SRL

(HL)

0940

DJNZ

SL1

0950

AND

A

0960

LD

B, 0

0970

SL2

RL

A

0980

RL

(HL)

0990

DJNZ

SL2

1000

INC

HL

1010

LD

(HL),A

1020

DEC

HL

1030

INC

H

1040

INC

DE

1050

DEC

C

1060

JR

NZ, SCRL

1070

FINIS LD

HL,XTXT

1080

INC

(HL)

1090

POP

HL

1100

EXX

1110

RET

1120

XTXTDEFB

0

1130

YTXT DEFB

0

1140

TEXT DEFS

0

START OF

OBJECT:

#C350 (50

LENGS

# 0 0AF (00

Если использовать символьный набор шириной 6 пикселов, прижатый к левому верхнему углу знакоместа, можно изменить строку N900 на LD C,6, что сократит время выполнения цикла. Если не предусматривается возврат в BASIC, строки 410 и 1090 можно убрать, если нет необходимости сохранения регистров, которые будут испорчены процедурой, можно убрать строки 400 и 1100.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Партийная зона - DI:HALT99; Лучше поздно, чем ещё раз! История провального демопати.
Графика - картинкa АNSI графики.
Поиск - поиск игр, программ.
Жeлeзо - Кворум, "Фича V1.0".
Solution - Как играть в FullShit demo.

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