ZXNet эхоконференция «code.zx»
тема: Sinus function
от: Aleksey Malov
кому: Igor Kiselev
дата: 21 Jul 2000
Приветствую тебя, Igor!
Mon 3 Jul 2000 в 03:08:14 Igor Kiselev и All разговаривали
на тему Sinus function.
IK> Посвятите меня в сабж, а именно неплохо бы поиметь исходняк
IK> метода калькуляции синусной функции.
Если тебя интересуют методы генерации синусных таблиц для всяких эффектов, то
могу посоветовать мою процедуру.
Hемного теории:
Данная процедура не рассчитывает синусную таблицу, она лишь распаковывает ее из
17 байтовой таблицы данных.
В таблице хранятся вторые производные синусной функции для углов от 0 до 64
градусов (период функции не 360, а 256 градусов для удобства).
Hа входе
;D-старший байт адреса начала 512 байтовой знаковой синусной таблицы.
Hа выходе - таблица функции (HL)+(256+HL)=255sin(L)
INISIN LD HL,SINTAB-1
LD E,255
LD BC,#06FA
INS INC E
LD A,E
AND 3
JR NZ,$+3
INC HL
XOR A
RLC (HL)
RLA
RLC (HL)
RLA
DEC A
ADD A,B
LD B,A
ADD A,C
LD C,A
CALL INSSR
PUSH DE
LD A,128
SUB E
LD E,A
LD A,C
CALL INSSR
POP DE
BIT 6,E
JR Z,INS
RET
INSSR LD (DE),A
SET 7,E
NEG
LD (DE),A
INC D
SBC A,A
LD (DE),A
RES 7,E
XOR A
LD (DE),A
DEC D
RET
SINTAB ;упакованные данные
DB #58,#56,#15,#55
DB #49,#21,#85,#52
DB #21,#54,#88,#54
DB #85,#52,#15,#48,#55
Пример:
sinus equ #c000
ld d,sinus/256
call inisin
Получить значение синуса (от -255 до +255) можно так:
;в L-значение угла
ld h,sinus/256
ld e,(hl)
inc h
ld d,(hl)
Счастливо, Igor!
С вами был Vivid/Brainwave^X-Project.
|