;-------------------------------------------------------------------- ; Initializes the built-in sine-table ; ; Code by a/b (EAB forum) ; ; Sine and cosine tables with 1024 entries and -16384 to +16384 range are ; accessible through the fw_SinTable(a6) and fw_CosTable(a6) base pointers. ; fw_InitSineTable: PUTMSG 10,<"%d: Init Sine table %p">,fw_FrameCounter-2(a6),a0 IF FW_DYNAMIC_MEMORY_SUPPORT move.l #(1024+256)*2,d0 bsr fw_AllocFast move.l a0,fw_SinTable(a6) lea 256*2(a0),a1 move.l a1,fw_CosTable(a6) ELSE move.l fw_FastMemStack(a6),a0 move.l a0,fw_SinTable(a6) lea 256*2(a0),a1 move.l a1,fw_CosTable(a6) lea 1024*2(a1),a1 move.l a1,fw_FastMemStack(a6) ENDC moveq.l #0,d0 ; amp=16384, length=1024 move.w #511+2,a1 .loop subq.l #2,a1 move.l d0,d1 IF 1 ; extra accuracy begin move.w d1,d2 not.w d2 mulu.w d1,d2 divu.w #75781/2,d2 ; 16384/0.2162 lsr.w #3,d2 ; can't do a 32-bit divu sub.w d2,d1 ; extra accuracy end ENDC asr.l #2,d1 move.w d1,(a0)+ neg.w d1 move.w d1,1024-2(a0) add.l a1,d0 bne.s .loop move.l fw_SinTable(a6),a0 ; fill back of cos table lea 1024*2(a0),a1 moveq.l #(256/2)-1,d0 .cloop move.l (a0)+,(a1)+ dbra d0,.cloop PUTMSG 10,<"%d: Sine table done">,fw_FrameCounter-2(a6) rts