gamedevfor
Отключение прерываний по di как раз не даст привязаться к vdraw. Если не хочешь через halt, то надо перехватывать прерывания и тогда ты получишь власть и над всеми регистрами.
=A=L=X=
Ну дык какие могут быть прерывания когда я верчу стеком как цыган солнцем.
=A=L=X=
> и тогда ты получишь власть
Именно это мне и нужно.
Чет я походу тут в виде статьи и не оформил.
https://hype.retroscene.org/blog/968.html
Тут я писал про перехват прерываний с реализацией вытесняющей многопоточности.
Хотя на hype я еще не стал азы перехвата выкладывать, т. к там это уже должно быть моветоном.
Вот тут про азы https://retrocoder.d3.ru/perekhvat-preryvanii-na-zx-spectrum-1915… orting=rating
По отрисовке бордера можно понять сколько времени занимает та или иная операция с экраном.
Теперь понятно почему 25FPS.
entryway
> Но вообще это же медленно, не? На каждой итерации три инструкции. Если
> переписать цикл на двойной (djnz, dec, jnz), то в 255 случаев из 256 будет одна
> инструкция.
Верно. Получил 40FPS.
gamedevfor
> Верно. Получил 40FPS.
Теоретический лимит можешь получить через
LD SP, край экрана LD HL, 0 DUP 256*192/16 PUSH HL EDUP
Т.е. полностью развёрнутый цикл на пушах - это максимальная вообще скорость заливки из теоретически возможных.
Но имея потолок можно прикидывать насколько рационально разворачивать другие циклы чтобы приближаться к идеалу.
=A=L=X=
Что то не умеет SpectNet IDE в команду DUP (((
gamedevfor
Dup/edup это повторение тела указанное число раз в sjasm.
Смотри какой у тебя ассемблер и ищи аналог.
=A=L=X=
Непонятно какой там asm диалект, но видно что поддерживает макросы, наверное нужно через них делать свой DUP )))
gamedevfor
> Непонятно какой там asm диалект
С этим в первую очередь надо определиться.
Почитай уже описание что ли на страничке чего ты там скачал.
судя по доке:
.loop 100500
PUSH HL
.endlhttps://github.com/Dotneteer/spectnetide/blob/master/docs/_posts/… statements.md
Погуглил, если это zxnextide, то там самописный ассемблер c
. Loop
. Eloop
Вместо
Dup
Edup
=A=L=X=
> Почитай уже описание что ли на страничке чего ты там скачал.
=A=L=X=
> Погуглил, если это zxnextide, то там самописный ассемблер c
> . Loop
> . Eloop
не работает