User Tag List

Страница 36 из 113 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя
Показано с 351 по 360 из 1128

Тема: ЭТЮДЫ

  1. #351

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Поменяй x и y местами, и круг нарисованный для горизонтальной заливки станет кругом нарисованным для вертикальной заливки)
    да разницы никакой тащемта.Я рисую в памяти, по идее картинка должна зациклиться на рамки по 31 пикселя, а по Х процедура почему-то не работает..

    Код:
    plot:
     push bc
     ld a,e:and 7:ld c,a,b,bw/256
     ld a,e:and %11111000
     rra:rra:rra
    
     and 31
    
     ld l,a
     ld a,d
     or $C0
     ld h,a
     ld a,(bc):or (hl):ld (hl),a
     pop bc
     ret


    ---------- Post added at 09:59 ---------- Previous post was at 09:40 ----------

    а, всё разобрался. теперь вопрос о делении 16бит/16бит.

    http://www.retroarchive.org/cpm/cdro...23/MATHLIB.Z80

    Код:
    ;-------------------------------------------------------
    ;
    DIVIDE:		;16 Bit by 16 Bit Integer Division
    ;
    ;			dividend (BC)
    ;	result (BC) = --------------- + remainder (HL)
    ;			divisor  (DE)
    ;
    ; The dividend is in BC, and the result returns in BC
    ; The divisor is in DE
    ; After the division HL contains the remainder
    ;
    ; The divisor is successively subtracted from the high 
    ;   order bits of the dividend. After each subtraction 
    ;   the result is used instead of the initial dividend
    ; The result is increased by 1 each time.
    ; When the result of the subtraction is negative the 
    ;   partial result is restored by adding the divisor 
    ;   back to it.
    ; The result is simulataneously decremented by 1
    ;
    ;First check if divisor is 0
    	LD	A,D
    	OR	E
    	JR	Z,DIVIDE.BY.ZERO
    ; Dividend is in BC
    ;clear result
    	LD	HL,0
    ;loop counter
    	LD	A,16	;DO NOT TRUNCATE
    ;
    ;Rotate Dividend left 
    ;Carry has been zeroed by the OR E above
    ZZDIV1:	RL	C	;Carry -> LSBit, MSBit -> Carry
    	RL	B		;ditto
    ;Rotate Remainder left
    	ADC	HL,HL	;Never sets carry,
    			;  ie RESETS carry
    ;Trial subtraction of divisor from result
    	SBC	HL,DE	;Carry -> 0 if no borrow
    			;Carry -> 1 if borrow
    	JR	NC,ZZPOS
    ;otherwise negative
    	ADD	HL,DE	;Restore dividend
    ZZPOS:	CCF	;Calc Result Bit, Z80 carry peculiar
    	DEC	A	;Loop counter
    	JR	NZ,ZZDIV1	;Loop for 16 Bits
    ;
    	RL	C	;Shift in last result bit
    	RL	B
    ; The result is in BC, the remainder in HL
    ;
    	RET	; ***** DONE ****
    ;
    DIVIDE.BY.ZERO: LD  BC,0FFFFH ;Infinity
    ; Output a diagnostic message if desired
    	RET
    ;
    в другом источнике есть беззнаковое деление:
    http://baze.au.com/misc/z80bits.html#2.3
    Код:
    2.3 Restoring 16-bit / 16-bit Unsigned
    
    Input: A:C = Dividend, DE = Divisor, HL = 0
    Output: A:C = Quotient, HL = Remainder 
    	slia	c		; unroll 16 times
    	rla			; ...
    	adc	hl,hl		; ...
    	sbc	hl,de		; ...
    	jr	nc,$+4		; ...
    	add	hl,de		; ...
    	dec	c		; ...
    
     We can use the forementioned trick with complementing the result also here but it's not that obvious how removed DEC C balances against additional overhead. In any case, this routine doesn't contain any "undocumented" instructions and might be preferable (?) for that reason.
    простите моё невежество, но в чем разница?

  2. #352

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Беззнаковое: делимое и делитель только положительные от 0 до 65535
    Со знаком: делимое и делитель от -32767 до +32767

  3. #353

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Беззнаковое: делимое и делитель только положительные от 0 до 65535
    Со знаком: делимое и делитель от -32767 до +32767
    так какой лучше взять? хочу делить число без знака на 320.

  4. #354

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    так какой лучше взять? хочу делить число без знака на 320.
    Беззнаковый)

    А если делишь на константу, тем более такую простую - пиши деление на константу, оно будет гораздо быстрее.

  5. #355

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,336
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    хочу делить число без знака на 320.
    Вместо того чтобы делить на константу, лучше умножать на константу.

    ---------- Post added at 13:35 ---------- Previous post was at 13:33 ----------

    Какой у тебя диапазон делимого? Отбрасывание дробной части или округление до ближайшего лучше?

  6. #356

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    признаться говоря, я ничего не придумал для алгоритма, просто нужно делить число, которое изменяется от 0 до $FFFF, на 320.

  7. #357

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,377
    Спасибо Благодарностей отдано 
    1,696
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    признаться говоря, я ничего не придумал для алгоритма, просто нужно делить число, которое изменяется от 0 до $FFFF, на 320.
    Лучше обрисовать цель деления.

    ---------- Post added at 11:51 ---------- Previous post was at 11:49 ----------

    Цитата Сообщение от Reobne Посмотреть сообщение
    Вместо того чтобы делить на константу, лучше умножать на константу.
    Через умножение можно не получить требуемой точности. Все зависит от задачи.

  8. #358

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Лучше обрисовать цель деления.
    прям так палить эффект? это или на TS-Conf, или на Спектрум.

  9. #359

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,103
    Спасибо Благодарностей отдано 
    1,336
    Спасибо Благодарностей получено 
    323
    Поблагодарили
    152 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Через умножение можно не получить требуемой точности. Все зависит от задачи.
    Ну вот, например, умножаем на 205 и "делим на 65536" это эквивалентно делению примерно на 319.7
    А если умножаем на 52429 и "делим на 2^24", то примерно 319.999.

    ---------- Post added at 14:21 ---------- Previous post was at 14:02 ----------

    Цитата Сообщение от denpopov Посмотреть сообщение
    прям так палить эффект?
    Так может тебе и калькулятор бейсика сгодится, а мы тут будем тратить силы на экономию одного такта.
    Сколько раз за кадр нужно делить на 320?

  10. #360

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    Так может тебе и калькулятор бейсика сгодится,
    не уверен, я калькулятором не занимался.

    Цитата Сообщение от Reobne Посмотреть сообщение
    Сколько раз за кадр нужно делить на 320?
    Дело не в кадрах, я не знаю, как объяснить. Взял процедуру и влепил в интро, вышло немного тормозно, возможно из-за алгоритма.

Страница 36 из 113 ПерваяПервая ... 323334353637383940 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

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

Ваши права

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