ГСЧ - полная засада. Я бился над chaosgame, получилось так, что период случайных чисел короток.
на помощь пришло ROM(подобный трюк использовался в Fractals/Alan Cox)chaosgame.zip
ГСЧ - полная засада. Я бился над chaosgame, получилось так, что период случайных чисел короток.
на помощь пришло ROM(подобный трюк использовался в Fractals/Alan Cox)chaosgame.zip
Ну это естественно, в первом варианте тоже не mov а ld
Проверочный код был:
Не прокатывает, выдаёт повторяющуюся последовательность из 9-12 точек (по разному от начального буфера)Код:RND push hl ld hl,RNDbuff+256-22 .bfadr EQU $-2 ld a,(hl) inc l jr z,.rnd_2 .rnd_1 sub a,(hl) ld (hl),a ld (.bfadr),hl pop hl ret .rnd_2 ld l,-22 jp .rnd_1
Вот скрины при первом варианте и при этом
Dart Alver,
RNDbuff на 256 байт выровнен, и действительно ли начальные числа попадают куда нужно? Вообще этот генератор очень похож на CRC с полиномом x^22+x^21+1, хоть он и прост, но генерируемая последовательность имеет период 2^22-1 и в этих пределах любые 22 подряд идущих бита(младшие разряды нашего генератора) будут встречаться ровно один раз.
blackmirror, Дико извиняюсь, был неправ. С формулой всё в порядке. Ошибка была в компиляции, нужно было писать не sub a,(hl) , а sub (hl). SjASMPlus команду sub a,(hl) понимает как sub a : sub (hl), а я забыл это поправить отсюда и все косяки были ))
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Наверное, пригодится:
https://github.com/impomatic/z80snippets
Писал эффект появления картинки для мегадемо, вышло слишком заморочено. Вот другой вариант, но показ выходит слишком медленный.
Беззнаковое деление 8/8=8.8
(по мотивам Программистам - Алгоритмы работы и примеры процедур для быстрых вычислений на асемблере)
Из недостатков - юзается доп-регистр (в данном случае D, но можно любой) и числа должны быть беззнаковые.
Наверное сейчас это уже никому не надо, но для понимания двоичной математики ковырял-ускорял. Быстрей вроде не получается или это я уже "замылился".Код:; H.L=H/A (D=corrupt) NEG:LD D,A ; 8+4=12 XOR A:LD L,A ; 4+4=8 RL H,H ; 8+8=16 DUP 7 RLA ; 4 ADD A,D ; 4 JP C,1F ; 10 SUB D ; 4 1 RL H ; 8 EDUP ; t=30 DUP 8 RLA ; 4 ADD A,D ; 4 JP C,2F ; 10 SUB D ; 4 2 RL L ; 8 EDUP ; t=30 ; 12+8+16+(30*7)+(30*8)=486 тактов в пиковом случае (min=426)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)