home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 05 / bittman / ddj_32s.s < prev    next >
Text File  |  1991-02-10  |  3KB  |  193 lines

  1. /******* FILE DDJ_32S.S, FOR USE ON DSP BOARD WITH AT&T ASSEMBLER ****/
  2.  
  3. #include <dspregs.h>
  4.  
  5. .global i1,o1,o2
  6. .global funcnum, bs, stages
  7. .global endofcode
  8.  
  9. /***********************************/
  10.  
  11. /* initialization */
  12.        r5 = 0x0003
  13.        pcw = r5
  14.        ioc  = 0x30CC0
  15.  
  16. begin:
  17. /* wait until funcnum != 0 */
  18.        r5 = *funcnum
  19.        nop
  20.        if (eq) goto begin
  21.        nop
  22.  
  23. /***********************************/
  24.  
  25. /* funcnum is set to function number */
  26.  
  27. /* func 1 */
  28.      r5 = r5 - 1
  29.      if (eq) goto do_dsp32
  30.  
  31. /* func 2 */
  32.      r5 = r5 - 1
  33.      if (eq) goto do_ieee32
  34.  
  35. /* func 3 */
  36.      r5 = r5 - 1
  37.      if (eq) goto rffta
  38.  
  39. /* func 4 */
  40.      r5 = r5 - 1
  41.      if (eq) goto do_mag
  42.      nop
  43.  
  44. /* func 5 */
  45.      r5 = r5 - 1
  46.      if (eq) goto do_log10
  47.      nop
  48.  
  49. /* illegal function number */
  50.      goto finished
  51.      nop
  52.  
  53. /***********************************/
  54.  
  55. rffta:
  56.        r2e = *o1
  57.        r1  = *bs
  58.        r3  = *stages
  59.        *fft_b = r2e
  60.        *fft_n = r1e
  61.        *fft_m = r3e
  62.  
  63.        call _rffta (r14)
  64.        nop
  65. fft_lv: int24    localV
  66. fft_n:  int24    0
  67. fft_m:  int24    0
  68. fft_b:  int24    0
  69. .align 4
  70.        goto finished
  71.        nop
  72.  
  73. /***********************************/
  74.  
  75. do_mag:
  76.        r8 = *bs
  77.        r10e = *i1
  78.        r8 = r8 - 2
  79.        r11e = *o1
  80.        nop
  81.  
  82.        a0 = *r10++                 /* DC value */
  83.        nop
  84.        a2 = *r10++                 /* Nyquist  */
  85.        *r11++ = a0 = a0*a0         /* save DC mag */
  86.  
  87. magloop:
  88.        a0 = *r10++
  89.        nop
  90.        a1 = *r10++
  91.        a0 = a0*a0
  92.        nop
  93.        a1 = a1*a1
  94.        nop
  95.        nop
  96.        *r11++ = a1 = a0 + a1
  97.        if (r8-->=0) goto magloop
  98.        nop
  99.        *r11++ = a0 = a2*a2         /* save Nyquist mag */
  100.        goto finished
  101.        nop
  102.  
  103. /***********************************/
  104.  
  105. do_log10:
  106.        r12e = *i1
  107.        r11e = *o1
  108.        r13  = *bs
  109.        r10e = in
  110.        r9e  = out
  111.        r13  = r13 - 2
  112.  
  113. logloop:
  114.        *r10 = a3 = *r12++
  115.        call _log10 (r14)
  116.        nop
  117.        int24     localV
  118.        int24     in, out
  119.  
  120. .align 4
  121.        *r11++ = a3 = *r9
  122.        if (r13-->=0) goto logloop
  123.        nop
  124.        goto finished
  125.        nop
  126.  
  127. /***********************************/
  128.  
  129. do_ieee32:
  130.        r1e = *o1
  131.        r2 = *bs
  132.        *o1_ieee32 = r1e
  133.        *bs_ieee32 = r2e
  134.  
  135.        call _ieee32 (r14)
  136.        nop
  137.             int24       localV
  138. bs_ieee32:  int24       0
  139. o1_ieee32:  int24       0
  140.  
  141. .align 4
  142.        goto finished
  143.        nop
  144.  
  145. /***********************************/
  146.  
  147. do_dsp32:
  148.        r1e = *o1
  149.        r2 = *bs
  150.        *o1_dsp32 = r1e
  151.        *bs_dsp32 = r2e
  152.  
  153.        call _dsp32 (r14)
  154.        nop
  155. bs_dsp32:  int24       0
  156. o1_dsp32:  int24       0
  157.  
  158. .align 4
  159.        goto finished
  160.        nop
  161.  
  162. /***********************************/
  163.  
  164. finished:  /* finished, set funcnum=0 */
  165.        r1=0
  166.        goto begin
  167.        *funcnum=r1
  168.  
  169. bs:         int 256
  170. stages:     int 8
  171. funcnum:    int 0
  172.  
  173. .align 4
  174. i1: int24 0x2000
  175. o1: int24 0x2000
  176. o2: int24 0x3000
  177.  
  178. .align 4
  179. localV:   2*float   0.0
  180. in:       float     0.0
  181. out:      float     0.0
  182. max:      float     0.0
  183. scalefac: float     0.0
  184.  
  185. #include <_rffta.asm>
  186. #include <_log10.asm>
  187. #include <_ieee32.asm>
  188. #include <_dsp32.asm>
  189.  
  190. /* MARK END OF CODE */
  191. endofcode: int 0xDEAD, 0xC0DE
  192. 
  193.