Вычисление sin

Материал из SpeccyWiki
Перейти к: навигация, поиск

исходный текст интро 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