С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да - нормально запускаются - чуть позже видосик сниму на телефон
А вообще если акселем копировать на экран, то весь экран копируется за 1.2 инта (т.е. в пределе 41 кадр в секунду) - вот код, который копирует из одной области видеопамяти в другую (можно сделать с нахлёстом, тогда будет типа скролл):
Код:; display page was opened from the #C000 already LD HL,#C000 ; Address of the beginning of a line of first screen LD DE,#C180 ; Address of the beginning of a line of second screen LD BC,#140 ; The width of the screen DI ; Disable interrupt LD D,D ; Switch the Accelerator to define block size mode LD A,0 ; Set block size to 256 bytes LD A,A ; Switch the Accelerator to copying a graphic data block mode LDIR ; Copying LD B,B ; Switch the Accelerator off EI ; Enable interrupt
Последний раз редактировалось Shaos; 11.09.2023 в 07:25.
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
Smalovsky(31.05.2021)
Shaos, попробую акселератор,но у него есть недостаток - при копировании адреса из приемника в источник, адреса обоих возрастают. Это увеличивает расход памяти на хранение спрайтов, из-за невозможности их мирроринга, так как при копировании с инкреметом адресов невозможно копирование с зеркалированием цепочки байт. Если бы был ещё режим - инкремент адреса приёмника, декремент адреса источника, то расхода памяти для спрайтов можно было бы избежать.
Мне интересно как в игре TITD идёт работа со срайтами. Очень там гладко всё - уровень SNES. Где-то читал, что в этой игре есть модуль с прошивкой ФПГА на лету для ускорения спрайтового вывода. Мне нужен этот модуль и программный интерфейс к нему.
¡Un momento, señor fiscal!
Я написал процедуру вывода тайла через ускоритель, так как тайловая карта строится последовательно по тайлам. Теперь время теста составляет 14 секунд, или 18.25 экранов в секунду.
Сделал образ диска с экзешными файлами:
SpMap - тест вывода 255 экранов на время;
Scroll - скролл карты с потайловым шагом.
Ссылка https://dropmefiles.com/IHCTU
Тестировал ещё потом вывод спрайтов без клиппинга. Вот такие результаты получил для спрайтов в 16 на 16 пикселей при их выводе за 1/50 секунду с учётом восстановления фона:
- Вывод спрайта программно с программным прозрачным цветом - около 17 спрайтов( как при прямом, так и при зеркальном выводе);
- Вывод спрайта программно с аппаратным прозрачным цветом - около 25 спрайтов при прямом выводе и 23 спрайта при зеркальном выводе ;
- Вывод спрайта акселератором с аппаратным прозрачным цветом - около 80 спрайтов.
При клиппировании эти результаты, однозначно, будут меньше, но я клиппирование ещё не проверял.
Недостаток вывода спрайтов акселератором - отсутствие зеркалирования. Но этот недостаток можно сгладить, если при запуске игры заранее сделать зеркальные копии спрайтов в памяти специальной процедурой.
¡Un momento, señor fiscal!
К сожалению информация по прошивке для Тхундера полностью утеряна (как и исходники) - насколько я знаю там была возможность крутить (скролить?) тайлы с точностью до 1 пиксела
Последний раз редактировалось Shaos; 31.05.2021 в 22:40.
Администратор сетевого сообщества nedoPC.org
Урал 8/64К, Sp2000, ZX48K+, ZX16K (спалил), TS1000 (американский ZX81), TS2068, Дельта-С, 20 лет собираю ATM Turbo 2+
Неспектрумы: Электроника МК-85 и МК-85М, ПК-01 Львов, БК-0011, Вектор-06Ц, Лик (спец), Апогеи, Radio-86RK SRAM 32K & 128K (всё ещё собираю)
Shaos, если делать свой диспетчер прерываний для обработки нажатий клавиатуры, то этот пример кода для обработки нажатий на клавиатуре будет полезен?
http://sprinter8.org/blocks/z84c15/keyboard
Хочу сделать опрос клавиатуры в программе, но на своём диспетчере прерываний. От обычного спектрума процесс установки своей процедуры обработки прерывания чем-нибудь отличается на спринтере?
Справочная информация по прерываниям обычного спектрума https://zxpress.ru/article.php?id=1615
Последний раз редактировалось Smalovsky; 01.08.2021 в 16:32.
¡Un momento, señor fiscal!
Да, поможет. В принципе достаточно только второго листинга из статьи, п/п READ_KBD. Инициализацию порта делает DSS.
Если хочешь сэкономить такты и не нужны функциональные клавиши и пр..., то можешь опрашивать спектрумовские порты клавиатуры - они доступны (в эмуляторе возможно потребуется добавить устройство Common Spectrum Keyboard).
Начал писать движок игры. Тут такое дело возникло: выделяю в программе память, в конце программы освобождаю память, а в ОС по окончании программы нет выхода. Где я напутал?
Выделяю память так:
Освобождаю память так:;сохранение старых значений страниц в окнах 0,1,3
IN A,(0x82)
LD (OldWin0Page),A
IN A,(0xa2)
LD (OldWin1Page),A
IN A,(0xE2)
LD (OldWin3Page),A
;выделение памяти
;для окон 0 и 3
;получение блока памяти на две страницы
ld b, 2
ld c,61
rst 0x10
ld (memblock),a; сохраним номер блока
;получим номера физических страниц в блоке
;в акк уже есть ном. блока
ld b, 0
ld c,196
call 15635
ld (Win0Page),a
ld a,(memblock)
ld b, 1
ld c,196
call 15635
ld (Win3Page),a
;отключение прерываний
di
ld a,i
ld (OldIREG),a
ld (OldSP),sp
;Установка новых значений страниц в окнах 0,1,3
Ld a,(Win0Page)
out (0x82),a
LD A,0x54; в 1 странице видеопамять
OUT (0xa2),A
Ld a,(Win3Page)
out (0xe2),a
;УСТАНАВЛИВАЕ СТЕК
ld sp,61000
Вот исходный код во вложении( Пасмо ассемблер).IM2Test.asmdi
ld a,(OldIREG)
ld i,a
im 1
;Установка старых значений страниц в окнах 0,1,3
Ld a,(OldWin0Page)
out (0x82),a
LD A,(OldWin1Page)
OUT (0xa2),A
Ld a,(OldWin3Page)
out (0xe2),a
;УСТАНАВЛИВАЕМ СТАРЫЙ СТЕК
ld sp,(OldSP)
;ei Включал прерывания - не помогло. В ОС нет выхода
;освобождаем память
ld a,(memblock)
ld c,62
rst 0x10
Скомпилированная программа:
https://dropmefiles.com/1IaUY
Последний раз редактировалось Smalovsky; 22.08.2021 в 16:52.
¡Un momento, señor fiscal!
Лучше пользоваться RST 8 для этого, там хоть и стоит заглушка, которая перенаправляет на #0008, но все же так быстрее и понятнее.
Что касается проблемы - с виду все норм, не заметил ничего критичного. Попробую подебажить - посмотрим.
Кстати, многие не знают, но в ZXMAK2 есть Debugger, который может здорово помочь в отладке!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)