gamedevfor
> Ну как то хитро выходит ровно 25FPS, кажется что отрисовка не попадает ровно в
> один кадр и приходится каждый раз пропускать один кадр.
А на реальном железе, на оригинальных 16k/48k машинах, до кучи, запись в область экрана в момент вывода на экран - медленная, частота процессора снижается, чтобы не конфликтовать с видеоконтроллером. Ну и надо смотреть что там у тебя за эмулятор и что конкретно он эмулирует.
KPG
> Форт для Z80
не ускорит ASM для Z80.
0iStalker
Надо будет попробовать очистку еще через ldir; и сравнить результат.
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.
Это интересно, что даже в документации этим гордились.
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 - можно прямо в её код писать нужное число и его потом увеличивать.
Короче без трюков нормальную игру тут ну никак.
gamedevfor
> Отладчик показывает что последние #FF(255) раз не дорабатывает
Не удивительно, на ноль ведь проверяется старший байт слова, а когда он при декременте слова станет равным нулю, младший будет равен 0xff.
Но вообще это же медленно, не? На каждой итерации три инструкции. Если переписать цикл на двойной (djnz, dec, jnz), то в 255 случаев из 256 будет одна инструкция.
gamedevfor
> не ускорит ASM для Z80.
Да, не ускорит, но Асм более тяжёл для написания игр и для ZX. :)
А, что за отладчик используется?
P.S. Может уже, кто нибудь, сделал какой то комплексный инструмент по "реверсу" ZX игрушек?
(GameBoy ...)
Когда программил на Z80 табличка с командами процессора у меня была срисована из книги Рафикузмана (Микропроцессоры ... 1том)
KPG
> А, что за отладчик используется?
Для разработки использую SpectNet IDE
Ничего лучшего не нашел - так чтобы от A до Я нажатием одной кнопки.
Там же совместно работает отладчик и эмулятор.
=A=L=X=
> Это интересно, что даже в документации этим гордились.
Честно говоря там ничего особенного нету с технической стороны:
- перерисовывается 2/3 экрана, а не весь экран;
- черный бэкграунд что очень сильно упрощает отрисовку;
- скролинг вроде как попиксельный, это +;
KPG
> Да, не ускорит, но Асм более тяжёл для написания игр и для ZX. :)
Для написания игр был LaserBasic, где все тяжелые графические операции были вынесены в отдельные команды бейсика, а сами спрайты были частью синтаксиса языка.
=A=L=X=
> Погуглил, там 25 фпс.
Думаю 50 фпс реален, но нужно синхронизироваться с прерыванием на отрисовку.
gamedevfor
> Честно говоря там ничего особенного нету с технической стороны:
Ты явно не знаком с библиотекой игр для спектрума. :)
Игр с подобной плавностью и попиксельным скроллингом прям воще единицы.
А чтобы еще платформер - вообще на пальцах одной руки.
North star вот припоминается.
gamedevfor
> но нужно синхронизироваться с прерыванием на отрисовку.
Как это делать я писал в статье про многопоточность на спектруме в теме "блеск и нищета" .
Единственное маскируемое прерывание в спектруме это и есть начало отрисовки кадра начиная с бордюра.
Поэтому если заморозиться инструкцией halt, то разморозка произойдет в начале кадра даже без перехвата прерывания.
LDIR выдал 20FPS, немножко медленнее но код приятнее.
=A=L=X=
> Поэтому если заморозиться инструкцией halt, то разморозка произойдет в начале
> кадра даже без перехвата прерывания.
Я работаю в режиме di, потому что без di - просто упадет, а halt еще и подвешивает;
=A=L=X=
> Игр с подобной плавностью и попиксельным скроллингом прям воще единицы.
По скролингу для меня был H.A.T.E топчик:

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