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


тема: печаталка одного символа при 64-х в строке.



от: Oleg Grigoriev
кому: All
дата: 10 Feb 1999
Hi, All! В целях повышения общеполезного траффика кидаю сабж. Инте- ресно, сможет ли кто ее существенно ускорить. :) Таблицы на 128 кил не приветствуются. :) В а - символ, в de - координаты. === cut === LD H,FONT_64[ LD L,A SRL D LD C,#0F JR NC,$+#06 LD C,#F0 SET 3,H LD A,E AND #18 OR #40 LD B,A LD A,E AND #07 RRCA RRCA RRCA ADD A,D LD E,A LD D,B LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A INC H INC D LD A,(DE) AND C OR (HL) LD (DE),A RET === cut === Фонт имеет размер 4 кила и лежит по очень красивому адресу (3 младших полубайта равны нулю). Естественно при печати на чистый экран печаталка преобразуется в ld a,(de):or (hl):ld (de),a. А при печати парами в ld a,(bc):or (hl):ld (de),a. Мне интересно другое: а возможно ли принципиальное ускоре- ние? :) Помоему нет. :) WBR, Oleg. np: Mundanus Imperium'97 "Ode To The Nightsky"

от: Dmitry Lomov
кому: Oleg Grigoriev
дата: 11 Feb 1999
Hi, Oleg! OG> В целях повышения общеполезного траффика кидаю сабж. Инте- OG> ресно, сможет ли кто ее существенно ускорить. :) зачем оно надобно, скажи мне? я, как известный извращенец в области печати символов в разных форматах, с содроганием смотрю на подобные процедуры ;-) в данном случае - только парами! иначе тормозов не оберешься... насос фонта можно стеком делать, будет немного быстрее (на 2 такта/байт). типа POP HL LD A,(DE):AND C:OR L:LD (DE),A:INC D LD A,(DE):AND C:OR H:LD (DE),A:INC D неблагодарное это дело - оптимизировать такое :) OG> Мне интересно другое: а возможно ли принципиальное ускоре- OG> ние? :) Помоему нет. :) хе-хе, оно всегда возможно, только надо под конкретную задачу решение находить. не бывает глобальных решений, и нет такой общей задачи - печать символа. есть конкретные задачи: терминал, текстедитор, текствьювер, бегущая строка... Всего хорошего. Дмитрий. ..LD..X-TRADE..

от: Ivan Mak
кому: Oleg Grigoriev
дата: 12 Feb 1999
Приветствую Вас, Oleg! В день Oleg Grigoriev написали All: OG> В целях повышения общеполезного траффика кидаю сабж. Инте- OG> ресно, сможет ли кто ее существенно ускорить. :) [скип code] OG> Мне интересно другое: а возможно ли принципиальное ускоре- OG> ние? :) Помоему нет. :) А ты не пpобовал печатать командами RRD и RLD? А пpи печати стpок по одному символу в конце печатаемой стpоки впечатывать пpобел, если стpока заканчивалась нечетным символом. Так, кстати, знакогенеpатоp 2К нужен всего... И еще один момент. В HL лучше деpжать сpазу адpес знакоместа и в пpоцессе печати увеличивать его на единичку после каждых двух символов. А pассчет адpеса делать пpи установке позиции печати. Тогда все pассчетные RRCA, AND/OR исчезнут. Если нужно узнать позицию печати, делается обpатное пpеобpазование. Так быстpее, потому что функции установки позиции и считывания позиции вызываются значительно pеже функций печати. Два последовательных символа надо печатать 'как бы' на одном месте. Позиция печати должна быть с четного места, длина печатаемой стpоки тоже должна быть четной. Пpи нечетных ситуациях нужна спецобpаботка... ;HL - позиция печати - ПРЯМОЙ АДРЕС В ЭКРАHЕ! ;A - символ ;AF' - флаг четного/нечетного знакоместа, для четного A=0, для нечетного A=1, ;флаг высчитывается пpогpаммой установки позиции печати. PRINT_SYM LD D,ZG_ADRESS/256 LD E,A LD C,H LD A,(DE) ───┐ 8 pаз.. RLD │ INC D │ INC H │ .... │ LD A,(DE) │ RLD │ │ ──┘ LD H,C EX AF,AF' XOR 1 JR NZ,NO_INC_L INC L JR NZ,LL2 LD A,H ADD A,8 LD H,A CP #60 JR NZ,LL2 LD H,#40 LL2 XOR A NO_INC_L EX AF,AF' RET Вай! Протосы атакуют моих зерлингов! Пора сматываться. Ivan. - Разводись схемка, больша и маленька..

от: Dmitry Grigoryev
кому: Oleg Grigoriev
дата: 14 Feb 1999
Привет, Oleg! Сpеда 10 Февpаля 1999 19:20, Oleg Grigoriev (500:812/10.13) wrote to All: OG> LD H,FONT_64[ OG> LD L,A OG> SRL D OG> LD C,#0F OG> JR NC,$+#06 OG> LD C,#F0 OG> SET 3,H 38-48 тактов ld l,a srl d jr nc,$+9 ld h,font_64[+8 ld c,#f0 jp $+7 ld h,font_64[ ld c,#0f 38-43 OG> LD A,E OG> AND #18 OG> OR #40 OG> LD B,A OG> LD A,E OG> AND #07 OG> RRCA OG> RRCA OG> RRCA OG> ADD A,D OG> LD E,A OG> LD D,B 57 Здесь, все таки, лучше таблицу адресов верт. координат в 24*2=48 байт: ld b,tab[ sla e ld c,e ld a,(bc) add a,d inc c ld e,a ld a,(bc) ld d,a 49 tacts (можно, наверняка, и быстрее, но думать лень ;) Итого - 10.5 тактов на символ уже вылизали ;) OG> LD A,(DE) OG> AND C OG> OR (HL) OG> LD (DE),A OG> INC H OG> INC D OG> Фонт имеет размер 4 кила и лежит по очень красивому адресу OG> (3 младших полубайта равны нулю). Ты забыл добавить, что фонт в формате экрана и разбит на две фазы. Вот первая фича - это действительно красивый ход! Впервые, кстати, примененный в Онлайне ;) OG> Естественно при печати на чистый экран печаталка преобразуется в OG> ld a,(de):or (hl):ld (de),a. Угу. А зачем печатать на грязном? 56 тактов на символ на дороге не валяются ;) OG> А при печати парами в ld a,(bc):or (hl):ld (de),a. Как это "парами"? OG> Мне интересно другое: а возможно ли принципиальное ускоре- OG> ние? :) Помоему нет. :) Hикогда так не говори :) Хотя, теперь вот пусть попробуют ;) Вообще, всегда можно ввести некоторые ограничения (но задачу необходимо рассматривать более обще - типа "печать страницы") - отказаться от координат, ни в коем случае не печатать пробел, ввести несколько табуляций, отказаться от псевдографики и выводить 6-7 строк из восьми и т.п. Цветная печать свои особенности имеет - можно, например, стирать строку атрибутами... Hеплох освободить хоть один регистр, хотя бы на процедуру печати строки, под константы. Про альтернативные забывать не стоит... OG> WBR, Oleg. С уважением, Дмитрий (OLDMAN). 500:095/100.1@ZXNet oldman@i-connect.ru

от: Dmitry Grigoryev
кому: Ivan Mak
дата: 16 Feb 1999
Привет, Ivan! Пятница 12 Февpаля 1999 02:47, Ivan Mak (2:5030/529.24) wrote to Oleg Grigoriev: IM> А ты не пpобовал печатать командами RRD и RLD? А ты ldir'ом не пробывал? Тоже интересно ;) IM> А пpи печати стpок по одному символу в конце печатаемой стpоки IM> впечатывать пpобел, если стpока заканчивалась нечетным символом. Так, IM> кстати, знакогенеpатоp 2К нужен всего... Угу. Только текст увеличится на примерно половину количества строк. Или проверку в процедуру вставить придется. Да и просто печать каждой строки с нечетным кол-вом символов неоправдано увеличится. Я уж молчу о том, что при нормальном способе вывода быстрее не печатать пробел, а пересчитывать адрес экрана несколькими командами. IM> И еще один момент. В HL лучше деpжать сpазу адpес знакоместа и в Понимаешь, Иван... Ежу понятно, что лучше... Hо условия задачи были следующие: печать символа 8x4 в _произвольной_ позиции экрана, заданой _координатами_... IM> PRINT_SYM IM> LD D,ZG_ADRESS/256 IM> LD E,A IM> LD C,H IM> LD A,(DE) ───┐ 8 pаз.. IM> RLD │ IM> INC D │ IM> INC H │ IM> .... │ IM> LD A,(DE) │ IM> RLD │ IM> │ IM> ──┘ Hевооруженным взглядом видно, что ld a,(de);rld = 25 tacts, ld a,(de); and c; or (hl); ld (de), a = 25 tacts (или 21 при печати на пустую строку, что делается всегда в реальном приложении). Где выигрыш? IM> LD H,C IM> EX AF,AF' IM> XOR 1 IM> JR NZ,NO_INC_L IM> INC L IM> JR NZ,LL2 IM> LD A,H IM> ADD A,8 IM> LD H,A IM> CP #60 #58? А эта "батва" вообще ни к чему - нормальные люди строку спецсимволом заканчивают, а не заполняют экран до упора, да еще с переходом на верхнюю строку ;) IM> JR NZ,LL2 IM> LD H,#40 IM> LL2 XOR A NO_INC_L IM> EX AF,AF' IM> RET Ок. Парами, так парами (в Онлайне и СПФ я тоже парами печатал ;) Менять условия, так менять... hl - адрес экрана de - адрес текста * печать строки на пустом месте * print_left: ld b,font_left/256 ld a,(de) inc de cp #21 jr c,controls ld c,a begin 7 ld a,(bc) ld (hl),a inc b inc h end ld a,(bc) ld (hl),a print_right: ld b,font_right/256 ld a,(de) inc de cp #21 jr c,controls ld c,a begin 7 ld a,(bc) or (hl) ld (hl),a inc b inc h end ld a,(bc) or (hl) ld (hl),a inc l jp print_left controls: cp #20 jr nz,tab ld a,b cp font_left jr z,print_right inc l jp print_left tab: cp #09 ret nz ld a,l and #03 add a,#04 ld l,a jp print_left Hу а дальше сам-сам ;) Делай быстрее с RLD ;) IM> Вай! Протосы атакуют моих зерлингов! Пора сматываться. Ivan. С уважением, Дмитрий (OLDMAN). 500:095/100.1@ZXNet oldman@i-connect.ru

от: Oleg Grigoriev
кому: Dmitry Grigoryev
дата: 22 Feb 1999
Пусть враги твои, Dmitry, умрут без сыновей! 14-02-99 в 14:23:42 Dmitry Grigoryev ═> Oleg Grigoriev: [мой код] DG> ld l,a DG> srl d DG> jr nc,$+9 DG> ld h,font_64[+8 DG> ld c,#f0 DG> jp $+7 DG> ld h,font_64[ DG> ld c,#0f DG> 38-43 [мой код] DG> 57 DG> Здесь, все таки, лучше таблицу адресов верт. координат в 24*2=48 байт: DG> ld b,tab[ DG> sla e DG> ld c,e DG> ld a,(bc) DG> add a,d DG> inc c DG> ld e,a DG> ld a,(bc) DG> ld d,a DG> 49 tacts Хе-хе... Регистр C занят под маску... EX DE,HL ;4 LD A,H ;4 LD H,TABL[ ;7 /8 SLA L ;8 OR (HL) ;7 /8 INC L ;4 LD H,(HL) ;7 /8 LD L,A ;4 EX DE,HL ;4 ;49[52] Вот теперь 49. DG> (можно, наверняка, и быстрее, но думать лень ;) DG> Итого - 10.5 тактов на символ уже вылизали ;) Угу... :) OG>> Фонт имеет размер 4 кила и лежит по очень красивому адресу OG>> (3 младших полубайта равны нулю). DG> Ты забыл добавить, что фонт в формате экрана и разбит на две фазы. Гм... Мне казалось, что это из кода понятно. Впрочем, там все из кода понятно. :) DG> Вот первая DG> фича - это действительно красивый ход! Вторая тоже ничего. :) Кстати, сам придумал и, помнится, долго ругался когда прочитал об этом в какой-то газете. Давно это было... :) DG> Впервые, кстати, примененный в DG> Онлайне ;) Быть может... Хотя мне казалось, что zxword появился нес- колько раньше. :) OG>> Естественно при печати на чистый экран печаталка преобразуется в OG>> ld a,(de):or (hl):ld (de),a. DG> Угу. А зачем печатать на грязном? 56 тактов на символ на дороге не DG> валяются ;) В новой печаталке чуть больше. OG>> А при печати парами в ld a,(bc):or (hl):ld (de),a. DG> Как это "парами"? По два символа за раз. Приблизительно так: LD B,FONT_64[ LD H,FONT_64[+#08 LD C,(IX+#00) LD L,(IX+#01) ... LD A,(BC):OR (HL):LD (DE),A INC B,H,D ... OG>> Мне интересно другое: а возможно ли принципиальное ускоре- OG>> ние? :) Помоему нет. :) DG> Hикогда так не говори :) Хе-хе... Там смайл стоял. Как раз для того, чтобы кого-ни- будь спровоцировать. :) DG> Хотя, теперь вот пусть попробуют ;) Чуть ниже. DG> Вообще, всегда можно DG> ввести некоторые ограничения (но задачу необходимо рассматривать более DG> обще - типа "печать страницы") - отказаться от координат, ни в коем случае DG> не печатать пробел, Да, естественно. Hо в данном случае задача ставилась именно как печать одного символа. DG> ввести несколько табуляций, отказаться от псевдографики и выводить 6-7 DG> строк из восьми и т.п. Вот последнее терпеть ненавижу. Меня, как известного извра- щенца (с) в области рисования фонтов, жутко бесят покалеченные символы. ;Процедура печати одного символа по маске при 64-х в строке. ;IN: [DE] - COORDS ; [A] - CHAR ; LD L,A ;4 SRL D ;8 JR NC,$+#09 ;7 /8 |12 LD H,FONT_64[+#08 ;7 /8 LD C,#F0 ;7 /8 JP $+#07 ;10 LD H,FONT_64[ ;7 /8 LD C,#0F ;7 /8 ;38[40]/43[46] EX DE,HL ;4 LD A,H ;4 LD H,TABL[ ;7 /8 SLA L ;8 OR (HL) ;7 /8 INC L ;4 LD H,(HL) ;7 /8 LD L,A ;4 EX DE,HL ;4 ;49[52] ;87[92]/92[98] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 INC H ;4 INC D ;4 ;36[40] LD A,(DE) ;7 /8 AND C ;7 /8 OR (HL) ;7 /8 LD (DE),A ;7 /8 ;28[32] RET ;10 ;377[414]/382[420] ;Процедура печати одного символа при 64-х в строке. ;IN: [DE] - COORDS ; [A] - CHAR ; LD L,A ;4 SRL D ;8 LD H,FONT_64[ ;7 /8 JR NC,$+#04 ;7 /8|12 LD H,FONT_64[+#08 ;7 /8 ;31[32]/33[36] EX DE,HL ;4 LD A,H ;4 LD H,TABL[ ;7 /8 SLA L ;8 OR (HL) ;7 /8 INC L ;4 LD H,(HL) ;7 /8 LD L,A ;4 ;45[48] ;76[80]/78[84] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 INC H ;4 INC D ;4 ;29[32] LD A,(DE) ;7 /8 OR (HL) ;7 /8 LD (HL),A ;7 /8 ;21[24] RET ;10 ;310[338]/312[342] WBR, Oleg.




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

Похожие статьи:
Письмо №304 - Саратовская обл, г Балашов
Обзор - DEJA VU #9, RU(S)H #2, INSANITY #1-#4, SUPER LASER SQUAD, SCOOTER:"FIRE", RESEARCH BRЕАK-DOWN.
От авторов - О новшествах в оболочке газеты.
Интервью - Интервью с CC'000. RANDOM/CONCERN CHAOS.
Из разговора герасима с муму - юмористическая статья.

В этот день...   8 мая