А разрядность А В С какая? 8 или 16?
Вид для печати
Он же написал байты. ))
Тут больше вопрос просто байты или и регистры нужны им соответствующие ?
По делению видел процедуры https://zxpress.ru/article.php?id=11...u4v3h388674283 , не знаю правда насколько верные.
А здесь по сути надо C=A*8/B , а с учётом условия: ' A в диапазоне от 1 до (B - 1) ' - результат будет не больше 7
Дальше мозги не соображают ))
Вот, есть такая:
35 байт 97 тактов.Код:ld c,7
sla a ; rlca
jr c,skip1
cp b
jr nc,skip1
res 2,c
jr skip2
skip1:
sub b
skip2:
sla a ; rlca
jr c,skip3
cp b
jr nc,skip3
res 1,c
jr skip4
skip3:
sub b
skip4:
sla a ; rlca
jr c,skip5
cp b
jr nc,skip5
res 0,c
skip5:
Можно уменьшить, за счёт точности, заменив "sla a" на "rlca".
Можно уменьшить за счёт замедления, свернув повторение в цикл.
Возможно можно оптимизировать.
97 тактов это не точно. Можно сказать, примерно 100 тактов.
C = (A / B) * 8 , где A, B, C - регистры Z80
Не прошло и 4 года, как на спектумкомпьютинг подняли схожую тему: https://spectrumcomputing.co.uk/foru...ic.php?t=11240
Очень интересует подобный генератор, но знаний в тервере и комбинаторике не хватает, чтобы что-нибудь тут понять.
Что нужно: генератор, позволяющий настраивать период в заданных пределах, например, имеется массив
db 1
db 2
db 3
db 4
db 5
Хочу запустить генератор с периодом 5, который позволил бы мне из этого массива выбрать за 5 итераций все значения в случайном порядке - "3, 1, 4, 5, 2".
Или - с периодом 10000 для другого массива, из 10000 элементов.
Позволяет ли так сделать эта LCG-функция, которая рассматривается в посте?
Оно-то будет. А что будет? Любой RND может выдать последовательность "3", "3", "3", "1", "4"? Думаю, может. А зачем мне "3", "3", "3"?
Можно, конечно. Особенно удобно, когда хочешь побитово, "по точкам" зажечь или погасить изображение на экране. Всего делов-то - сделать табличку в 49152 байта.
По ссылке как раз вроде бы, как я понял, описывается генератор неповторяющихся последовательностей с настраиваемым периодом. Даже не генератор последовательностей, а, скорее, shuffle-процедура.
https://spectrumcomputing.co.uk/foru...0ce7aa#p140188
https://worldofspectrum.org/forums/d...omment_1013871
Ну возми 16-битный RND (в том-же ZX-Ревю) и вперёд!
Вызываешь, получаешь двухбайтное "случайное" значение, один байт это X второй Y, смотришь что там у тебя в картинке - если бит включен - соотв. включаешь его на экране. Повторить 65536 раз и в результате переберутся все возможные координаты и картинка проявится. Конечно если Y>192 то просто пропускается эта точка. Все нормальные генераторы пробегаются по всем коордам достаточно рандомно и попадают туда где уже были только спустя 65536 итераций (ну если 16-ти битный).
Я на таком делал:
Код:; zx-review 3-4 1997
; http://zxpress.ru/article.php?id=1010
RND_32 LD HL,(SEED)
CALL RND
RND LD A,H:ADD HL,HL:XOR H
ADD HL,HL,HL,HL,HL,HL:XOR H
ADD HL,HL,HL,HL:XOR H:ADD HL,HL,HL,HL
LD L,A:LD (SEED),HL
RET
SEED DEFW #FFFF ; НЕ НОЛЬ!