

; this ultra fast FFT routine was taken from:
;-------------------------------------------------------
;  DeliTracker FFTAnalyzer genie module V1.6 (19 Apr 95)
;
;   © 1994-95 by Delirium Softdesign
;   (Peter Kunath and Frank Riffel)
;       All rights reserved.
;   Special thanks to Kim Øyhus for
;  the fastest FFT routine ever done
;           on the Amiga.
;-------------------------------------------------------
;
; adapted+optimized by Smack/Infect!
; Fri 30-Apr-99
;



;-------------------------------------------------------------------------
;
; !! uses FPU (requires emulation on 68040/060) !!
;
; precalculates log_table used by 'deli_fft'
;
fft_init
	lea	(fft_log_table),a0
	move	#255,d2
	moveq	#-1,d7
	fmove.w	#0,fp1
	fmove.w	#2,fp2
	fmove.s	#5.5,fp3
	fmove.w	#7500,fp4
	fmove.w	#0,fp5
	fmove.w	#1,fp6
.loop
	fmove	fp1,fp0
	fadd	fp2,fp0
	flog2	fp0		;!! n/a 68040/060 !!
	fsub	fp3,fp0
	fbge	.ge
	fmove	fp5,fp0
.ge	fmul	fp4,fp0

	fmove.l	fp0,d0
	lsr.l	#8,d0
	cmp	d2,d0
	ble.b	.le
	move	d2,d0
.le	move.b	d0,(a0)+

	fadd	fp6,fp1
	dbf	d7,.loop
	rts




;-------------------------------------------------------------------------
;
; !! requires FPU (68881/2, 68040 or 68060) !!
;
; input:
; a0 - pointer to data array
;      (504 8-bit-samples as signed words)
; d0 - NULL / NOT_NULL - linear / logarithmic intensity scale
;
; log_table - must be precalculated (call 'fft_init' at program start)
;
; output:
; the first 252 elements of the data array contain the spectrum
; as unsigned words
;
deli_fft
	move.l	d0,-(a7)
	pea	(a0)
	lea	(scrambled_1008w),a1
	bsr	scramble_data

	bsr	pass1_6
	bsr	pass2_6
	bsr	pass3_6

	move	#792-1,d4
	lea	(buffer_792w),a0
	lea	(scrambled_sincos,pc),a2
	moveq	#14,d7
.loop	move	(a0),d0
	muls	(a2)+,d0
	lsr.l	d7,d0		;#14
	move	d0,(a0)+
	dbf	d4,.loop

	bsr	pass4_6
	bsr	pass5_6
	bsr	pass6_6

	move.l	(a7),a0
	lea	(scrambled_1008w),a1
	bsr	unscramble_data

	move.l	(a7)+,a0
	lea	(1008,a0),a1
	lea	(fft_log_table),a2
	move	#252-1,d7
	move.l	(a7)+,d6

	fmove.w	#25,fp5
.band_loop
	move	(a0),d1
	move	-(a1),d0
	muls	d1,d1
	muls	d0,d0
	add.l	d1,d0

	fmove.l	d0,fp0
	fsqrt	fp0
	tst.l	d6
	bne.b	.log

	fmul	fp5,fp0
	fmove.l	fp0,d0
	swap	d0
	tst	d0
	beq.b	.eq
	moveq	#-1,d0
.eq	swap	d0
	move	d0,(a0)+
	dbf	d7,.band_loop
	bra.b	.end
	
.log	fmove.l	fp0,d0
	move.b	(a2,d0.l),d0
	lsl	#8,d0
	move	d0,(a0)+
	dbf	d7,.band_loop
.end	rts




scramble_data
	move	(a0)+,(a1)
	move	(a0)+,(164,a1)
	move	(a0)+,($148,a1)
	move	(a0)+,($1ec,a1)
	move	(a0)+,($290,a1)
	move	(a0)+,($334,a1)
	move	(a0)+,($3d8,a1)
	move	(a0)+,($8c,a1)
	move	(a0)+,($a0,a1)
	move	(a0)+,($132,a1)
	move	(a0)+,($1d6,a1)
	move	(a0)+,($27a,a1)
	move	(a0)+,($31e,a1)
	move	(a0)+,($3c2,a1)
	move	(a0)+,($76,a1)
	move	(a0)+,($11a,a1)
	move	(a0)+,($12e,a1)
	move	(a0)+,($1d2,a1)
	move	(a0)+,($264,a1)
	move	(a0)+,($308,a1)
	move	(a0)+,($3ac,a1)
	move	(a0)+,($60,a1)
	move	(a0)+,($104,a1)
	move	(a0)+,($1a8,a1)
	move	(a0)+,($1bc,a1)
	move	(a0)+,($260,a1)
	move	(a0)+,($304,a1)
	move	(a0)+,($396,a1)
	move	(a0)+,($4a,a1)
	move	(a0)+,($ee,a1)
	move	(a0)+,($192,a1)
	move	(a0)+,($236,a1)
	move	(a0)+,($24a,a1)
	move	(a0)+,($2ee,a1)
	move	(a0)+,($392,a1)
	move	(a0)+,($46,a1)
	move	(a0)+,($d8,a1)
	move	(a0)+,($17c,a1)
	move	(a0)+,($220,a1)
	move	(a0)+,($2c4,a1)
	move	(a0)+,($2d8,a1)
	move	(a0)+,($37c,a1)
	move	(a0)+,($30,a1)
	move	(a0)+,($d4,a1)
	move	(a0)+,($178,a1)
	move	(a0)+,($20a,a1)
	move	(a0)+,($2ae,a1)
	move	(a0)+,($352,a1)
	move	(a0)+,($366,a1)
	move	(a0)+,($1a,a1)
	move	(a0)+,($be,a1)
	move	(a0)+,($162,a1)
	move	(a0)+,($206,a1)
	move	(a0)+,($2aa,a1)
	move	(a0)+,($33c,a1)
	move	(a0)+,($3e0,a1)
	move	(a0)+,(4,a1)
	move	(a0)+,($a8,a1)
	move	(a0)+,($14c,a1)
	move	(a0)+,($1f0,a1)
	move	(a0)+,($294,a1)
	move	(a0)+,($338,a1)
	move	(a0)+,($3dc,a1)
	move	(a0)+,($7e,a1)
	move	(a0)+,($92,a1)
	move	(a0)+,($136,a1)
	move	(a0)+,($1da,a1)
	move	(a0)+,($27e,a1)
	move	(a0)+,($322,a1)
	move	(a0)+,($3c6,a1)
	move	(a0)+,($7a,a1)
	move	(a0)+,($11e,a1)
	move	(a0)+,($120,a1)
	move	(a0)+,($1c4,a1)
	move	(a0)+,($268,a1)
	move	(a0)+,($30c,a1)
	move	(a0)+,($3b0,a1)
	move	(a0)+,($64,a1)
	move	(a0)+,($108,a1)
	move	(a0)+,($1ac,a1)
	move	(a0)+,($1c0,a1)
	move	(a0)+,($252,a1)
	move	(a0)+,($2f6,a1)
	move	(a0)+,($39a,a1)
	move	(a0)+,($4e,a1)
	move	(a0)+,($f2,a1)
	move	(a0)+,($196,a1)
	move	(a0)+,($23a,a1)
	move	(a0)+,($24e,a1)
	move	(a0)+,($2f2,a1)
	move	(a0)+,($384,a1)
	move	(a0)+,($38,a1)
	move	(a0)+,($dc,a1)
	move	(a0)+,($180,a1)
	move	(a0)+,($224,a1)
	move	(a0)+,($2c8,a1)
	move	(a0)+,($2dc,a1)
	move	(a0)+,($380,a1)
	move	(a0)+,($34,a1)
	move	(a0)+,($c6,a1)
	move	(a0)+,($16a,a1)
	move	(a0)+,($20e,a1)
	move	(a0)+,($2b2,a1)
	move	(a0)+,($356,a1)
	move	(a0)+,($36a,a1)
	move	(a0)+,($1e,a1)
	move	(a0)+,($c2,a1)
	move	(a0)+,($166,a1)
	move	(a0)+,($1f8,a1)
	move	(a0)+,($29c,a1)
	move	(a0)+,($340,a1)
	move	(a0)+,($3e4,a1)
	move	(a0)+,(8,a1)
	move	(a0)+,($ac,a1)
	move	(a0)+,($150,a1)
	move	(a0)+,($1f4,a1)
	move	(a0)+,($298,a1)
	move	(a0)+,($32a,a1)
	move	(a0)+,($3ce,a1)
	move	(a0)+,($82,a1)
	move	(a0)+,($96,a1)
	move	(a0)+,($13a,a1)
	move	(a0)+,($1de,a1)
	move	(a0)+,($282,a1)
	move	(a0)+,($326,a1)
	move	(a0)+,($3ca,a1)
	move	(a0)+,($6c,a1)
	move	(a0)+,($110,a1)
	move	(a0)+,($124,a1)
	move	(a0)+,($1c8,a1)
	move	(a0)+,($26c,a1)
	move	(a0)+,($310,a1)
	move	(a0)+,($3b4,a1)
	move	(a0)+,($68,a1)
	move	(a0)+,($10c,a1)
	move	(a0)+,($19e,a1)
	move	(a0)+,($1b2,a1)
	move	(a0)+,($256,a1)
	move	(a0)+,($2fa,a1)
	move	(a0)+,($39e,a1)
	move	(a0)+,($52,a1)
	move	(a0)+,($f6,a1)
	move	(a0)+,($19a,a1)
	move	(a0)+,($23e,a1)
	move	(a0)+,($240,a1)
	move	(a0)+,($2e4,a1)
	move	(a0)+,($388,a1)
	move	(a0)+,($3c,a1)
	move	(a0)+,($e0,a1)
	move	(a0)+,($184,a1)
	move	(a0)+,($228,a1)
	move	(a0)+,($2cc,a1)
	move	(a0)+,($2e0,a1)
	move	(a0)+,($372,a1)
	move	(a0)+,($26,a1)
	move	(a0)+,($ca,a1)
	move	(a0)+,($16e,a1)
	move	(a0)+,($212,a1)
	move	(a0)+,($2b6,a1)
	move	(a0)+,($35a,a1)
	move	(a0)+,($36e,a1)
	move	(a0)+,($22,a1)
	move	(a0)+,($b4,a1)
	move	(a0)+,($158,a1)
	move	(a0)+,($1fc,a1)
	move	(a0)+,($2a0,a1)
	move	(a0)+,($344,a1)
	move	(a0)+,($3e8,a1)
	move	(a0)+,(12,a1)
	move	(a0)+,($b0,a1)
	move	(a0)+,($154,a1)
	move	(a0)+,($1e6,a1)
	move	(a0)+,($28a,a1)
	move	(a0)+,($32e,a1)
	move	(a0)+,($3d2,a1)
	move	(a0)+,($86,a1)
	move	(a0)+,($9a,a1)
	move	(a0)+,($13e,a1)
	move	(a0)+,($1e2,a1)
	move	(a0)+,($286,a1)
	move	(a0)+,($318,a1)
	move	(a0)+,($3bc,a1)
	move	(a0)+,($70,a1)
	move	(a0)+,($114,a1)
	move	(a0)+,($128,a1)
	move	(a0)+,($1cc,a1)
	move	(a0)+,($270,a1)
	move	(a0)+,($314,a1)
	move	(a0)+,($3b8,a1)
	move	(a0)+,($5a,a1)
	move	(a0)+,($fe,a1)
	move	(a0)+,($1a2,a1)
	move	(a0)+,($1b6,a1)
	move	(a0)+,($25a,a1)
	move	(a0)+,($2fe,a1)
	move	(a0)+,($3a2,a1)
	move	(a0)+,($56,a1)
	move	(a0)+,($fa,a1)
	move	(a0)+,($18c,a1)
	move	(a0)+,($230,a1)
	move	(a0)+,($244,a1)
	move	(a0)+,($2e8,a1)
	move	(a0)+,($38c,a1)
	move	(a0)+,($40,a1)
	move	(a0)+,($e4,a1)
	move	(a0)+,($188,a1)
	move	(a0)+,($22c,a1)
	move	(a0)+,($2be,a1)
	move	(a0)+,($2d2,a1)
	move	(a0)+,($376,a1)
	move	(a0)+,($2a,a1)
	move	(a0)+,($ce,a1)
	move	(a0)+,($172,a1)
	move	(a0)+,($216,a1)
	move	(a0)+,($2ba,a1)
	move	(a0)+,($35e,a1)
	move	(a0)+,($360,a1)
	move	(a0)+,($14,a1)
	move	(a0)+,($b8,a1)
	move	(a0)+,($15c,a1)
	move	(a0)+,($200,a1)
	move	(a0)+,($2a4,a1)
	move	(a0)+,($348,a1)
	move	(a0)+,($3ec,a1)
	move	(a0)+,($10,a1)
	move	(a0)+,($a2,a1)
	move	(a0)+,($146,a1)
	move	(a0)+,($1ea,a1)
	move	(a0)+,($28e,a1)
	move	(a0)+,($332,a1)
	move	(a0)+,($3d6,a1)
	move	(a0)+,($8a,a1)
	move	(a0)+,($9e,a1)
	move	(a0)+,($142,a1)
	move	(a0)+,($1d4,a1)
	move	(a0)+,($278,a1)
	move	(a0)+,($31c,a1)
	move	(a0)+,($3c0,a1)
	move	(a0)+,($74,a1)
	move	(a0)+,($118,a1)
	move	(a0)+,($12c,a1)
	move	(a0)+,($1d0,a1)
	move	(a0)+,($274,a1)
	move	(a0)+,($306,a1)
	move	(a0)+,($3aa,a1)
	move	(a0)+,($5e,a1)
	move	(a0)+,($102,a1)
	move	(a0)+,($1a6,a1)
	move	(a0)+,($1ba,a1)
	move	(a0)+,($25e,a1)
	move	(a0)+,($302,a1)
	move	(a0)+,($3a6,a1)
	move	(a0)+,($48,a1)
	move	(a0)+,($ec,a1)
	move	(a0)+,($190,a1)
	move	(a0)+,($234,a1)
	move	(a0)+,($248,a1)
	move	(a0)+,($2ec,a1)
	move	(a0)+,($390,a1)
	move	(a0)+,($44,a1)
	move	(a0)+,($e8,a1)
	move	(a0)+,($17a,a1)
	move	(a0)+,($21e,a1)
	move	(a0)+,($2c2,a1)
	move	(a0)+,($2d6,a1)
	move	(a0)+,($37a,a1)
	move	(a0)+,($2e,a1)
	move	(a0)+,($d2,a1)
	move	(a0)+,($176,a1)
	move	(a0)+,($21a,a1)
	move	(a0)+,($2ac,a1)
	move	(a0)+,($350,a1)
	move	(a0)+,($364,a1)
	move	(a0)+,($18,a1)
	move	(a0)+,($bc,a1)
	move	(a0)+,($160,a1)
	move	(a0)+,($204,a1)
	move	(a0)+,($2a8,a1)
	move	(a0)+,($34c,a1)
	move	(a0)+,($3de,a1)
	move	(a0)+,(2,a1)
	move	(a0)+,($a6,a1)
	move	(a0)+,($14a,a1)
	move	(a0)+,($1ee,a1)
	move	(a0)+,($292,a1)
	move	(a0)+,($336,a1)
	move	(a0)+,($3da,a1)
	move	(a0)+,($8e,a1)
	move	(a0)+,($90,a1)
	move	(a0)+,($134,a1)
	move	(a0)+,($1d8,a1)
	move	(a0)+,($27c,a1)
	move	(a0)+,($320,a1)
	move	(a0)+,($3c4,a1)
	move	(a0)+,($78,a1)
	move	(a0)+,($11c,a1)
	move	(a0)+,($130,a1)
	move	(a0)+,($1c2,a1)
	move	(a0)+,($266,a1)
	move	(a0)+,($30a,a1)
	move	(a0)+,($3ae,a1)
	move	(a0)+,($62,a1)
	move	(a0)+,($106,a1)
	move	(a0)+,($1aa,a1)
	move	(a0)+,($1be,a1)
	move	(a0)+,($262,a1)
	move	(a0)+,($2f4,a1)
	move	(a0)+,($398,a1)
	move	(a0)+,($4c,a1)
	move	(a0)+,($f0,a1)
	move	(a0)+,($194,a1)
	move	(a0)+,($238,a1)
	move	(a0)+,($24c,a1)
	move	(a0)+,($2f0,a1)
	move	(a0)+,($394,a1)
	move	(a0)+,($36,a1)
	move	(a0)+,($da,a1)
	move	(a0)+,($17e,a1)
	move	(a0)+,($222,a1)
	move	(a0)+,($2c6,a1)
	move	(a0)+,($2da,a1)
	move	(a0)+,($37e,a1)
	move	(a0)+,($32,a1)
	move	(a0)+,($d6,a1)
	move	(a0)+,($168,a1)
	move	(a0)+,($20c,a1)
	move	(a0)+,($2b0,a1)
	move	(a0)+,($354,a1)
	move	(a0)+,($368,a1)
	move	(a0)+,($1c,a1)
	move	(a0)+,($c0,a1)
	move	(a0)+,($164,a1)
	move	(a0)+,($208,a1)
	move	(a0)+,($29a,a1)
	move	(a0)+,($33e,a1)
	move	(a0)+,($3e2,a1)
	move	(a0)+,(6,a1)
	move	(a0)+,($aa,a1)
	move	(a0)+,($14e,a1)
	move	(a0)+,($1f2,a1)
	move	(a0)+,($296,a1)
	move	(a0)+,($33a,a1)
	move	(a0)+,($3cc,a1)
	move	(a0)+,($80,a1)
	move	(a0)+,($94,a1)
	move	(a0)+,($138,a1)
	move	(a0)+,($1dc,a1)
	move	(a0)+,($280,a1)
	move	(a0)+,($324,a1)
	move	(a0)+,($3c8,a1)
	move	(a0)+,($7c,a1)
	move	(a0)+,($10e,a1)
	move	(a0)+,($122,a1)
	move	(a0)+,($1c6,a1)
	move	(a0)+,($26a,a1)
	move	(a0)+,($30e,a1)
	move	(a0)+,($3b2,a1)
	move	(a0)+,($66,a1)
	move	(a0)+,($10a,a1)
	move	(a0)+,($1ae,a1)
	move	(a0)+,($1b0,a1)
	move	(a0)+,($254,a1)
	move	(a0)+,($2f8,a1)
	move	(a0)+,($39c,a1)
	move	(a0)+,($50,a1)
	move	(a0)+,($f4,a1)
	move	(a0)+,($198,a1)
	move	(a0)+,($23c,a1)
	move	(a0)+,($250,a1)
	move	(a0)+,($2e2,a1)
	move	(a0)+,($386,a1)
	move	(a0)+,($3a,a1)
	move	(a0)+,($de,a1)
	move	(a0)+,($182,a1)
	move	(a0)+,($226,a1)
	move	(a0)+,($2ca,a1)
	move	(a0)+,($2de,a1)
	move	(a0)+,($382,a1)
	move	(a0)+,($24,a1)
	move	(a0)+,($c8,a1)
	move	(a0)+,($16c,a1)
	move	(a0)+,($210,a1)
	move	(a0)+,($2b4,a1)
	move	(a0)+,($358,a1)
	move	(a0)+,($36c,a1)
	move	(a0)+,($20,a1)
	move	(a0)+,($c4,a1)
	move	(a0)+,($156,a1)
	move	(a0)+,($1fa,a1)
	move	(a0)+,($29e,a1)
	move	(a0)+,($342,a1)
	move	(a0)+,($3e6,a1)
	move	(a0)+,(10,a1)
	move	(a0)+,($ae,a1)
	move	(a0)+,($152,a1)
	move	(a0)+,($1f6,a1)
	move	(a0)+,($288,a1)
	move	(a0)+,($32c,a1)
	move	(a0)+,($3d0,a1)
	move	(a0)+,($84,a1)
	move	(a0)+,($98,a1)
	move	(a0)+,($13c,a1)
	move	(a0)+,($1e0,a1)
	move	(a0)+,($284,a1)
	move	(a0)+,($328,a1)
	move	(a0)+,($3ba,a1)
	move	(a0)+,($6e,a1)
	move	(a0)+,($112,a1)
	move	(a0)+,($126,a1)
	move	(a0)+,($1ca,a1)
	move	(a0)+,($26e,a1)
	move	(a0)+,($312,a1)
	move	(a0)+,($3b6,a1)
	move	(a0)+,($6a,a1)
	move	(a0)+,($fc,a1)
	move	(a0)+,($1a0,a1)
	move	(a0)+,($1b4,a1)
	move	(a0)+,($258,a1)
	move	(a0)+,($2fc,a1)
	move	(a0)+,($3a0,a1)
	move	(a0)+,($54,a1)
	move	(a0)+,($f8,a1)
	move	(a0)+,($19c,a1)
	move	(a0)+,($22e,a1)
	move	(a0)+,($242,a1)
	move	(a0)+,($2e6,a1)
	move	(a0)+,($38a,a1)
	move	(a0)+,($3e,a1)
	move	(a0)+,($e2,a1)
	move	(a0)+,($186,a1)
	move	(a0)+,($22a,a1)
	move	(a0)+,($2ce,a1)
	move	(a0)+,($2d0,a1)
	move	(a0)+,($374,a1)
	move	(a0)+,($28,a1)
	move	(a0)+,($cc,a1)
	move	(a0)+,($170,a1)
	move	(a0)+,($214,a1)
	move	(a0)+,($2b8,a1)
	move	(a0)+,($35c,a1)
	move	(a0)+,($370,a1)
	move	(a0)+,($12,a1)
	move	(a0)+,($b6,a1)
	move	(a0)+,($15a,a1)
	move	(a0)+,($1fe,a1)
	move	(a0)+,($2a2,a1)
	move	(a0)+,($346,a1)
	move	(a0)+,($3ea,a1)
	move	(a0)+,(14,a1)
	move	(a0)+,($b2,a1)
	move	(a0)+,($144,a1)
	move	(a0)+,($1e8,a1)
	move	(a0)+,($28c,a1)
	move	(a0)+,($330,a1)
	move	(a0)+,($3d4,a1)
	move	(a0)+,($88,a1)
	move	(a0)+,($9c,a1)
	move	(a0)+,($140,a1)
	move	(a0)+,($1e4,a1)
	move	(a0)+,($276,a1)
	move	(a0)+,($31a,a1)
	move	(a0)+,($3be,a1)
	move	(a0)+,($72,a1)
	move	(a0)+,($116,a1)
	move	(a0)+,($12a,a1)
	move	(a0)+,($1ce,a1)
	move	(a0)+,($272,a1)
	move	(a0)+,($316,a1)
	move	(a0)+,($3a8,a1)
	move	(a0)+,($5c,a1)
	move	(a0)+,($100,a1)
	move	(a0)+,($1a4,a1)
	move	(a0)+,($1b8,a1)
	move	(a0)+,($25c,a1)
	move	(a0)+,($300,a1)
	move	(a0)+,($3a4,a1)
	move	(a0)+,($58,a1)
	move	(a0)+,($ea,a1)
	move	(a0)+,($18e,a1)
	move	(a0)+,($232,a1)
	move	(a0)+,($246,a1)
	move	(a0)+,($2ea,a1)
	move	(a0)+,($38e,a1)
	move	(a0)+,($42,a1)
	move	(a0)+,($e6,a1)
	move	(a0)+,($18a,a1)
	move	(a0)+,($21c,a1)
	move	(a0)+,($2c0,a1)
	move	(a0)+,($2d4,a1)
	move	(a0)+,($378,a1)
	move	(a0)+,($2c,a1)
	move	(a0)+,($d0,a1)
	move	(a0)+,($174,a1)
	move	(a0)+,($218,a1)
	move	(a0)+,($2bc,a1)
	move	(a0)+,($34e,a1)
	move	(a0)+,($362,a1)
	move	(a0)+,($16,a1)
	move	(a0)+,($ba,a1)
	move	(a0)+,($15e,a1)
	move	(a0)+,($202,a1)
	move	(a0)+,($2a6,a1)
	move	(a0)+,($34a,a1)
	move	(a0)+,($3ee,a1)
	rts

unscramble_data
	move	(a1),(a0)+
	move	($2c8,a1),(a0)+
	move	($fe,a1),(a0)+
	move	($336,a1),(a0)+
	move	($16c,a1),(a0)+
	move	($3a4,a1),(a0)+
	move	($1da,a1),(a0)+
	move	($22,a1),(a0)+
	move	($248,a1),(a0)+
	move	($10e,a1),(a0)+
	move	($346,a1),(a0)+
	move	($17c,a1),(a0)+
	move	($3b4,a1),(a0)+
	move	($1ea,a1),(a0)+
	move	($32,a1),(a0)+
	move	($258,a1),(a0)+
	move	($a0,a1),(a0)+
	move	($356,a1),(a0)+
	move	($18c,a1),(a0)+
	move	($3c4,a1),(a0)+
	move	($1fa,a1),(a0)+
	move	($42,a1),(a0)+
	move	($268,a1),(a0)+
	move	($b0,a1),(a0)+
	move	($2d6,a1),(a0)+
	move	($1ae,a1),(a0)+
	move	($3d4,a1),(a0)+
	move	($20a,a1),(a0)+
	move	($52,a1),(a0)+
	move	($278,a1),(a0)+
	move	($c0,a1),(a0)+
	move	($2e6,a1),(a0)+
	move	($12e,a1),(a0)+
	move	($3e4,a1),(a0)+
	move	($22c,a1),(a0)+
	move	($62,a1),(a0)+
	move	($288,a1),(a0)+
	move	($d0,a1),(a0)+
	move	($2f6,a1),(a0)+
	move	($13e,a1),(a0)+
	move	($364,a1),(a0)+
	move	($23c,a1),(a0)+
	move	($72,a1),(a0)+
	move	($2aa,a1),(a0)+
	move	($e0,a1),(a0)+
	move	($306,a1),(a0)+
	move	($14e,a1),(a0)+
	move	($374,a1),(a0)+
	move	($1bc,a1),(a0)+
	move	($82,a1),(a0)+
	move	($2ba,a1),(a0)+
	move	($f0,a1),(a0)+
	move	($328,a1),(a0)+
	move	($15e,a1),(a0)+
	move	($384,a1),(a0)+
	move	($1cc,a1),(a0)+
	move	(2,a1),(a0)+
	move	($2ca,a1),(a0)+
	move	($100,a1),(a0)+
	move	($338,a1),(a0)+
	move	($16e,a1),(a0)+
	move	($3a6,a1),(a0)+
	move	($1dc,a1),(a0)+
	move	($12,a1),(a0)+
	move	($24a,a1),(a0)+
	move	($110,a1),(a0)+
	move	($348,a1),(a0)+
	move	($17e,a1),(a0)+
	move	($3b6,a1),(a0)+
	move	($1ec,a1),(a0)+
	move	($34,a1),(a0)+
	move	($25a,a1),(a0)+
	move	($90,a1),(a0)+
	move	($358,a1),(a0)+
	move	($18e,a1),(a0)+
	move	($3c6,a1),(a0)+
	move	($1fc,a1),(a0)+
	move	($44,a1),(a0)+
	move	($26a,a1),(a0)+
	move	($b2,a1),(a0)+
	move	($2d8,a1),(a0)+
	move	($19e,a1),(a0)+
	move	($3d6,a1),(a0)+
	move	($20c,a1),(a0)+
	move	($54,a1),(a0)+
	move	($27a,a1),(a0)+
	move	($c2,a1),(a0)+
	move	($2e8,a1),(a0)+
	move	($130,a1),(a0)+
	move	($3e6,a1),(a0)+
	move	($21c,a1),(a0)+
	move	($64,a1),(a0)+
	move	($28a,a1),(a0)+
	move	($d2,a1),(a0)+
	move	($2f8,a1),(a0)+
	move	($140,a1),(a0)+
	move	($366,a1),(a0)+
	move	($23e,a1),(a0)+
	move	($74,a1),(a0)+
	move	($29a,a1),(a0)+
	move	($e2,a1),(a0)+
	move	($308,a1),(a0)+
	move	($150,a1),(a0)+
	move	($376,a1),(a0)+
	move	($1be,a1),(a0)+
	move	($84,a1),(a0)+
	move	($2bc,a1),(a0)+
	move	($f2,a1),(a0)+
	move	($318,a1),(a0)+
	move	($160,a1),(a0)+
	move	($386,a1),(a0)+
	move	($1ce,a1),(a0)+
	move	(4,a1),(a0)+
	move	($2cc,a1),(a0)+
	move	($102,a1),(a0)+
	move	($33a,a1),(a0)+
	move	($170,a1),(a0)+
	move	($396,a1),(a0)+
	move	($1de,a1),(a0)+
	move	($14,a1),(a0)+
	move	($24c,a1),(a0)+
	move	($112,a1),(a0)+
	move	($34a,a1),(a0)+
	move	($180,a1),(a0)+
	move	($3b8,a1),(a0)+
	move	($1ee,a1),(a0)+
	move	($24,a1),(a0)+
	move	($25c,a1),(a0)+
	move	($92,a1),(a0)+
	move	($35a,a1),(a0)+
	move	($190,a1),(a0)+
	move	($3c8,a1),(a0)+
	move	($1fe,a1),(a0)+
	move	($46,a1),(a0)+
	move	($26c,a1),(a0)+
	move	($a2,a1),(a0)+
	move	($2da,a1),(a0)+
	move	($1a0,a1),(a0)+
	move	($3d8,a1),(a0)+
	move	($20e,a1),(a0)+
	move	($56,a1),(a0)+
	move	($27c,a1),(a0)+
	move	($c4,a1),(a0)+
	move	($2ea,a1),(a0)+
	move	($120,a1),(a0)+
	move	($3e8,a1),(a0)+
	move	($21e,a1),(a0)+
	move	($66,a1),(a0)+
	move	($28c,a1),(a0)+
	move	($d4,a1),(a0)+
	move	($2fa,a1),(a0)+
	move	($142,a1),(a0)+
	move	($368,a1),(a0)+
	move	($22e,a1),(a0)+
	move	($76,a1),(a0)+
	move	($29c,a1),(a0)+
	move	($e4,a1),(a0)+
	move	($30a,a1),(a0)+
	move	($152,a1),(a0)+
	move	($378,a1),(a0)+
	move	($1c0,a1),(a0)+
	move	($86,a1),(a0)+
	move	($2ac,a1),(a0)+
	move	($f4,a1),(a0)+
	move	($31a,a1),(a0)+
	move	($162,a1),(a0)+
	move	($388,a1),(a0)+
	move	($1d0,a1),(a0)+
	move	(6,a1),(a0)+
	move	($2ce,a1),(a0)+
	move	($104,a1),(a0)+
	move	($32a,a1),(a0)+
	move	($172,a1),(a0)+
	move	($398,a1),(a0)+
	move	($1e0,a1),(a0)+
	move	($16,a1),(a0)+
	move	($24e,a1),(a0)+
	move	($114,a1),(a0)+
	move	($34c,a1),(a0)+
	move	($182,a1),(a0)+
	move	($3a8,a1),(a0)+
	move	($1f0,a1),(a0)+
	move	($26,a1),(a0)+
	move	($25e,a1),(a0)+
	move	($94,a1),(a0)+
	move	($35c,a1),(a0)+
	move	($192,a1),(a0)+
	move	($3ca,a1),(a0)+
	move	($200,a1),(a0)+
	move	($36,a1),(a0)+
	move	($26e,a1),(a0)+
	move	($a4,a1),(a0)+
	move	($2dc,a1),(a0)+
	move	($1a2,a1),(a0)+
	move	($3da,a1),(a0)+
	move	($210,a1),(a0)+
	move	($58,a1),(a0)+
	move	($27e,a1),(a0)+
	move	($b4,a1),(a0)+
	move	($2ec,a1),(a0)+
	move	($122,a1),(a0)+
	move	($3ea,a1),(a0)+
	move	($220,a1),(a0)+
	move	($68,a1),(a0)+
	move	($28e,a1),(a0)+
	move	($d6,a1),(a0)+
	move	($2fc,a1),(a0)+
	move	($132,a1),(a0)+
	move	($36a,a1),(a0)+
	move	($230,a1),(a0)+
	move	($78,a1),(a0)+
	move	($29e,a1),(a0)+
	move	($e6,a1),(a0)+
	move	($30c,a1),(a0)+
	move	($154,a1),(a0)+
	move	($37a,a1),(a0)+
	move	($1b0,a1),(a0)+
	move	($88,a1),(a0)+
	move	($2ae,a1),(a0)+
	move	($f6,a1),(a0)+
	move	($31c,a1),(a0)+
	move	($164,a1),(a0)+
	move	($38a,a1),(a0)+
	move	($1d2,a1),(a0)+
	move	(8,a1),(a0)+
	move	($2be,a1),(a0)+
	move	($106,a1),(a0)+
	move	($32c,a1),(a0)+
	move	($174,a1),(a0)+
	move	($39a,a1),(a0)+
	move	($1e2,a1),(a0)+
	move	($18,a1),(a0)+
	move	($250,a1),(a0)+
	move	($116,a1),(a0)+
	move	($33c,a1),(a0)+
	move	($184,a1),(a0)+
	move	($3aa,a1),(a0)+
	move	($1f2,a1),(a0)+
	move	($28,a1),(a0)+
	move	($260,a1),(a0)+
	move	($96,a1),(a0)+
	move	($35e,a1),(a0)+
	move	($194,a1),(a0)+
	move	($3ba,a1),(a0)+
	move	($202,a1),(a0)+
	move	($38,a1),(a0)+
	move	($270,a1),(a0)+
	move	($a6,a1),(a0)+
	move	($2de,a1),(a0)+
	move	($1a4,a1),(a0)+
	move	($3dc,a1),(a0)+
	move	($212,a1),(a0)+
	move	($48,a1),(a0)+
	move	($280,a1),(a0)+
	move	($b6,a1),(a0)+
	move	($2ee,a1),(a0)+
	move	($124,a1),(a0)+
	move	($3ec,a1),(a0)+
	move	($222,a1),(a0)+
	move	($6a,a1),(a0)+
	move	($290,a1),(a0)+
	move	($c6,a1),(a0)+
	move	($2fe,a1),(a0)+
	move	($134,a1),(a0)+
	move	($36c,a1),(a0)+
	move	($232,a1),(a0)+
	move	($7a,a1),(a0)+
	move	($2a0,a1),(a0)+
	move	($e8,a1),(a0)+
	move	($30e,a1),(a0)+
	move	($144,a1),(a0)+
	move	($37c,a1),(a0)+
	move	($1b2,a1),(a0)+
	move	($8a,a1),(a0)+
	move	($2b0,a1),(a0)+
	move	($f8,a1),(a0)+
	move	($31e,a1),(a0)+
	move	($166,a1),(a0)+
	move	($38c,a1),(a0)+
	move	($1c2,a1),(a0)+
	move	(10,a1),(a0)+
	move	($2c0,a1),(a0)+
	move	($108,a1),(a0)+
	move	($32e,a1),(a0)+
	move	($176,a1),(a0)+
	move	($39c,a1),(a0)+
	move	($1e4,a1),(a0)+
	move	($1a,a1),(a0)+
	move	($240,a1),(a0)+
	move	($118,a1),(a0)+
	move	($33e,a1),(a0)+
	move	($186,a1),(a0)+
	move	($3ac,a1),(a0)+
	move	($1f4,a1),(a0)+
	move	($2a,a1),(a0)+
	move	($262,a1),(a0)+
	move	($98,a1),(a0)+
	move	($34e,a1),(a0)+
	move	($196,a1),(a0)+
	move	($3bc,a1),(a0)+
	move	($204,a1),(a0)+
	move	($3a,a1),(a0)+
	move	($272,a1),(a0)+
	move	($a8,a1),(a0)+
	move	($2e0,a1),(a0)+
	move	($1a6,a1),(a0)+
	move	($3cc,a1),(a0)+
	move	($214,a1),(a0)+
	move	($4a,a1),(a0)+
	move	($282,a1),(a0)+
	move	($b8,a1),(a0)+
	move	($2f0,a1),(a0)+
	move	($126,a1),(a0)+
	move	($3ee,a1),(a0)+
	move	($224,a1),(a0)+
	move	($5a,a1),(a0)+
	move	($292,a1),(a0)+
	move	($c8,a1),(a0)+
	move	($300,a1),(a0)+
	move	($136,a1),(a0)+
	move	($36e,a1),(a0)+
	move	($234,a1),(a0)+
	move	($7c,a1),(a0)+
	move	($2a2,a1),(a0)+
	move	($d8,a1),(a0)+
	move	($310,a1),(a0)+
	move	($146,a1),(a0)+
	move	($37e,a1),(a0)+
	move	($1b4,a1),(a0)+
	move	($8c,a1),(a0)+
	move	($2b2,a1),(a0)+
	move	($fa,a1),(a0)+
	move	($320,a1),(a0)+
	move	($156,a1),(a0)+
	move	($38e,a1),(a0)+
	move	($1c4,a1),(a0)+
	move	(12,a1),(a0)+
	move	($2c2,a1),(a0)+
	move	($10a,a1),(a0)+
	move	($330,a1),(a0)+
	move	($178,a1),(a0)+
	move	($39e,a1),(a0)+
	move	($1d4,a1),(a0)+
	move	($1c,a1),(a0)+
	move	($242,a1),(a0)+
	move	($11a,a1),(a0)+
	move	($340,a1),(a0)+
	move	($188,a1),(a0)+
	move	($3ae,a1),(a0)+
	move	($1f6,a1),(a0)+
	move	($2c,a1),(a0)+
	move	($252,a1),(a0)+
	move	($9a,a1),(a0)+
	move	($350,a1),(a0)+
	move	($198,a1),(a0)+
	move	($3be,a1),(a0)+
	move	($206,a1),(a0)+
	move	($3c,a1),(a0)+
	move	($274,a1),(a0)+
	move	($aa,a1),(a0)+
	move	($2d0,a1),(a0)+
	move	($1a8,a1),(a0)+
	move	($3ce,a1),(a0)+
	move	($216,a1),(a0)+
	move	($4c,a1),(a0)+
	move	($284,a1),(a0)+
	move	($ba,a1),(a0)+
	move	($2f2,a1),(a0)+
	move	($128,a1),(a0)+
	move	($3de,a1),(a0)+
	move	($226,a1),(a0)+
	move	($5c,a1),(a0)+
	move	($294,a1),(a0)+
	move	($ca,a1),(a0)+
	move	($302,a1),(a0)+
	move	($138,a1),(a0)+
	move	($370,a1),(a0)+
	move	($236,a1),(a0)+
	move	($6c,a1),(a0)+
	move	($2a4,a1),(a0)+
	move	($da,a1),(a0)+
	move	($312,a1),(a0)+
	move	($148,a1),(a0)+
	move	($380,a1),(a0)+
	move	($1b6,a1),(a0)+
	move	($8e,a1),(a0)+
	move	($2b4,a1),(a0)+
	move	($ea,a1),(a0)+
	move	($322,a1),(a0)+
	move	($158,a1),(a0)+
	move	($390,a1),(a0)+
	move	($1c6,a1),(a0)+
	move	(14,a1),(a0)+
	move	($2c4,a1),(a0)+
	move	($10c,a1),(a0)+
	move	($332,a1),(a0)+
	move	($168,a1),(a0)+
	move	($3a0,a1),(a0)+
	move	($1d6,a1),(a0)+
	move	($1e,a1),(a0)+
	move	($244,a1),(a0)+
	move	($11c,a1),(a0)+
	move	($342,a1),(a0)+
	move	($18a,a1),(a0)+
	move	($3b0,a1),(a0)+
	move	($1e6,a1),(a0)+
	move	($2e,a1),(a0)+
	move	($254,a1),(a0)+
	move	($9c,a1),(a0)+
	move	($352,a1),(a0)+
	move	($19a,a1),(a0)+
	move	($3c0,a1),(a0)+
	move	($208,a1),(a0)+
	move	($3e,a1),(a0)+
	move	($264,a1),(a0)+
	move	($ac,a1),(a0)+
	move	($2d2,a1),(a0)+
	move	($1aa,a1),(a0)+
	move	($3d0,a1),(a0)+
	move	($218,a1),(a0)+
	move	($4e,a1),(a0)+
	move	($286,a1),(a0)+
	move	($bc,a1),(a0)+
	move	($2e2,a1),(a0)+
	move	($12a,a1),(a0)+
	move	($3e0,a1),(a0)+
	move	($228,a1),(a0)+
	move	($5e,a1),(a0)+
	move	($296,a1),(a0)+
	move	($cc,a1),(a0)+
	move	($304,a1),(a0)+
	move	($13a,a1),(a0)+
	move	($360,a1),(a0)+
	move	($238,a1),(a0)+
	move	($6e,a1),(a0)+
	move	($2a6,a1),(a0)+
	move	($dc,a1),(a0)+
	move	($314,a1),(a0)+
	move	($14a,a1),(a0)+
	move	($382,a1),(a0)+
	move	($1b8,a1),(a0)+
	move	($7e,a1),(a0)+
	move	($2b6,a1),(a0)+
	move	($ec,a1),(a0)+
	move	($324,a1),(a0)+
	move	($15a,a1),(a0)+
	move	($392,a1),(a0)+
	move	($1c8,a1),(a0)+
	move	($10,a1),(a0)+
	move	($2c6,a1),(a0)+
	move	($fc,a1),(a0)+
	move	($334,a1),(a0)+
	move	($16a,a1),(a0)+
	move	($3a2,a1),(a0)+
	move	($1d8,a1),(a0)+
	move	($20,a1),(a0)+
	move	($246,a1),(a0)+
	move	($11e,a1),(a0)+
	move	($344,a1),(a0)+
	move	($17a,a1),(a0)+
	move	($3b2,a1),(a0)+
	move	($1e8,a1),(a0)+
	move	($30,a1),(a0)+
	move	($256,a1),(a0)+
	move	($9e,a1),(a0)+
	move	($354,a1),(a0)+
	move	($19c,a1),(a0)+
	move	($3c2,a1),(a0)+
	move	($1f8,a1),(a0)+
	move	($40,a1),(a0)+
	move	($266,a1),(a0)+
	move	($ae,a1),(a0)+
	move	($2d4,a1),(a0)+
	move	($1ac,a1),(a0)+
	move	($3d2,a1),(a0)+
	move	($21a,a1),(a0)+
	move	($50,a1),(a0)+
	move	($276,a1),(a0)+
	move	($be,a1),(a0)+
	move	($2e4,a1),(a0)+
	move	($12c,a1),(a0)+
	move	($3e2,a1),(a0)+
	move	($22a,a1),(a0)+
	move	($60,a1),(a0)+
	move	($298,a1),(a0)+
	move	($ce,a1),(a0)+
	move	($2f4,a1),(a0)+
	move	($13c,a1),(a0)+
	move	($362,a1),(a0)+
	move	($23a,a1),(a0)+
	move	($70,a1),(a0)+
	move	($2a8,a1),(a0)+
	move	($de,a1),(a0)+
	move	($316,a1),(a0)+
	move	($14c,a1),(a0)+
	move	($372,a1),(a0)+
	move	($1ba,a1),(a0)+
	move	($80,a1),(a0)+
	move	($2b8,a1),(a0)+
	move	($ee,a1),(a0)+
	move	($326,a1),(a0)+
	move	($15c,a1),(a0)+
	move	($394,a1),(a0)+
	move	($1ca,a1),(a0)+
	rts




;;---------------------------
;;  in: 504  out: 504
pass1_6
	lea	(scrambled_1008w),a0	;in
	lea	(buffer_504w),a1	;out
	lea	(126).w,a2
	moveq	#7-1,d6
.loop_o	moveq	#9-1,d7
.loop_i	move	(a0)+,d0	;1   0	++
	move	(72-2,a0),d1	;2 +72
	move	d0,d2
	add	d1,d2
	sub	d1,d0
	move	d0,(54,a1)
	move	(36-2,a0),d0	;3  36
	move	(108-2,a0),d1	;4 +72
	move	d0,d3
	add	d1,d3
	sub	d1,d0
	move	d0,(108,a1)
	move	d2,d4
	add	d3,d4
	sub	d3,d2
	move	d2,(36,a1)
	move	(18-2,a0),d2	;5  18
	move	(90-2,a0),d1	;6 +72
	move	d2,d3
	add	d1,d3
	move	(54-2,a0),d0	;7  54
	sub	d1,d2
	move	(126-2,a0),d1	;8 +72
	move	d0,d5
	add	d1,d5
	sub	d1,d0
	move	d3,d1
	add	d5,d1
	sub	d5,d3
	move	d3,(90,a1)
	move	d4,d3
	add	d1,d3
	move	d3,(a1)+	;++
	sub	d1,d4
	move	d4,(18-2,a1)
	move	d2,d1
	add	d0,d1
	move	d1,(126-2,a1)
	sub	d0,d2
	move	d2,(72-2,a1)
	dbf	d7,.loop_i	;7*9=63 loops
	add.l	a2,a0		;#126
	add.l	a2,a1		;#126
	dbf	d6,.loop_o
	rts


;;---------------------------
;;  in: 504  out: 616
pass2_6
	lea	(buffer_504w),a0	;in
	lea	(buffer_616w),a1	;out
	lea	(18).w,a2
	lea	(22).w,a3
	moveq	#56-1,d7
.loop	move	(16,a0),d0	;1
	move	(2,a0),d2	;2
	move	d0,d3
	add	d2,d3
	sub	d0,d2
	move	(4,a0),d0	;3
	move	(14,a0),d4	;4
	move	d0,d5
	add	d4,d5
	sub	d0,d4
	move	(8,a0),d0	;5
	move	(10,a0),d1	;6
	move	d0,d6
	add	d1,d6
	sub	d1,d0
	move	d2,d1
	add	d4,d1
	add	d0,d1
	move	d1,(12,a1)
	move	d3,d1
	add	d5,d1
	add	d6,d1
	move	d1,(4,a1)
	sub	d5,d3
	move	d3,(6,a1)
	sub	d6,d5
	move	d5,(8,a1)
	sub	d4,d2
	neg	d2
	move	d2,(16,a1)
	sub	d0,d4
	move	d4,($12,a1)
	add	d3,d5
	neg	d5
	move	d5,(10,a1)
	sub	d2,d4
	move	d4,(20,a1)
	move	(6,a0),d2	;7
	move	(12,a0),d3	;8
	move	d2,d0
	add	d3,d0
	move	d0,(2,a1)
	sub	d3,d2
	move	d2,(14,a1)
	add	(a0),d1		;9
	add	d0,d1
	move	d1,(a1)
	add.l	a2,a0		;#18
	add.l	a3,a1		;#22
	dbf	d7,.loop	;56 loops
	rts



;;---------------------------
;;  in: 616  out: 792
pass3_6
	lea	(buffer_616w),a0	;in
	lea	(buffer_792w),a1	;out
	moveq	#88-1,d7
.loop	move	($b0,a0),d1	;1
	move	($420,a0),d2	;2
	move	d2,d0
	add	d1,d0
	move	($160,a0),d3	;3
	sub	d2,d1
	move	($370,a0),d4	;4
	move	d4,d2
	add	d3,d2
	move	($2c0,a0),d5	;5
	sub	d4,d3
	move	($210,a0),d6	;6
	move	d6,d4
	add	d5,d4
	sub	d6,d5
	move	d2,d6
	sub	d0,d6
	move	d6,($2c0,a1)
	move	d0,d6
	sub	d4,d6
	move	d6,($160,a1)
	move	d4,d6
	sub	d2,d6
	move	d6,($210,a1)
	move	d2,d6
	add	d0,d6
	add	d4,d6
	move	d6,($b0,a1)
	add	(a0)+,d6	;7 ++
	move	d6,(a1)+	;++
	move	d5,d0
	add	d3,d0
	add	d1,d0
	move	d0,($370-2,a1)
	move	d5,d0
	sub	d3,d0
	move	d0,($4d0-2,a1)
	sub	d1,d3
	move	d3,($580-2,a1)
	sub	d5,d1
	move	d1,($420-2,a1)
	dbf	d7,.loop
	rts


;;---------------------------
;;  in: 792  out: 616
pass4_6
	lea	(buffer_616w),a0	;out
	lea	(buffer_792w),a2	;in
	moveq	#88-1,d7
.loop	move	(a2)+,d0	;++
	move	d0,(a0)+	;++
	add	($b0-2,a2),d0
	move	($2c0-2,a2),d1
	move	($210-2,a2),d2
	move	d1,d4
	move	($160-2,a2),d3
	sub	d2,d4
	add	d3,d2
	add	d1,d3
	add	d0,d2
	move	d2,($b0-2,a0)
	add	d0,d4
	move	d4,($210-2,a0)
	sub	d3,d0
	move	d0,($160-2,a0)
	move	($420-2,a2),d0
	move	($4d0-2,a2),d1
	move	($580-2,a2),d2
	move	d1,d3
	sub	d2,d3
	add	d0,d1
	add	d0,d2
	move	($370-2,a2),d0
	add	d0,d1
	move	d1,($420-2,a0)
	sub	d0,d3
	move	d3,($2c0-2,a0)
	sub	d2,d0
	move	d0,($370-2,a0)
	dbf	d7,.loop
	rts


;;---------------------------
;;  in: 616  out: 504
pass5_6
	lea	(buffer_616w),a0	;in
	lea	(buffer_504w),a1	;out
	moveq	#22,d5
	moveq	#18,d6
	moveq	#56-1,d7
.loop	move	(6,a0),d0
	move	(8,a0),d1
	add	d1,d0
	move	(10,a0),d2
	sub	d1,d2
	move	(a0),d1
	move	d1,(a1)
	move	(4,a0),d3
	add	d3,d1
	add	d3,d1
	add	d1,d3
	sub	(2,a0),d1
	move	d3,(6,a1)
	move	d1,d3
	add	d0,d3
	move	d3,(2,a1)
	move	d1,d3
	add	d2,d3
	move	d3,(4,a1)
	sub	d0,d1
	sub	d2,d1
	move	d1,(8,a1)
	move	($10,a0),d0
	move	($12,a0),d1
	add	d1,d0
	sub	($14,a0),d1
	move	(14,a0),d2
	move	d2,d3
	add	d0,d3
	move	d3,($10,a1)
	move	d1,d3
	sub	d2,d3
	move	d3,(14,a1)
	sub	d0,d2
	add	d1,d2
	move	d2,(10,a1)
	move	(12,a0),d0
	move	d0,(12,a1)
	add.l	d5,a0		;#22
	add.l	d6,a1		;#18
	dbf	d7,.loop	;56 loops
	rts



pass6_6


;;---------------------------
;;  in: 504  out: 504
	lea	(buffer_504w),a0	;in
	lea	(scrambled_1008w),a1	;out
	moveq	#126,d5
	moveq	#7-1,d6
.loop1o	moveq	#9-1,d7
.loop1i	move	(a0)+,(a1)+	;++ ++
	move	($12-2,a0),($48-2,a1)
	move	($24-2,a0),($24-2,a1)
	move	($5a-2,a0),($6c-2,a1)
	move	($36-2,a0),d0
	move	($48-2,a0),d1
	move	d0,d2
	add	d1,d2
	move	d2,($12-2,a1)
	sub	d1,d0
	move	d0,($36-2,a1)
	move	($7e-2,a0),d0
	move	($6c-2,a0),d1
	move	d0,d2
	add	d1,d2
	move	d2,($7e-2,a1)
	sub	d1,d0
	move	d0,($5a-2,a1)
	dbf	d7,.loop1i	;7*9=63 loops
	add.l	d5,a0		;#126
	add.l	d5,a1		;#126
	dbf	d6,.loop1o


;;---------------------------
;;  in: 216  out: 288
	lea	(scrambled_1008w+$240),a0
	lea	(scrambled_2),a1
	moveq	#72-1,d7
.loop2
	move	(a0)+,d0	;++
	neg	d0
	move	d0,($90*3,a1)
	move	($90-2,a0),d0
	neg	d0
	move	d0,($90*2,a1)
	move	($90*2-2,a0),d0
	neg	d0
	move	d0,($90,a1)
	clr	(a1)+		;++
	dbf	d7,.loop2	;72 loops


;;---------------------------
;;  in/out: 432
	lea	(scrambled_1008w+$12),a0	;in/out
	lea	(scrambled_2+$12),a1		;in/out
	moveq	#126,d5
	moveq	#4-1,d6
.loop3o	moveq	#9-1,d7

.loop3i	move	($36-$12,a0),d0
	move	($36-$12,a1),d1
	move	($5a-$12,a1),d2
	move	($5a-$12,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,($36-$12,a0)	;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,($36-$12,a1)	;1-3
	sub	d2,d0
	move	d0,($5a-$12,a0)	;0-2
	add	d3,d1
	move	d1,($5a-$12,a1)	;1+3

	move	($24-$12,a0),d0
	move	($24-$12,a1),d1
	move	($6c-$12,a1),d2
	move	($6c-$12,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,($24-$12,a0)	;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,($24-$12,a1)	;1-3
	sub	d2,d0
	move	d0,($6c-$12,a0)	;0-2
	add	d3,d1
	move	d1,($6c-$12,a1)	;1+3

	move	(a0),d0
	move	(a1),d1
	move	($7e-$12,a1),d2
	move	($7e-$12,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,(a0)+	;0+2  ++
	move	d1,d4
	sub	d3,d4
	move	d4,(a1)+	;1-3  ++
	sub	d2,d0
	move	d0,($7e-$12-2,a0)	;0-2
	add	d3,d1
	move	d1,($7e-$12-2,a1)	;1+3

	dbf	d7,.loop3i	;4*9=36 loops

	add.l	d5,a0		;#126
	add.l	d5,a1		;#126
	dbf	d6,.loop3o


;;---------------------------
;;  in/out: 512 (576)
	lea	(scrambled_1008w+2),a0	;in/out
	lea	(scrambled_2+2),a1	;in/out
	moveq	#18,d5
	moveq	#32-1,d7

.loop4	move	(a0),d0
	move	(a1),d1
	move	($10-2,a1),d2
	move	($10-2,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,(a0)		;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,(a1)		;1-3
	sub	d2,d0
	move	d0,($10-2,a0)	;0-2
	add	d3,d1
	move	d1,($10-2,a1)	;1+3

	move	(4-2,a0),d0
	move	(4-2,a1),d1
	move	(14-2,a1),d2
	move	(14-2,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,(4-2,a0)	;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,(4-2,a1)	;1-3
	sub	d2,d0
	move	d0,(14-2,a0)	;0-2
	add	d3,d1
	move	d1,(14-2,a1)	;1+3

	move	(6-2,a0),d0
	move	(6-2,a1),d1
	move	(12-2,a1),d2
	move	(12-2,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,(6-2,a0)	;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,(6-2,a1)	;1-3
	sub	d2,d0
	move	d0,(12-2,a0)	;0-2
	add	d3,d1
	move	d1,(12-2,a1)	;1+3

	move	(8-2,a0),d0
	move	(8-2,a1),d1
	move	(10-2,a1),d2
	move	(10-2,a0),d3
	move	d0,d4
	add	d2,d4
	move	d4,(8-2,a0)	;0+2
	move	d1,d4
	sub	d3,d4
	move	d4,(8-2,a1)	;1-3
	sub	d2,d0
	move	d0,(10-2,a0)	;0-2
	add	d3,d1
	move	d1,(10-2,a1)	;1+3

	add.l	d5,a0		;#18
	add.l	d5,a1		;#18
	dbf	d7,.loop4	;32 loops



;;---------------------------
;;  in: 1008  out: 1008
	lea	(scrambled_1),a0	;in1
	lea	(scrambled_3),a1	;in2
	lea	(scrambled_1008w),a2	;out1
	lea	(scrambled_2),a3	;out2
	lea	(offset_table,pc),a4
	moveq	#0,d2
	move	#216-1,d7
.loop5	move	(a0)+,d0
	sub	(a1)+,d0
	move	(a4)+,d2
	move	d0,(a2,d2.l)
	clr	(a3,d2.l)
	dbf	d7,.loop5

	lea	(scrambled_1008w),a0	;out
	lea	(scrambled_2),a1	;in/out
	move	#288-1,d2
.loop6	move	(a1),d0
	add	d0,(a0)+
	clr	(a1)+
	dbf	d2,.loop6
	rts





scrambled_sincos
	dc	$4000,$6000,$E000,$3106,$3C23,$F4E3,$376C,$376C
	dc	$D6DD,$EA1D,$C0F9,$4000,$6000,$E000,$3106,$3C23
	dc	$F4E3,$376C,$376C,$D6DD,$EA1D,$C0F9,$4000,$6000
	dc	$E000,$3106,$3C23,$F4E3,$376C,$376C,$D6DD,$EA1D
	dc	$C0F9,$4000,$6000,$E000,$3106,$3C23,$F4E3,$376C
	dc	$376C,$D6DD,$EA1D,$C0F9,$2D41,$43E1,$E960,$22AA
	dc	$2A86,$F825,$2731,$2731,$E2EA,$F086,$D36F,$4000
	dc	$6000,$E000,$3106,$3C23,$F4E3,$376C,$376C,$D6DD
	dc	$EA1D,$C0F9,$4000,$6000,$E000,$3106,$3C23,$F4E3
	dc	$376C,$376C,$D6DD,$EA1D,$C0F9,$2D41,$43E1,$E960
	dc	$22AA,$2A86,$F825,$2731,$2731,$E2EA,$F086,$D36F
	dc	$B556,$9000,$2555,$C6CE,$B9D7,$CF7,$BF57,$BF57
	dc	$2FFE,$1989,$4988,$B556,$9000,$2555,$C6CE,$B9D7
	dc	$CF7,$BF57,$BF57,$2FFE,$1989,$4988,$B556,$9000
	dc	$2555,$C6CE,$B9D7,$CF7,$BF57,$BF57,$2FFE,$1989
	dc	$4988,$B556,$9000,$2555,$C6CE,$B9D7,$CF7,$BF57
	dc	$BF57,$2FFE,$1989,$4988,$CB34,$B0CE,$1A66,$D78F
	dc	$CE64,$92B,$D247,$D247,$21EF,$120E,$33FE,$B556
	dc	$9000,$2555,$C6CE,$B9D7,$CF7,$BF57,$BF57,$2FFE
	dc	$1989,$4988,$B556,$9000,$2555,$C6CE,$B9D7,$CF7
	dc	$BF57,$BF57,$2FFE,$1989,$4988,$CB34,$B0CE,$1A66
	dc	$D78F,$CE64,$92B,$D247,$D247,$21EF,$120E,$33FE
	dc	$3291,$4BDA,$E6B8,$26BD,$2F85,$F738,$2BCB,$2BCB
	dc	$DF7F,$EEB5,$CE33,$3291,$4BDA,$E6B8,$26BD,$2F85
	dc	$F738,$2BCB,$2BCB,$DF7F,$EEB5,$CE33,$3291,$4BDA
	dc	$E6B8,$26BD,$2F85,$F738,$2BCB,$2BCB,$DF7F,$EEB5
	dc	$CE33,$3291,$4BDA,$E6B8,$26BD,$2F85,$F738,$2BCB
	dc	$2BCB,$DF7F,$EEB5,$CE33,$23C2,$35A3,$EE1F,$1B64
	dc	$219A,$F9CB,$1EF7,$1EF7,$E904,$F3C6,$DCC9,$3291
	dc	$4BDA,$E6B8,$26BD,$2F85,$F738,$2BCB,$2BCB,$DF7F
	dc	$EEB5,$CE33,$3291,$4BDA,$E6B8,$26BD,$2F85,$F738
	dc	$2BCB,$2BCB,$DF7F,$EEB5,$CE33,$23C2,$35A3,$EE1F
	dc	$1B64,$219A,$F9CB,$1EF7,$1EF7,$E904,$F3C6,$DCC9
	dc	$393,$55C,$FE37,$2BD,$35B,$FF62,$318,$318
	dc	$FDB4,$FEC8,$FC7B,$393,$55C,$FE37,$2BD,$35B
	dc	$FF62,$318,$318,$FDB4,$FEC8,$FC7B,$393,$55C
	dc	$FE37,$2BD,$35B,$FF62,$318,$318,$FDB4,$FEC8
	dc	$FC7B,$393,$55C,$FE37,$2BD,$35B,$FF62,$318
	dc	$318,$FDB4,$FEC8,$FC7B,$287,$3CA,$FEBD,$1EF
	dc	$260,$FF90,$230,$230,$FE61,$FF23,$FD83,$393
	dc	$55C,$FE37,$2BD,$35B,$FF62,$318,$318,$FDB4
	dc	$FEC8,$FC7B,$393,$55C,$FE37,$2BD,$35B,$FF62
	dc	$318,$318,$FDB4,$FEC8,$FC7B,$287,$3CA,$FEBD
	dc	$1EF,$260,$FF90,$230,$230,$FE61,$FF23,$FD83
	dc	$2EFE,$467E,$E881,$2400,$2C29,$F7D7,$28B2,$28B2
	dc	$E1CB,$EFEE,$D1B8,$2EFE,$467E,$E881,$2400,$2C29
	dc	$F7D7,$28B2,$28B2,$E1CB,$EFEE,$D1B8,$2EFE,$467E
	dc	$E881,$2400,$2C29,$F7D7,$28B2,$28B2,$E1CB,$EFEE
	dc	$D1B8,$2EFE,$467E,$E881,$2400,$2C29,$F7D7,$28B2
	dc	$28B2,$E1CB,$EFEE,$D1B8,$213B,$31D8,$EF63,$1974
	dc	$1F3A,$FA3B,$1CC7,$1CC7,$EAA4,$F4A3,$DF47,$2EFE
	dc	$467E,$E881,$2400,$2C29,$F7D7,$28B2,$28B2,$E1CB
	dc	$EFEE,$D1B8,$2EFE,$467E,$E881,$2400,$2C29,$F7D7
	dc	$28B2,$28B2,$E1CB,$EFEE,$D1B8,$213B,$31D8,$EF63
	dc	$1974,$1F3A,$FA3B,$1CC7,$1CC7,$EAA4,$F4A3,$DF47
	dc	$1C38,$2A54,$F1E4,$159E,$1A84,$FB1A,$1870,$1870
	dc	$EDDD,$F65A,$E436,$1C38,$2A54,$F1E4,$159E,$1A84
	dc	$FB1A,$1870,$1870,$EDDD,$F65A,$E436,$1C38,$2A54
	dc	$F1E4,$159E,$1A84,$FB1A,$1870,$1870,$EDDD,$F65A
	dc	$E436,$1C38,$2A54,$F1E4,$159E,$1A84,$FB1A,$1870
	dc	$1870,$EDDD,$F65A,$E436,$13F4,$1DEE,$F606,$F49
	dc	$12C0,$FC89,$1148,$1148,$F32D,$F92D,$EC5A,$1C38
	dc	$2A54,$F1E4,$159E,$1A84,$FB1A,$1870,$1870,$EDDD
	dc	$F65A,$E436,$1C38,$2A54,$F1E4,$159E,$1A84,$FB1A
	dc	$1870,$1870,$EDDD,$F65A,$E436,$13F4,$1DEE,$F606
	dc	$F49,$12C0,$FC89,$1148,$1148,$F32D,$F92D,$EC5A
	dc	$15D0,$20B9,$F518,$10B6,$1480,$FC37,$12E4,$12E4
	dc	$F1FB,$F88A,$EA84,$15D0,$20B9,$F518,$10B6,$1480
	dc	$FC37,$12E4,$12E4,$F1FB,$F88A,$EA84,$15D0,$20B9
	dc	$F518,$10B6,$1480,$FC37,$12E4,$12E4,$F1FB,$F88A
	dc	$EA84,$15D0,$20B9,$F518,$10B6,$1480,$FC37,$12E4
	dc	$12E4,$F1FB,$F88A,$EA84,$F6D,$1723,$F84A,$BD1
	dc	$E7E,$FD53,$D5C,$D5C,$F616,$FABA,$F0CF,$15D0
	dc	$20B9,$F518,$10B6,$1480,$FC37,$12E4,$12E4,$F1FB
	dc	$F88A,$EA84,$15D0,$20B9,$F518,$10B6,$1480,$FC37
	dc	$12E4,$12E4,$F1FB,$F88A,$EA84,$F6D,$1723,$F84A
	dc	$BD1,$E7E,$FD53,$D5C,$D5C,$F616,$FABA,$F0CF
	dc	$DDD4,$CCBE,$1116,$E5D3,$DFE4,$5EF,$E268,$E268
	dc	$15F7,$BB0,$21A7,$DDD4,$CCBE,$1116,$E5D3,$DFE4
	dc	$5EF,$E268,$E268,$15F7,$BB0,$21A7,$DDD4,$CCBE
	dc	$1116,$E5D3,$DFE4,$5EF,$E268,$E268,$15F7,$BB0
	dc	$21A7,$DDD4,$CCBE,$1116,$E5D3,$DFE4,$5EF,$E268
	dc	$E268,$15F7,$BB0,$21A7,$E7D6,$DBC1,$C15,$ED7E
	dc	$E94B,$432,$EB13,$EB13,$F88,$843,$17CC,$DDD4
	dc	$CCBE,$1116,$E5D3,$DFE4,$5EF,$E268,$E268,$15F7
	dc	$BB0,$21A7,$DDD4,$CCBE,$1116,$E5D3,$DFE4,$5EF
	dc	$E268,$E268,$15F7,$BB0,$21A7,$E7D6,$DBC1,$C15
	dc	$ED7E,$E94B,$432,$EB13,$EB13,$F88,$843,$17CC
	dc	$37FD,$53FC,$E402,$2AE4,$349D,$F648,$307D,$307D
	dc	$DC03,$ECDA,$C8DD,$37FD,$53FC,$E402,$2AE4,$349D
	dc	$F648,$307D,$307D,$DC03,$ECDA,$C8DD,$37FD,$53FC
	dc	$E402,$2AE4,$349D,$F648,$307D,$307D,$DC03,$ECDA
	dc	$C8DD,$37FD,$53FC,$E402,$2AE4,$349D,$F648,$307D
	dc	$307D,$DC03,$ECDA,$C8DD,$2797,$3B62,$EC35,$1E54
	dc	$2534,$F921,$2249,$2249,$E68E,$F276,$D903,$37FD
	dc	$53FC,$E402,$2AE4,$349D,$F648,$307D,$307D,$DC03
	dc	$ECDA,$C8DD,$37FD,$53FC,$E402,$2AE4,$349D,$F648
	dc	$307D,$307D,$DC03,$ECDA,$C8DD,$2797,$3B62,$EC35
	dc	$1E54,$2534,$F921,$2249,$2249,$E68E,$F276,$D903

offset_table
	dc	$360,$370,$36E,$36C,$36A,$368,$366,$364
	dc	$362,$3DE,$3EE,$3EC,$3EA,$3E8,$3E6,$3E4
	dc	$3E2,$3E0,$3CC,$3DC,$3DA,$3D8,$3D6,$3D4
	dc	$3D2,$3D0,$3CE,$3BA,$3CA,$3C8,$3C6,$3C4
	dc	$3C2,$3C0,$3BE,$3BC,$3A8,$3B8,$3B6,$3B4
	dc	$3B2,$3B0,$3AE,$3AC,$3AA,$396,$3A6,$3A4
	dc	$3A2,$3A0,$39E,$39C,$39A,$398,$384,$394
	dc	$392,$390,$38E,$38C,$38A,$388,$386,$372
	dc	$382,$380,$37E,$37C,$37A,$378,$376,$374
	dc	$2D0,$2E0,$2DE,$2DC,$2DA,$2D8,$2D6,$2D4
	dc	$2D2,$34E,$35E,$35C,$35A,$358,$356,$354
	dc	$352,$350,$33C,$34C,$34A,$348,$346,$344
	dc	$342,$340,$33E,$32A,$33A,$338,$336,$334
	dc	$332,$330,$32E,$32C,$318,$328,$326,$324
	dc	$322,$320,$31E,$31C,$31A,$306,$316,$314
	dc	$312,$310,$30E,$30C,$30A,$308,$2F4,$304
	dc	$302,$300,$2FE,$2FC,$2FA,$2F8,$2F6,$2E2
	dc	$2F2,$2F0,$2EE,$2EC,$2EA,$2E8,$2E6,$2E4
	dc	$240,$250,$24E,$24C,$24A,$248,$246,$244
	dc	$242,$2BE,$2CE,$2CC,$2CA,$2C8,$2C6,$2C4
	dc	$2C2,$2C0,$2AC,$2BC,$2BA,$2B8,$2B6,$2B4
	dc	$2B2,$2B0,$2AE,$29A,$2AA,$2A8,$2A6,$2A4
	dc	$2A2,$2A0,$29E,$29C,$288,$298,$296,$294
	dc	$292,$290,$28E,$28C,$28A,$276,$286,$284
	dc	$282,$280,$27E,$27C,$27A,$278,$264,$274
	dc	$272,$270,$26E,$26C,$26A,$268,$266,$252
	dc	$262,$260,$25E,$25C,$25A,$258,$256,$254


	section	fftdata,bss
scrambled_1008w	ds	72
scrambled_1	ds	432
scrambled_2	ds	72
scrambled_3	ds	432
buffer_504w	ds	504
buffer_616w	ds	616
buffer_792w	ds	792
fft_log_table	ds.b	2^16
