User Tag List

Страница 8 из 9 ПерваяПервая ... 456789 ПоследняяПоследняя
Показано с 71 по 80 из 87

Тема: Edge Grinder для ZS GMX

  1. #71

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    Двойная защита карты только для третьей части из четырёх. На турбо на неё попадает прерывание, а на не турбо как повезёт )
    А это можно тоже на бордюр выводить, кстати =) Прямо в выходе из обработчика дописать пару команд, там только регистр A нужен, который все равно портим.
    То есть там, где идет push-pop из BC, до них или после них поставить зеленый/белый/какой еще, а на входе в обработчик после сохранения регистров - черный.
    Если "попались" на SP,IY- бордюр моргнет. Только тогда нужно убрать все остальные выводы в порт.

  2. #72

    Регистрация
    23.04.2020
    Адрес
    г. Тотьма
    Сообщений
    904
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    182 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    А это можно тоже на бордюр выводить, кстати =)
    А я просто точку останова поставил в эмуле. Изредка, но попадает на push bc: pop bc в обработчике. Значит, не зря старались.

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

    Да, ещё мысль: получается, можно целиком экран за два прерывания выводить. Но ни на что другое времени не останется. Думаю, может видео ролик можно склепать на 7 секунд со скоростью 16 кадров из 120 страниц памяти, без всякого сжатия. Это в порядке баловства.
    upd. Или 25 кадров.
    Последний раз редактировалось izzx; 18.08.2021 в 11:19.

    Скрытый текст


    https://drive.google.com/drive/folde...xZ83juCuaBe32I

    Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
    Leningrad 1/Sega Joy Adapter
    DivGMX
    ZX Spectrum +2A
    ZX Evolution rev. C

    TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
    [свернуть]

  3. #73

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    получается, можно целиком экран за два прерывания выводить
    В турборежиме - да. Еще и время остается на что-нибудь. Маленькое.
    Но в игре лучше ограничиться тем окном, что уже есть =)

    По поводу бага... хз, даже не смотрел еще версию с последними изменениями.
    Можно попробовать тот же метод с бордюром: зарезервировать для каждой части кода свой цвет.
    То есть 8 цветов в наличии, черный - вывод карты, синий - вывод спрайтов, красный - музыка,
    зеленый - блок логики и так далее. Таким образом визуально отсечь проблему.
    Дальше уже дробить на более мелкие "кусочки" исследуемый код.
    В обработчике прерываний, естественно, бордер не трогаем, да и красным не мигаем (когда 16 фпс).
    Кстати, а как именно оно виснет? Музыка продолжает играть или тоже вешается с воем?

  4. #74

    Регистрация
    23.04.2020
    Адрес
    г. Тотьма
    Сообщений
    904
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    182 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Кстати, а как именно оно виснет? Музыка продолжает играть или тоже вешается с воем?
    Когда как. Чаще продолжает играть.
    Наставил цветов бордера в разных местах - на разных цветах виснет ). Убрал вывод карты совсем - тоже виснет.
    Интересно. Буду думать. Где-то страница, наверно, не та включатся.

    Скрытый текст


    https://drive.google.com/drive/folde...xZ83juCuaBe32I

    Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
    Leningrad 1/Sega Joy Adapter
    DivGMX
    ZX Spectrum +2A
    ZX Evolution rev. C

    TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
    [свернуть]

  5. #75

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    Где-то страница, наверно, не та включатся.
    Если глюки начались после работ по переделке вывода - скорее всего, что да, нужно копать в перемещенных процедурах.
    Либо не та страница врубается, либо код не полностью "перемещен", либо что-то убивается на прерываниях.
    Но последний вариант маловероятен, для этого нужно не сохранять какую-то регистровую пару.
    Скорее всего, перемещенный код вызывает что-то по прежним адресам, а там уже пусто. Точнее, вывод экрана.

  6. #76

    Регистрация
    23.04.2020
    Адрес
    г. Тотьма
    Сообщений
    904
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    182 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Порядок. Виновата процедура печати счётчика кадров. Если счётчик не включать, то не виснет. Но почему так - не знаю ). Потом разберусь.
    Чуть погонял не в турбо режиме - в одном месте карта попортилась. Но это ничего, так задумано.

    Скрытый текст


    https://drive.google.com/drive/folde...xZ83juCuaBe32I

    Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
    Leningrad 1/Sega Joy Adapter
    DivGMX
    ZX Spectrum +2A
    ZX Evolution rev. C

    TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
    [свернуть]

  7. #76
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #77

    Регистрация
    23.04.2020
    Адрес
    г. Тотьма
    Сообщений
    904
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    182 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отловил глюк со счётчиком. Выложил текущую версию. На железе выдаёт 25 кадров, иногда сваливается в 16, когда на границе экрана 2 и более спрайта. Потому что вывод целых спрайтов идёт быстрым способом, а на границе экрана, когда видна часть спрайта, медленным.
    Думаю, есть ещё резервы для оптимизации.
    Используется примерно 89 страниц памяти из 128.
    Последний раз редактировалось izzx; 25.08.2021 в 20:43.

    Скрытый текст


    https://drive.google.com/drive/folde...xZ83juCuaBe32I

    Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
    Leningrad 1/Sega Joy Adapter
    DivGMX
    ZX Spectrum +2A
    ZX Evolution rev. C

    TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
    [свернуть]

  9. #78

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    а на границе экрана, когда видна часть спрайта, медленным способом
    Вот тут стоит покопаться =)) По идее, наоборот, кусок спрайта должен выводиться быстрее, чем целый.
    Бегло порыл список файлов в исходниках, вроде как вывод частичного спрайта - файл EG_Sprites_Partial.asm только это уже Спектрум или еще Амстрад? =)
    Толком не разбирался, но параметры такие: высота спрайта, кажись, 10 "пикселей", если байт нулевой - пропускаем. Иначе затираем байт атрибутов целиком, а не половинки по маске (как я думал).
    Далее, после каждого впечатанного байта идет конструкция ex de,hl: and a: sbc hl,bc: ex de,hl - при таком пересчете, естественно, вывод будет жрать кучу времени.
    Если правильно понял - спрайты выводятся вертикально, по столбцам. Хуже может быть только вывод крест-накрест =)) Желательно переделать на нормальный, построчный, вместе с форматом спрайтов.
    После каждой линии пара DE загружается из адресуемой через IX таблицы - тоже прожорливо. Точнее, это получаются не линии, а столбцы, раз выводим вертикально, а 10 - это ширина.

    Код:
    PrnSprLoopL5
    	push bc
    	ld bc,80
    	
        ld e,(ix+0)
        inc ixl
        ld d,(ix+0)
        inc ixl
    Но если выводим вертикально - зачем брать следующий адрес из таблицы? Достаточно сохранить-восстановить DE из стека и увеличить на 1.
    Сам вывод можно развернуть в коде, благо, свободная память имеется. Конструкциями вида LD (HL),NN:INC L, либо сразу INC L, если байт пустой.
    Потребуется свой кусок кода для каждой "частичной" фазы, как и для целого спрайта, но вывод будет пошустрее.
    И намного пошустрее, если выводить линиями (горизонтально), ибо для перехода на следующую будет достаточно сделать ADD HL,BC (ВС=80-ширина спрайта, что-то типа того)

  10. #79

    Регистрация
    23.04.2020
    Адрес
    г. Тотьма
    Сообщений
    904
    Спасибо Благодарностей отдано 
    273
    Спасибо Благодарностей получено 
    341
    Поблагодарили
    182 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    вывод частичного спрайта - файл EG_Sprites_Partial.asm
    Да. Там для каждого случая свой раздел. Вывод слева по 1,2,3,4,5 столбиков, то же для правой части. И сверху-снизу тоже часть умеет выводить. Адреса хранятся для каждой пары строк. Высота 21 строка - значит 11 адресов на спрайт.
    Вот так я писал:
    Спрайт занимает 126 байт, 6 байт ширина, 21 высота, занимаемое место округляется до 128
    Выводится в таком порядке байт:
    01 03 05 07 09 11
    00 02 04 06 08 10
    13 15 17
    12 14 16 18...
    А последняя строчка по порядку 120 121 122 123 124 125.
    Причём нули пропускаются, не выводятся. Поэтому не надо маски.

    Вот переделывать формат спрайтов мне меньше всего охота было )
    При быстром выводе через ld (NN),hl хитрый формат спрайта почти не влияет на скорость. Там по строчкам выводится всё равно.
    А тут да, очень криво выходит.

    Скрытый текст


    https://drive.google.com/drive/folde...xZ83juCuaBe32I

    Scorpion ZS 256 Turbo+/GMX 2MB/SMUC v1.3 OP/CF-IDE 2GB/TS ARM/Covox #DD/FDD 5'25/FDD 3'5/AT Kbrd & Mouse Ctrl v2.5/Universal PS/2 Kbrd Ctrl/ZX WiFi
    Leningrad 1/Sega Joy Adapter
    DivGMX
    ZX Spectrum +2A
    ZX Evolution rev. C

    TCK Computer 486DX2-66/512K Tridend 9000i/8MB SIMM72/CF-IDE 512MB/ESS 1869/CNet CN200/FDD 5'25/FDD 3'5
    [свернуть]

  11. #80

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    Причём нули пропускаются, не выводятся. Поэтому не надо маски.
    Но тогда получается, что затираем сразу два "пикселя" экрана (карты), даже если один из них пустой в спрайте. Или там у спрайтов все "пиксели" по два шириной?
    Цитата Сообщение от izzx Посмотреть сообщение
    Вот переделывать формат спрайтов мне меньше всего охота было )
    А надо бы =)) Ибо вертикальный вывод плюс еще пересчет адресов строк сжирают кучу времени.
    Цитата Сообщение от izzx Посмотреть сообщение
    При быстром выводе через ld (NN),hl хитрый формат спрайта почти не влияет на скорость
    Не, это другие команды. LD (NN),HL подходит для переброса карты через стек по 2 байта сразу, а вот спрайты без стека и побайтово, через LD (HL),N - стек не трогается.
    То бишь каждый спрайт развертывается в кусок кода. Например, спрайт (условно) 4х4 пикселя, пустой байт - ноль, заполненный (1) - FF. Сам спрайт такой:

    0110
    1111
    1001
    0110

    Код вывода для него развертывается вот в такой кусок:

    Код:
    	INC	L		;0
    	LD	(HL),#FF	;1
    	INC	L
    	LD	(HL),#FF	;1
    	INC	L		;0, INC для корректного пересчета HL
    	ADD	HL,BC
    
    	LD	(HL),#FF	;1
    	INC	L
    	LD	(HL),#FF	;1
    	INC	L
    	LD	(HL),#FF	;1
    	INC	L
    	LD	(HL),#FF	;1
    	ADD	HL,BC
    
    	LD	(HL),#FF	;1
    	INC	L
    	INC	L		;0
    	INC	L		;0
    	LD	(HL),#FF	;1
    	ADD	HL,BC
    
    	INC	L		;0
    	LD	(HL),#FF	;1
    	INC	L
    	LD	(HL),#FF	;1
    	RET			; последний INC уже не нужен,
    				; если код развертки это обработает
    Для перехода вниз на строку достаточно одной команды ADD HL,BC. Усеченные спрайты (по ширине) будут выводиться еще быстрее.
    В данном конкретном примере #FF можно было бы заменить на регистр, но в реальности там будут разные значения, потому - числами.
    Согласен, переделывать формат и вывод - занятие не на полчаса, но если уж делать, то делать =))

Страница 8 из 9 ПерваяПервая ... 456789 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. EYEACHE2 и Across The Edge на GMX
    от Evgeny Muchkin в разделе Демо
    Ответов: 1
    Последнее: 12.08.2019, 21:23
  2. Ответов: 0
    Последнее: 24.11.2017, 03:24
  3. ZX BUS EDGE!
    от ZXFanat в разделе Устройства ввода
    Ответов: 10
    Последнее: 15.07.2013, 19:16

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •