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


тема: print42_a



от: Mihail Zharov
кому: All
дата: 11 Mar 2001
Привет, All! Можно ли еще быстрее, выше, сильнее... без раскрытия циклов? ╒═══< Begin file: print42a.asm >════════ PR42_Y DB 0 ;Y-позиция печати (0-23) PR42_X DB 0 ;X-позиция печати (0-255) ;*************************************** ;печать символа [A] PR42_A exx : ld bc,(PR42_Y) ;24 ld d,FONT/256 : ld e,a ;11 ;35 ;--------------------------------------- ld a,c : and %00011000 ;11 or #40 : ld h,a ;11 ld a,b : and %11111000 ;11 ld l,a ;4 ld a,c : and %00000111 ;11 or l : rrca : rrca : rrca ;16 ld l,a ;4 ;--------------------------------------- ;68 ld a,b : ld b,8 : rrca ;15 and %00000011 : jr z,PR42_A0 ;14 ;137 dec a : jr z,PR42_A2 ;11 ;148 dec a : jr z,PR42_A4 ;11 ;159 ;--------------------------------------- ;154 PR42_A6 ld c,%00000011 ;7 PR42_A7 ld a,(de) : rlca : rlca ;15 xor (hl) : and c : xor (hl) ;18 ld (hl),a : inc l ;11 ld a,(de) ;7 rlca : rlca : rrd ;26 ld (hl),a : dec l : inc h,d ;19 djnz PR42_A7 ;13 exx : ret ;14 ; ---- ;7+109*8-5+14 = 888 + 154 = 1042 ;--------------------------------------- PR42_A4 ld c,%11000000 ;7 PR42_A5 rrd : ld a,(de) ;25 rrca : rrca : rrca : rrca ;16 rld : inc l ;22 xor (hl) : and c : xor (hl) ;18 ld (hl),a : dec l : inc h,d ;19 djnz PR42_A5 ;13 exx : ret ;14 ; ---- ;7+113*8-5+14 = 920 + 159 = 1079 ;--------------------------------------- PR42_A2 ld c,%00111111 ;7 PR42_A3 ld a,(de) : rrca : rrca ;15 xor (hl) : and c : xor (hl) ;18 ld (hl),a : inc h,d ;15 djnz PR42_A3 ;13 exx : ret ;14 ; ---- ;7+61*8-5+14 = 504 + 148 = 652 ;--------------------------------------- PR42_A0 ld c,%11111100 ;7 PR42_A1 ld a,(de) ;7 xor (hl) : and c : xor (hl) ;18 ld (hl),a : inc h,d ;15 djnz PR42_A1 ;13 exx : ret ;14 ; ---- ;7+53*8-5+14 = 440 + 137 = 577 ;--------------------------------------- ;min: 577 ;max: 1079 ;byte: 114 ╘═══< End file: print42a.asm >══════════ Счастливо. Михаил.

от: Aleksandr Majorov
кому: Mihail Zharov
дата: 13 Mar 2001
Пpивет Mihail! 11 Маp 01 21:21, Mihail Zharov -> All: MZ> Можно ли еще быстpее, выше, сильнее... MZ> без pаскpытия циклов? MZ> ╒═══< Begin file: print42a.asm >════════ MZ> PR42_Y DB 0 ;Y-позиция печати (0-23) MZ> PR42_X DB 0 ;X-позиция печати (0-255) MZ> ;*************************************** MZ> ;печать символа [A] MZ> PR42_A exx : ld bc,(PR42_Y) ;24 [поскипано] Даже не вникая в глyбинy кода: PR42_A EXX LD BC,0 PR42_Y EQU $-2 ;Y-позиция печати (0-23) PR42_X EQU $-1 ;X-позиция печати (0-255) Выигpали 3 байта, и выигpали 10 тактов. Ессно это подходит тока в слyчае когда печаталка лежит в ОЗУ. Aleksand

от: Pavel Vasilyev
кому: Mihail Zharov
дата: 14 Mar 2001
Привет, Mihail! 11 Мар 01 21:21, Mihail Zharov -> All: MZ> Можно ли еще быстрее, выше, сильнее... MZ> без раскрытия циклов? MZ> ╒═══< Begin file: print42a.asm >════════ MZ> PR42_Y DB 0 ;Y-позиция печати (0-23) MZ> PR42_X DB 0 ;X-позиция печати (0-255) Младший бит X-координаты игнорится, ^^^^^ т.е. твоя печаталка - почетная :) [--skip--] MZ> PR42_A6 ld c,%00000011 ;7 MZ> PR42_A7 ld a,(de) : rlca : rlca ;15 MZ> xor (hl) : and c : xor (hl) ;18 MZ> ld (hl),a : inc l ;11 MZ> ld a,(de) ;7 MZ> rlca : rlca : rrd ;26 MZ> ld (hl),a : dec l : inc h,d ;19 MZ> djnz PR42_A7 ;13 MZ> exx : ret ;14 MZ> ;--- MZ> ;7+109*8-5+14 = 888 Этот поток можно чуть убыстрить. Здесь: HL = адрес в экране DE = адрес в фонте B = 8 PR42_A6 LD A,(HL) ;07 RRCA : RRCA : LD C,A ;12 LD A,(DE) ;07 RLCA : RL C : RLCA : RL C ;24 LD (HL),C : INC L : RRD ;27 LD (HL),A : DEC L : INC H,D ;19 DJNZ PR42_A6 ;13 EXX : RET ;14 ;--- ;109*8-5+14 = 881 Всего на 7 тактов, а для скорпа - еще на 15, за счет уменьшения нечетнотактовых команд в цикле. [--skip--] ...

от: Aleksandr Majorov
кому: Mihail Zharov
дата: 15 Mar 2001
Пpивет Mihail! 11 Маp 01 21:21, Mihail Zharov -> All: MZ> Можно ли еще быстpее, выше, сильнее... MZ> без pаскpытия циклов? Вот еще немного посмотpел :) [поскипано] MZ> ld a,b : ld b,8 : rrca ;15 MZ> and %00000011 : jr z,PR42_A0 ;14 MZ> ;137 MZ> dec a : jr z,PR42_A2 ;11 MZ> ;148 MZ> dec a : jr z,PR42_A4 ;11 MZ> ;159 MZ> ;--------------------------------------- MZ> ;154 MZ> PR42_A6 ld c,%00000011 ;7 [поскипано] Вот это место выбоpа типа печати можно чyть-чyть оптимизнyть. От пеpвого RRCA и до меток PR42_A? LD A,B: LD B,8 : RRCA RRCA: JR NC,PR42_A04 RRCA: JR C,PR42_A6 PR42_A2 ........ PR42_A04 RRCA: JR C, PR42_A4 PR42_A0 ........... PR42_A4 ........... PR42_A6 ........... Итого y меня вышло на один байт меньше. Тепеpь вpеменные pасклады. Считаем такты затpаченные от момента после RRCA и до момента попадания на точкy печати в зависимости от содеpжимого [A] A стаpый ваpиант новый ваpиант 0 19 27 1 30 22 2 41 32 3 36 27 Посколькy все 4 типа символов встpечаются одинаково, то сpеднее вpемя на пеpеход по стаpомy = 31.5 тактов, по новомy = 27 тактов. Итого на байт коpоче и пpимеpно на 4.5 такта быстpее ;-) Aleksand

от: Mihail Zharov
кому: Aleksandr Majorov
дата: 18 Mar 2001
Привет, Aleksandr! Суббота 17 Мар 2001, в 04:17:01, Aleksandr Majorov -> Mihail Zharov: AM>>> Посколькy все 4 типа символов встpечаются одинаково, то AM>>> сpеднее вpемя на пеpеход по стаpомy = 31.5 тактов, AM>>> по новомy = 27 тактов. AM>>> Итого на байт коpоче и пpимеpно на 4.5 такта быстpее ;-) MZ>> Я посчитат и полyчилось - выигpишь 18 тактов пpи печати MZ>> 4-х символов подpяд... ;) AM> Дык все веpно - 18 / 4 = 4.5 AM> Hо ты считал для "подpяд", а я считал для "в сpеднем" - это AM> имхо более yдобно AM> :) Возможно. Hо я хотел более точного результата ;) Вот окончательный вариант(?) Тут еще два потока уменьшены Павлом Васильевым. Что-то еще можно сделать? ;) ╒═══< Begin file: print42a.asm >════════ ;*************************************** ;ПЕЧАТЬ СИМВОЛА (A) ШРИФТОМ 6x8 - 42 ;*************************************** PR42_A exx ;4 ld bc,#0000 ;10 PR42_Y EQU $-2 ;Y-координата (0-023) PR42_X EQU $-1 ;X-координата (0-255) ld d,FONT/256 : ld e,a ;11 ;--------------------------------------- ld a,c : and %00011000 ;11 or #40 : ld h,a ;11 ld a,b : and %11111000 ;11 ld l,a ;4 ld a,c : and %00000111 ;11 or l : rrca : rrca : rrca ;16 ld l,a ;4 ;--------------------------------------- ld a,b : ld b,8 : rrca ;15 rrca : jr nc,PR42_A0 ;124 rrca : jr c,PR42_A6 ;135 ; ---- ; 130 ;--------------------------------------- PR42_A2 ld c,%00111111 ;7 PR42_A3 ld a,(de) : rrca : rrca ;15 xor (hl) : and c : xor (hl) ;18 ld (hl),a : inc h,d ;15 djnz PR42_A3 ;13 exx : ret ;14 ; ---- ;7+61*8-5+14 = 504 + 130 = 634 ;--------------------------------------- PR42_A0 rrca : jr c,PR42_A4 ;11 ld c,%00000011 ;7 ex de,hl ;4 PR42_A1 ld a,(de) ;7 and c : or (hl) ;11 ld (de),a : inc h,d ;15 djnz PR42_A1 ;13 exx : ret ;14 ; ---- ;22+46*8-5+14 = 399 + 124 = 523 ;--------------------------------------- PR42_A4 ld c,%11000000 ;7 PR42_A5 rrd : ld a,(de) ;25 rrca : rrca : rrca : rrca ;16 rld : inc l ;22 xor (hl) : and c : xor (hl) ;18 ld (hl),a : dec l : inc h,d ;19 djnz PR42_A5 ;13 exx : ret ;14 ; ---- ;7+113*8-5+14 = 920 + 140 = 1060 ;--------------------------------------- PR42_A6 ld a,(de) ;7 rlca : rlca : ld c,a ;12 xor (hl) : and %00000011 ;14 xor (hl) ;7 ld (hl),a : inc l ;11 ld a,c : rrd ;22 ld (hl),a : dec l : inc h,d ;19 djnz PR42_A6 ;13 exx : ret ;14 ; ---- ;105*8-5+14 = 849 + 135 = 984 ;--------------------------------------- ;min: 523 ;max: 1060 ;byte: 110 ╘═══< End file: print42a.asm >══════════ Счастливо. Михаил.




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

Похожие статьи:
DIY - Приспосабливаем мышь от Amiga к ZX Spectrum.
Устав SpbZxNet - Памятка начинающим СисОпу сети SPbZXNet v1.1.
Мозаика - Официальные результаты Enlight'96.
Проект - проект стратегии для спектрума.
Бомба из хозмага - пособие для террориста.

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