Вычисление sin
Материал из SpeccyWiki
Версия от 02:26, 11 августа 2012; Goblinish (обсуждение | вклад)
исходный текст интро Nrrr-ka-rrrk by HOOY-PROGRAM содержит более осмысленные комментарии, поэтому приводится по сравнению с
; make sinewave
stack_a equ 0x2d28
fp_to_a equ 0x2dd5
ld a,64
call stack_a
rst 0x28
db 0xc4 ;store 64 into mem 4
db 0xa3 ;push half-pi
db 0x01 ;exchange
db 0x05 ;divide (-> pi/128)
db 0xc3 ;store pi/128 into mem 3
; db 0x02 ;discard it (nice but unnecessary?)
db 0xa0 ;push 0
db 0x38 ;return
ld hl,sine
sinelp
push hl
rst 0x28
db 0xe3 ;recall pi/128
db 0x0f ;add
db 0x31 ;duplicate
db 0x1f ;sine
db 0xe4 ;recall 64 from mem 4
; db 0xa1 ;push 1
; db 0x03 ;subtract 1 to give 63
db 0x04 ;multiply
db 0xe4 ;recall 64 again
db 0x0f ;add again
db 0x38 ;return
call fp_to_a
sub 64
pop hl
ld (hl),a
ld d,#58,e,l,(de),a
inc l
jr nz,sinelp
по сравнению с Sysel:
3 5b00 *s
4 5b00 tabsin = #7000 03 mksin 19.11.1995 Busy soft
5 5b00 org #8000
6 8000 fd213a5c p ld iy,#5c3a Systemky musia byt OK !
7 8004
8 8004 210070 mksin ld hl,tabsin
9 8007 7d mksn1 ld a,l
10 8008 e5 push hl
11 8009 cd282d call #2d28;
12 800c ef rst #28 Vypocet 127.5*(1+sin(A*PI/128))
13 800d 34eb db #34,#eb uloz + exponent
14 800f 490fdaa2 db #49,#0f,#da,#a2 mantisa PI/128
15 8013 04 db #04 krat
16 8014 1f db #1f sin
17 8015 a1 db #a1 uloz 1
18 8016 0f db #0f plus
19 8017 34377f db #34,#37,#7f uloz 127.50
20 801a 04 db #04 krat
21 801b 38 db #38
22 801c cdd52d call #2dd5
23 801f e1 pop hl
24 8020 77 ld (hl),a
25 8021 2c inc l
26 8022 20e3 jr nz,mksn1
27 8024 se
28 8024 c9 ret
29 8025 k
30 8025 l = k-p
31 8025 ls = se-mksin
k 8025 * l 0025 * ls 0020 * mksin 8004 *
mksn1 8007 * p 8000 * se 8024 * tabsin 7000 *
Bytes:37 labels:8 errors:0