Здрассте, дяденьки кодеры!
Что, ряд Тейлора никто не вспомнил?
способ, предложенный introspec'ом мне нравится, но в двух примерах генерации синуса он не понятен как принцип, зато апроксимация парабол иногда использовалась в демах.
и чем она удобна, это имхо то, что можно изменять амплитуду синусоиды. я написал код, но вышла фигня:
Код:
device zxspectrum128
ORG #6000
begin
ld bc,#8000
ld hl,0
ld de,0
sinlp1: add hl,de
ld a,h,(bc),a
ld a,e:add a,8:ld e,a
jr nc,noincd
inc d
noincd:
inc c
bit 6,c
;ld a,c:cp #41
jr z,sinlp1
;--------------------1st
ld e,#40;ld e,c
ld d,b;de=$807F,bc,=$8040
sinlp2:
ld a,(bc)
ld l,a
ld a,64*2-1:sub l
ld (de),a
inc e
dec c
jr nz,sinlp2
;jr $;c=$7F
ld c,a;bc=$807F,de=$8080
sinlp3:
ld a,(bc)
; neg
ld (de),a
dec c
inc e:jr nz,sinlp3
ld hl,#8000
drwlp:
ld a,(hl)
ld c,l
push hl
call 022B0h
;A=y
;c=X
call 022B0h
inc a
ld b,a
xor a:scf
bwlp:rra:djnz bwlp
or (hl):ld (hl),a
pop hl
inc l:jr nz,drwlp
jr $
end
display /d,end-begin
savesna "!test.sna",begin
и не могу понять в чем дело.