Есть инструкция djnz которая привязана к счетчику в регистре b
А если мне нужен счетчик двухбайтовый то тогда как?
gamedevfor
> А если мне нужен счетчик двухбайтовый то тогда как?
DEC BC
INC B
DJNZ label
Что быстрее? очистка экрана через стэк (push) или через ldir?
0iStalker
> DEC BC
> INC B
> DJNZ label
Отладчик показывает что последние #FF(255) раз не дорабатывает (из регистра С). ))
gamedevfor
> А если мне нужен счетчик двухбайтовый то тогда как?
"Штатный" способ контролировать регистровую пару на ноль разрушает A:
DEC BC LD A, B OR C JNZ LABEL
=A=L=X=
Спасибо работает.
P.S. Через стэк очистка экрана выходит порядка 25FPS.
Однако! Где же тогда обещанные 50FPS?
gamedevfor
> Однако! Где же тогда обещанные 50FPS?
Я прозреваю, что ты программируешь всё-таки не на ZX80 https://ru.wikipedia.org/wiki/ZX80
ZX80 это реальный компьютер Sinclair Research, предшественник ZX Spectrum.
С экраном у него была совсем совсем другая история.
=A=L=X=
> Я прозреваю, что ты программируешь всё-таки не на ZX80
Я имел ввиду ZX Spectrum (на базе zilog z80) = ZX80, он же всеми любимый цветной 48K спектрум.
В нем заявлено 50FPS, хз но эмулятор столько не выдает, при этом не видно чтобы эмулятор врал.
gamedevfor
> В нем заявлено 50FPS,
50 раз в секунду видеочип генерирует сигнал для телевизора системы PAL.
Вообще на этом ПК (как и на аналогичных той эпохи) можно высчитать сколько точно тактов процессора занимает цикл обновления экрана (+отдых луча электронной трубки после этой отрисовки) и чтобы игра смогла выдавать 50 фпс надо укладываться в этот лимит. Если не уложиться, то возникнут разрывы изображения, просадка фпс.
Как это сделать - для динамичной полноэкранной игры почти невозможно. Нужны жёсткие ухищрения и идеи (например не обновлять области изображения которые не надо обновлять) чтобы уложиться.
Большинство игр, особенно первых лет на спектруме вообще плевали на контроль фпс и были тормозными и неотзывчивыми в управлении.
Вот даже для сравнения два скролл-шутера с разным фпс:


Разница видна невооружённым глазом - как программист добился стабильных 50 фпс во втором случае для меня по большому счету загадка.
gamedevfor
> Я имел ввиду ZX Spectrum (на базе zilog z80) = ZX80, он же всеми любимый
> цветной 48K спектрум.
Посмотри, если есть интерес, как, к примеру и что в рамках ускорения Форт для Z80 делает
автор в проекте M4_FORTH
P.S. Вообще при поиске Forth+Z80 на Github такой результат.
Для Spectrum+Forth ещё несколько иной результат поиска
Интересно, что некоторые игры с ZX-Spectrum были полностью отреверсены участниками форума zx-pk.ru, как Exolon.
Интересный ещё исторический факт, что когда рассорились основные разработчики ZX-Spectrum с Синклером, то они создали свой компьютер c Форт языком Jupiter_ACE поэтому в ПЗУ Спектрума осталось пустое пространство и в чём то не доделан Бейсик.
Другой компьютер с Форт языком был Canon Cat
с какой то "мутной" историей описанной в i-net почему его убралa с рынка Canon.
Забавно, что Форт портировали и на очередной калькулятор SHARP PC-G850(V)(S) pocket computer. (Z80) :)
Forth850

gamedevfor
> P.S. Через стэк очистка экрана выходит порядка 25FPS.
Хьюстон, у Вас проблемы! Если хочешь высокий FPS то чистить экран каждый кадр не вариант, на восьмибитках, без аппаратных спрайтов, ты рисуешь спрайт, а потом стираешь только то место где он был, а потом рисуешь новый (если он обновился).
=A=L=X=
> как программист добился стабильных 50 фпс во втором случае
Откуда ты знаешь что там есть реально 50 фпс?
>для меня по большому счету загадка.
Ну загадки можно разгадать через дизасм. )))
0iStalker
> Если хочешь высокий FPS то чистить экран каждый кадр не вариант
Ну как то хитро выходит ровно 25FPS, кажется что отрисовка не попадает ровно в один кадр и приходится каждый раз пропускать один кадр.
0iStalker
> ты рисуешь спрайт, а потом стираешь только то место где он был, а потом рисуешь
> новый (если он обновился)
Метод не универсальный, а подходит разве что для отрисовки курсора мыши.