User Tag List

Показано с 1 по 10 из 1128

Тема: ЭТЮДЫ

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    567
    Спасибо Благодарностей отдано 
    194
    Спасибо Благодарностей получено 
    203
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Код:
    rnd:
    	push hl
    p0:	ld hl,ptr
    	inc l
    ;	jr z, patch1
    	mov a,l	
    	ld (p0+1),a
    	add a,ofs1	
    ;	jr z,patch2
    	ld (p1+1),a
    	ld a,(hl)	
    p1:	ld l,n
    	sub a,(hl)
    	ld (hl),a
    	pop hl	
    	ret
    Подставил в спрей с ofs1=-22, работает вродебы нормально, заполняет область целиком, прирост в скорости в моём случае не определяется вовсе, разве что экономия десятка байтов кода, хотя при буфере 256 b тоже не особо существенно но тем не менее ))
    По поводу вообще... Я скажем так в гсч вообще 0.0, поэтому брал готовую формулу из интернета X[i]=X[i-a]-X[i-b] с рекомендованными значениями a=97, b=33. У вас немного попроще X[i]=X[i-a]-X[i-1] и в принципе для моей цели она вполне подошла, так что респект. ))

    А тут что-то вы перемудрили - не работает ))

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Код:
    rnd8:	ld hl,buf-22
    	ld a,(hl)
    	inc l
    	jr z,rnd_2
    rnd_1:	sub a,(hl)
    	ld (hl),a
    	ld (rnd+1),hl
    	ret
    rnd_2:	ld l,-22
    	jp rnd_1
    Не понял логику в " rnd_1: sub (hl) " , когда l<>0. А результат - зацикливается гдето на десятке точек.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    А тут что-то вы перемудрили - не работает ))
    Смысл всех переходов в этом коде, чтобы перезагрузить указатель на текущий элемент, если он дошёл до конца буфера, а адрес конца буфера должен быть кратен 256 байтам. Можно inc заменить на dec, а -22 на +22, чтобы buf указывал на начало буфера, но тогда буфер нужно увеличить на 1 элемент, поскольку 0й не будет использоваться. А так код вычисляет x[n]=x[n-1]-x[n-22] и записывает на место x[n-22]. Минимум данные вместе с кодом займут 40-41 байт, если делать буфер 256 байт, то можно выкинуть условный переход и выиграть 7 тактов.

  4. #3

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    567
    Спасибо Благодарностей отдано 
    194
    Спасибо Благодарностей получено 
    203
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    ld (rnd8+1),hl
    Ну это естественно, в первом варианте тоже не mov а ld
    Проверочный код был:
    Код:
    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
    Цитата Сообщение от blackmirror Посмотреть сообщение
    А так код вычисляет x[n]=x[n-1]-x[n-22] и записывает на место x[n-22].
    Не прокатывает, выдаёт повторяющуюся последовательность из 9-12 точек (по разному от начального буфера)
    Вот скрины при первом варианте и при этом

    Скрытый текст

    Нажмите на изображение для увеличения. 

Название:	g0.png 
Просмотров:	309 
Размер:	4.1 Кб 
ID:	62400 Нажмите на изображение для увеличения. 

Название:	g1.png 
Просмотров:	323 
Размер:	3.7 Кб 
ID:	62401
    [свернуть]

  5. #4

    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Dart Alver,
    RNDbuff на 256 байт выровнен, и действительно ли начальные числа попадают куда нужно? Вообще этот генератор очень похож на CRC с полиномом x^22+x^21+1, хоть он и прост, но генерируемая последовательность имеет период 2^22-1 и в этих пределах любые 22 подряд идущих бита(младшие разряды нашего генератора) будут встречаться ровно один раз.

  6. #5

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    567
    Спасибо Благодарностей отдано 
    194
    Спасибо Благодарностей получено 
    203
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    RNDbuff на 256 байт выровнен, и действительно ли начальные числа попадают куда нужно?
    Разумеется да.
    Нашел причину, она в неправильной формуле. Правильно должно быть X[n]=X[n-22]-X[n-1] а не наоборот.
    Если заменить строку
    Код:
    .rnd_1   sub a,(hl)
    на
    Код:
    .rnd_1   neg
             add a,(hl)
    Всё становится так как и должно быть. ))

  7. #6

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    567
    Спасибо Благодарностей отдано 
    194
    Спасибо Благодарностей получено 
    203
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    blackmirror, Дико извиняюсь, был неправ. С формулой всё в порядке. Ошибка была в компиляции, нужно было писать не sub a,(hl) , а sub (hl). SjASMPlus команду sub a,(hl) понимает как sub a : sub (hl), а я забыл это поправить отсюда и все косяки были ))

  8. #7

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    SjASMPlus команду sub a,(hl) понимает как sub a
    тоже помню вечерочек скоротал, отлавливая безобидное xor e,l )
    Последний раз редактировалось shurik-ua; 04.10.2017 в 22:18.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •