ФлеймФорумПрограммирование

Вопросы по ZX80 Assembler (2 стр)

Страницы: 1 2 3 417 Следующая »
#15
10:15, 14 ноя 2022

gamedevfor
> Ну как то хитро выходит ровно 25FPS, кажется что отрисовка не попадает ровно в
> один кадр и приходится каждый раз пропускать один кадр.

А на реальном железе, на оригинальных 16k/48k машинах,  до кучи, запись в область экрана в момент вывода на экран - медленная, частота процессора снижается, чтобы не конфликтовать с видеоконтроллером.  Ну и надо смотреть что там у тебя за эмулятор и что конкретно он эмулирует.

#16
10:15, 14 ноя 2022

KPG
> Форт для Z80

не ускорит ASM для Z80.

#17
10:18, 14 ноя 2022

0iStalker
Надо будет попробовать очистку еще через ldir; и сравнить результат.

#18
10:26, 14 ноя 2022

gamedevfor
> Откуда ты знаешь что там есть реально 50 фпс?

Погуглил, там 25 фпс. https://www.zx-spectrum.cz/data/info/Zynaps.txt

25 frames per second.
High resolution multicoloured scrolling graphics.
3 dimensional parallax starfield.
Myriad of sprites.

Это интересно, что даже в документации этим гордились.

#19
10:35, 14 ноя 2022

gamedevfor
> Надо будет попробовать очистку еще через ldir;

Очистка вообще не вариант, как минимум надо сразу рисовать например задник поверх которого потом шлёпать спрайты.
Активно надо разворачивать циклы.
LDIR сильно проигрывает PUSH-ам. PUSH просто мастхев на переброске больших регионов памяти.
Есть такой трюк когда сперва насыщаешь ВСЕ возможные регистры из одного региона, а потом пушишь их в другой регион:

POP HL
POP BC
POP DE
POP IX
POP IY
EXX
POP HL ; теневые тоже в ход
POP BC
POP DE

и потом в обратном порядке пушим их, перенацелив SP, при этом его перенацеливать когда мы все почти регистры уже захавали - тоже хакерская задачка. Есть инструкция LD SP, addr16 - можно прямо в её код писать нужное число и его потом увеличивать.
Короче без трюков нормальную игру тут ну никак.

#20
11:04, 14 ноя 2022

gamedevfor
> Отладчик показывает что последние #FF(255) раз не дорабатывает
Не удивительно, на ноль ведь проверяется старший байт слова, а когда он при декременте слова станет равным нулю, младший будет равен 0xff.

Но вообще это же медленно, не? На каждой итерации три инструкции. Если переписать цикл на двойной (djnz, dec, jnz), то в 255 случаев из 256 будет одна инструкция.

#21
17:27, 14 ноя 2022

gamedevfor
> не ускорит ASM для Z80.
Да, не ускорит, но Асм более тяжёл для написания игр и для ZX. :)
А, что за отладчик используется?

P.S. Может уже, кто нибудь, сделал какой то комплексный инструмент по "реверсу" ZX игрушек?
(GameBoy ...)
Когда  программил на Z80 табличка с командами процессора у меня была срисована из книги Рафикузмана (Микропроцессоры ... 1том)

#22
19:01, 14 ноя 2022

KPG
> А, что за отладчик используется?

Для разработки использую SpectNet IDE
Ничего лучшего не нашел - так чтобы от A до Я нажатием одной кнопки.
Там же совместно работает отладчик и эмулятор.

#23
19:08, 14 ноя 2022

=A=L=X=
> Это интересно, что даже в документации этим гордились.

Честно говоря там ничего особенного нету с технической стороны:
- перерисовывается 2/3 экрана, а не весь экран;
- черный бэкграунд что очень сильно упрощает отрисовку;
- скролинг вроде как попиксельный, это +;

#24
19:15, 14 ноя 2022

KPG
> Да, не ускорит, но Асм более тяжёл для написания игр и для ZX. :)

Для написания игр был LaserBasic, где все тяжелые графические операции были вынесены в отдельные команды бейсика, а сами спрайты были частью синтаксиса языка.

#25
19:17, 14 ноя 2022

=A=L=X=
> Погуглил, там 25 фпс.

Думаю 50 фпс реален, но нужно синхронизироваться с прерыванием на отрисовку.

#26
19:32, 14 ноя 2022

gamedevfor
> Честно говоря там ничего особенного нету с технической стороны:
Ты явно не знаком с библиотекой игр для спектрума. :)
Игр с подобной плавностью и попиксельным скроллингом прям воще единицы.
А чтобы еще платформер - вообще на пальцах одной руки.
North star вот припоминается.
gamedevfor
> но нужно синхронизироваться с прерыванием на отрисовку.
Как это делать я писал в статье про многопоточность на спектруме в теме "блеск и нищета" .
Единственное маскируемое прерывание в спектруме это и есть начало отрисовки кадра начиная с бордюра.
Поэтому если заморозиться инструкцией halt, то разморозка произойдет в начале кадра даже без перехвата прерывания.

#27
20:12, 14 ноя 2022

LDIR выдал 20FPS, немножко медленнее но код приятнее.

#28
20:28, 14 ноя 2022

=A=L=X=
> Поэтому если заморозиться инструкцией halt, то разморозка произойдет в начале
> кадра даже без перехвата прерывания.

Я работаю в режиме di, потому что без di - просто упадет, а halt еще и подвешивает;

#29
20:31, 14 ноя 2022

=A=L=X=
> Игр с подобной плавностью и попиксельным скроллингом прям воще единицы.

По скролингу для меня был H.A.T.E топчик:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Круче не видел...

Страницы: 1 2 3 417 Следующая »
ФлеймФорумПрограммирование