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


тема: Печать: 51 символ в строке



от: 500:812/07.05
кому: Dmitry Lomov
дата: 10 May 1998


Привет, Dmitry !

[...]

Вот эта самая процедура печати строки на
51 символ.... В связи с тем, что мне приш-
лось переписывать из XAS'а в тетрадь, а
из тетради в ZXASM, в ней могла закрастся
ошибка.


А вот и сама процедура вывода строки:


PRINT51 LD A,H; HL- SCRN ADDRESS
LD (PXS0+1),A
LD (PXS1+1),A
LD (PXS2+1),A
EX DE,HL
EXX
LD B,7; Цикл
LD HL,STRING; Строка
PXSB LD E,(HL)
INC L
LD A,(HL)
INC L
LD D,#60; по #6000 фонт
EXX
LD C,A
EXX
LD A,(HL)
INC L
EX DE,HL
EXX

LD L,A
LD B,#60

!ASSM7
LD A,(BC)
RRCA
RRCA
RRCA
LD H,B
LD H,(HL)
INC B
RRA
RR H
RRA
RR H
EXX
OR (HL)
INC H
EXX
LD (DE),A
INC E
LD A,H
LD (DE),A; 1&2&3 символ
DEC E
INC D
!CONT

EXX
DEC B
RET Z; возврат, если приехали
EX DE,HL
LD A,(HL)
INC L
EXX

PXS0 LD D,0
LD L,A
EX DE,HL
EXX
LD A,(HL)
INC L
LD E,(HL)
INC L
LD D,#60
EX DE,HL
EXX
LD C,A
LD B,#60

!ASSM 7
LD D,B
LD A,(DE)
RRC (HL)
RLA
RL (HL)
INC L
LD D,A
LD A,(BC)
INC B
RRCA
RRCA
RRCA
SRL A
EXX
LD C,(HL)
RR C
EX AF,AF
INC H
LD A,C
RRCA
RRCA
EXX
INC L
LD (HL),A
DEC L
EX AF,AF
OR D
LD (HL),A
DEC L
INC H
!CONT

LD D,B
LD A,(DE)
RRC (HL)
RLA
RL (HL)
INC L
LD D,A
LD A,(BC)
RRCA
RRCA
RRCA
SRL A
EXX
LD C,(HL)
RR C
EX AF,AF
LD A,C
RRCA
RRCA
EXX
INC L
LD (HL),A
DEC L
EX AF,AF
OR D
LD (HL),A; 4&5&6 символ
INC L

PXS1 LD H,0
EXX
EX DE,HL
LD A,(HL)
INC L
EXX
LD E,A
EXX
LD A,(HL)
INC L
EXX
LD C,A
LD B,#60
EX DE,HL

!ASSM 7
LD H,B
LD H,(HL)
LD A,(DE)
RL H
RLA
RL H
RLA
LD (DE),A
INC E
LD A,(BC)
INC B
RRCA
RRCA
RRCA
OR H
LD (DE),A
INC D
DEC E
!CONT

LD H,B
LD H,(HL)
LD A,(DE)
RL H
RLA
RL H
RLA
LD (DE),A
INC E
LD A,(BC)
RRCA
RRCA
RRCA
OR H
LD (DE),A; 7&8 символ
INC E
PXS2 LD D,0
EXX
JP PXSB


Рутина.. на первый вгляд может показатся
бредом, особенно когда оптимизируешь ее.
Эта процедура немного укорочена, т.е. в
моей программе она немного изменена.
Если читатель сильнее перегруженности,
то он, я думаю, разберется в этой
незатейливой процедуре.



До скорого, PHOENIX.

-+- ZXASM 3.0

от: 500:812/07.05
кому: Dmitry Lomov
дата: 13 May 1998


Привет, Dmitry !


YK>> Вот эта самая процедура печати строки на
YK>> 51 символ.... В связи с тем, что мне приш-

DL> []

YK>> А вот и сама процедура вывода строки:

DL> [skip громадную процедуру]


DL> вроде, работать будет. :)
DL> только одно "но" -
DL> у первой части (которая печатает первые три символа в два
DL> столбца байт) повторов - 7 штук, а упрощенного "хвоста",
DL> как у других кусков, нету. посему, вроде, первые три символа
DL> займут по вертикали семь пикселей, а не восемь
DL> (имхо, естественно; детально я не копал.)

как я писал, там могла быть ошибка.

DL> я посчитал (прикидочно) скорость работы - 78 тактов/байт экрана,
DL> или 392 такта на символ. печать всей строки - 20.000 тактов.
DL> это совпадает с твоими данными?

Hу где-то 3,.. строки в прерывании.
Вот немного другая пороцедура, она чуть
побыстрее:


PRINT51 LD A,H; HL - SCRN ADRESS
LD (PXS0+1),A
LD (PXS1+1),A
CALL PXSA
EX DE,HL
LD A,H
SUB 7
LD H,A
!ASSM 7
RLC (HL)
INC H
!CONT
RLC (HL)
RET

PXSA EX DE,HL
EXX
LD LY,7; счетчик
LD HL,STRING
PXSB LD E,(HL)
INC L
LD A,(HL)
INC L
LD D,#60; По #6000 фонт
EXX
LD C,A
EXX
LD A,(HL)
INC L
EX DE,HL
EXX
LD L,A
LD B,#60

!ASSM 7
LD A,(BC)
RRCA
RRCA
RRCA
LD H,B
LD H,(HL)
INC B
RRA
RR H
RRA
RR H
EXX
OR (HL)
INC H
EXX
LD (DE),A
INC E
LD A,H
RRCA
LD (DE),A
DEC E
INC D
!CONT

LD A,(BC)
RRCA
RRCA
RRCA
LD H,B
LD H,(HL)
RRA
RR H
RRA
RR H
EXX
OR (HL)
EXX
LD (DE),A
INC E
LD A,H
RRCA
LD (DE),A;1&2&3
DEC LY
RET Z
PXS0 LD D,0

EXX
EX DE,HL
LD A,(HL)
INC L
EXX
EX DE,HL
LD E,A
EXX
LD A,(HL)
INC L
LD B,(HL)
INC L
LD E,(HL)
INC L
PUSH HL
LD H,(HL)
LD D,#60
EX DE,HL;
LD E,L
EXX
LD C,A
LD B,#60

!ASSM 7
LD D,B
LD A,(DE)
RLA
RL (HL)
LD D,A
LD A,(BC)
INC B
RRCA
RRCA
RRCA
RRA
EXX
LD L,B
LD C,(HL)
RR C
EXX
OR D
LD D,L
INC L
LD (HL),A
EXX
LD A,C
RRCA
RRCA
LD L,E
LD C,(HL)
RL C
RLA
RL C
RLA
EXX
INC L
LD (HL),A
EXX
LD L,D
LD A,(HL)
INC H
RRCA
RRCA
RRCA
OR C
EXX
INC L
LD (HL),A
LD L,D
INC H
!CONT

LD D,B
LD A,(DE)
RLA
RL (HL)
LD D,A
LD A,(BC)
RRCA
RRCA
RRCA
RRA
EXX
LD L,B
LD C,(HL)
RR C
EXX
OR D
INC L
LD (HL),A
EXX
LD A,C
RRCA
RRCA
LD L,E
LD C,(HL)
RL C
RLA
RL C
RLA
EXX
INC L
LD (HL),A
EXX
LD L,D
LD A,(HL)
INC H
RRCA
RRCA
RRCA
OR C
EXX
INC L
LD (HL),A; 4&5&6&7&8
INC L

PXS1 LD H,0
EX DE,HL
EXX
POP HL
INC L
JP PXSB


DL> так вот, это есть медленно :(

DL> моя процедура печатает
DL> со скоростью 55 тактов/байт экрана (правда, она печатает не на
DL> экран, а в буфер. выброс буфера на экран идет со скоростью 11
DL> тактов/байт. если бы я делал прямо на экран, было бы 57 тактов/байт.
DL> а если ее еще и оптимизировать под экран, может, еще быстрее. сейчас
DL> она оптимизирована под буфер). моя процедура традиционно жрет одну
DL> банку под фонт :)

Я не могу такое позволить. Если загружа-
емый текст занимает 255 сек. (4 банка),
еще один банк под таблицы.

DL> если очень надо, могу заслать. разбираться в ней еще сложнее :)

Так отчего-же не заслал? Засылай в эху.
Кому надо - тот разберется. И мне будет
интересно.

DL> только один вопрос - ты ее так в тексте и пишешь?
DL> это неправильно. слишком много памяти уходит.
DL> надо было написать процедуру, которая создаст эту программу
DL> в памяти. а размер этой процедуры был бы байт 150, наверное.

Когда в программе объем памяти лимити-
рован, это не имеет смысла.
Конечно в расчете на то, что размер тек-
ста = 255 секторов.
В моей проге 4 фонта 32,42,51,64 символа.
И вместе они занимают пол банка.

Есть вариант: каждый раз распаковывать
фонты, инсталлировать новые процедуры
печати.. Hе знаю кому подойдет такой
вариант...
А так, можно. В моем буте так сделано.



Всего доброго, PHOENIX.

-+- ZXASM 3.0

от: Yaroslav Kozlov
кому: Dmitry Lomov
дата: 24 May 1998


Привет, Dmitry !


YK>> хотите могу првести прием скроллинга
YK>> (не POP HL:LD (XX),HL). Я то у себя

DL> LD DE,....:PUSH DE

Так 255 секторов не проскроллишь...
Есть способ, по моему 211 тактов/16 байт.
Он чуть помедленней POP HL: LD (xx),HL,
зато более управляем по циклу.
в рег. HL - чтение по стеку, 'HL запись
по стеку, ну и остальные регистры - буфер.
А там догадаться несложно. Это в игре
Wec le mans...

YK>> В исходниках твоих сам черт ногу сломит!
YK>> Искал я эту процедуру, хотел сравнить со
YK>> своей. И не нашел. В EV 1.00 фонт по дру-

DL> печать депачится программой SETUP, а запускается через PRLINE.

Посмотрю еще, хотя я смотрел через мо-
нитор.



Всего доброго, PHOENIX.


-+- ZXASM 3.0




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

Похожие статьи:
Железо - О Covox'ах, General Sound'е и Sound Drive 2.
Новые лица - "Exult и все, все, все" не очень известная группа из Петрозаводска.
Реклама - Реклама и объявления ...
СС'99 - интервью: Вячеслав Медноногов/Copper Feet (о Черном Вороне 2).
EHOX - Рассказ "ENOX".

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