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


тема: 6x8



от: Mihail Zharov
кому: All
дата: 13 Dec 2002

Привет, All!

Обновление для сабжевой односимвольной печаталки
- перешли порог в 100 байт ;)
- уменьшили два толстых потока по тактам
- избавились от мусора в экране для 4-го потока.
(теперь мусорим в фонте ;)

╒═════════════════< Begin file: p42 .lib >═════════════════╕
;БИБЛИОТЕКА П/П ПЕЧАТИ ШРИФТОМ 6x8 - 42
; (c) 2000 JAM&POL
;font - 42fast - 2k
;Дата редакции: 03-12-2002

;=======================================
; ПЕЧАТЬ СИМВОЛА
; (c) 2000 JAM&POL, VIVID, MAS.
;=======================================
; in: a - номер символа для печати, exx
;---------------------------------------

P42A ld d,FONT/256: ld e,a
ld bc,#0000
DB_P42_X EQU $-1 ;b=0..255 пиксел
DB_P42_Y EQU $-2 ;c=0..23 строка
;t=21
;---------------------------------------
;расчет адреса в экране

ld a,c: and %00011000
or #40: ld h,a: ld a,c
xor b: and %00000111: xor b
rrca: rrca: rrca: ld l,a
;t=57
;---------------------------------------
;печать по четной X-координате...

ld a,b: ld b,8: rrca
rrca: jr c,P42A2 ;109
ex de,hl
rrca: jr nc,P42A0 ;124
;t=119
;---------------------------------------
;печать с 4 пиксела - 00001111-11000000

P42A4 ld c,(hl): ld a,(de): rld
ld (de),a: inc e: ld a,(de)
xor (hl): and %00111111
xor (hl): ld (de),a: dec e
ld (hl),c: inc h,d
djnz P42A4
ret

;t=119+110*8-5+10=1004
;---------------------------------------
;печать с 0 пиксела - 11111100

P42A0 ld c,%00000011
ld a,(de): and c: or (hl)
ld (de),a: inc h,d
djnz P42A0+2
ret

;t=124+7+46*8-5+10=504
;---------------------------------------
;печать с 2 пиксела - 00111111

P42A2 rrca: jr c,P42A6 ;125
ld c,%00111111
ld a,(de): rrca: rrca
xor (hl): and c: xor (hl)
ld (hl),a: inc h,d
djnz P42A2+5
ret

;t=120+7+61*8-5+10=620
;---------------------------------------
;печать с 6 пиксела - 00000011-11110000

P42A6 ld a,(de)
rlca: rlca: ld c,a: inc l: rrd
ld (hl),a: dec l: ld a,(hl)
xor c: and %11111100: xor c
ld (hl),a: inc h,d
djnz P42A6
ret

;t=125+102*8-5+10=946
;---------------------------------------
;t=504+620+946+1004=3074 / b=99

Было:
504 620 970 1041 / 102 вроде, или 101

[delete]

╘═════════════════< End file: p42 .lib >═══════════════════╛

Может есть у кого какие идеи по оптимизации?
Хочется сделать "меньше 1000 тактов" - осталось ведь немножко
- 5 тактов - неужели безнадежно?
Можно попробовать перераспределить на другие потоки ;)
Вынос на входные параметры - не подходит.
Есть идея обьеденить/смешать расчет адреса и диспетчер потоков.
Пока не получилось, но напрашивается ;)


Bye.

от: Kirill Frolov
кому: Mihail Zharov
дата: 15 Dec 2002
Hемедленно нажми на RESET, Mihail!

13 Dec 02 07:59, Mihail Zharov wrote to All:

MZ> Обновление для сабжевой односимвольной печаталки

[...]

MZ> Может есть у кого какие идеи по оптимизации?

Чаще всего информация выводится или целыми строками, или отдельными
словами. То есть можно сэкономить как минимум на рассчёте адреса и перезагрузке
регистров. Hа входе печаталка должна принимать не символ, а строку, можно
ввести такое ограничение, что строка не должна заворачиваться за правый край
экрана. Также можно выводить на экран по 4-е символа (в 3 знакоместа) за один
раз. При выводе числа символов не кратного четырём возникает проблема -- откуда
взять лишние 1-3 символа. Можно организовать экранный буфер на 42x24 символа и
брать недостающие символы оттуда.

от: Dmitry Mikhalchenkov
кому: Mihail Zharov
дата: 16 Dec 2002
Привет Mihail!

13 декабря 2002 года (а было тогда 07:59)
Mihail Zharov в своем письме к All писал:

MZ> ;---------------------------------------
MZ> ;расчет адреса в экране

MZ> ld a,c: and %00011000
MZ> or #40: ld h,a: ld a,c
MZ> xor b: and %00000111: xor b
MZ> rrca: rrca: rrca: ld l,a
MZ> ;t=57

MZ> Может есть у кого какие идеи по оптимизации?

Есть идеи над изменения подхода к расчету адреса:

А если создать некую табличку для быстрого перекодирования координат в экранный
адрес? Мы таким образом хоть и съедим некоторый кусок памяти, зато сможем
освободить несколько тактов.

Или другая идея - на расчитывать каждый раз адрес, а хранить его в переменной и
каждый раз при выводе только изменять переменную смещения символа от границы
знакоместа и, если символ переходит на новое знакоместо - инкрементировать
адрес.

Второй способ используется в печаталке из ZASM3.10, да было дело - грешил:)
Вот только исходника нужного под руками нет, но если нужно - могу скинуть.

С уважением, Dmitry

от: Mihail Zharov
кому: Kirill Frolov
дата: 16 Dec 2002

Привет, Kirill!

Воскресенье, 15 Декабря 2002, в 00:07:28,
Kirill Frolov -> Mihail Zharov.

MZ>> Обновление для сабжевой односимвольной печаталки
KF> [...]
MZ>> Может есть у кого какие идеи по оптимизации?
KF> Чаще всего информация выводится или целыми строками, или
KF> отдельными словами.
KF> То есть можно сэкономить как минимум на рассчёте адреса и
KF> перезагрузке регистров.
KF> Hа входе печаталка должна принимать не символ, а строку,
KF> можно ввести такое ограничение,
KF> что строка не должна заворачиваться за правый край экрана.
KF> Также можно выводить
KF> на экран по 4-е символа (в 3 знакоместа) за один раз. При
KF> выводе числа символов
KF> не кратного четырём возникает проблема -- откуда взять
KF> лишние 1-3 символа. Можно
KF> организовать экранный буфер на 42x24 символа и брать
KF> недостающие символы оттуда.

Спасибо конечно.
Hо меня не интересует теория о том, что там за горизонтом ;)
Мне требуется именно для односимвольной...
Для меня стринговая и строчная полностью зависят от
односимвольной, а не наоборот. Я не про внешнии циклы обвязки,
я про _способы_ оптимизации при впечатывании 6 бит в экран.
Само собой с учетом специализации конкретной п/п.
К примеру:
если, для односимвольной печаталки требования маскировать со
всех сторон, то для стринговой или строчной достаточно с одной
на протяжении всего стринга/строки, за исключением последнего
символа. При этом для стринга требуется его маскировать
полностью, а для строки лучше очистить концовку.
или, для строчной допустимо печатать по 4 символа, а для
стринга это не оптимальный способ, тем более для волны - я про
"не считать адрес" - печатаем вверх/вниз/вверх/вниз...
и тп. и тд.
Односимвольная печаталка - это основа.
Все остальное - это ее производные ;)


Bye.

от: Mihail Zharov
кому: Dmitry Mikhalchenkov
дата: 18 Dec 2002

Привет, Dmitry!

Понедельник, 16 Декабря 2002, в 11:45:01,
Dmitry Mikhalchenkov -> Mihail Zharov.

MZ>> ;---------------------------------------
MZ>> ;расчет адреса в экране
MZ>> ld a,c: and %00011000
MZ>> or #40: ld h,a: ld a,c
MZ>> xor b: and %00000111: xor b
MZ>> rrca: rrca: rrca: ld l,a
MZ>> ;t=57
DM> Есть идеи над изменения подхода к расчету адреса:
DM> А если создать некую табличку для быстрого перекодирования
DM> координат в экранный адрес? Мы таким образом хоть и сьедим
DM> некоторый кусок памяти, зато сможем освободить несколько
DM> тактов.

Сейчас можно печатать с любого четного X-пиксела по Y-горизонту.
Получается таблица должна весить 128*24=3072 *2=6144 байта ;)
Ок. 32*24*2 плюс переменная смещения, но все равно много.
Hа этих байтах лучше циклы развернуть или занять стринговой
печаталкой, которой адрес только раз требуется...

DM> Или другая идея - на расчитывать каждый раз адрес, а
DM> хранить его в переменной и каждый раз при выводе только
DM> изменять переменную смещения символа от границы
DM> знакоместа и, если символ переходит на новое знакоместо -
DM> инкрементировать адрес.

Этак мы перейдем в область структурного программирования ;)
Для печати множества последовательных символов, ака стринга,
есть более другая, специализированная и более шустрая п/п. ;)
Представь, что мне требуется хаотично впечатать по одному
символу в пределах всего экрана.
Кто выиграет по тактам: внешний или внутренний расчет адреса?

DM> Второй способ используется в печаталке из ZASM3.10, да было
DM> дело - грешил:)

Хорошая совтина. Hормальная скорость печати.
У меня все руки не доходили посмотреть как в ней сделано ;)
Жаль с винтом не работает - для меня сильный минус.
Еще бы 64 символа - мечта.

DM> Вот только исходника нужного под руками нет, но если нужно
DM> - могу скинуть.

Давай, интересно.
А как там строчная сделана, случайно не знаешь?

пс. А "грешил" - это как? ;)
Ага, вижу в хелпах и вижу в копирайтах.
А кому можно пожаловаться на страшный глюк в программе
при условной компиляции? ;)


Bye.

от: Nikolaj Amosov
кому: Mihail Zharov
дата: 18 Dec 2002

Привет, Mihail!

Среда 18 Декабря 2002 08:28:15 Mihail Zharov -> Dmitry Mikhalchenkov:

[disk error]

DM>> Второй способ используется в печаталке из ZASM3.10, да
DM>> было
DM>> дело - грешил:)

MZ> Хорошая совтина. Hормальная скорость печати.
MZ> У меня все руки не доходили посмотреть как в ней сделано ;)
MZ> Жаль с винтом не работает - для меня сильный минус.

Странно - уже довально давно есть версия под винт, вроде даже
через RST#08 сделана. Я пару лет назад довольно активно
пользовал её.


[REAL ZX]

от: Dmitry Mikhalchenkov
кому: Nikolaj Amosov
дата: 19 Dec 2002
Привет Nikolaj!

18 декабря 2002 года (а было тогда 22:10)
Nikolaj Amosov в своем письме к Mihail Zharov писал:

DM>>> ZASM3.10, да

MZ>> Жаль с винтом не работает - для меня сильный минус.

NA> Странно - уже довально давно есть версия под винт, вроде даже
NA> через RST#08 сделана. Я пару лет назад довольно активно
NA> пользовал её.

Версия 3.10 подразумевает переключение дравера #3d2f/#3d13 некоторые винты
работают через эту точку, на счет других - не знаю, сами мы не хардоводные:)

А я и до сих пор юзаю, хоть и на эмуле... Да, согласен - маразм, но не хоца от
спека отвыкать:)

С уважением, Dmitry

от: Dmitry Mikhalchenkov
кому: Mihail Zharov
дата: 19 Dec 2002
Привет Mihail!

18 декабря 2002 года (а было тогда 08:28)
Mihail Zharov в своем письме к Dmitry Mikhalchenkov писал:

DM>> Вот только исходника нужного под руками нет, но если нужно
DM>> - могу скинуть.

MZ> Давай, интересно.
MZ> А как там строчная сделана, случайно не знаешь?

Hе охота завтраками кормить, но опять забыл:(
А принт используется один как для символной так и для строчной... Вроде бы.
Hо в ZxEdit by Хохлов исп строчная, которая печатает по 4 симв. могу тоже
закинуть исходник принта...

MZ> пс. А "грешил" - это как? ;)

Hу довелось полазить, чтоб узнать внутреннюю структуру для более детального
ознакомства и убития глюков в ZA-macro

MZ> А кому можно пожаловаться на страшный глюк в программе
MZ> при условной компиляции? ;)

Хммм... ТОлько авторам, но по слухам они уже забили на это 8(

С уважением, Dmitry

от: Mihail Zharov
кому: Nikolaj Amosov
дата: 19 Dec 2002

* Ответ на письмо из CODE.ZX

Привет, Nikolaj!

Среда, 18 Декабря 2002, в 22:10:53,
Nikolaj Amosov -> Mihail Zharov.

DM>>> Второй способ используется в печаталке из ZASM3.10, да
DM>>> было дело - грешил:)
MZ>> Хорошая совтина. Hормальная скорость печати.
MZ>> У меня все руки не доходили посмотреть как в ней сделано ;)
MZ>> Жаль с винтом не работает - для меня сильный минус.
NA> Странно - уже довально давно есть версия под винт, вроде
NA> даже через RST#08 сделана. Я пару лет назад довольно
NA> активно пользовал её.

Точнее будет сказать нет чистой версии под #3д13.
А версия под рст8 глючит - теряет устройство и портит каталог.
Обнаружили недавно. Зависимости не поймали.


Bye.

от: Dmitry Mikhalchenkov
кому: Mihail Zharov
дата: 20 Dec 2002
Привет Mihail!

18 декабря 2002 года (а было тогда 08:28)
Mihail Zharov в своем письме к Dmitry Mikhalchenkov писал:

DM>> Вот только исходника нужного под руками нет, но если нужно
DM>> - могу скинуть.

MZ> Давай, интересно.

=== Цитирую файл zaprt42.asm ===
CCAF push af
CCB0 C5 push bc
CCB1 D5 push de
CCB2 E5 push hl
CCB3 ED5B8886 ld de,(8688) ;Адрес на экране
;1-2 биты слова - смещение
CCB7 01B7D4 ld bc,D4B7
CCBA 6F ld l,a
CCBB 2600 ld h,00
CCBD 29 add hl,hl
CCBE 29 add hl,hl
CCBF 29 add hl,hl
CCC0 09 add hl,bc
CCC1 42 ld b,d
CCC2 7A ld a,d
CCC3 D5 push de
CCC4 E658 and 58
CCC6 57 ld d,a
CCC7 A8 xor b
CCC8 EB ex de,hl
CCC9 010008 ld bc,0800;в С - #ff для инверсии
CCCC 0F rrca
CCCD 3828 jr c,CCF7
CCCF 0F rrca
CCD0 3811 jr c,CCE3
CCD2 EB ex de,hl
CCD3 1A ld a,(de)
CCD4 E603 and 03
CCD6 B1 or c
CCD7 AE xor (hl)
CCD8 12 ld (de),a
CCD9 14 inc d
CCDA 23 inc hl
CCDB 10F6 djnz CCD3
CCDD 04 inc b
CCDE 1840 jr CD20
CCE0 2D dec l
CCE1 24 inc h
CCE2 13 inc de
CCE3 ED67 rrd
CCE5 1A ld a,(de)
CCE6 A9 xor c
CCE7 0F rrca
CCE8 0F rrca
CCE9 0F rrca
CCEA 0F rrca
CCEB ED6F rld
CCED 2C inc l
CCEE AE xor (hl)
CCEF E6C0 and C0
CCF1 AE xor (hl)
CCF2 77 ld (hl),a
CCF3 10EB djnz CCE0
CCF5 1829 jr CD20
CCF7 0F rrca
CCF8 3012 jr nc,CD0C
CCFA 1A ld a,(de)
CCFB A9 xor c
CCFC 0F rrca
CCFD 0F rrca
CCFE AE xor (hl)
CCFF E63F and 3F
CD01 AE xor (hl)
CD02 77 ld (hl),a
CD03 13 inc de
CD04 24 inc h
CD05 10F3 djnz CCFA
CD07 1817 jr CD20
CD09 2D dec l
CD0A 24 inc h
CD0B 13 inc de
CD0C 1A ld a,(de)
CD0D EE00 xor 00
CD0F 07 rlca
CD10 07 rlca
CD11 4F ld c,a
CD12 AE xor (hl)
CD13 E6FC and FC
CD15 A9 xor c
CD16 77 ld (hl),a
CD17 2C inc l
CD18 79 ld a,c
CD19 AE xor (hl)
CD1A E60F and 0F
CD1C A9 xor c
CD1D 77 ld (hl),a
CD1E 10E9 djnz CD09
CD20 D1 pop de
CD21 7B ld a,e
CD22 3C inc a
CD23 90 sub b
CD24 5F ld e,a
CD25 14 inc d
CD26 CB92 res 2,d
CD28 ED538886 ld (8688),de
CD2C E1 pop hl
CD2D D1 pop de
CD2E C1 pop bc
CD2F F1 pop af
CD30 C9 ret
=== Конец цитаты ===

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

С уважением, Dmitry

от: Dmitry Mikhalchenkov
кому: Mihail Zharov
дата: 20 Dec 2002
Привет Mihail!

18 декабря 2002 года (а было тогда 08:28)
Mihail Zharov в своем письме к Dmitry Mikhalchenkov писал:

DM>> Вот только исходника нужного под руками нет, но если нужно
DM>> - могу скинуть.

MZ> Давай, интересно.

=== Цитирую файл zaprt42.asm ===
CCAF push af
CCB0 C5 push bc
CCB1 D5 push de
CCB2 E5 push hl
CCB3 ED5B8886 ld de,(8688) ;Адрес на экране
;1-2 биты слова - смещение
CCB7 01B7D4 ld bc,D4B7
CCBA 6F ld l,a
CCBB 2600 ld h,00
CCBD 29 add hl,hl
CCBE 29 add hl,hl
CCBF 29 add hl,hl
CCC0 09 add hl,bc
CCC1 42 ld b,d
CCC2 7A ld a,d
CCC3 D5 push de
CCC4 E658 and 58
CCC6 57 ld d,a
CCC7 A8 xor b
CCC8 EB ex de,hl
CCC9 010008 ld bc,0800;в С - #ff для инверсии
CCCC 0F rrca
CCCD 3828 jr c,CCF7
CCCF 0F rrca
CCD0 3811 jr c,CCE3
CCD2 EB ex de,hl
CCD3 1A ld a,(de)
CCD4 E603 and 03
CCD6 B1 or c
CCD7 AE xor (hl)
CCD8 12 ld (de),a
CCD9 14 inc d
CCDA 23 inc hl
CCDB 10F6 djnz CCD3
CCDD 04 inc b
CCDE 1840 jr CD20
CCE0 2D dec l
CCE1 24 inc h
CCE2 13 inc de
CCE3 ED67 rrd
CCE5 1A ld a,(de)
CCE6 A9 xor c
CCE7 0F rrca
CCE8 0F rrca
CCE9 0F rrca
CCEA 0F rrca
CCEB ED6F rld
CCED 2C inc l
CCEE AE xor (hl)
CCEF E6C0 and C0
CCF1 AE xor (hl)
CCF2 77 ld (hl),a
CCF3 10EB djnz CCE0
CCF5 1829 jr CD20
CCF7 0F rrca
CCF8 3012 jr nc,CD0C
CCFA 1A ld a,(de)
CCFB A9 xor c
CCFC 0F rrca
CCFD 0F rrca
CCFE AE xor (hl)
CCFF E63F and 3F
CD01 AE xor (hl)
CD02 77 ld (hl),a
CD03 13 inc de
CD04 24 inc h
CD05 10F3 djnz CCFA
CD07 1817 jr CD20
CD09 2D dec l
CD0A 24 inc h
CD0B 13 inc de
CD0C 1A ld a,(de)
CD0D EE00 xor 00
CD0F 07 rlca
CD10 07 rlca
CD11 4F ld c,a
CD12 AE xor (hl)
CD13 E6FC and FC
CD15 A9 xor c
CD16 77 ld (hl),a
CD17 2C inc l
CD18 79 ld a,c
CD19 AE xor (hl)
CD1A E60F and 0F
CD1C A9 xor c
CD1D 77 ld (hl),a
CD1E 10E9 djnz CD09
CD20 D1 pop de

CD21 7B ld a,e
CD22 3C inc a
CD23 90 sub b
CD24 5F ld e,a
CD25 14 inc d
CD26 CB92 res 2,d
CD28 ED538886 ld (8688),de
CD2C E1 pop hl
CD2D D1 pop de
CD2E C1 pop bc
CD2F F1 pop af
CD30 C9 ret
=== Конец цитаты ===

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

С уважением, Dmitry

от: Vlad Sotnikov
кому: Dmitry Mikhalchenkov
дата: 21 Dec 2002
Пpивет, Dmitry!

19 декабpя 2002 года (а было тогда 10:10)
Dmitry Mikhalchenkov в своем письме к Nikolaj Amosov писал:

DM> Веpсия 3.10 подpазyмевает пеpеключение дpавеpа #3d2f/#3d13 некотоpые
DM> винты pаботают чеpез этy точкy, на счет дpyгих - не знаю, сами мы не
DM> хаpдоводные:)

DM> А я и до сих поp юзаю, хоть и на эмyле... Да, согласен - маpазм, но
DM> не хоца от спека отвыкать:)

Кстати, а как в 3.10 сделать, чтобы несколько овеpлеев гpyзилось? Или
гpyзились по гоpячим клавишам? А то дефолтовый compile.ovl как пpавило всегда
нyжен, а дpyгие чеpез менюшкy подгpyжать - маpазм...



Vega/ex-Style Group.

<филфак-СПбГУ>
FIDO: 2:5030/1006.19 ZXNET: 500:812/19 E-mail: vega56@mail.ru

от: Sergey Cherbynin
кому: Vlad Sotnikov
дата: 26 Dec 2002
Приветствую тебя, Vlad!

В Пятницу 21 Декабря 2002 года в 12:45:47 Vlad Sotnikov и Dmitry Mikhalchenkov
разговаривали на тему 6x8.

DM>> Веpсия 3.10 подpазyмевает пеpеключение дpавеpа #3d2f/#3d13 некотоpые
DM>> винты pаботают чеpез этy точкy, на счет дpyгих - не знаю, сами мы не
DM>> хаpдоводные:)

DM>> А я и до сих поp юзаю, хоть и на эмyле... Да, согласен - маpазм, но
DM>> не хоца от спека отвыкать:)

VS> Кстати, а как в 3.10 сделать, чтобы несколько овеpлеев гpyзилось? Или
VS> гpyзились по гоpячим клавишам? А то дефолтовый compile.ovl как пpавило
VS> всегда нyжен, а дpyгие чеpез менюшкy подгpyжать - маpазм...
Там по моему в сетапе можно все выставить, у меня несколько оверлеев вроде
грузится, там даже дисковод указывается с какого грузить.

Всего хорошего, Vlad!
С наилучшими пожеланиями *** Sergey *** !


>>

от: Dmitry Mikhalchenkov
кому: Sergey Cherbynin
дата: 27 Dec 2002
Привет Sergey!

26 декабря 2002 года (а было тогда 22:10)
Sergey Cherbynin в своем письме к Vlad Sotnikov писал:

VS>> Кстати, а как в 3.10 сделать, чтобы несколько овеpлеев
VS>> гpyзилось? Или
VS>> гpyзились по гоpячим клавишам? А то дефолтовый compile.ovl как
VS>> пpавило
VS>> всегда нyжен, а дpyгие чеpез менюшкy подгpyжать - маpазм...

SC> Там по моему в сетапе можно все выставить, у меня несколько оверлеев
SC> вроде грузится, там даже дисковод указывается с какого грузить.

Там можно выбрать дефолтовый оверлей.
Hо несколько оверлеев одновременно вызывать не получится.
Можно вызвать предыдущий вызванный оверлей по ext+4.
Оверлеи из стандартного пакета почти все висят по горячим клавишам, нужно
только почитать описалово...

С уважением, Dmitry




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

Похожие статьи:
Игровой автомат - Зеркало.
Презентация - CMOS service v1.0
Психология - Осознанное сновидение: Как удержатся во сне.
Анекдоты - Анекдоты про наркоманов и пьяниц.
B.B.S. Новости - О новой MAL'S BBS & Estel BBS.

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