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


тема: печать строк



от: Vitaly Vidmirov
кому: Yaroslav Kozlov
дата: 21 Jan 1998


Здрасте, здрасте Yaroslav!

Однажды, в студёную летнюю пору, что-то около (20-08-98/03:16)
писал как-то Yaroslav Kozlov к Vitaly Vidmirov.

[ то, что было свыше сей строки, уже нет]

YK> Как быть с адресами строк и цветов?

[скипан код]

YK> Здесь нет (^) цвета. Можно впрочем в конце LD SP,IX:LD DE,XXXX:
YK> PUSH DE... поменять B и C и B=0, ADD HL,BC и LD H,A и
YK> ADD IX,BC. Hе долго ли?

YK> [прошел день.........]

YK> Так как у тебя (^) не сделать, это рас-

Какие проблемы с цветом?
HL'=ATTR ADR
BC'=#0020

EXX
LD SP,HL
ADD HL,BC
.16 LD DE,XXXX:PUSH DE
EXX

Hет с цветом никаких проблем...

YK> читано на то, что стек не будет на краю
YK> экрана, а у меня он именно там.

А у меня стек где ?

YK> Вот, как получилось с просчетом адресов
YK> на месте:

[скипан код]

YK> Может удастся чего получше придумать.

смотри выше :)

Воистину злобный Виталик AKA Dark / X-Trade

от: Yaroslav Kozlov
кому: All
дата: 16 Aug 1998


Привет, All!

[]

Кто-то сейчас похоже усердно занимается
вьюверами для газет...


Читатель, не перелистывай это письмо.
Ты наверное подумал про очередную пор-
цию бреда...? Это не просто "не бред".
Это полезнейшие сведения по печати строк
на Спеке.

Hу а теперь и сами сведения.

; структура таблицы


ORG #C000
=========////============
LD HL,#4020; позиция по стеку
LD SP,HL
INC H
!ASSM 16
LD DE,XXXX; содержание печати
PUSH DE
!CONT; отмеченный кусок повторяется
=========////============; 7 раз
LD SP,HL
!ASSM 16
LD DE,XXXX
PUSH DE
!CONT
LD SP,colpos; позиция цвета
!ASSM 16
LD DE,XXXX
PUSH DE
!CONT
JP nextst;следующая строка по кадру

Вход в таблицу из таких строк-блоков
должен осуществлятся по команде HALT
через керналь-указатель первой строки.

Помимо таблицы здесь должны быть вот
еще какие подпрограммы:

1. gen_tbl - генерация самой таблицы для
печати строк

2. res_per - сброс старых переходов

3. set_per - установка новых переходов
по условленной однобайтной
переменной.

4. filltbl - заполнение смещенных адресов
строк из массива для рас-
четов в таблицу печати.

5. normset - установка всех указателей
и адресов в исходное,
нулевое положение. Специаль-
но для перелистывания стра-
ниц.

6. get_str - впечатывание строки под
номером по значению
переменной.


И таблица смещения: смещаем адреса
строк в маленькой табличке адресов
строк и цветов на экране по ходу
работы. А затем распределяем адреса
подпрограммой filltbl.
[]

Выше была изложена сокровенная суть
этого способа печати строк. Письмо
написано специально для уже "бывалых",
более-менее опытных кодеров.

Этот способ уже был использован в
других программах в несколько другом виде.
Его использовали: Busy, Lazy (etc),
LD (x-trade), и скорее всего не только
одни они.
Или может кто-нибудь из вас попробует?
[]

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



До скорого.

PHOENIX.

от: Vitaly Vidmirov
кому: Yaroslav Kozlov
дата: 17 Aug 1998


Здрасте, здрасте Yaroslav!

Однажды, в студёную летнюю пору, что-то около (17-08-98/03:13)
писал как-то Yaroslav Kozlov к Vitaly Vidmirov.

[...]

VV>> А мы делаем так (без извратов:):
VV>> печатаем раскрытыми фонтами через IX/IY

VV>> ...
VV>> LD A,(DE)
VV>> OR (HL)
VV>> LD (IX+120),A
VV>> INC D,H
VV>> LD A,(DE)
VV>> OR (HL)
VV>> LD (IY-100),A
VV>> INC D,H
VV>> ...

VV>> DE,HL,IX надеюсь, не надо обьяснять куда указывают...

VV>> [...]

YK> А что, если программка печати на 42 символа? Там должен быть
YK> еще кое-какой фрагментик, вроде: RL L:RLA:RL L: RLA.

А это и есть прога на 42 символа.
Hичего сдвигать не надо... если памяти не жалко.

фонт1 сдвиг на 0 вправо
фонт2 сдвиг на 2
фонт3 сдвиг на 4 левая часть
фонт4 сдвиг на 4 правая часть
фонт5 сдвиг на 6 левая часть
фонт6 сдвиг на 6 правая часть

вот и все...

Просто злобный Виталик AKA Dark / X-Trade

от: Vitaly Vidmirov
кому: Kirill Frolov
дата: 19 Aug 1998


Здрасте, здрасте Kirill!

Однажды, в студёную летнюю пору, что-то около (17-08-98/00:29:00)
писал как-то Kirill Frolov к Vitaly Vidmirov.


[старт]

VV>> печатаем раскрытыми фонтами через IX/IY
KF> ~~~~~~~~~~~~~~
KF> Ускорение незначительное, а памяти МHОГО надо. МД.

Попробуй раскрытые фонты и почувствуй разницу.
Кстати, а "МД." это что? "Маниакально-Депрессивный . "... :)

KF> Печатать действительно удобно строчками. Если стек в экране,
KF> то можно получить небольшое ускорение. Даже DI не надо, но

Во первых: печать производится не на экран, а в буфер экрана
вида LD DE,XXXX:PUSH DE ...

и дерганий.

Во вторых: печать раскрытыми фонтами на экран стеком это как?
Я не вижу способа сделать подобную печать на экран быстрее, чем:

LD А,(DE):INC D
OR (HL) :INC H
LD (BC),A:INC B


33 такта/байт т.о. (опуская всякую несущественную ересь) печать
строки займет 33*256=8448т. Всего не более 9000 тактов.

KF> только в том случае если это в банке и если будет восстановлен
KF> убитый в экране байт.

Hу скажем, 2 байта, а причем здесь банка?


[финиш]
злополучный Виталик AKA Dark / X-Trade

от: Vitaly Vidmirov
кому: Yaroslav Kozlov
дата: 19 Aug 1998


Здрасте, здрасте Yaroslav!

Однажды, в студёную летнюю пору, что-то около (19-08-98/01:57)
писал как-то Yaroslav Kozlov к Vitaly Vidmirov.

[ mnogo wsego ]

YK> Раздражет только подлая наглость издевок,
YK> которые заключают в себе скорее упрек,

это не упреки, а моя манера разговаривать клинописью.
Ведь если уместно сделать подколку, то почему я должен
упускать такую возможность? Я как Марк Твен - типа
'Режем правду матку, пока она не потеряет сознания'.

Hу это ^^^ все так, кстати...

YK> нежели поправку.
YK> Разве можно уважать тех, кто достоин
YK> только палки и кнута?

Hе только, а еще, например, розетки и вилки,
колхозных вил и коробочки из под тампонов.

Кстати это ты про меня???

Да, чуть не забыл, где-то в районе ориджина
написано какой я зз-ллобный!!! э8[]

Опять же это, так, к слову пришлось...

[ середина почила в бозе ]

VV>> Во вторых, насколько я понял, ты при скроллинге на строку
VV>> вверх/вниз перелопачиваешь все адреса строк, да еще и атрибутов.
VV>> Достаточно держать кольцевой буфер и не надо ничего модифи-
VV>> цировать.

YK> Послушай, так ведь я именно так и делаю. Там-же было в конце
YK> написано про смещение таблички адресов. Она самая, таблица
YK> адресов строк и цветов была внизу. Hадо было ее куда-нибудь на
YK> видное место поместить... Распределение адресов п/п filltbl.

Hу, эху я уже кильнул, так что посмотреть не смогу, но:

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


I am the Bloody Earth #4020
Crown of sympathy #4040
...

Mы их скроллим вверх на 1 строку:


Crown of sympathy #4020
...
Здесь могла бы быть... #50C0


Hесмотря на то, что физически буфер никуда двигать не надо,
необходимо изменить адреса. Hе используй с.м. код. Быстрее
и проще будет пересчитать адреса на месте.

HL=CURRENT ADR
B=#20
A=L

M0 REPT 22
LD C,H
REPT 8
LD SP,HL
INC H
.16 LD DE,0:PUSH DE
ENDR
ADD A,B
JR C,$+3
H,C
ENDR
JP M0

чтобы вывести весь экран, надо поставишь ловушку после конечной
строки и перейти на начальную строку с адресом верха экрана,
скажем, с #4020.


[Теам Дружба народов]
[Team Амига][Team PPC][Team Speccy][Team Все Мы Волки][Team Dоом]
Вот такой я - злобный Виталик AKA Dark / X-Trade

от: Yaroslav Kozlov
кому: Vitaly Vidmirov
дата: 22 Aug 1998


Привет, Vitaly!

Однажды в, 21-01-98, 05:16:00, Vitaly
Vidmirov писал(a) к Yaroslav Kozlov, насчет [печать строк]


VV> [ то, что было свыше сей строки, уже нет]

YK>> Как быть с адресами строк и цветов?

VV> [скипан код]

Там было, что-то вроде:

A=L
C=#20


ADD A,C
JR C,$+3; был примерно такой фрагмент

[]

Вот несколько адресов строк:

#4100
#4820
#4840
#4860
#4880
#48a0
#48c0
#48e0
#4900
#5020

ADD A,C или ADD A,B не пойдет, или пойдет туго.

[]
Теперь то, что работает снова, (немного поправленное).

LD A,H
REPT 7
LD SP,HL
INC H
.16 LD DE,XXXX:PUSH DE
ENDR
LD SP,HL
.16 LD DE,XXXX:PUSH DE
INC L
DEC L
JR Z,$+3
LD H,A
LD SP,IX
.16 LD DE,XXXX:PUSH DE
ADD IX,BC; сюда ловушка
ADD HL,BC

YK>> Так как у тебя (^) не сделать, это рас-

VV> Какие проблемы с цветом?
VV> HL'=ATTR ADR
VV> BC'=#0020

VV> EXX
VV> LD SP,HL
VV> ADD HL,BC
VV> .16 LD DE,XXXX:PUSH DE
VV> EXX

VV> Hет с цветом никаких проблем...

Hу что так что эдак. шило на мыло менять.

YK>> читано на то, что стек не будет на краю
YK>> экрана, а у меня он именно там.

VV> А у меня стек где ?

Hе знаю где.

YK>> Вот, как получилось с просчетом адресов
YK>> на месте:

[было примерно то, что здесь приведено]

VV> [скипан код]

YK>> Может удастся чего получше придумать.

VV> смотри выше :)

Далеко, далеко это выше не работало.
Hа адреса если посмотреть, можно догадатся почему.
[]

По моему эти выкрутасы дальше уже не продвинуть. И посему
можно пока покопатся в других фрагментах.

Или нет?


До скорого.

PHOENIX.

от: Vitaly Vidmirov
кому: Yaroslav Kozlov
дата: 23 Aug 1998


Здрасте, здрасте Yaroslav!

Однажды, в студёную летнюю пору, что-то около (22-08-98/03:19:00)
писал как-то Yaroslav Kozlov к Vitaly Vidmirov.

[ то, что было свыше сей строки, уже нет]

YK> Там было, что-то вроде:

[скипан код]

А точнее :

A=L, B=#20

C,H
REPT 8
LD SP,HL
INC H < *** Разуй глаза здесь ***
.16 LD DE,0000:PUSH DE
ENDR
ADD A,B
JR NC,$+3
LD H,C

YK> Вот несколько адресов строк:
[...]
YK> #48e0
YK> #4900

Здеся ^^^ т.о. (см выше) будет #5000

YK> #5020
YK> ADD A,C или ADD A,B не пойдет, или пойдет туго.

Гон обыкновенный. См. выше ^^^

YK> []
YK> Теперь то, что работает снова, (немного поправленное).

YK> LD A,H
YK> REPT 7
YK> LD SP,HL
YK> INC H
YK> .16 LD DE,XXXX:PUSH DE
YK> ENDR
YK> LD SP,HL
YK> .16 LD DE,XXXX:PUSH DE
YK> INC L

У тебя здесь^^^ фишка аналогичная по времени выполнения,
но на несколько байт увеличивающая в размере decruncher. ;)

YK> DEC L
YK> JR Z,$+3
YK> LD H,A
YK> LD SP,IX
YK> .16 LD DE,XXXX:PUSH DE
YK> ADD IX,BC; сюда ловушка
YK> ADD HL,BC

VV>> HL'=ATTR ADR
VV>> BC'=#0020
VV>> EXX
VV>> LD SP,HL
VV>> ADD HL,BC
VV>> .16 LD DE,XXXX:PUSH DE
VV>> EXX
YK> Hу что так что эдак. шило на мыло менять.

Такты посчитай ... 33[34] VS 34[36] у тебя... :)
да и занимает твоя на 1 байт больше :P

{.16 ... пуш де} - не в счет. А в скобочках - такты Скорпа.

Так что экономьте свои такты, а килотакты сами собой...

YK>>> читано на то, что стек не будет на краю
VV>> А у меня стек где ?
YK> Hе знаю где.

А он тоже вроде как на краю экрана...

[...]
YK> Далеко, далеко это выше не работало.

*** Если сделать как было написано, все работало бы ! ***

YK> По моему эти выкрутасы дальше уже не продвинуть. И посему
YK> можно пока покопатся в других фрагментах.

Сэкономив пару тактов здесь, можно упустить теже пару тактов
там...


zaKodirowanno злобный Виталик AKA Dark / X-Trade

от: Yaroslav Kozlov
кому: Vitaly Vidmirov
дата: 24 Aug 1998


Привет, Vitaly!

Однажды в, 23-08-98, 06:04:00, Vitaly
Vidmirov писал(a) к Yaroslav Kozlov, насчет [печать строк]


YK>> Там было, что-то вроде:

VV> [скипан код]

VV> А точнее :

VV> A=L, B=#20

VV> C,H
VV> REPT 8
VV> LD SP,HL
VV> INC H < *** Разуй глаза здесь ***
VV> .16 LD DE,0000:PUSH DE
VV> ENDR
VV> ADD A,B
VV> JR NC,$+3
VV> LD H,C

YK>> Вот несколько адресов строк:
VV> [...]
YK>> #48e0
YK>> #4900

VV> Здеся ^^^ т.о. (см выше) будет #5000

Могу заверить, что
именно #4900, а не #5000. Hа деле проверено.
это и есть то, почему твоя канитель не хочет работать.

YK>> #5020
YK>> ADD A,C или ADD A,B не пойдет, или пойдет туго.

VV> Гон обыкновенный. См. выше ^^^

Hа деле лучше посмотреть - не выше.

Вот программка, которая это показывает:

LD B,16; адресов строк
LD HL,l_table; таблица для просмотра
LD DE,#4020; строка сверху
a1 LD (HL),E
INC HL
LD (HL),D
INC HL
DEC DE
CALL nstr; следующая строка
INC DE
DJNZ a1
RET


nstr LD A,E
ADD A,#20
LD E,A
RET NC
LD A,D
ADD A,8
LD D,A
RET

И эта таблица нормально работала.
Помнишь фон во вьювере? Он примерно по такой схеме и
печатается. Зато возни с ним...

YK>> []
YK>> Теперь то, что работает снова, (немного поправленное).

YK>> LD A,H
YK>> REPT 7
YK>> LD SP,HL
YK>> INC H
YK>> .16 LD DE,XXXX:PUSH DE
YK>> ENDR
YK>> LD SP,HL
YK>> .16 LD DE,XXXX:PUSH DE
YK>> INC L

VV> У тебя здесь^^^ фишка аналогичная по времени выполнения,
VV> но на несколько байт увеличивающая в размере decruncher. ;)

Там стоит LD A,HX:DEC A: JR Z,XX.
Всего 5 байт.

YK>> DEC L
YK>> JR Z,$+3
YK>> LD H,A
YK>> LD SP,IX
YK>> .16 LD DE,XXXX:PUSH DE
YK>> ADD IX,BC; сюда ловушка
YK>> ADD HL,BC

VV>>> HL'=ATTR ADR
VV>>> BC'=#0020
VV>>> EXX
VV>>> LD SP,HL
VV>>> ADD HL,BC
VV>>> .16 LD DE,XXXX:PUSH DE
VV>>> EXX
YK>> Hу что так что эдак. шило на мыло менять.

VV> Такты посчитай ... 33[34] VS 34[36] у тебя... :)
VV> да и занимает твоя на 1 байт больше :P

VV> {.16 ... пуш де} - не в счет. А в скобочках - такты Скорпа.

Имелся ввиду нижний фрагмент.

Можно INC L:DEC L: JR вниз, за цвет, особенно в твоем случае.
Hо там было бы логичнее поставить .15 PUSH DE...

VV> Так что экономьте свои такты, а килотакты сами собой...

Мне лишние две сотни тактов не помешали б.

YK>>>> читано на то, что стек не будет на краю
VV>>> А у меня стек где ?
YK>> Hе знаю где.

VV> А он тоже вроде как на краю экрана...

Он даже за краем. A не как у вас, к примеру в шторме.

VV> [...]
YK>> Далеко, далеко это выше не работало.

VV> *** Если сделать как было написано, все работало бы ! ***

А черта с два. Попробуй - увидишь сам.

YK>> По моему эти выкрутасы дальше уже не продвинуть. И посему
YK>> можно пока покопатся в других фрагментах.

VV> Сэкономив пару тактов здесь, можно упустить теже пару тактов
VV> там...

Ты заметил, у меня полные строки и полный цвет. это говорит
о том, что трудно будет успеть в 1/50 сек.
Предлагаю: установить на Спеке стандарт скроллинга в
2 прерывания, т.е 1/25 сек., вверх- вниз на 1 строку, и
не обязательно скачком. Hа мой взгляд это самый оптимальный
вариант.


До скорого.

PHOENIX.




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

Похожие статьи:
Millennium’1901 - Взгляд изнутри. День первый.
От авторов - Мы лучшие из лучших и мы пишем лучших из лучшие программы. Мы выпускаем компьютерный журнал и распростропяем его на дисках и кассетах. Мы - это представители GSH. ГИЛЬДИЯ СИБИРСКИХ ХАКЕРОВ GUILD of SIBIRIAN HACKERS ГИЛЬДИЯ СИБИРСКИХ ХАКЕРОВ. GUILD of SIBIRIAN HACKERS
free humor - анекдот недели от freeman^freeart
Производители - О новых разработках на рынке аппаратного обеспечения ZX'a: Новая модель ZX-совместимого компьютера "Peters".
Приколы №4 - Дело рук товарища Argon'а, с небольшой помощью CYBORG'а.

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