User Tag List

Страница 7 из 9 ПерваяПервая ... 3456789 ПоследняяПоследняя
Показано с 61 по 70 из 87

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

  1. #61

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

    По умолчанию

    Освободил для нового кода печати фона 25К.

    Теперь надо перенести музыку на другие адреса. Кто поможет?
    WON4.C - адрес #26d7, перенести на #A800
    EDGEA.C - адрес #29c3, перенести на адрес #AB00
    Здесь в любом архиве валяются
    https://cloud.mail.ru/public/o1Fb/X9Mt1Hg14
    https://drive.google.com/drive/folde...2I?usp=sharing

    Музыка для ArkosTrackerPlayer_CPC_MSX. На сайте пишут сложно перенести:
    How to relocate songs
    Relocating a song is complicated. All data values inside the song point to absolute memory locations, and the format of the Instrument is not that simple. The easiest way to relocate a song is to open it in Arkos Tracker and export it again to the desired new memory location address.

    https://lronaldo.github.io/cpctelera..._I_need_memory

    А плеер для винды можно скачать здесь
    http://www.julien-nevo.com/arkos/arkostracker1/
    Но он не хочет открывать bin файлы.


    upd. Отмена, всё нашлось! Оказывается, есть исходники в формате *.sks
    Последний раз редактировалось izzx; 13.08.2021 в 08: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
    [свернуть]

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

  3. #62

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Ну, если смириться с двухкратным размером кода переброса экрана, можно и с прерываниями выводить.
    Конструкциями вида POP HL:LD (NN),HL - так и код проще развернуть будет, и стек обработать.
    Процедура обработки прерывания сверяет адрес стека (или кода), если идет переброс -
    достаточно восстановить всего 2 байта под стеком, причем мы знаем, каких - это HL.
    Почти заработало на железе со скоростью 25 кадров, с выводом фона через POP HL:LD (NN),HL. Но, правда, иногда виснет ).
    Пока ищу в чём причина, но тут я подумал, что может иногда портится и фон. Это к зависаниям не приведёт, но всё же.
    Вот в таком месте должна пострадать карта:
    Код:
        pop hl
        ld (NN), hl
        pop hl
        ld (NN), hl
        add iy,de
        ld sp,iy
    <прерывание>
        pop hl
        ld (NN), hl
    Тут стек уже будет в другом месте, а значение 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
    [свернуть]

  4. #63

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

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    Тут стек уже будет в другом месте, а значение HL со старого адреса
    Щас переправим обработчик =)) Кстати, вместо IY может быть и IX, не принципиально. Обычно IY не трогают, если как-либо используется код ПЗУ, но в нашем случае, полагаю, пофиг.
    Тэкс, переписал обработчик, но есть важное замечание: аккум при перебросе не задействовать. Вернее, перед любым действием с парой AF нужно восстанавливать стек, а это вне переброса.
    То есть переключение страничек при перебросе и все остальное, на что влияет AF, должно идти с "нормальным" стеком.
    Объясню, в чем суть: проверяется SP, если он >#8000 - идет переброс. После чего проверяется код команды после выхода из обработчика, а делается это через аккум и флаги, как иначе-то.
    Если сохранять аккум, придется городить тройное восстановление SP из-за ветвления, а так просто обходим PUSH-POP HL и все.
    Попутно стала ненужной команда POP AF, из-за чего переход делается сразу на CURRSP, если идет переброс.

    Код:
    INTERR	LD	(CURRSP+1),SP
    	LD	SP,INTBUF+100
    	PUSH	AF,BC,DE,HL...	;сохраняем все изменяемые регистры
    	BLABLA			;процедуры на прерываниях
    	......
    	POP	...HL,DE,BC	;восстанавливаем, кроме AF
    	LD	A,(CURRSP+2)	;старший байт стека
    	RLA			;если SP>=#8000 - идет переброс
    	JR	C,CURRSP
    	POP	AF		;иначе нормальный выход
    	LD	SP,(CURRSP+1)
    	EI
    	RET
    
    CURRSP	LD	SP,0		;пару AF в коде вывода не используем!
    	POP	HL		;адрес возврата в процедуру вывода
    	LD	(RET_JP+1),HL
    	LD	A,(HL)		;проверяем код следующей команды
    	CP	#E1		;код POP (HL)
    	LD	HL,(INTBUF+92)	;восстанавливаем HL
    	JR	Z,$+4		;совпало - переход сразу на EI
    	PUSH	HL		;востанавливаем затертых 2 байта
    	POP	HL
    	EI
    RET_JP	JP	0
    
    INTBUF	DEFS	100		;буфер стека
    Вроде ничего не упустил, но мало ли =) А с зависаниями проще разобраться в эмуляторе через отладчик, где оно там виснет.
    Можно и через теневик на реале попробовать, но эмулятор стек не портит.

    upd: не, так не будет работать. Нужно проверять кое-что другое, айн момент.

    еще upd: нда, с перестановкой стека запара. Вернее, с индексным регистром. По идее, можно восстановить через еще один регистр,
    но команды обмена с IX/IY жрут больше всего тактов... потеряется весь смысл перехода на стек. Надо еще подумать, но это уже не сегодня.
    Пока, как временное решение, можно вставить DI перед LD SP,IY и EI после POP HL и поглядеть, будет все тормозить или нет =)
    Со старым обработчиком, разумеется. То, что выше набросал, должно вообще конкретно портить карту.
    Последний раз редактировалось reddie; 15.08.2021 в 22:42.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    izzx(16.08.2021)

  5. #64

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

    По умолчанию

    Что ж, решение все-таки через индексную пару. Добавляет 40 тактов к каждой линии, но это лучший вариант из имеющихся.
    Ограничения: пара AF портится, если идет переброс; пара BC задействована под "резервные" байты при смене стека.
    В начале вывода каждой строки (линии) добавляется две команды:

    Код:
    	ADD	IY,DE
    	LD	B,(IY-1)		;в паре BC будет 2 байта 
    	LD	C,(IY-2)		;под "новым" стеком
    	LD	SP,IY
    Сам обработчик тоже переделан из-за дополнительных проверок:

    Код:
    INTERR	LD	(CURRSP+1),SP
    	LD	SP,INTBUF+100
    	PUSH	AF,BC,DE,HL...	;сохраняем все изменяемые регистры
    	BLABLA			;процедуры на прерываниях
    	......
    	POP	...HL,DE,BC	;восстанавливаем, кроме AF
    	LD	A,(CURRSP+2)	;старший байт стека
    	RLA			;если SP>=#8000 - идет переброс
    	JR	C,CURRSP
    	POP	AF		;иначе нормальный выход
    	LD	SP,(CURRSP+1)
    	EI
    	RET
    
    CURRSP	LD	SP,0		;пару AF в коде вывода не используем!
    	POP	HL		;адрес возврата в процедуру вывода
    	LD	(RET_JP+1),HL
    	DEC	HL
    	LD	A,(HL)		;если последней выполненной
    	CP	#F9		;командой было LD SP,IY
    	JR	NZ,RET_JP-6	;то восстанавливаем  из BC
    	DEC	HL		;проверяем оба байта
    	LD	A,(HL)		;для надежности
    	CP	#FD		;#FDF9 для IY или #DDF9 для IX
    	JR	NZ,$+6
    	PUSH	BC		;восстанавливаем из BC
    	POP	BC
    	JR	$+7
    	LD	HL,(INTBUF+92)
    	PUSH	HL		;иначе востанавливаем из HL
    	POP	HL
    	EI
    RET_JP	JP	0
    
    INTBUF	DEFS	100		;буфер стека

    Логика работы: обработчик смотрит, где стек, если переброса нет - нормальный выход.
    Если переброс и последняя выполненная команда была LD SP,IY - в стек бросается заранее взятая ниже пара BC.
    Иначе бросается HL, что даст верное восстановление хоть до, хоть после смены стека.

    Можно схитрить: если карта начинает выводиться сразу после обработки прерывания (после HALT),
    то в код вывода "первого куска" загрузку BC из IY можно не вставлять - кусок точно успеет вывестись до прерывания.
    Каждая загрузка 40 тактов (с wait), х40 = 1600т на куске. х4 = 6400, поэтому смысл экономить есть.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    izzx(17.08.2021)

  6. #65

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    Что ж, решение все-таки через индексную пару. Добавляет 40 тактов к каждой линии, но это лучший вариант из имеющихся.
    Спасибо! Прикрутил новый обработчик прерываний и процедуру вывода дополнил. Пока что одинаково все четыре части. По моему, карта не портится. Во всяком случае, два раза пролетел, не заметил артефактов. Может и раньше, конечно, не каждый раз бы попадало неудачно.
    Только теперь начало сваливаться в 16 кадров, когда спрайтов много, но я думаю, первые два куска карты сделать без лишних строк вывода и всё влезет. До этого только когда происходил подрыв ГГ, не успевало в 2 фрейма. Должно и сейчас уместиться.

    Осталось найти где глюк после перемещения кода на новые адреса ). Если не стрелять, то всю карту можно пролететь. А иначе скорый зависон.

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


    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. #66

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

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    По моему, карта не портится. Во всяком случае, два раза пролетел, не заметил артефактов
    Если не затруднит, можно проверить: остановить скролл карты (увеличение переменной смещения от начала карты),
    будет выводиться один и тот же экран все время. Артефакты на стоячей картинке ловить куда проще =)
    До кучи можно и вывод врагов отрубить, чтоб не мешали. Ну или если они привязаны к смещению - их и не будет.

    Цитата Сообщение от izzx Посмотреть сообщение
    думаю, первые два куска карты сделать без лишних строк вывода и всё влезет
    В турборежиме - да. Понимаю, что игра на него и заточена, но все же. Без турбы влезет только 1/4
    Хотя можно по приколу вырубить турбо и наблюдать за порчей карты =) особенно если остановить скролл.

  8. #67

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

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    можно проверить: остановить скролл карты
    Не так то просто дождаться порчи карты. Остановил её, погонял на эмуляторе. Только один раз добился артефактов, да и то наверное потому что понажимал огонь.
    Пробовал и с двойной защитой вывод и с одинарной.
    Редкое явление наверное. Вывод фона идёт почти сразу после halt, так что прерывание попадает в одно и то же место, я думаю. На реале бы погонять ещё надо.

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


    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. #68

    Регистрация
    16.11.2005
    Адрес
    Санкт-Петербург
    Сообщений
    2,925
    Спасибо Благодарностей отдано 
    1,168
    Спасибо Благодарностей получено 
    362
    Поблагодарили
    198 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пока с прогонами на реале не могу помочь, ибо в загородном. Но как только буду в городе, подсоблю всенепременнейше!

  10. #69

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

    По умолчанию

    Цитата Сообщение от izzx Посмотреть сообщение
    Вывод фона идёт почти сразу после halt, так что прерывание попадает в одно и то же место
    По идее, на прерываниях висит вывод музыки, а он никак не может жрать одинаково.
    То есть сперва отыграл музон, потом пошло все остальное. Обычно делается так, за исключением мультиколорных дем.
    И что-то сомневаюсь насчет 3 тыс. тактов на музыку... хотя вполне может быть, смотря кто и как писал исходный код.
    Например, с оптимизацией родного плеера Sound Tracker вообще не парились, там плавало от 3 до 10 тыс примерно.

  11. #70

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

    По умолчанию

    Цитата Сообщение от Evgeny Muchkin Посмотреть сообщение
    Пока с прогонами на реале не могу помочь, ибо в загородном. Но как только буду в городе, подсоблю всенепременнейше!
    Хорошо. Можно, кстати, движок для GS не спеша высылать.
    Думаю сделать звуки:
    1. Выстрел
    2. Попадание в элементы фона
    3. Попадание во врага
    4. Скольжение по краю
    5. Взрыв ГГ
    6. Взрыв врага
    Это для себя план пишу.

    Цитата Сообщение от reddie Посмотреть сообщение
    По идее, на прерываниях висит вывод музыки, а он никак не может жрать одинаково.То есть сперва отыграл музон, потом пошло все остальное. Обычно делается так, за исключением мультиколорных дем.
    Да, плавает, конечно. Но почему то везёт пока что, не портит карту.
    И что-то сомневаюсь насчет 3 тыс. тактов на музыку... хотя вполне может быть, смотря кто и как писал исходный код.
    Я там в плеере переделывал на порты ZX, может ещё замедлил )

    upd. Положил на облако текущую версию. Если не укладывается в два фрейма, бордер мигает красным. Включено бессмертие, и если не стрелять, то не виснет. На эмуле почему-то дёргается, хотя на реальном плавно работает. Двойная защита карты только для третьей части из четырёх. На турбо на неё попадает прерывание, а на не турбо как повезёт ).
    Последний раз редактировалось izzx; 18.08.2021 в 09:07.

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


    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 из 9 ПерваяПервая ... 3456789 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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