С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Доускорялся, - времянки сдвинулись вверх, стэк накрывать всё стал медным тазом. Хаха!![]()
Последний раз редактировалось DragonsLord; 02.05.2021 в 05:25.
Каким образом я вдруг стану понимать ничего не говорящие сокращения? Это примерно, как сказать "ну, тебе нужен АБЫРВАЛГ".потому что нужно RTFM
С каких это пор на Спеке стали заявлять копирайты на интеллектуальную собственность. Очнись, те времена прошли 30 лет назад. Сейчас все исходники открыты для всех. Как ты называешь "нахаляву".нет, когда кладут - это на халяву
ну так и бери то что выложили на халяву.
Никто не запрещает.
С уважением,
Jerri / Red Triangle.
С помощью гугла: https://en.wikipedia.org/wiki/RTFM
___________
Столкнулся с проблемой, в Анриле мой разогнанный код бажит, а в Спине всё работает на отлично. Вот как это может быть? А?!
У обоих одинаковая настройка стоит: Pentagon 128
...
Нашёл. Пофиксил. Победа!
Даже на Скорпионовских таймингах теперь не крашит, а идеалити!
Можно ускорять дальше.
![]()
Последний раз редактировалось DragonsLord; 02.05.2021 в 19:36.
Чёт, смотрю на результаты - слишком гладко всё идёт. Прям на изичах. Мож я знатный гуру, только не знаю об этом?
Да не.... Это просто Спек такой элементарный калькулятор, где любой мегасложный проект делается за неделю без раскачки.![]()
vlad-kras(03.05.2021)
Нет, нет, это вы сопли жуёте 5 месяцев, - помощи ноль. Я же начал писать день назад, о чём и сообщил в топике.21.01.2021, 21:36 - 02.05.2021, 21:01 - ровно неделя.
Только что закончил новую версию тайловыводилки писать. Со стэком. Наврядли можно быстрее.
Уложил таки на самых медленных Скорпионовских тактах самый длинный вариант сроллинга (из восьми).
Всё скроллится ровно за 2 кадра на любом компьютере.
36 тактов на 2 байта
1109 - выводилка 1 цветного тайла по входным параметрам
1373 - с расчётом этих входных параметров
31,35% выигрыша от изначальной афигенски быстрой процедуры, которая применяется в Героях.
Снапшот с тайловым скроллером чуть позже. Хочу карту первого уровня набрать для красоты.
- - - Добавлено - - -
Так сказать, чтобы осталось в аналах ДЛЯ ПОТОМКОВ.
Была тайловыводилка, показанная в "HeroesII", написанная в 98 году. Достаточно быстрая, вся инлайновая. Определение адреса в экране сделано через ПЗУ.
В 2021 году я заметил, что судя по структуре проекта, применение индексного регистра IX не обосновано, а значит следует отказаться от него, ибо все операции с IX жрут больше тактов, чем аналогичные с другими регистровыми парами. Заодно убрал повторный расчёт адреса в экране второй линии знакомест. И заменил процедуру расчёта адреса в экране с обращения в ПЗУ на самописную, увиденную у Санчеза. Выигрыш 18% относительно исходника.Код:;323774t - 12x12=144 тайла (2248t) ;2000t - 1 тайл GAMEPOLE ld b,12 GAMEMET2 push bc ld a,(POZXY) ld (POZX),a ld a,4 ld (PSP+1),a ;X начала вывода карты на экране ld a,(POZXY+1) dec b add a,b ld (POZY),a ld a,b add a,b ;b*2 ld (PSP),a ;Y начала вывода карты на экране ld b,12 GAMEMET1 push bc call SPPECH ld a,(POZX) inc a ld (POZX),a ld a,(PSP+1) inc a inc a ld (PSP+1),a pop bc djnz GAMEMET1 pop bc djnz GAMEMET2 ret ;1736t SPPECH ld de,64 ld a,(POZY) call MUL_8 ld a,(POZX) ld e,a ld d,0 add hl,de ld de,karta add hl,de OGOGO2 ld a,(hl) ld e,36 ld d,0 call MUL_8 ld de,tiles add hl,de OGOGO push hl pop ix ld hl,PSP ld a,(hl) inc hl ld c,(hl) push bc push af call 3742 ld a,l add a,c ld l,a ld (PTBL4),hl ld a,(ix+0) ld (hl),a inc l ld a,(ix+1) ld (hl),a dec l inc h ld a,(ix+2) ld (hl),a inc l ld a,(ix+3) ld (hl),a dec l inc h ld a,(ix+4) ld (hl),a inc l ld a,(ix+5) ld (hl),a dec l inc h ld a,(ix+6) ld (hl),a inc l ld a,(ix+7) ld (hl),a dec l inc h ld a,(ix+8) ld (hl),a inc l ld a,(ix+9) ld (hl),a dec l inc h ld a,(ix+10) ld (hl),a inc l ld a,(ix+11) ld (hl),a dec l inc h ld a,(ix+12) ld (hl),a inc l ld a,(ix+13) ld (hl),a dec l inc h ld a,(ix+14) ld (hl),a inc l ld a,(ix+15) ld (hl),a pop af inc a call 3742 pop bc ld a,l add a,c ld l,a ld a,(ix+16) ld (hl),a inc l ld a,(ix+17) ld (hl),a dec l inc h ld a,(ix+18) ld (hl),a inc l ld a,(ix+19) ld (hl),a dec l inc h ld a,(ix+20) ld (hl),a inc l ld a,(ix+21) ld (hl),a dec l inc h ld a,(ix+22) ld (hl),a inc l ld a,(ix+23) ld (hl),a dec l inc h ld a,(ix+24) ld (hl),a inc l ld a,(ix+25) ld (hl),a dec l inc h ld a,(ix+26) ld (hl),a inc l ld a,(ix+27) ld (hl),a dec l inc h ld a,(ix+28) ld (hl),a inc l ld a,(ix+29) ld (hl),a dec l inc h ld a,(ix+30) ld (hl),a inc l ld a,(ix+31) ld (hl),a ld bc,(PTBL4) ld a,b and #18 sra a sra a sra a add a,#58 ld b,a ld a,(ix+32) ld (bc),a inc bc ld a,(ix+33) ld (bc),a ld hl,31 add hl,bc ld a,(ix+34) ld (hl),a inc hl ld a,(ix+35) ld (hl),a ret PTBL4 defb 0,0 ;временно храним адрес POZX defb 0 POZY defb 0 PSP defb 0,0 ;Y,X
Гулять так гулять, подумал я. Свербит в мозгу желание брать и класть регистровыми парами, а не отдельными регистрами. Посмотрев таблицу существующих мнемоник Z80 пришёл к выводу, что и взять парой и положить парой не получится, нет таких команд, ибо адреса откуда и куда у нас всегда расчитываются в преамбуле и всё время разные. Ну, хотя бы ВЗЯТЬ я регистровой парой могу, и то хлеб. Выигрыш относительно исходника увеличился до 35%.Код:;269486(1871);276398(1919);308942(2145);323774 - 12x12=144 тайла (2248) ;1633;1671;1897;2000 - 1 тайл GAMEPOLE ld b,12 GAMEMET2 push bc ld a,(POZXY) ld (POZX),a ld a,4 ld (PSP+1),a ;X начала вывода карты на экране ld a,(POZXY+1) dec b add a,b ld (POZY),a ld a,b add a,b ;b*2 ld (PSP),a ;Y начала вывода карты на экране ld b,12 GAMEMET1 push bc call SPPECH ld a,(POZX) inc a ld (POZX),a ld a,(PSP+1) inc a inc a ld (PSP+1),a pop bc djnz GAMEMET1 pop bc djnz GAMEMET2 ret ;1369 - заменил 3742 на Санчеза ;1407 - убрал вывод через IX ;1633 - убрал второй обсчёт через 3742 ;1736 - было изначально SPPECH ld de,64 ld a,(POZY) call MUL_8 ld a,(POZX) ld e,a ld d,0 add hl,de ld de,karta add hl,de OGOGO2 ld a,(hl) ld e,36 ld d,0 call MUL_8 ld de,tiles add hl,de OGOGO ex de,hl ld hl,PSP ld a,(hl) inc hl ld c,(hl) ld l,a rrca rrca rrca and #e0 or c ld h,a ld a,l and #18 add a,high 16384 ;shadow_screen ld l,h ld h,a ld (PTBL4),hl dup 7 ld a,(de) ;Выводим 2 байта ld (hl),a inc de inc l ld a,(de) ld (hl),a inc de inc h dec l edup ld a,(de) ;Выводим 2 байта ld (hl),a inc de inc l ld a,(de) ld (hl),a inc de ;------------- ld hl,(PTBL4) ld a,l add a,#20 ld l,a dup 7 ld a,(de) ;Выводим 2 байта ld (hl),a inc de inc l ld a,(de) ld (hl),a inc de inc h dec l edup ld a,(de) ;Выводим 2 байта ld (hl),a inc de inc l ld a,(de) ld (hl),a inc de ;------------- ld bc,(PTBL4) ld a,b and #18 sra a sra a sra a add a,#58 ld b,a ld a,(de) ld (bc),a inc de inc bc ld a,(de) ld (bc),a inc de ld hl,31 add hl,bc ld a,(de) ld (hl),a inc de inc hl ld a,(de) ld (hl),a ret PTBL4 defb 0,0 ;храним адрес начала (адрес в экране),тайл POZX defb 0 POZY defb 0 PSP defb 0,0 ;Y,X
Буду рад, если вам пригодится мой код. Надеюсь у гуру нет вопросов относительно оптимизации печати тайлов? Если нет, - считаю этот вопрос закрытым.Код:;233486(1621);269486(1871);276398(1919);308942(2145);323774 - 12x12=144 тайла (2248) ;1373;1633;1671;1897;2000 - 1 тайл GAMEPOLE ld b,12 GAMEMET2 push bc ld a,(POZXY) ld (POZX),a ld a,4 ld (PSP+1),a ;X начала вывода карты на экране ld a,(POZXY+1) dec b add a,b ld (POZY),a ld a,b add a,b ;b*2 ld (PSP),a ;Y начала вывода карты на экране ld b,12 GAMEMET1 push bc call SPPECH ld a,(POZX) inc a ld (POZX),a ld a,(PSP+1) inc a inc a ld (PSP+1),a pop bc djnz GAMEMET1 pop bc djnz GAMEMET2 ret ;1109 - sp через стэк ;1369 - заменил 3742 на Санчеза ;1407 - убрал вывод через IX ;1633 - убрал второй обсчёт через 3742 ;1736 - было изначально SPPECH ld de,64 ld a,(POZY) call MUL_8 ld a,(POZX) ld e,a ld d,0 add hl,de ld de,karta add hl,de OGOGO2 ld a,(hl) ld e,36 ld d,0 call MUL_8 ld de,tiles add hl,de OGOGO di ld (SPgo+1),sp ld sp,hl ;6 - откуда брать ;------------- ld hl,PSP ld a,(hl) inc hl ld c,(hl) ld l,a rrca rrca rrca and #e0 or c ld h,a ld a,l and #18 add a,high 16384 ;shadow_screen ld l,h ld h,a ld (PTBL4),hl ;------------- dup 7 pop de ;10 - берём оттуда ld (hl),e ;7 inc l ;4 ld (hl),d ;7 inc h ;4 dec l ;4 итого: 36 edup pop de ;10 - берём оттуда ld (hl),e ;7 inc l ;4 ld (hl),d ;7 ;------------- ld hl,(PTBL4) ld a,l add a,#20 ld l,a ;------------- dup 7 pop de ;10 - берём оттуда ld (hl),e ;7 inc l ;4 ld (hl),d ;7 inc h ;4 dec l ;4 итого: 36 edup pop de ;10 - берём оттуда ld (hl),e ;7 inc l ;4 ld (hl),d ;7 ;------------- ld hl,(PTBL4) ld a,h and #18 sra a sra a sra a add a,#58 ld h,a ;------------- pop de ;10 - берём оттуда ld (hl),e ;7 inc hl ;6 ld (hl),d ;7 ld bc,31 add hl,bc pop de ;10 - берём оттуда ld (hl),e ;7 inc hl ;6 ld (hl),d ;7 SPgo ld sp,#0000 ret PTBL4 defb 0,0 ;храним адрес начала (адрес в экране),тайл POZX defb 0 POZY defb 0 PSP defb 0,0 ;Y,X
Последний раз редактировалось DragonsLord; 03.05.2021 в 04:11.
nimdasys_inbox_ru(02.05.2021)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)