;*****************************************************************************
;
;    DelfMPEG - MPEG audio player for Delfina DSP
;    Copyright (C) 1999  Michael Henke
;
;    This program is free software; you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation; either version 2 of the License, or
;    (at your option) any later version.
;
;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.
;
;    You should have received a copy of the GNU General Public License
;    along with this program; if not, write to the Free Software
;    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;
;*****************************************************************************



;Delfina object DSP56K_MP2
;memory map (for Amiga access)
;
; prog
;   0 .. init (x1=mem_mp2, x0=mem_mp2p, y1=/, y0=/)
;  +2 .. decode MP2 frame (x1=mono, x0=outbuf, y1=translate, y0=jsbound)
;
; xdata
; +2048 .. inbuf (Amiga write)
;
; ydata
;   /




DELFINA_SAMPLES	equ	1152


	include 'delfequ.inc'

	org	p:

;->prog
	jmp	init

;->prog+2

;*****************************************************************************
;
; **** MPEG layer II frame decoder ****
;
; parameters
;  x1 - mono          (mono: not_zero, stereo: zero)
;  x0 - output buffer (mono: x: only,  stereo: x: left, y: right)
;  y1 - translate     (for sblimit, bitalloc, quantization)
;  y0 - jsbound
;
;  xdata+2048 - input buffer (frame data without header, max. 1800 bytes)
;
;
; based on the mp2 player for Atari Falcon by Fredrik Noring
;
; Delfina DSP coding by Smack/Infect!
;
;
; (Thu 07-Oct-1999) - first beta version, mono decoding doesn't work
; (Fri 15-Oct-1999) - code cleanup+optimizing, little speedup
;                     (getbits loop, rsinx_rcosx table to internal mem)
;                     fixed mono decoding (decode_subbands bug: #>2+3)
;
;*****************************************************************************


	move	x0,x:out_p		;store output pointer

	tfr	x1,a	#>1,x0		;a=mono
	tst	a	#>2,a
	tne	x0,a
	move	a,x:channels		;store channels

	move	y1,n0			;translate
	move	#table_translate_sblimit,r0

	move	y1,x:translate

	move	y0,x:jsbound		;store jsbound

	move	y:(r0+n0),y1
	move	#table_translate_alloc,r0
	move	y1,x:sblimit
	move	y:(r0+n0),y1
	move	#table_translate_quantizations,r0
	move	y1,x:decoder_nbals
	move	y:(r0+n0),y1
	move	y1,x:decoder_quantizations

;	** compute audio buffer modifiers
	move	#>$7ff,x0
	move	#>128,x1
	move	#>2,y0
	move	x:channels,b
	move	#>$3ff,a
	cmp	y0,b	#>64,b
	teq	x0,a
	teq	x1,b
	move	a,x:decoder_audio_mask
	move	b,x:decoder_audio_delta

;	** calculate deltas for the cosine transform
	move	x:channels,a
	lsl	a	a,y0
	add	y0,a
	move	a,x:decoder_imfct_delta


	clr	a	#decoder_fraction,r0
	do	#2*32*3,clear_fraction
	move	a,x:(r0)+
clear_fraction

	move	x:getbits_temp_p,r0
	move	#inbuf,x0
	move	x0,x:getbits_stream_p
	move	a,x:(r0)+
	move	a,x:(r0)	;initialize 'current bitstream word'






;******************************************************************
;decode_scales
;	** getbits_init
	move	x:getbits_stream_p,r7
	move	x:getbits_temp_p,r6
	move	x:decoder_getbits_loop_p,r5

;	**
;	** fetch bit allocation table
;	**
	clr	b	x:channels,y0	; count scfsis
	move	x:decoder_nbals,r0
	move	#decoder_bitalloc,r1

;	** loop until jsbound
	move	y:(r0)+,x0		; nbal
	move	x:jsbound,a
	do	a,sb_loop0
	do	y0,ch_loop0

	clr	a	b1,x:(r6)+	;save b1
	move	x:(r6),b1		;current bitstream word
	jsr	(r5)			; read nbal bits
	move	b1,x:(r6)
	move	x:-(r6),b1		;restore b1

	move	#>1,x1
	add	x1,b	b,x1
	tst	a	a,x:(r1)+
	teq	x1,b
ch_loop0
	move	y:(r0)+,x0		; nbal
sb_loop0
;	** loop until sblimit (for joint-stereo only)
	move	x:sblimit,a
	move	x:jsbound,y0
	sub	y0,a
	jeq	sb_loop1		; not joint-stereo
	move	#>2,x1
	do	a,sb_loop1

	clr	a	b1,x:(r6)+	;save b1
	move	x:(r6),b1		;current bitstream word
	jsr	(r5)			; read nbal bits
	move	b1,x:(r6)
	move	x:-(r6),b1		;restore b1

	add	x1,b	a,x:(r1)+	b,y0
	tst	a	a,x:(r1)+
	teq	y0,b
	move	y:(r0)+,x0		; nbal
sb_loop1

	tst	b	x:(r6)+,x0	b,y0	;update r6 (getbits nosave b1)

	jeq	exit			;invalid frame!!!


;	**
;	** fetch scalefactor selection information
;	**
	move	#decoder_scfsi,r0
	move	#>2,x0			; 2 bit scfsi
	clr	a	x:(r6),b1	;current bitstream word
	do	y0,sf_loop0
	jsr	(r5)
	clr	a	a,x:(r0)+
sf_loop0
	move	b1,x:(r6)

;	**
;	** fetch scale factors
;	**
	move	#decoder_scfsi,r0
	move	#decoder_scalefactor,r1
	move	#>6,x0			; 6 bit scalefactors
	do	y0,sf_loop1
	clr	a	x:(r0)+,y0

	cmp	y0,a	#>1,a
	jne	sf_c1
	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)			; all three
	clr	a	a,x:(r1)+
	jsr	(r5)
	clr	a	a,x:(r1)+
	jsr	(r5)
	move	a,x:(r1)+
	jmp	sf_resume

sf_c1	cmp	y0,a	#>2,a
	jne	sf_c2
	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)			; 1 + 3
	move	a,x:(r1)+
	clr	a	a,x:(r1)+
	jsr	(r5)
	move	a,x:(r1)+
	jmp	sf_resume

sf_c2	cmp	y0,a
	jne	sf_c3
	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)			; just one
	move	a,x:(r1)+
	move	a,x:(r1)+
	move	a,x:(r1)+
	jmp	sf_resume

sf_c3
	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)			; 1 + 2
	clr	a	a,x:(r1)+
	jsr	(r5)
	move	a,x:(r1)+
	move	a,x:(r1)+

sf_resume
	move	b1,x:(r6)
sf_loop1
;	** getbits_exit
	move	r7,x:getbits_stream_p






	move	#decoder_scalefactor+0,x0
	move	x0,x:decoder_sf_granule
	move	#decode_return00,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return00
	move	#decode_return01,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return01
	move	#decode_return02,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return02
	move	#decode_return03,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return03

	move	#decoder_scalefactor+1,x0
	move	x0,x:decoder_sf_granule
	move	#decode_return10,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return10
	move	#decode_return11,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return11
	move	#decode_return12,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return12
	move	#decode_return13,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return13

	move	#decoder_scalefactor+2,x0
	move	x0,x:decoder_sf_granule
	move	#decode_return20,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return20
	move	#decode_return21,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return21
	move	#decode_return22,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return22
	move	#decode_return23,x0
	jmp	decode_samples		;avoid stack overflow!
decode_return23


exit	move	#0,x0
	rts










;******************************************************************
decode_samples
	move	x0,x:decode_rts_p

;	** getbits_init
	move	x:getbits_stream_p,r7
	move	x:getbits_temp_p,r6
	move	x:decoder_getbits_loop_p,r5
	move	(r6)+				;update r6 (getbits nosave b1)


	move	#decoder_bitalloc,r0
	move	#decoder_fraction,r1
	move	#2,n1
	move	x:decoder_quantizations,r2
	move	#16,n2

	move	x:jsbound,a
	lsl	a	x:decoder_sf_granule,x0
	move	x0,x:decoder_sfp
	move	a,x:decoder_joint_countdown

;	**
;	** read+decode samples from bitstream
;	**
	move	x:sblimit,x0
	move	x0,x:decode_ds_sblimit_count
ds_sb_loop_head
	move	x:decode_ds_sblimit_count,a
	move	#>1,x0
	sub	x0,a
	jeq	ds_sb_loop		;avoid stack overflow!
	move	a,x:decode_ds_sblimit_count


	move	x:channels,x0
	do	x0,ds_ch_loop

;	** update joint-stereo counter and check bitalloc
	move	#>1,x0
	move	x:decoder_joint_countdown,b
	sub	x0,b	x:(r0)+,a
	tst	a	b,x:decoder_joint_countdown
	jne	ds_samples

;	** fill with zeroes
	move	a,x:(r1)+
	move	a,x:(r1)+
	move	a,x:(r1)+
	jmp	ds_resume

ds_samples
;	** check if joint-stereo applies
	move	#decoder_old_samples,r3
	jclr	#23,b1,ds_no_joint
	jset	#0,b1,ds_no_joint

;	** copy old samples for joint-stereo
	move	x:(r3)+,x0
	move	x0,x:(r1)+
	move	x:(r3)+,x0
	move	x0,x:(r1)+
	move	x:(r3)+,x0
	move	x0,x:(r1)-n1
	jmp	ds_scalefactor_adjust

ds_no_joint
;	** decode samples
	move	a,n2
	move	#table_bits,r3
	move	y:(r2+n2),n3		; quantization
	move	#16,n2
	move	y:(r3+n3),x0		; bits

	clr	a	n3,y0
	cmp	y0,a	#>1,a
	jeq	ds_fetch_grouping
	cmp	y0,a	#>3,a
	jeq	ds_fetch_grouping
	cmp	y0,a	n3,a
	jeq	ds_fetch_grouping

;	** no grouping, fetch triplet
	lsl	a	x:(r6),b1	;current bitstream word
	lsl	a	#table_xmdc,r3
	clr	a	a,n3
	jsr	(r5)
	move	b1,x:(r6)
	move	(r3)+n3
	move	#3,n3

;	** 'do #3'-loop unrolled to avoid stack overflow!

;	** remove greatest bit and check
;	** if the accumulator should be 0.0 or -1.0
	clr	b	a,x1	y:(r3)+,y0	; x
	and	y0,a	#-0.5,y1
	cmp	x1,a	a,x1	y:(r3)+,y0	; m
	teq	y1,b
;	** add constant `d', multiply with
;	** the inverse, thus normalize sample,
;	** and multiply with the constant `c'
	mpy	y0,x1,a	y:(r3)+,y0		; d
	add	y0,b	a0,y1
	add	y1,b	y:(r3)-n3,y0		; c
	move	b,y1
	macr	y0,y1,b		; remember that c is subtracted by 1.0!
	move	b,x:(r1)+

	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)
	move	b1,x:(r6)
;	** remove greatest bit and check
;	** if the accumulator should be 0.0 or -1.0
	clr	b	a,x1	y:(r3)+,y0	; x
	and	y0,a	#-0.5,y1
	cmp	x1,a	a,x1	y:(r3)+,y0	; m
	teq	y1,b
;	** add constant `d', multiply with
;	** the inverse, thus normalize sample,
;	** and multiply with the constant `c'
	mpy	y0,x1,a	y:(r3)+,y0		; d
	add	y0,b	a0,y1
	add	y1,b	y:(r3)-n3,y0		; c
	move	b,y1
	macr	y0,y1,b		; remember that c is subtracted by 1.0!
	move	b,x:(r1)+

	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)
	move	b1,x:(r6)
;	** remove greatest bit and check
;	** if the accumulator should be 0.0 or -1.0
	clr	b	a,x1	y:(r3)+,y0	; x
	and	y0,a	#-0.5,y1
	cmp	x1,a	a,x1	y:(r3)+,y0	; m
	teq	y1,b
;	** add constant `d', multiply with
;	** the inverse, thus normalize sample,
;	** and multiply with the constant `c'
	mpy	y0,x1,a	y:(r3)+,y0		; d
	add	y0,b	a0,y1
	add	y1,b	y:(r3)-n3,y0		; c
	move	b,y1
	macr	y0,y1,b		; remember that c is subtracted by 1.0!
	move	b,x:(r1)-n1

	jmp	ds_scalefactor_adjust


ds_fetch_grouping
;	** fetch grouped triplet
	move	#table_grouping,r3

	clr	a	x:(r6),b1	;current bitstream word
	jsr	(r5)

	lsl	a	a,x0
	add	x0,a	y:(r3+n3),r4
	move	a,n4

	move	b1,x:(r6)

	move	(r4)+n4
	move	y:(r4)+,a
	move	a,x:(r1)+	y:(r4)+,a
	move	a,x:(r1)+	y:(r4)+,a
	move	a,x:(r1)-n1


ds_scalefactor_adjust
;	** multiply samples with the
;	** corresponding scalefactors

	move	x:decoder_sfp,r3
	move	#3,n3
	nop
	move	x:(r3)+n3,n3
	move	r3,x:decoder_sfp
	move	#table_multiple,r3
	move		x:(r1)+,x1
	move		y:(r3+n3),y0
	move	#decoder_old_samples,r3
	mpyr	x1,y0,a	x:(r1)-,x0
	move		x1,x:(r3)+		; old samples
	move		x0,x:(r3)+		; old samples
	mpyr	x0,y0,a	a,x:(r1)+n1
	move		x:(r1)-,x0
	move		x0,x:(r3)+		; old samples
	mpyr	x0,y0,a	a,x:(r1)+
	move		a,x:(r1)+

ds_resume
	nop
ds_ch_loop
	move	(r2)+n2		; update next to quantization
	jmp	ds_sb_loop_head
ds_sb_loop
;	** getbits_exit
	move	r7,x:getbits_stream_p







;******************************************************************
;decode_subbands

	move	#decoder_fraction,x0
	move	x0,x:decoder_imfct_fractionp

	move	#>3,x0
	move	x0,x:decode_tr3_count
tr_loop_head

	move	x:decoder_imfct_fractionp,r0

	move	#decoder_pcm64,x0
	move	x0,x:decoder_pcmp

	move	x:channels,b			;1 or 2
ch_loop_head
	lsr	b
	move	b,x:decode_channels_count	;0 or 1
	
;	**
;	** perform inverse modified fast cosine transform
;	**
	move	x:decoder_imfct_delta,n0

;	** first butterfly pass
	move	x:decoder_imfct_p,r1
	move	r1,r5
	move	#0.7071067812,y0		; cos(pi/4)
	move			x:(r0)+n0,x0
	do	#8,bfy1
	mpyr	 x0,y0,a	x:(r0)+n0,x0
	mpyr	-x0,y0,a	a,x:(r1)+	a,y:(r5)+
	move			a,x:(r1)+
	mpyr	 x0,y0,a	x:(r0)+n0,x0
	mpyr	-x0,y0,a	x:(r0)+n0,x0	a,y:(r5)+
	mpyr	 x0,y0,a	a,x:(r1)+	a,y:(r5)+
	mpyr	-x0,y0,a	a,x:(r1)+
	move			x:(r0)+n0,x0	a,y:(r5)+
bfy1

;	** second butterfly pass
	move	x:decoder_imfct_p,r0
	move	x:decoder_imfct_p16,r4
	move	x:decoder_imfct_p32,r6
	move	x:decoder_imfct_p48,r5
	do	#16,bfy2
	move			x:(r0),b	y:(r4),y0
	add	y0,b		x:(r4),x1	y:(r0),a
	sub	x1,a		b,x:(r5)	y:(r0),b
	add	x1,b		x:(r0),a	a,y:(r5)+
	sub	y0,a		x:(r0),b	b,y:(r6)
	sub	x1,b		a,x:(r6)+	y:(r0),a
	sub	y0,a		b,x:(r4)	y:(r0),b
	add	y0,b		x:(r0),a	a,y:(r4)+
	add	x1,a		b,y:(r0)
	move			a,x:(r0)+
bfy2

;	** perform the rest of the butterfly passes
;	** 'do #4'-loop unrolled to avoid stack overflow!


;	** pass 3
	move	x:decoder_imfct_p,r0
	move	x:decoder_tab_rsincosx_p,r1
	move	r1,r6
	move	#8,n0
	do	#4,grp3
	lua	(r0)+n0,r5
	move	r0,r4
	move	r5,r2
	move			x:(r1)+,x0
	move			x:(r0),b	y:(r5),y1
	mac	-x0,y1,b	x:(r2)+,x1	y:(r6)+,y0
;	** butterfly kernel
	do	n0,bfy3
	macr	y0,x1,b		x:(r0),a
	subl	b,a		b,x:(r0)	y:(r4)+,b
	mac	y0,y1,b		a,x:(r5)	y:(r2),y1
	macr	x0,x1,b				y:(r0),a
	subl	b,a		x:(r4),b	b,y:(r0)+
	mac	-x0,y1,b	x:(r2)+,x1	a,y:(r5)+
bfy3	move	(r0)+n0
grp3


;	** pass 4
	move	x:decoder_imfct_p,r0
	move	x:decoder_tab_rsincosx_p,r1
	move	r1,r6
	move	#4,n0
	do	#8,grp4
	lua	(r0)+n0,r5
	move	r0,r4
	move	r5,r2
	move			x:(r1)+,x0
	move			x:(r0),b	y:(r5),y1
	mac	-x0,y1,b	x:(r2)+,x1	y:(r6)+,y0
;	** butterfly kernel
	do	n0,bfy4
	macr	y0,x1,b		x:(r0),a
	subl	b,a		b,x:(r0)	y:(r4)+,b
	mac	y0,y1,b		a,x:(r5)	y:(r2),y1
	macr	x0,x1,b				y:(r0),a
	subl	b,a		x:(r4),b	b,y:(r0)+
	mac	-x0,y1,b	x:(r2)+,x1	a,y:(r5)+
bfy4	move	(r0)+n0
grp4


;	** pass 5
	move	x:decoder_imfct_p,r0
	move	x:decoder_tab_rsincosx_p,r1
	move	r1,r6
	move	#2,n0
	do	#16,grp5
	lua	(r0)+n0,r5
	move	r0,r4
	move	r5,r2
	move			x:(r1)+,x0
	move			x:(r0),b	y:(r5),y1
	mac	-x0,y1,b	x:(r2)+,x1	y:(r6)+,y0
;	** butterfly kernel
	do	n0,bfy5
	macr	y0,x1,b		x:(r0),a
	subl	b,a		b,x:(r0)	y:(r4)+,b
	mac	y0,y1,b		a,x:(r5)	y:(r2),y1
	macr	x0,x1,b				y:(r0),a
	subl	b,a		x:(r4),b	b,y:(r0)+
	mac	-x0,y1,b	x:(r2)+,x1	a,y:(r5)+
bfy5	move	(r0)+n0
grp5


;	** pass 6
	move	x:decoder_imfct_p,r0
	move	x:decoder_tab_rsincosx_p,r1
	move	r1,r6
	move	#1,n0
	do	#32,grp6
	lua	(r0)+n0,r5
	move	r0,r4
	move	r5,r2
	move			x:(r1)+,x0
	move			x:(r0),b	y:(r5),y1
	mac	-x0,y1,b	x:(r2)+,x1	y:(r6)+,y0
;	** butterfly kernel
;;;;;	do	n0,bfy6
	macr	y0,x1,b		x:(r0),a
	subl	b,a		b,x:(r0)	y:(r4)+,b
	mac	y0,y1,b		a,x:(r5)	y:(r2),y1
	macr	x0,x1,b				y:(r0),a
	subl	b,a		x:(r4),b	b,y:(r0)+
	mac	-x0,y1,b	x:(r2)+,x1	a,y:(r5)+
bfy6	move	(r0)+n0
grp6

;	** unscrambling and final adjustments
	move	x:decoder_imfct_p,r0
	move	x:decoder_audiop,r1
	move	#table_cosx,r4
	move	#table_sinx,r6
	movec	#0,m0			; bit-reversed addressing
	move	#64/2,n0
	move	x:(r0),x1	y:(r6)+,y0
	move	y:(r4)+,y1
	do	#64,unscramble_loop
	mpy	y1,x1,a				y:(r0)+n0,y1
	macr	-y0,y1,a	x:(r0),x1	y:(r6)+,y0
	move			a,x:(r1)+	y:(r4)+,y1
unscramble_loop
	movec	#$ffff,m0		; linear addressing


;	** window audio data
	move	x:decoder_audiop,r0
	move	r0,r1
	move	x:decoder_pcmp,r5
	movec	x:decoder_audio_mask,m0
	movec	m0,m1

	move	#>32,x0
	move	x:decoder_audio_delta,a
	add	x0,a		a,b
	move	a,n1
	lsl	b		#table_window,r4
	move	(r1)+n1

	move	x:decoder_window_loop_p,r3

	move	b1,n0
	move	b1,n1

	jsr	(r3)

	move	r5,x:decoder_pcmp
	movec	#$ffff,m0		; linear addressing
	movec	m0,m1


	
;	** update pointer to next channel
	move	#>3,x0
	move	x:decoder_imfct_fractionp,a
	add	x0,a		#>64,y0
	move	a,r0

	move	x:decoder_audiop,a
	add	y0,a		x:decode_channels_count,b
	move	a,x:decoder_audiop

	tst	b
	jne	ch_loop_head		;avoid stack overflow!
;ch_loop

;	** finally: write audio data to output buffer
	move	x:out_p,r4
	move	#decoder_pcm64,r0
	move	#decoder_pcm64+32,r1
	move	#>3,y1
	do	#32,out_loop
	move	x:(r0)+,x1
	mpy	x1,y1,b		x:(r1)+,x1
	mpy	x1,y1,b		b0,x:(r4)
	move	b0,y:(r4)+
out_loop
	move	r4,x:out_p



;	** fraction pointer to next triplet
;	** and update audio buffer pointers
	move	x:decoder_imfct_fractionp,a
	move	#>1,x0
	move	x:decoder_audiop,r0
	add	x0,a		x:decoder_audio_delta,n0
	move	a,x:decoder_imfct_fractionp
	move	(r0)-n0
	movec	x:decoder_audio_mask,m0

	move	x:decode_tr3_count,a

	sub	x0,a	(r0)-n0
	move	a,x:decode_tr3_count

	movec	#$ffff,m0
	tst	a	r0,x:decoder_audiop
	jne	tr_loop_head		;avoid stack overflow!
;tr_loop


	move	x:decode_rts_p,r0
	nop
	jmp	(r0)			;'rts'-replacement











window_loop_start
	do	#32,window_loop
	move			x:(r0)+n0,x0	y:(r4)+,y0
	mpy	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r0)+n0,x0	y:(r4)+,y0
	mac	x0,y0,a		x:(r1)+n1,x0	y:(r4)+,y0
	macr	x0,y0,a		(r0)+
	move			a,x:(r5)+	y:(r1)+,y0	;update r1
window_loop
	rts
window_loop_end
;		** 21 words



getbits_loop_start
	do	x0,getbits_loop
	lsl	b
	jne	getbits_ne	;(patch for short jump)
getbits_cp
	move	x:(r7)+,b1
	lsl	b
	rol	a
	bset	#0,b1		;append -end- bit
	ror	a
getbits_ne
	rol	a
getbits_loop
	rts
getbits_loop_end
;		** 12 words (11 words with 'jne' short jump)










;*** initialize ************************
; parameters
;  x1 - mem_mp2 (96 words in INTERNAL L-memory)
;  x0 - mem_mp2p (32 words in INTERNAL P-memory)
;  y1 - /
;  y0 - /
init

;	** fast L-data buffer for IMFCT routine
	tfr	x1,a	#>16,x1
	tst	a
	jeq	init_no_lmem
	add	x1,a	a,x:decoder_imfct_p
	add	x1,a	a,x:decoder_imfct_p16
	add	x1,a	a,x:decoder_imfct_p32
	add	x1,a	a,x:decoder_imfct_p48

;	** rsinx_rcosx table to fast L-data memory
	move	a,x:decoder_tab_rsincosx_p
	move	#table_rsinx_rcosx,r0
	move	a,r4
	move	x:(r0),a
	do	#32,init_loop0
	move	a,x:(r4)	y:(r0)+,a
	move	x:(r0),a	a,y:(r4)+
init_loop0

init_no_lmem


	tfr	x0,a	#window_loop_start,r0
	tst	a	x0,r1
	jeq	init_no_pmem


;	** sample window loop to fast program memory
	move	x0,x:decoder_window_loop_p
	move	x0,r2
	do	#window_loop_end-window_loop_start,init_loop1
	movem	p:(r0)+,x1
	movem	x1,p:(r1)+
init_loop1
	tfr	x0,a	(r2)+
	move	#>window_loop-window_loop_start-1,x0
	add	x0,a			;patch absolute address 
	movem	a,p:(r2)		;in 'do'-instruction


;	** getbits loop to fast program memory
	move	#getbits_loop_start,r0
	move	r1,x:decoder_getbits_loop_p
	move	r1,a
	move	r1,b

	movem	p:(r0)+,x1
	movem	x1,p:(r1)+		;copy first word of 'do'
	move	#>getbits_loop-getbits_loop_start-1-1,x0
	add	x0,a		(r0)+
	movem	a,p:(r1)+		;second word of 'do' (absolute address)

	movem	p:(r0)+,x1
	movem	x1,p:(r1)+		;copy 'lsl b'

	move	#>getbits_ne-getbits_loop_start-1,x0
	add	x0,b		(r0)+
	move	#$0e2000,x0
	or	x0,b		(r0)+
	movem	b,p:(r1)+		;short jump 'jne getbits_ne'

	do	#getbits_loop_end-getbits_cp,init_loop2
	movem	p:(r0)+,x1
	movem	x1,p:(r1)+		;copy the rest
init_loop2

init_no_pmem

	rts







	org	l:
	align	64
decoder_imfct_slow	ds	64

table_rsinx_rcosx
;	**	x:rsinx		y:rcosx
	dcl	0.000000,	 0.999999
	dcl	0.999999,	 0.000000
	dcl	0.707107,	 0.707107
	dcl	0.707107,	-0.707107
	dcl	0.382683,	 0.923880
	dcl	0.923880,	-0.382683
	dcl	0.923880,	 0.382683
	dcl	0.382683,	-0.923880
	dcl	0.195090,	 0.980785
	dcl	0.980785,	-0.195090
	dcl	0.831470,	 0.555570
	dcl	0.555570,	-0.831470
	dcl	0.555570,	 0.831470
	dcl	0.831470,	-0.555570
	dcl	0.980785,	 0.195090
	dcl	0.195090,	-0.980785
	dcl	0.098017,	 0.995185
	dcl	0.995185,	-0.098017
	dcl	0.773010,	 0.634393
	dcl	0.634393,	-0.773010
	dcl	0.471397,	 0.881921
	dcl	0.881921,	-0.471397
	dcl	0.956940,	 0.290285
	dcl	0.290285,	-0.956940
	dcl	0.290285,	 0.956940
	dcl	0.956940,	-0.290285
	dcl	0.881921,	 0.471397
	dcl	0.471397,	-0.881921
	dcl	0.634393,	 0.773010
	dcl	0.773010,	-0.634393
	dcl	0.995185,	 0.098017
	dcl	0.098017,	-0.995185




;;vars

	org	x:
	align	2048
decoder_audio	ds	2048

;->xdata+2048
inbuf	ds	600	;MPG_MAXFRAMESIZE=1792


channels	ds	1
out_p		ds	1
translate	ds	1
sblimit		ds	1
jsbound		ds	1

getbits_stream_p	ds	1
getbits_temp_p		dc	getbits_temp_slow
getbits_temp_slow	ds	2

decode_rts_p		ds	1
decode_ds_sblimit_count	ds	1
decode_tr3_count	ds	1
decode_channels_count	ds	1

decoder_bitalloc	ds	2*32
decoder_scfsi		ds	2*32
decoder_scalefactor	ds	2*32*3
decoder_fraction	ds	2*32*3
decoder_old_samples	ds	3

decoder_sfp		ds	1
decoder_sf_granule	ds	1
decoder_quantizations	ds	1
decoder_nbals		ds	1
decoder_joint_countdown	ds	1

decoder_audiop		dc	decoder_audio
decoder_audio_mask	ds	1
decoder_audio_delta	ds	1

decoder_pcmp		ds	1

decoder_imfct_p		dc	decoder_imfct_slow
decoder_imfct_p16	dc	decoder_imfct_slow+16
decoder_imfct_p32	dc	decoder_imfct_slow+32
decoder_imfct_p48	dc	decoder_imfct_slow+48

decoder_window_loop_p	dc	window_loop_start
decoder_getbits_loop_p	dc	getbits_loop_start
decoder_tab_rsincosx_p	dc	table_rsinx_rcosx

decoder_imfct_fractionp	ds	1
decoder_imfct_delta	ds	1

decoder_pcm64		ds	64





	org	y:
table_window
	dc	$000000,$fff8c1,$003540,$ff8d41,$01fd40,$faf7c1,$066b80,$db63c1
	dc	$494780,$249c40,$066b80,$050840,$01fd40,$0072c0,$003540,$000740
	dc	$ffffc1,$fff841,$003680,$ff7e41,$01f400,$fa9cc1,$05d1c0,$d99601
	dc	$493c00,$22ce00,$06f780,$04ad00,$0203c0,$006440,$003400,$000680
	dc	$ffffc1,$fff741,$003780,$ff6ec1,$01e800,$fa4241,$052a00,$d7ca01
	dc	$491a00,$20ffc0,$077600,$045240,$020800,$0056c0,$003280,$000600
	dc	$ffffc1,$fff681,$003840,$ff5ec1,$01d940,$f9e8c1,$047440,$d60081
	dc	$48e180,$1f32c0,$07e700,$03f7c0,$0209c0,$004980,$003100,$000540
	dc	$ffffc1,$fff5c1,$0038c0,$ff4e41,$01c780,$f990c1,$03b000,$d43ac1
	dc	$489240,$1d6800,$084b00,$039e40,$020940,$003d00,$002f80,$0004c0
	dc	$ffffc1,$fff4c1,$003900,$ff3d41,$01b2c0,$f93a41,$02ddc0,$d279c1
	dc	$482d00,$1ba040,$08a200,$0345c0,$0206c0,$003140,$002dc0,$000440
	dc	$ffffc1,$fff3c1,$003900,$ff2c01,$019b00,$f8e641,$01fd40,$d0be81
	dc	$47b1c0,$19dc80,$08ecc0,$02ef00,$020240,$002640,$002c00,$000400
	dc	$ffff81,$fff2c1,$0038c0,$ff1a41,$017fc0,$f894c1,$010e80,$cf09c1
	dc	$4720c0,$181d80,$092b40,$0299c0,$01fc00,$001bc0,$002a40,$000380
	dc	$ffff81,$fff181,$003800,$ff0841,$016180,$f84681,$001180,$cd5cc1
	dc	$467a40,$166440,$095e00,$024680,$01f440,$001200,$002840,$000340
	dc	$ffff81,$fff041,$003740,$fef601,$014000,$f7fbc1,$ff0681,$cbb881
	dc	$45bf00,$14b140,$098580,$01f580,$01ea80,$000900,$002680,$0002c0
	dc	$ffff81,$ffef01,$0035c0,$fee3c1,$011ac0,$f7b541,$fded81,$ca1d81
	dc	$44ef80,$130580,$09a1c0,$01a700,$01dfc0,$000080,$0024c0,$000280
	dc	$ffff41,$ffedc1,$003400,$fed181,$00f280,$f77341,$fcc701,$c88d81
	dc	$440bc0,$1161c0,$09b3c0,$015b00,$01d380,$fff8c1,$0022c0,$000240
	dc	$ffff41,$ffec41,$003200,$febf41,$00c680,$f73681,$fb92c1,$c708c1
	dc	$431500,$0fc6c0,$09bb80,$0111c0,$01c640,$fff1c1,$002100,$000200
	dc	$ffff01,$ffeac1,$002f40,$fead01,$009740,$f6ff41,$fa5181,$c59081
	dc	$420b40,$0e3500,$09b9c0,$00cb80,$01b7c0,$ffeb41,$001f40,$0001c0
	dc	$ffff01,$ffe941,$002c40,$fe9b01,$006480,$f6ce01,$f90381,$c425c1
	dc	$40ef80,$0cad00,$09af00,$008840,$01a880,$ffe581,$001d40,$0001c0
	dc	$fffec1,$ffe7c1,$0028c0,$fe8981,$002e40,$f6a3c1,$f7a901,$c2c901
	dc	$3fc280,$0b2fc0,$099b80,$004800,$019880,$ffe041,$001bc0,$000180
	dc	$fffec1,$ffe601,$002480,$fe7841,$fff4c1,$f68041,$f64241,$c17b41
	dc	$3e84c0,$09bdc0,$097fc0,$000b40,$0187c0,$ffdb81,$001a00,$000140
	dc	$fffe81,$ffe441,$001fc0,$fe6781,$ffb801,$f66481,$f4d041,$c03d81
	dc	$3d3700,$085700,$095c40,$ffd1c1,$017680,$ffd741,$001840,$000140
	dc	$fffe41,$ffe2c1,$001a80,$fe5781,$ff77c1,$f65101,$f35301,$bf1081
	dc	$3bda40,$06fc80,$093200,$ff9b81,$016500,$ffd3c1,$0016c0,$000100
	dc	$fffe41,$ffe0c1,$0014c0,$fe4841,$ff3481,$f64641,$f1cb01,$bdf4c1
	dc	$3a6f80,$05ae80,$0900c0,$ff68c1,$015300,$ffd0c1,$001540,$000100
	dc	$fffe01,$ffdf01,$000e40,$fe39c1,$feee41,$f64481,$f03941,$bceb01
	dc	$38f740,$046d40,$08c980,$ff3981,$0140c0,$ffce01,$0013c0,$0000c0
	dc	$fffdc1,$ffdd41,$000740,$fe2c81,$fea501,$f64c41,$ee9e41,$bbf441
	dc	$377280,$033900,$088cc0,$ff0d81,$012e80,$ffcc01,$001240,$0000c0
	dc	$fffd81,$ffdb41,$ffff81,$fe2041,$fe5901,$f65e41,$ecfa81,$bb1081
	dc	$35e280,$021280,$084ac0,$fee541,$011c40,$ffca41,$001100,$000080
	dc	$fffd41,$ffd981,$fff701,$fe1581,$fe0a81,$f67a81,$eb4ec1,$ba4101
	dc	$344780,$00f980,$080440,$fec001,$010a00,$ffc8c1,$000fc0,$000080
	dc	$fffcc1,$ffd7c1,$ffee01,$fe0bc1,$fdb981,$f6a201,$e99bc1,$b985c1
	dc	$32a340,$ffee81,$07b980,$fe9e81,$00f7c0,$ffc801,$000e80,$000080
	dc	$fffc81,$ffd5c1,$ffe441,$fe0401,$fd6641,$f6d4c1,$e7e281,$b8df41
	dc	$30f640,$fef181,$076b40,$fe8041,$00e5c0,$ffc741,$000d40,$000080
	dc	$fffc01,$ffd401,$ffd9c1,$fdfdc1,$fd1101,$f71341,$e62381,$b84e41
	dc	$2f4180,$fe02c1,$0719c0,$fe6501,$00d400,$ffc701,$000c40,$000040
	dc	$fffbc1,$ffd241,$ffcec1,$fdf941,$fcba41,$f75e01,$e45fc1,$b7d301
	dc	$2d8640,$fd2241,$06c5c0,$fe4d41,$00c2c0,$ffc701,$000b40,$000040
	dc	$fffb41,$ffd081,$ffc301,$fdf6c1,$fc61c1,$f7b501,$e29801,$b76dc1
	dc	$2bc540,$fc5001,$066f40,$fe3881,$00b1c0,$ffc741,$000a40,$000040
	dc	$fffac1,$ffcf01,$ffb681,$fdf641,$fc0841,$f81901,$e0cd41,$b71e81
	dc	$29ff80,$fb8bc1,$061740,$fe26c1,$00a140,$ffc7c1,$000980,$000040
	dc	$fffa01,$ffcd81,$ffa941,$fdf801,$fbadc1,$f88a01,$df0041,$b6e601
	dc	$283600,$fad601,$05bdc0,$fe1801,$009140,$ffc881,$0008c0,$000040
	dc	$fff981,$ffcc01,$ff9bc1,$fdfc41,$fb5301,$f90881,$dd3201,$b6c401
	dc	$266a00,$fa2e41,$056340,$fe0c01,$0081c0,$ffc981,$0007c0,$000040
table_sinx
	dc	0.000000,0.049068,0.098017,0.146730
	dc	0.195090,0.242980,0.290285,0.336890
	dc	0.382683,0.427555,0.471397,0.514103
	dc	0.555570,0.595699,0.634393,0.671559
	dc	0.707107,0.740951,0.773010,0.803208
	dc	0.831470,0.857729,0.881921,0.903989
	dc	0.923880,0.941544,0.956940,0.970031
	dc	0.980785,0.989177,0.995185,0.998795
	dc	0.999999,0.998795,0.995185,0.989177
	dc	0.980785,0.970031,0.956940,0.941544
	dc	0.923880,0.903989,0.881921,0.857729
	dc	0.831470,0.803208,0.773010,0.740951
	dc	0.707107,0.671559,0.634393,0.595699
	dc	0.555570,0.514103,0.471397,0.427555
	dc	0.382683,0.336890,0.290285,0.242980
	dc	0.195090,0.146730,0.098017,0.049068
table_cosx
	dc	0.999999,0.998795,0.995185,0.989177
	dc	0.980785,0.970031,0.956940,0.941544
	dc	0.923880,0.903989,0.881921,0.857729
	dc	0.831470,0.803208,0.773010,0.740951
	dc	0.707107,0.671559,0.634393,0.595699
	dc	0.555570,0.514103,0.471397,0.427555
	dc	0.382683,0.336890,0.290285,0.242980
	dc	0.195090,0.146730,0.098017,0.049068
	dc	0.000000,-0.049068,-0.098017,-0.146730
	dc	-0.195090,-0.242980,-0.290285,-0.336890
	dc	-0.382683,-0.427555,-0.471397,-0.514103
	dc	-0.555570,-0.595699,-0.634393,-0.671559
	dc	-0.707107,-0.740951,-0.773010,-0.803208
	dc	-0.831470,-0.857729,-0.881921,-0.903989
	dc	-0.923880,-0.941544,-0.956940,-0.970031
	dc	-0.980785,-0.989177,-0.995185,-0.998795


;; Sampling grouping tables.
table_grouping
	dc	table_quantization_group_0
	dc	table_quantization_group_1
	dc	0
	dc	table_quantization_group_3
table_quantization_group_0
	dc	$d55557,$d55557,$d55557,$000000,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$d55557,$000000,$d55557
	dc	$000000,$000000,$d55557,$2aaaaa,$000000,$d55557,$d55557,$2aaaaa,$d55557,$000000,$2aaaaa,$d55557
	dc	$2aaaaa,$2aaaaa,$d55557,$d55557,$d55557,$000000,$000000,$d55557,$000000,$2aaaaa,$d55557,$000000
	dc	$d55557,$000000,$000000,$000000,$000000,$000000,$2aaaaa,$000000,$000000,$d55557,$2aaaaa,$000000
	dc	$000000,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$000000,$d55557,$d55557,$2aaaaa,$000000,$d55557,$2aaaaa
	dc	$2aaaaa,$d55557,$2aaaaa,$d55557,$000000,$2aaaaa,$000000,$000000,$2aaaaa,$2aaaaa,$000000,$2aaaaa
	dc	$d55557,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$d55557,$d55557,$d55557
	dc	$000000,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$d55557,$000000,$d55557,$000000,$000000,$d55557
table_quantization_group_1
	dc	$ccccce,$ccccce,$ccccce,$e66668,$ccccce,$ccccce,$000000,$ccccce,$ccccce,$199999,$ccccce,$ccccce
	dc	$333333,$ccccce,$ccccce,$ccccce,$e66668,$ccccce,$e66668,$e66668,$ccccce,$000000,$e66668,$ccccce
	dc	$199999,$e66668,$ccccce,$333333,$e66668,$ccccce,$ccccce,$000000,$ccccce,$e66668,$000000,$ccccce
	dc	$000000,$000000,$ccccce,$199999,$000000,$ccccce,$333333,$000000,$ccccce,$ccccce,$199999,$ccccce
	dc	$e66668,$199999,$ccccce,$000000,$199999,$ccccce,$199999,$199999,$ccccce,$333333,$199999,$ccccce
	dc	$ccccce,$333333,$ccccce,$e66668,$333333,$ccccce,$000000,$333333,$ccccce,$199999,$333333,$ccccce
	dc	$333333,$333333,$ccccce,$ccccce,$ccccce,$e66668,$e66668,$ccccce,$e66668,$000000,$ccccce,$e66668
	dc	$199999,$ccccce,$e66668,$333333,$ccccce,$e66668,$ccccce,$e66668,$e66668,$e66668,$e66668,$e66668
	dc	$000000,$e66668,$e66668,$199999,$e66668,$e66668,$333333,$e66668,$e66668,$ccccce,$000000,$e66668
	dc	$e66668,$000000,$e66668,$000000,$000000,$e66668,$199999,$000000,$e66668,$333333,$000000,$e66668
	dc	$ccccce,$199999,$e66668,$e66668,$199999,$e66668,$000000,$199999,$e66668,$199999,$199999,$e66668
	dc	$333333,$199999,$e66668,$ccccce,$333333,$e66668,$e66668,$333333,$e66668,$000000,$333333,$e66668
	dc	$199999,$333333,$e66668,$333333,$333333,$e66668,$ccccce,$ccccce,$000000,$e66668,$ccccce,$000000
	dc	$000000,$ccccce,$000000,$199999,$ccccce,$000000,$333333,$ccccce,$000000,$ccccce,$e66668,$000000
	dc	$e66668,$e66668,$000000,$000000,$e66668,$000000,$199999,$e66668,$000000,$333333,$e66668,$000000
	dc	$ccccce,$000000,$000000,$e66668,$000000,$000000,$000000,$000000,$000000,$199999,$000000,$000000
	dc	$333333,$000000,$000000,$ccccce,$199999,$000000,$e66668,$199999,$000000,$000000,$199999,$000000
	dc	$199999,$199999,$000000,$333333,$199999,$000000,$ccccce,$333333,$000000,$e66668,$333333,$000000
	dc	$000000,$333333,$000000,$199999,$333333,$000000,$333333,$333333,$000000,$ccccce,$ccccce,$199999
	dc	$e66668,$ccccce,$199999,$000000,$ccccce,$199999,$199999,$ccccce,$199999,$333333,$ccccce,$199999
	dc	$ccccce,$e66668,$199999,$e66668,$e66668,$199999,$000000,$e66668,$199999,$199999,$e66668,$199999
	dc	$333333,$e66668,$199999,$ccccce,$000000,$199999,$e66668,$000000,$199999,$000000,$000000,$199999
	dc	$199999,$000000,$199999,$333333,$000000,$199999,$ccccce,$199999,$199999,$e66668,$199999,$199999
	dc	$000000,$199999,$199999,$199999,$199999,$199999,$333333,$199999,$199999,$ccccce,$333333,$199999
	dc	$e66668,$333333,$199999,$000000,$333333,$199999,$199999,$333333,$199999,$333333,$333333,$199999
	dc	$ccccce,$ccccce,$333333,$e66668,$ccccce,$333333,$000000,$ccccce,$333333,$199999,$ccccce,$333333
	dc	$333333,$ccccce,$333333,$ccccce,$e66668,$333333,$e66668,$e66668,$333333,$000000,$e66668,$333333
	dc	$199999,$e66668,$333333,$333333,$e66668,$333333,$ccccce,$000000,$333333,$e66668,$000000,$333333
	dc	$000000,$000000,$333333,$199999,$000000,$333333,$333333,$000000,$333333,$ccccce,$199999,$333333
	dc	$e66668,$199999,$333333,$000000,$199999,$333333,$199999,$199999,$333333,$333333,$199999,$333333
	dc	$ccccce,$333333,$333333,$e66668,$333333,$333333,$000000,$333333,$333333,$199999,$333333,$333333
	dc	$333333,$333333,$333333,$ccccce,$ccccce,$ccccce,$e66668,$ccccce,$ccccce,$000000,$ccccce,$ccccce
table_quantization_group_3
	dc	$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$c71c73,$f1c71e,$c71c73,$c71c73
	dc	$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$c71c73,$2aaaaa,$c71c73,$c71c73
	dc	$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$d55557,$d55557,$c71c73,$e38e3a,$d55557,$c71c73
	dc	$f1c71e,$d55557,$c71c73,$000000,$d55557,$c71c73,$0e38e3,$d55557,$c71c73,$1c71c7,$d55557,$c71c73
	dc	$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$d55557,$e38e3a,$c71c73
	dc	$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$c71c73,$0e38e3,$e38e3a,$c71c73
	dc	$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$c71c73,$c71c73,$f1c71e,$c71c73
	dc	$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$c71c73,$000000,$f1c71e,$c71c73
	dc	$0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$c71c73,$38e38e,$f1c71e,$c71c73
	dc	$c71c73,$000000,$c71c73,$d55557,$000000,$c71c73,$e38e3a,$000000,$c71c73,$f1c71e,$000000,$c71c73
	dc	$000000,$000000,$c71c73,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$c71c73,$2aaaaa,$000000,$c71c73
	dc	$38e38e,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$c71c73,$e38e3a,$0e38e3,$c71c73
	dc	$f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$c71c73,$1c71c7,$0e38e3,$c71c73
	dc	$2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$d55557,$1c71c7,$c71c73
	dc	$e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$c71c73,$0e38e3,$1c71c7,$c71c73
	dc	$1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$c71c73,$c71c73,$2aaaaa,$c71c73
	dc	$d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$c71c73,$000000,$2aaaaa,$c71c73
	dc	$0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$c71c73,$38e38e,$2aaaaa,$c71c73
	dc	$c71c73,$38e38e,$c71c73,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$c71c73,$f1c71e,$38e38e,$c71c73
	dc	$000000,$38e38e,$c71c73,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$c71c73,$2aaaaa,$38e38e,$c71c73
	dc	$38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$d55557,$c71c73,$d55557,$e38e3a,$c71c73,$d55557
	dc	$f1c71e,$c71c73,$d55557,$000000,$c71c73,$d55557,$0e38e3,$c71c73,$d55557,$1c71c7,$c71c73,$d55557
	dc	$2aaaaa,$c71c73,$d55557,$38e38e,$c71c73,$d55557,$c71c73,$d55557,$d55557,$d55557,$d55557,$d55557
	dc	$e38e3a,$d55557,$d55557,$f1c71e,$d55557,$d55557,$000000,$d55557,$d55557,$0e38e3,$d55557,$d55557
	dc	$1c71c7,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$38e38e,$d55557,$d55557,$c71c73,$e38e3a,$d55557
	dc	$d55557,$e38e3a,$d55557,$e38e3a,$e38e3a,$d55557,$f1c71e,$e38e3a,$d55557,$000000,$e38e3a,$d55557
	dc	$0e38e3,$e38e3a,$d55557,$1c71c7,$e38e3a,$d55557,$2aaaaa,$e38e3a,$d55557,$38e38e,$e38e3a,$d55557
	dc	$c71c73,$f1c71e,$d55557,$d55557,$f1c71e,$d55557,$e38e3a,$f1c71e,$d55557,$f1c71e,$f1c71e,$d55557
	dc	$000000,$f1c71e,$d55557,$0e38e3,$f1c71e,$d55557,$1c71c7,$f1c71e,$d55557,$2aaaaa,$f1c71e,$d55557
	dc	$38e38e,$f1c71e,$d55557,$c71c73,$000000,$d55557,$d55557,$000000,$d55557,$e38e3a,$000000,$d55557
	dc	$f1c71e,$000000,$d55557,$000000,$000000,$d55557,$0e38e3,$000000,$d55557,$1c71c7,$000000,$d55557
	dc	$2aaaaa,$000000,$d55557,$38e38e,$000000,$d55557,$c71c73,$0e38e3,$d55557,$d55557,$0e38e3,$d55557
	dc	$e38e3a,$0e38e3,$d55557,$f1c71e,$0e38e3,$d55557,$000000,$0e38e3,$d55557,$0e38e3,$0e38e3,$d55557
	dc	$1c71c7,$0e38e3,$d55557,$2aaaaa,$0e38e3,$d55557,$38e38e,$0e38e3,$d55557,$c71c73,$1c71c7,$d55557
	dc	$d55557,$1c71c7,$d55557,$e38e3a,$1c71c7,$d55557,$f1c71e,$1c71c7,$d55557,$000000,$1c71c7,$d55557
	dc	$0e38e3,$1c71c7,$d55557,$1c71c7,$1c71c7,$d55557,$2aaaaa,$1c71c7,$d55557,$38e38e,$1c71c7,$d55557
	dc	$c71c73,$2aaaaa,$d55557,$d55557,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$d55557,$f1c71e,$2aaaaa,$d55557
	dc	$000000,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$d55557,$2aaaaa,$2aaaaa,$d55557
	dc	$38e38e,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$d55557,$38e38e,$d55557,$e38e3a,$38e38e,$d55557
	dc	$f1c71e,$38e38e,$d55557,$000000,$38e38e,$d55557,$0e38e3,$38e38e,$d55557,$1c71c7,$38e38e,$d55557
	dc	$2aaaaa,$38e38e,$d55557,$38e38e,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$d55557,$c71c73,$e38e3a
	dc	$e38e3a,$c71c73,$e38e3a,$f1c71e,$c71c73,$e38e3a,$000000,$c71c73,$e38e3a,$0e38e3,$c71c73,$e38e3a
	dc	$1c71c7,$c71c73,$e38e3a,$2aaaaa,$c71c73,$e38e3a,$38e38e,$c71c73,$e38e3a,$c71c73,$d55557,$e38e3a
	dc	$d55557,$d55557,$e38e3a,$e38e3a,$d55557,$e38e3a,$f1c71e,$d55557,$e38e3a,$000000,$d55557,$e38e3a
	dc	$0e38e3,$d55557,$e38e3a,$1c71c7,$d55557,$e38e3a,$2aaaaa,$d55557,$e38e3a,$38e38e,$d55557,$e38e3a
	dc	$c71c73,$e38e3a,$e38e3a,$d55557,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$f1c71e,$e38e3a,$e38e3a
	dc	$000000,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$e38e3a,$2aaaaa,$e38e3a,$e38e3a
	dc	$38e38e,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$d55557,$f1c71e,$e38e3a,$e38e3a,$f1c71e,$e38e3a
	dc	$f1c71e,$f1c71e,$e38e3a,$000000,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$e38e3a,$1c71c7,$f1c71e,$e38e3a
	dc	$2aaaaa,$f1c71e,$e38e3a,$38e38e,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$d55557,$000000,$e38e3a
	dc	$e38e3a,$000000,$e38e3a,$f1c71e,$000000,$e38e3a,$000000,$000000,$e38e3a,$0e38e3,$000000,$e38e3a
	dc	$1c71c7,$000000,$e38e3a,$2aaaaa,$000000,$e38e3a,$38e38e,$000000,$e38e3a,$c71c73,$0e38e3,$e38e3a
	dc	$d55557,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$000000,$0e38e3,$e38e3a
	dc	$0e38e3,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$e38e3a,$38e38e,$0e38e3,$e38e3a
	dc	$c71c73,$1c71c7,$e38e3a,$d55557,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$f1c71e,$1c71c7,$e38e3a
	dc	$000000,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$e38e3a,$2aaaaa,$1c71c7,$e38e3a
	dc	$38e38e,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$e38e3a,$e38e3a,$2aaaaa,$e38e3a
	dc	$f1c71e,$2aaaaa,$e38e3a,$000000,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$e38e3a,$1c71c7,$2aaaaa,$e38e3a
	dc	$2aaaaa,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$d55557,$38e38e,$e38e3a
	dc	$e38e3a,$38e38e,$e38e3a,$f1c71e,$38e38e,$e38e3a,$000000,$38e38e,$e38e3a,$0e38e3,$38e38e,$e38e3a
	dc	$1c71c7,$38e38e,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$38e38e,$38e38e,$e38e3a,$c71c73,$c71c73,$f1c71e
	dc	$d55557,$c71c73,$f1c71e,$e38e3a,$c71c73,$f1c71e,$f1c71e,$c71c73,$f1c71e,$000000,$c71c73,$f1c71e
	dc	$0e38e3,$c71c73,$f1c71e,$1c71c7,$c71c73,$f1c71e,$2aaaaa,$c71c73,$f1c71e,$38e38e,$c71c73,$f1c71e
	dc	$c71c73,$d55557,$f1c71e,$d55557,$d55557,$f1c71e,$e38e3a,$d55557,$f1c71e,$f1c71e,$d55557,$f1c71e
	dc	$000000,$d55557,$f1c71e,$0e38e3,$d55557,$f1c71e,$1c71c7,$d55557,$f1c71e,$2aaaaa,$d55557,$f1c71e
	dc	$38e38e,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$d55557,$e38e3a,$f1c71e,$e38e3a,$e38e3a,$f1c71e
	dc	$f1c71e,$e38e3a,$f1c71e,$000000,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$f1c71e,$1c71c7,$e38e3a,$f1c71e
	dc	$2aaaaa,$e38e3a,$f1c71e,$38e38e,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$d55557,$f1c71e,$f1c71e
	dc	$e38e3a,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$000000,$f1c71e,$f1c71e,$0e38e3,$f1c71e,$f1c71e
	dc	$1c71c7,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$38e38e,$f1c71e,$f1c71e,$c71c73,$000000,$f1c71e
	dc	$d55557,$000000,$f1c71e,$e38e3a,$000000,$f1c71e,$f1c71e,$000000,$f1c71e,$000000,$000000,$f1c71e
	dc	$0e38e3,$000000,$f1c71e,$1c71c7,$000000,$f1c71e,$2aaaaa,$000000,$f1c71e,$38e38e,$000000,$f1c71e
	dc	$c71c73,$0e38e3,$f1c71e,$d55557,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$f1c71e,$0e38e3,$f1c71e
	dc	$000000,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$f1c71e,$2aaaaa,$0e38e3,$f1c71e
	dc	$38e38e,$0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$d55557,$1c71c7,$f1c71e,$e38e3a,$1c71c7,$f1c71e
	dc	$f1c71e,$1c71c7,$f1c71e,$000000,$1c71c7,$f1c71e,$0e38e3,$1c71c7,$f1c71e,$1c71c7,$1c71c7,$f1c71e
	dc	$2aaaaa,$1c71c7,$f1c71e,$38e38e,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$d55557,$2aaaaa,$f1c71e
	dc	$e38e3a,$2aaaaa,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$000000,$2aaaaa,$f1c71e,$0e38e3,$2aaaaa,$f1c71e
	dc	$1c71c7,$2aaaaa,$f1c71e,$2aaaaa,$2aaaaa,$f1c71e,$38e38e,$2aaaaa,$f1c71e,$c71c73,$38e38e,$f1c71e
	dc	$d55557,$38e38e,$f1c71e,$e38e3a,$38e38e,$f1c71e,$f1c71e,$38e38e,$f1c71e,$000000,$38e38e,$f1c71e
	dc	$0e38e3,$38e38e,$f1c71e,$1c71c7,$38e38e,$f1c71e,$2aaaaa,$38e38e,$f1c71e,$38e38e,$38e38e,$f1c71e
	dc	$c71c73,$c71c73,$000000,$d55557,$c71c73,$000000,$e38e3a,$c71c73,$000000,$f1c71e,$c71c73,$000000
	dc	$000000,$c71c73,$000000,$0e38e3,$c71c73,$000000,$1c71c7,$c71c73,$000000,$2aaaaa,$c71c73,$000000
	dc	$38e38e,$c71c73,$000000,$c71c73,$d55557,$000000,$d55557,$d55557,$000000,$e38e3a,$d55557,$000000
	dc	$f1c71e,$d55557,$000000,$000000,$d55557,$000000,$0e38e3,$d55557,$000000,$1c71c7,$d55557,$000000
	dc	$2aaaaa,$d55557,$000000,$38e38e,$d55557,$000000,$c71c73,$e38e3a,$000000,$d55557,$e38e3a,$000000
	dc	$e38e3a,$e38e3a,$000000,$f1c71e,$e38e3a,$000000,$000000,$e38e3a,$000000,$0e38e3,$e38e3a,$000000
	dc	$1c71c7,$e38e3a,$000000,$2aaaaa,$e38e3a,$000000,$38e38e,$e38e3a,$000000,$c71c73,$f1c71e,$000000
	dc	$d55557,$f1c71e,$000000,$e38e3a,$f1c71e,$000000,$f1c71e,$f1c71e,$000000,$000000,$f1c71e,$000000
	dc	$0e38e3,$f1c71e,$000000,$1c71c7,$f1c71e,$000000,$2aaaaa,$f1c71e,$000000,$38e38e,$f1c71e,$000000
	dc	$c71c73,$000000,$000000,$d55557,$000000,$000000,$e38e3a,$000000,$000000,$f1c71e,$000000,$000000
	dc	$000000,$000000,$000000,$0e38e3,$000000,$000000,$1c71c7,$000000,$000000,$2aaaaa,$000000,$000000
	dc	$38e38e,$000000,$000000,$c71c73,$0e38e3,$000000,$d55557,$0e38e3,$000000,$e38e3a,$0e38e3,$000000
	dc	$f1c71e,$0e38e3,$000000,$000000,$0e38e3,$000000,$0e38e3,$0e38e3,$000000,$1c71c7,$0e38e3,$000000
	dc	$2aaaaa,$0e38e3,$000000,$38e38e,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$d55557,$1c71c7,$000000
	dc	$e38e3a,$1c71c7,$000000,$f1c71e,$1c71c7,$000000,$000000,$1c71c7,$000000,$0e38e3,$1c71c7,$000000
	dc	$1c71c7,$1c71c7,$000000,$2aaaaa,$1c71c7,$000000,$38e38e,$1c71c7,$000000,$c71c73,$2aaaaa,$000000
	dc	$d55557,$2aaaaa,$000000,$e38e3a,$2aaaaa,$000000,$f1c71e,$2aaaaa,$000000,$000000,$2aaaaa,$000000
	dc	$0e38e3,$2aaaaa,$000000,$1c71c7,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$000000,$38e38e,$2aaaaa,$000000
	dc	$c71c73,$38e38e,$000000,$d55557,$38e38e,$000000,$e38e3a,$38e38e,$000000,$f1c71e,$38e38e,$000000
	dc	$000000,$38e38e,$000000,$0e38e3,$38e38e,$000000,$1c71c7,$38e38e,$000000,$2aaaaa,$38e38e,$000000
	dc	$38e38e,$38e38e,$000000,$c71c73,$c71c73,$0e38e3,$d55557,$c71c73,$0e38e3,$e38e3a,$c71c73,$0e38e3
	dc	$f1c71e,$c71c73,$0e38e3,$000000,$c71c73,$0e38e3,$0e38e3,$c71c73,$0e38e3,$1c71c7,$c71c73,$0e38e3
	dc	$2aaaaa,$c71c73,$0e38e3,$38e38e,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$d55557,$d55557,$0e38e3
	dc	$e38e3a,$d55557,$0e38e3,$f1c71e,$d55557,$0e38e3,$000000,$d55557,$0e38e3,$0e38e3,$d55557,$0e38e3
	dc	$1c71c7,$d55557,$0e38e3,$2aaaaa,$d55557,$0e38e3,$38e38e,$d55557,$0e38e3,$c71c73,$e38e3a,$0e38e3
	dc	$d55557,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$000000,$e38e3a,$0e38e3
	dc	$0e38e3,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$0e38e3,$2aaaaa,$e38e3a,$0e38e3,$38e38e,$e38e3a,$0e38e3
	dc	$c71c73,$f1c71e,$0e38e3,$d55557,$f1c71e,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$f1c71e,$f1c71e,$0e38e3
	dc	$000000,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$0e38e3,$1c71c7,$f1c71e,$0e38e3,$2aaaaa,$f1c71e,$0e38e3
	dc	$38e38e,$f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$d55557,$000000,$0e38e3,$e38e3a,$000000,$0e38e3
	dc	$f1c71e,$000000,$0e38e3,$000000,$000000,$0e38e3,$0e38e3,$000000,$0e38e3,$1c71c7,$000000,$0e38e3
	dc	$2aaaaa,$000000,$0e38e3,$38e38e,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$d55557,$0e38e3,$0e38e3
	dc	$e38e3a,$0e38e3,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$000000,$0e38e3,$0e38e3,$0e38e3,$0e38e3,$0e38e3
	dc	$1c71c7,$0e38e3,$0e38e3,$2aaaaa,$0e38e3,$0e38e3,$38e38e,$0e38e3,$0e38e3,$c71c73,$1c71c7,$0e38e3
	dc	$d55557,$1c71c7,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$000000,$1c71c7,$0e38e3
	dc	$0e38e3,$1c71c7,$0e38e3,$1c71c7,$1c71c7,$0e38e3,$2aaaaa,$1c71c7,$0e38e3,$38e38e,$1c71c7,$0e38e3
	dc	$c71c73,$2aaaaa,$0e38e3,$d55557,$2aaaaa,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$f1c71e,$2aaaaa,$0e38e3
	dc	$000000,$2aaaaa,$0e38e3,$0e38e3,$2aaaaa,$0e38e3,$1c71c7,$2aaaaa,$0e38e3,$2aaaaa,$2aaaaa,$0e38e3
	dc	$38e38e,$2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$d55557,$38e38e,$0e38e3,$e38e3a,$38e38e,$0e38e3
	dc	$f1c71e,$38e38e,$0e38e3,$000000,$38e38e,$0e38e3,$0e38e3,$38e38e,$0e38e3,$1c71c7,$38e38e,$0e38e3
	dc	$2aaaaa,$38e38e,$0e38e3,$38e38e,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$d55557,$c71c73,$1c71c7
	dc	$e38e3a,$c71c73,$1c71c7,$f1c71e,$c71c73,$1c71c7,$000000,$c71c73,$1c71c7,$0e38e3,$c71c73,$1c71c7
	dc	$1c71c7,$c71c73,$1c71c7,$2aaaaa,$c71c73,$1c71c7,$38e38e,$c71c73,$1c71c7,$c71c73,$d55557,$1c71c7
	dc	$d55557,$d55557,$1c71c7,$e38e3a,$d55557,$1c71c7,$f1c71e,$d55557,$1c71c7,$000000,$d55557,$1c71c7
	dc	$0e38e3,$d55557,$1c71c7,$1c71c7,$d55557,$1c71c7,$2aaaaa,$d55557,$1c71c7,$38e38e,$d55557,$1c71c7
	dc	$c71c73,$e38e3a,$1c71c7,$d55557,$e38e3a,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$f1c71e,$e38e3a,$1c71c7
	dc	$000000,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$1c71c7,$1c71c7,$e38e3a,$1c71c7,$2aaaaa,$e38e3a,$1c71c7
	dc	$38e38e,$e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$d55557,$f1c71e,$1c71c7,$e38e3a,$f1c71e,$1c71c7
	dc	$f1c71e,$f1c71e,$1c71c7,$000000,$f1c71e,$1c71c7,$0e38e3,$f1c71e,$1c71c7,$1c71c7,$f1c71e,$1c71c7
	dc	$2aaaaa,$f1c71e,$1c71c7,$38e38e,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$d55557,$000000,$1c71c7
	dc	$e38e3a,$000000,$1c71c7,$f1c71e,$000000,$1c71c7,$000000,$000000,$1c71c7,$0e38e3,$000000,$1c71c7
	dc	$1c71c7,$000000,$1c71c7,$2aaaaa,$000000,$1c71c7,$38e38e,$000000,$1c71c7,$c71c73,$0e38e3,$1c71c7
	dc	$d55557,$0e38e3,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$f1c71e,$0e38e3,$1c71c7,$000000,$0e38e3,$1c71c7
	dc	$0e38e3,$0e38e3,$1c71c7,$1c71c7,$0e38e3,$1c71c7,$2aaaaa,$0e38e3,$1c71c7,$38e38e,$0e38e3,$1c71c7
	dc	$c71c73,$1c71c7,$1c71c7,$d55557,$1c71c7,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$f1c71e,$1c71c7,$1c71c7
	dc	$000000,$1c71c7,$1c71c7,$0e38e3,$1c71c7,$1c71c7,$1c71c7,$1c71c7,$1c71c7,$2aaaaa,$1c71c7,$1c71c7
	dc	$38e38e,$1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$d55557,$2aaaaa,$1c71c7,$e38e3a,$2aaaaa,$1c71c7
	dc	$f1c71e,$2aaaaa,$1c71c7,$000000,$2aaaaa,$1c71c7,$0e38e3,$2aaaaa,$1c71c7,$1c71c7,$2aaaaa,$1c71c7
	dc	$2aaaaa,$2aaaaa,$1c71c7,$38e38e,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$d55557,$38e38e,$1c71c7
	dc	$e38e3a,$38e38e,$1c71c7,$f1c71e,$38e38e,$1c71c7,$000000,$38e38e,$1c71c7,$0e38e3,$38e38e,$1c71c7
	dc	$1c71c7,$38e38e,$1c71c7,$2aaaaa,$38e38e,$1c71c7,$38e38e,$38e38e,$1c71c7,$c71c73,$c71c73,$2aaaaa
	dc	$d55557,$c71c73,$2aaaaa,$e38e3a,$c71c73,$2aaaaa,$f1c71e,$c71c73,$2aaaaa,$000000,$c71c73,$2aaaaa
	dc	$0e38e3,$c71c73,$2aaaaa,$1c71c7,$c71c73,$2aaaaa,$2aaaaa,$c71c73,$2aaaaa,$38e38e,$c71c73,$2aaaaa
	dc	$c71c73,$d55557,$2aaaaa,$d55557,$d55557,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$f1c71e,$d55557,$2aaaaa
	dc	$000000,$d55557,$2aaaaa,$0e38e3,$d55557,$2aaaaa,$1c71c7,$d55557,$2aaaaa,$2aaaaa,$d55557,$2aaaaa
	dc	$38e38e,$d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$e38e3a,$e38e3a,$2aaaaa
	dc	$f1c71e,$e38e3a,$2aaaaa,$000000,$e38e3a,$2aaaaa,$0e38e3,$e38e3a,$2aaaaa,$1c71c7,$e38e3a,$2aaaaa
	dc	$2aaaaa,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$d55557,$f1c71e,$2aaaaa
	dc	$e38e3a,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$2aaaaa,$000000,$f1c71e,$2aaaaa,$0e38e3,$f1c71e,$2aaaaa
	dc	$1c71c7,$f1c71e,$2aaaaa,$2aaaaa,$f1c71e,$2aaaaa,$38e38e,$f1c71e,$2aaaaa,$c71c73,$000000,$2aaaaa
	dc	$d55557,$000000,$2aaaaa,$e38e3a,$000000,$2aaaaa,$f1c71e,$000000,$2aaaaa,$000000,$000000,$2aaaaa
	dc	$0e38e3,$000000,$2aaaaa,$1c71c7,$000000,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$38e38e,$000000,$2aaaaa
	dc	$c71c73,$0e38e3,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$f1c71e,$0e38e3,$2aaaaa
	dc	$000000,$0e38e3,$2aaaaa,$0e38e3,$0e38e3,$2aaaaa,$1c71c7,$0e38e3,$2aaaaa,$2aaaaa,$0e38e3,$2aaaaa
	dc	$38e38e,$0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$e38e3a,$1c71c7,$2aaaaa
	dc	$f1c71e,$1c71c7,$2aaaaa,$000000,$1c71c7,$2aaaaa,$0e38e3,$1c71c7,$2aaaaa,$1c71c7,$1c71c7,$2aaaaa
	dc	$2aaaaa,$1c71c7,$2aaaaa,$38e38e,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$d55557,$2aaaaa,$2aaaaa
	dc	$e38e3a,$2aaaaa,$2aaaaa,$f1c71e,$2aaaaa,$2aaaaa,$000000,$2aaaaa,$2aaaaa,$0e38e3,$2aaaaa,$2aaaaa
	dc	$1c71c7,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$2aaaaa,$38e38e,$2aaaaa,$2aaaaa,$c71c73,$38e38e,$2aaaaa
	dc	$d55557,$38e38e,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$f1c71e,$38e38e,$2aaaaa,$000000,$38e38e,$2aaaaa
	dc	$0e38e3,$38e38e,$2aaaaa,$1c71c7,$38e38e,$2aaaaa,$2aaaaa,$38e38e,$2aaaaa,$38e38e,$38e38e,$2aaaaa
	dc	$c71c73,$c71c73,$38e38e,$d55557,$c71c73,$38e38e,$e38e3a,$c71c73,$38e38e,$f1c71e,$c71c73,$38e38e
	dc	$000000,$c71c73,$38e38e,$0e38e3,$c71c73,$38e38e,$1c71c7,$c71c73,$38e38e,$2aaaaa,$c71c73,$38e38e
	dc	$38e38e,$c71c73,$38e38e,$c71c73,$d55557,$38e38e,$d55557,$d55557,$38e38e,$e38e3a,$d55557,$38e38e
	dc	$f1c71e,$d55557,$38e38e,$000000,$d55557,$38e38e,$0e38e3,$d55557,$38e38e,$1c71c7,$d55557,$38e38e
	dc	$2aaaaa,$d55557,$38e38e,$38e38e,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$d55557,$e38e3a,$38e38e
	dc	$e38e3a,$e38e3a,$38e38e,$f1c71e,$e38e3a,$38e38e,$000000,$e38e3a,$38e38e,$0e38e3,$e38e3a,$38e38e
	dc	$1c71c7,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$38e38e,$38e38e,$e38e3a,$38e38e,$c71c73,$f1c71e,$38e38e
	dc	$d55557,$f1c71e,$38e38e,$e38e3a,$f1c71e,$38e38e,$f1c71e,$f1c71e,$38e38e,$000000,$f1c71e,$38e38e
	dc	$0e38e3,$f1c71e,$38e38e,$1c71c7,$f1c71e,$38e38e,$2aaaaa,$f1c71e,$38e38e,$38e38e,$f1c71e,$38e38e
	dc	$c71c73,$000000,$38e38e,$d55557,$000000,$38e38e,$e38e3a,$000000,$38e38e,$f1c71e,$000000,$38e38e
	dc	$000000,$000000,$38e38e,$0e38e3,$000000,$38e38e,$1c71c7,$000000,$38e38e,$2aaaaa,$000000,$38e38e
	dc	$38e38e,$000000,$38e38e,$c71c73,$0e38e3,$38e38e,$d55557,$0e38e3,$38e38e,$e38e3a,$0e38e3,$38e38e
	dc	$f1c71e,$0e38e3,$38e38e,$000000,$0e38e3,$38e38e,$0e38e3,$0e38e3,$38e38e,$1c71c7,$0e38e3,$38e38e
	dc	$2aaaaa,$0e38e3,$38e38e,$38e38e,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$d55557,$1c71c7,$38e38e
	dc	$e38e3a,$1c71c7,$38e38e,$f1c71e,$1c71c7,$38e38e,$000000,$1c71c7,$38e38e,$0e38e3,$1c71c7,$38e38e
	dc	$1c71c7,$1c71c7,$38e38e,$2aaaaa,$1c71c7,$38e38e,$38e38e,$1c71c7,$38e38e,$c71c73,$2aaaaa,$38e38e
	dc	$d55557,$2aaaaa,$38e38e,$e38e3a,$2aaaaa,$38e38e,$f1c71e,$2aaaaa,$38e38e,$000000,$2aaaaa,$38e38e
	dc	$0e38e3,$2aaaaa,$38e38e,$1c71c7,$2aaaaa,$38e38e,$2aaaaa,$2aaaaa,$38e38e,$38e38e,$2aaaaa,$38e38e
	dc	$c71c73,$38e38e,$38e38e,$d55557,$38e38e,$38e38e,$e38e3a,$38e38e,$38e38e,$f1c71e,$38e38e,$38e38e
	dc	$000000,$38e38e,$38e38e,$0e38e3,$38e38e,$38e38e,$1c71c7,$38e38e,$38e38e,$2aaaaa,$38e38e,$38e38e
	dc	$38e38e,$38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73,$c71c73
	dc	$f1c71e,$c71c73,$c71c73,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73,$c71c73
	dc	$2aaaaa,$c71c73,$c71c73,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$c71c73,$d55557,$d55557,$c71c73
	dc	$e38e3a,$d55557,$c71c73,$f1c71e,$d55557,$c71c73,$000000,$d55557,$c71c73,$0e38e3,$d55557,$c71c73
	dc	$1c71c7,$d55557,$c71c73,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a,$c71c73
	dc	$d55557,$e38e3a,$c71c73,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a,$c71c73
	dc	$0e38e3,$e38e3a,$c71c73,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a,$c71c73
	dc	$c71c73,$f1c71e,$c71c73,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e,$c71c73
	dc	$000000,$f1c71e,$c71c73,$0e38e3,$f1c71e,$c71c73,$1c71c7,$f1c71e,$c71c73,$2aaaaa,$f1c71e,$c71c73
	dc	$38e38e,$f1c71e,$c71c73,$c71c73,$000000,$c71c73,$d55557,$000000,$c71c73,$e38e3a,$000000,$c71c73
	dc	$f1c71e,$000000,$c71c73,$000000,$000000,$c71c73,$0e38e3,$000000,$c71c73,$1c71c7,$000000,$c71c73
	dc	$2aaaaa,$000000,$c71c73,$38e38e,$000000,$c71c73,$c71c73,$0e38e3,$c71c73,$d55557,$0e38e3,$c71c73
	dc	$e38e3a,$0e38e3,$c71c73,$f1c71e,$0e38e3,$c71c73,$000000,$0e38e3,$c71c73,$0e38e3,$0e38e3,$c71c73
	dc	$1c71c7,$0e38e3,$c71c73,$2aaaaa,$0e38e3,$c71c73,$38e38e,$0e38e3,$c71c73,$c71c73,$1c71c7,$c71c73
	dc	$d55557,$1c71c7,$c71c73,$e38e3a,$1c71c7,$c71c73,$f1c71e,$1c71c7,$c71c73,$000000,$1c71c7,$c71c73
	dc	$0e38e3,$1c71c7,$c71c73,$1c71c7,$1c71c7,$c71c73,$2aaaaa,$1c71c7,$c71c73,$38e38e,$1c71c7,$c71c73
	dc	$c71c73,$2aaaaa,$c71c73,$d55557,$2aaaaa,$c71c73,$e38e3a,$2aaaaa,$c71c73,$f1c71e,$2aaaaa,$c71c73
	dc	$000000,$2aaaaa,$c71c73,$0e38e3,$2aaaaa,$c71c73,$1c71c7,$2aaaaa,$c71c73,$2aaaaa,$2aaaaa,$c71c73
	dc	$38e38e,$2aaaaa,$c71c73,$c71c73,$38e38e,$c71c73,$d55557,$38e38e,$c71c73,$e38e3a,$38e38e,$c71c73
	dc	$f1c71e,$38e38e,$c71c73,$000000,$38e38e,$c71c73,$0e38e3,$38e38e,$c71c73,$1c71c7,$38e38e,$c71c73
	dc	$2aaaaa,$38e38e,$c71c73,$38e38e,$38e38e,$c71c73,$c71c73,$c71c73,$d55557,$d55557,$c71c73,$d55557
	dc	$e38e3a,$c71c73,$d55557,$f1c71e,$c71c73,$d55557,$000000,$c71c73,$d55557,$0e38e3,$c71c73,$d55557
	dc	$1c71c7,$c71c73,$d55557,$2aaaaa,$c71c73,$d55557,$38e38e,$c71c73,$d55557,$c71c73,$d55557,$d55557
	dc	$d55557,$d55557,$d55557,$e38e3a,$d55557,$d55557,$f1c71e,$d55557,$d55557,$000000,$d55557,$d55557
	dc	$0e38e3,$d55557,$d55557,$1c71c7,$d55557,$d55557,$2aaaaa,$d55557,$d55557,$38e38e,$d55557,$d55557
	dc	$c71c73,$e38e3a,$d55557,$d55557,$e38e3a,$d55557,$e38e3a,$e38e3a,$d55557,$f1c71e,$e38e3a,$d55557
	dc	$000000,$e38e3a,$d55557,$0e38e3,$e38e3a,$d55557,$1c71c7,$e38e3a,$d55557,$2aaaaa,$e38e3a,$d55557
	dc	$38e38e,$e38e3a,$d55557,$c71c73,$f1c71e,$d55557,$d55557,$f1c71e,$d55557,$e38e3a,$f1c71e,$d55557
	dc	$f1c71e,$f1c71e,$d55557,$000000,$f1c71e,$d55557,$0e38e3,$f1c71e,$d55557,$1c71c7,$f1c71e,$d55557
	dc	$2aaaaa,$f1c71e,$d55557,$38e38e,$f1c71e,$d55557,$c71c73,$000000,$d55557,$d55557,$000000,$d55557
	dc	$e38e3a,$000000,$d55557,$f1c71e,$000000,$d55557,$000000,$000000,$d55557,$0e38e3,$000000,$d55557
	dc	$1c71c7,$000000,$d55557,$2aaaaa,$000000,$d55557,$38e38e,$000000,$d55557,$c71c73,$0e38e3,$d55557
	dc	$d55557,$0e38e3,$d55557,$e38e3a,$0e38e3,$d55557,$f1c71e,$0e38e3,$d55557,$000000,$0e38e3,$d55557
	dc	$0e38e3,$0e38e3,$d55557,$1c71c7,$0e38e3,$d55557,$2aaaaa,$0e38e3,$d55557,$38e38e,$0e38e3,$d55557
	dc	$c71c73,$1c71c7,$d55557,$d55557,$1c71c7,$d55557,$e38e3a,$1c71c7,$d55557,$f1c71e,$1c71c7,$d55557
	dc	$000000,$1c71c7,$d55557,$0e38e3,$1c71c7,$d55557,$1c71c7,$1c71c7,$d55557,$2aaaaa,$1c71c7,$d55557
	dc	$38e38e,$1c71c7,$d55557,$c71c73,$2aaaaa,$d55557,$d55557,$2aaaaa,$d55557,$e38e3a,$2aaaaa,$d55557
	dc	$f1c71e,$2aaaaa,$d55557,$000000,$2aaaaa,$d55557,$0e38e3,$2aaaaa,$d55557,$1c71c7,$2aaaaa,$d55557
	dc	$2aaaaa,$2aaaaa,$d55557,$38e38e,$2aaaaa,$d55557,$c71c73,$38e38e,$d55557,$d55557,$38e38e,$d55557
	dc	$e38e3a,$38e38e,$d55557,$f1c71e,$38e38e,$d55557,$000000,$38e38e,$d55557,$0e38e3,$38e38e,$d55557
	dc	$1c71c7,$38e38e,$d55557,$2aaaaa,$38e38e,$d55557,$38e38e,$38e38e,$d55557,$c71c73,$c71c73,$e38e3a
	dc	$d55557,$c71c73,$e38e3a,$e38e3a,$c71c73,$e38e3a,$f1c71e,$c71c73,$e38e3a,$000000,$c71c73,$e38e3a
	dc	$0e38e3,$c71c73,$e38e3a,$1c71c7,$c71c73,$e38e3a,$2aaaaa,$c71c73,$e38e3a,$38e38e,$c71c73,$e38e3a
	dc	$c71c73,$d55557,$e38e3a,$d55557,$d55557,$e38e3a,$e38e3a,$d55557,$e38e3a,$f1c71e,$d55557,$e38e3a
	dc	$000000,$d55557,$e38e3a,$0e38e3,$d55557,$e38e3a,$1c71c7,$d55557,$e38e3a,$2aaaaa,$d55557,$e38e3a
	dc	$38e38e,$d55557,$e38e3a,$c71c73,$e38e3a,$e38e3a,$d55557,$e38e3a,$e38e3a,$e38e3a,$e38e3a,$e38e3a
	dc	$f1c71e,$e38e3a,$e38e3a,$000000,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$e38e3a,$1c71c7,$e38e3a,$e38e3a
	dc	$2aaaaa,$e38e3a,$e38e3a,$38e38e,$e38e3a,$e38e3a,$c71c73,$f1c71e,$e38e3a,$d55557,$f1c71e,$e38e3a
	dc	$e38e3a,$f1c71e,$e38e3a,$f1c71e,$f1c71e,$e38e3a,$000000,$f1c71e,$e38e3a,$0e38e3,$f1c71e,$e38e3a
	dc	$1c71c7,$f1c71e,$e38e3a,$2aaaaa,$f1c71e,$e38e3a,$38e38e,$f1c71e,$e38e3a,$c71c73,$000000,$e38e3a
	dc	$d55557,$000000,$e38e3a,$e38e3a,$000000,$e38e3a,$f1c71e,$000000,$e38e3a,$000000,$000000,$e38e3a
	dc	$0e38e3,$000000,$e38e3a,$1c71c7,$000000,$e38e3a,$2aaaaa,$000000,$e38e3a,$38e38e,$000000,$e38e3a
	dc	$c71c73,$0e38e3,$e38e3a,$d55557,$0e38e3,$e38e3a,$e38e3a,$0e38e3,$e38e3a,$f1c71e,$0e38e3,$e38e3a
	dc	$000000,$0e38e3,$e38e3a,$0e38e3,$0e38e3,$e38e3a,$1c71c7,$0e38e3,$e38e3a,$2aaaaa,$0e38e3,$e38e3a
	dc	$38e38e,$0e38e3,$e38e3a,$c71c73,$1c71c7,$e38e3a,$d55557,$1c71c7,$e38e3a,$e38e3a,$1c71c7,$e38e3a
	dc	$f1c71e,$1c71c7,$e38e3a,$000000,$1c71c7,$e38e3a,$0e38e3,$1c71c7,$e38e3a,$1c71c7,$1c71c7,$e38e3a
	dc	$2aaaaa,$1c71c7,$e38e3a,$38e38e,$1c71c7,$e38e3a,$c71c73,$2aaaaa,$e38e3a,$d55557,$2aaaaa,$e38e3a
	dc	$e38e3a,$2aaaaa,$e38e3a,$f1c71e,$2aaaaa,$e38e3a,$000000,$2aaaaa,$e38e3a,$0e38e3,$2aaaaa,$e38e3a
	dc	$1c71c7,$2aaaaa,$e38e3a,$2aaaaa,$2aaaaa,$e38e3a,$38e38e,$2aaaaa,$e38e3a,$c71c73,$38e38e,$e38e3a
	dc	$d55557,$38e38e,$e38e3a,$e38e3a,$38e38e,$e38e3a,$f1c71e,$38e38e,$e38e3a,$000000,$38e38e,$e38e3a
	dc	$0e38e3,$38e38e,$e38e3a,$1c71c7,$38e38e,$e38e3a,$2aaaaa,$38e38e,$e38e3a,$38e38e,$38e38e,$e38e3a
	dc	$c71c73,$c71c73,$f1c71e,$d55557,$c71c73,$f1c71e,$e38e3a,$c71c73,$f1c71e,$f1c71e,$c71c73,$f1c71e
	dc	$000000,$c71c73,$f1c71e,$0e38e3,$c71c73,$f1c71e,$1c71c7,$c71c73,$f1c71e,$2aaaaa,$c71c73,$f1c71e
	dc	$38e38e,$c71c73,$f1c71e,$c71c73,$d55557,$f1c71e,$d55557,$d55557,$f1c71e,$e38e3a,$d55557,$f1c71e
	dc	$f1c71e,$d55557,$f1c71e,$000000,$d55557,$f1c71e,$0e38e3,$d55557,$f1c71e,$1c71c7,$d55557,$f1c71e
	dc	$2aaaaa,$d55557,$f1c71e,$38e38e,$d55557,$f1c71e,$c71c73,$e38e3a,$f1c71e,$d55557,$e38e3a,$f1c71e
	dc	$e38e3a,$e38e3a,$f1c71e,$f1c71e,$e38e3a,$f1c71e,$000000,$e38e3a,$f1c71e,$0e38e3,$e38e3a,$f1c71e
	dc	$1c71c7,$e38e3a,$f1c71e,$2aaaaa,$e38e3a,$f1c71e,$38e38e,$e38e3a,$f1c71e,$c71c73,$f1c71e,$f1c71e
	dc	$d55557,$f1c71e,$f1c71e,$e38e3a,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$f1c71e,$000000,$f1c71e,$f1c71e
	dc	$0e38e3,$f1c71e,$f1c71e,$1c71c7,$f1c71e,$f1c71e,$2aaaaa,$f1c71e,$f1c71e,$38e38e,$f1c71e,$f1c71e
	dc	$c71c73,$000000,$f1c71e,$d55557,$000000,$f1c71e,$e38e3a,$000000,$f1c71e,$f1c71e,$000000,$f1c71e
	dc	$000000,$000000,$f1c71e,$0e38e3,$000000,$f1c71e,$1c71c7,$000000,$f1c71e,$2aaaaa,$000000,$f1c71e
	dc	$38e38e,$000000,$f1c71e,$c71c73,$0e38e3,$f1c71e,$d55557,$0e38e3,$f1c71e,$e38e3a,$0e38e3,$f1c71e
	dc	$f1c71e,$0e38e3,$f1c71e,$000000,$0e38e3,$f1c71e,$0e38e3,$0e38e3,$f1c71e,$1c71c7,$0e38e3,$f1c71e

;; Sampling tables
table_quantizations_01
	dc	00,00,01,03,04,05,06,07,08,09,10,11,12,13,14,15
	dc	00,00,01,03,04,05,06,07,08,09,10,11,12,13,14,15
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
	dc	00,00,01,03,04,05,06,07,00,00,00,00,00,00,00,00
table_quantizations_23
	dc	00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
	dc	00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
	dc	00,00,02,04,05,06,07,08,09,10,11,12,13,14,15,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13,16
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,02,03,04,05,16,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00
	dc	00,00,01,16,00,00,00,00,00,00,00,00,00,00,00,00

;; A combination of the x, d and c tables. The `m' stands
;; for the multiplicator using 1.0/x. NOTE: Table c is
;; subtracted by 1.0.
table_xmdc
	dc	$000001,$100000,$200000,$2aaaab
	dc	$000003,$080000,$200000,$4ccccd
	dc	$000003,$080000,$100000,$124925
	dc	$000007,$040000,$200000,$638e39
	dc	$000007,$040000,$080000,$088889
	dc	$00000f,$020000,$040000,$042108
	dc	$00001f,$010000,$020000,$020821
	dc	$00003f,$008000,$010000,$010204
	dc	$00007f,$004000,$008000,$008081
	dc	$0000ff,$002000,$004000,$004020
	dc	$0001ff,$001000,$002000,$002008
	dc	$0003ff,$000800,$001000,$001002
	dc	$0007ff,$000400,$000800,$000801
	dc	$000fff,$000200,$000400,$000400
	dc	$001fff,$000100,$000200,$000200
	dc	$003fff,$000080,$000100,$000100
	dc	$007fff,$000040,$000080,$000080

;; The `multiply' table used in the last step of sample
;; requantization. NOTE: All values are divided by two.
table_multiple
	dc	$7fffff,$6597fb,$50a28c,$400000
	dc	$32cbfd,$285146,$200000,$1965ff
	dc	$1428a3,$100000,$0cb2ff,$0a1451
	dc	$080000,$065980,$050a29,$040000
	dc	$032cc0,$028514,$020000,$019660
	dc	$01428a,$010000,$00cb30,$00a145
	dc	$008000,$006598,$0050a3,$004000
	dc	$0032cc,$002851,$002000,$001966
	dc	$001429,$001000,$000cb3,$000a14
	dc	$000800,$000659,$00050a,$000400
	dc	$00032d,$000285,$000200,$000196
	dc	$000143,$000100,$0000cb,$0000a1
	dc	$000080,$000066,$000051,$000040
	dc	$000033,$000028,$000020,$000019
	dc	$000014,$000010,$00000d,$00000a
	dc	$000008,$000006,$000005,$000000

table_bits
	dc	5,7,3,10,4,5,6,7,8,9
	dc	10,11,12,13,14,15,16

table_translate_quantizations
	dc	table_quantizations_23
	dc	table_quantizations_23
	dc	table_quantizations_01
	dc	table_quantizations_01
table_translate_sblimit
	dc	27,30,8,12
table_translate_alloc
	dc	alloc0_bits0
	dc	alloc1_bits0
	dc	alloc2_bits0
	dc	alloc3_bits0
alloc0_bits0	;sblimit=27
alloc1_bits0	;sblimit=30
	dc	4,4,4,4,4,4,4,4,4,4,4	; 11
	dc	3,3,3,3,3,3,3,3,3,3,3,3	;+12
	dc	2,2,2,2			;+04 = 27
	dc	2,2,2			;+03 = 30
alloc2_bits0	;sblimit=08
alloc3_bits0	;sblimit=12
	dc	4,4			; 02
	dc	3,3,3,3,3,3		;+06 = 08
	dc	3,3,3,3			;+04 = 12
