home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
M.u.C.S. Disc 2000
/
MUCS2000.iso
/
falcon
/
m_analyz
/
source
/
dsp.asm
< prev
next >
Wrap
Assembly Source File
|
1995-01-03
|
24KB
|
978 lines
; Music Analyzer
; by Roel van de Kraats
; 1995
; DSP Program
;tabsize=8
I_SSIRD equ $000C
I_SSIRDE equ $000E
M_BCR equ $FFFE
M_PBC equ $FFE0
M_PCC equ $FFE1
HCR equ $FFE8
HSR equ $FFE9
HRX equ $FFEB
HTX equ $FFEB
M_RX equ $FFEF
M_CRA equ $FFEC
M_CRB equ $FFED
M_SR equ $FFEE
M_IPR equ $FFFF
M_UU equ $FFEA ;unused memory
VMAIN equ $0040
POINTS equ $400
maxncoef equ 80
ncoef2K equ 80
ncoef500 equ 80
ncoef125 equ 80
ncoef30 equ 64
ncoef48 equ 48
ncoef78 equ 32
ncoef126 equ 70
ncoef202 equ 48
ncoef328 equ 32
ncoef528 equ 64
ncoef852 equ 48
ncoef1K4 equ 32
ncoef2K2 equ 80
ncoef3K6 equ 64
ncoef5K8 equ 50
ncoef9K3 equ 32
ncoef15K equ 25
ORG X:0
states dsm maxncoef
LeftBuf dsm POINTS*4
RightBuf dsm POINTS*4
ORG Y:0
;coefficients for fir filter, made using the routines of 'firdemo'
coef2K
;Lowpass Filter, upper frequency: 2000 Hz.
;Sample frequency: 32780 Hz.
;80 coefficients
;Using Bartlett Windowing
dc $113994,$109896,$0f3253,$0d2894,$0aa9f6,$07ecf0,$052a38,$029722,$0060a5,$fea77d
dc $fd7dd3,$fce68f,$fcd659,$fd360e,$fde646,$fec37c,$ffaa55,$007b78,$011ea1,$018494
dc $01a7d6,$018c30,$013d1c,$00cb6f,$004a9c,$ffcde3,$ff65d7,$ff1e76,$fefe10,$ff0503
dc $ff2e49,$ff70ad,$ffc077,$001140,$0057b3,$008b03,$00a5e2,$00a6ea,$00906e,$0067d2
dc $003480,$fffeb0,$ffce30,$ffa951,$ff942a,$ff9036,$ff9c60,$ffb560,$ffd66f,$fffa13
dc $001afd,$0034c4,$004476,$0048dd,$004284,$003377,$001ecb,$000817,$fff2db,$ffe1fc
dc $ffd769,$ffd3eb,$ffd724,$ffdfbf,$ffebc3,$fff8ee,$00051f,$000ea1,$00146c,$001633
dc $00145d,$000fdd,$0009f5,$0003ef,$fffee8,$fffb99,$fffa43,$fffab2,$fffc52,$fffe5a
coef500
;Lowpass Filter, upper frequency: 500 Hz.
;Sample frequency: 8195 Hz.
;80 coefficients
;Using Bartlett Windowing
dc $113994,$109896,$0f3253,$0d2894,$0aa9f6,$07ecf0,$052a38,$029722,$0060a5,$fea77d
dc $fd7dd3,$fce68f,$fcd659,$fd360e,$fde646,$fec37c,$ffaa55,$007b78,$011ea1,$018494
dc $01a7d6,$018c30,$013d1c,$00cb6f,$004a9c,$ffcde3,$ff65d7,$ff1e76,$fefe10,$ff0503
dc $ff2e49,$ff70ad,$ffc077,$001140,$0057b3,$008b03,$00a5e2,$00a6ea,$00906e,$0067d2
dc $003480,$fffeb0,$ffce30,$ffa951,$ff942a,$ff9036,$ff9c60,$ffb560,$ffd66f,$fffa13
dc $001afd,$0034c4,$004476,$0048dd,$004284,$003377,$001ecb,$000817,$fff2db,$ffe1fc
dc $ffd769,$ffd3eb,$ffd724,$ffdfbf,$ffebc3,$fff8ee,$00051f,$000ea1,$00146c,$001633
dc $00145d,$000fdd,$0009f5,$0003ef,$fffee8,$fffb99,$fffa43,$fffab2,$fffc52,$fffe5a
coef9K3
;Bandpass Filter, lower frequency: 9000 Hz. upper frequency: 10000 Hz.
;Sample frequency: 32780 Hz.
;32 coefficients
;Using Bartlett Windowing
dc $0f1766,$fc62f6,$f3a95c,$0932de,$06f486,$f45ee8,$ff3076,$0abfa4,$fbba42,$f89379
dc $071aae,$031b27,$f89647,$00bfeb,$05c40b,$fcd4cb,$fccb48,$03e246,$00c9b7,$fcbd94
dc $00cb98,$01ff76,$fea267,$ff3729,$012cea,$00071c,$ff545f,$0037a4,$003bcc,$ffd9e2
dc $fff86c,$0006dd
coef3K6
;Bandpass Filter, lower frequency: 3500 Hz. upper frequency: 3800 Hz.
;Sample frequency: 32780 Hz.
;64 coefficients
;Using Bartlett Windowing
dc $06ada8,$05076b,$011a95,$fccbf5,$fa1df1,$fa401a,$fd091f,$011628,$047b2c,$05acc3
dc $04341f,$00db42,$fd422a,$fb14cb,$fb440c,$fd9e5a,$00f3e5,$03af4d,$049645,$035694
dc $00a051,$fdc6e9,$fc1b62,$fc50ae,$fe31fd,$00c8a3,$02d9a8,$037b59,$027bfb,$006cb6
dc $fe518f,$fd21a4,$fd5633,$febbf8,$0097cc,$02075d,$026c7f,$01b05a,$004260,$fed93f
dc $fe1851,$fe4648,$ff35a3,$006550,$0144d2,$01787e,$00fdd0,$002234,$ff5584,$fef1ed
dc $ff14f2,$ff9a10,$003552,$009cde,$00ab79,$006c11,$000c0f,$ffbeeb,$ffa39d,$ffb939
dc $ffe641,$000bca,$001817,$000e43
ORG Y:2048
buf dsm POINTS
leftbuffaddr ds 1
rightbuffaddr ds 1
leftspec ds 14
rightspec ds 14
coef125
;Lowpass Filter, upper frequency: 125 Hz.
;Sample frequency: 2049 Hz.
;80 coefficients
;Using Bartlett Windowing
dc $113932,$10983d,$0f3215,$0d287c,$0aaa09,$07ed2e,$052a99,$029799,$006122,$fea7ef
dc $fd7e2a,$fce6c0,$fcd65f,$fd35e9,$fde5fc,$fec319,$ffa9e8,$007b10,$011e4d,$01845e
dc $01a7c7,$018c48,$013d55,$00cbc1,$004afb,$ffce40,$ff6625,$ff1eab,$fefe25,$ff04f6
dc $ff2e1d,$ff706a,$ffc028,$0010f0,$00576d,$008ad1,$00a5cb,$00a6ef,$00908d,$006806
dc $0034c0,$fffef4,$ffce6c,$ffa97e,$ff9442,$ff9037,$ff9c4a,$ffb539,$ffd63d,$fff9de
dc $001acc,$00349f,$004460,$0048d9,$004291,$003392,$001eef,$00083f,$fff2ff,$ffe219
dc $ffd77b,$ffd3f0,$ffd71d,$ffdfaf,$ffebac,$fff8d5,$000507,$000e8e,$001460,$00162e
dc $00145f,$000fe5,$0009ff,$0003fb,$fffef2,$fffba0,$fffa47,$fffab3,$fffc51,$fffe5a
coef15K
;Bandpass Filter, lower frequency: 14000 Hz. upper frequency: 15000 Hz.
;Sample frequency: 32780 Hz.
;25 coefficients
;Using Bartlett Windowing
dc $116a0c,$f0642d,$0bec60,$f8f799,$01bb9d,$033187,$f8e729,$098d40,$f599cd,$09be93
dc $f8177f,$05592f,$fd6eff,$0004ae,$01f4bf,$fcd3ca,$039c5b,$fc9cac,$02b6e3,$fe2a22
dc $00fa2d,$ffb1e3,$ffe6c9,$003c03,$ffd4f0
coef5K8
;Bandpass Filter, lower frequency: 5500 Hz. upper frequency: 6000 Hz.
;Sample frequency: 32780 Hz.
;50 coefficients
;Using Bartlett Windowing
dc $0909fd,$03ffe5,$fadf01,$f7a5b8,$fd8707,$05c550,$076c36,$010e84,$f9eaf6,$f9ad27
dc $002e16,$061461,$0522a3,$fecffd,$fa335e,$fc1040,$01efa8,$054b1f,$02cc89,$fd9530
dc $fb602f,$fe37bb,$02a467,$03dbdf,$00ee2e,$fd5c37,$fcefdd,$ffbb12,$0273c0,$024bcd
dc $ffce83,$fddebc,$fe64b4,$007773,$01ba28,$010782,$ff6cfb,$feb436,$ff6a9f,$008cfd
dc $00e1ec,$0045e8,$ff903d,$ff7a3a,$ffe97e,$004628,$003d6f,$0001b3,$ffe5ba,$fff463
coef2K2
;Bandpass Filter, lower frequency: 2100 Hz. upper frequency: 2300 Hz.
;Sample frequency: 32780 Hz.
;80 coefficients
;Using Bartlett Windowing
dc $053fa9,$04ba8e,$0366e8,$01850b,$ff6c73,$fd7be0,$fc088c,$fb4f87,$fb6bb1,$fc51fb
dc $fdd46b,$ffab30,$0181f1,$0306f5,$03f954,$0433ca,$03b258,$0291de,$0109ef,$ff6234
dc $fde54e,$fcd3b1,$fc58be,$fc83f2,$fd4745,$fe7abe,$ffe47e,$014394,$025ba6,$02ff50
dc $031771,$02a63c,$01c5b2,$00a202,$ff70ee,$fe67ec,$fdb2cb,$fd6c81,$fd9b4b,$fe30ab
dc $ff0d0a,$000637,$00ef66,$01a137,$020050,$02017c,$01aaa3,$0110ac,$0052da,$ff9492
dc $fef6d3,$fe9282,$fe749a,$fe9cb4,$fefe1f,$ff8318,$001163,$008f65,$00e8ad,$011135
dc $0106d4,$00d0b2,$007d1e,$001e32,$ffc617,$ff839f,$ff5fd7,$ff5cf3,$ff76ac,$ffa3d9
dc $ffd8dd,$000a4b,$002f37,$0042c6,$0044ab,$00389e,$0024f4,$0010c9,$00021f,$fffc72
coef1K4
;Bandpass Filter, lower frequency: 1350 Hz. upper frequency: 1450 Hz.
;Sample frequency: 8195 Hz.
;32 coefficients
;Using Bartlett Windowing
dc $0c683a,$05bbcd,$f9abbb,$f4d0c0,$fb9a2f,$0655a4,$09de75,$033227,$f9deaa,$f78005
dc $fdd8e6,$05bbcd,$071dfb,$014941,$fad4fe,$fa3db9,$ff6497,$047631,$047608,$001e83
dc $fc5a73,$fcbe95,$002e50,$02c1ee,$022b61,$ffb256,$fe2b88,$fec69a,$0043ba,$00e642
dc $006f5b,$ffe9f5
coef852
;Bandpass Filter, lower frequency: 840 Hz. upper frequency: 870 Hz.
;Sample frequency: 8195 Hz.
;48 coefficients
;Using Bartlett Windowing
dc $082e8a,$0659c2,$020372,$fd0b0e,$f97dda,$f8be04,$faf930,$ff239d,$037400,$062779
dc $06399e,$03c599,$ffec7e,$fc5182,$fa67b3,$fadce8,$fd5dd3,$00c6f0,$03a815,$04dfa8
dc $040c05,$01a6e4,$fec4cb,$fc9928,$fbf64c,$fcfe98,$ff23f8,$017048,$02f2f6,$032347
dc $020f3a,$004792,$fe974a,$fda9aa,$fdc6a1,$fec00d,$001303,$012972,$019c33,$01589e
dc $009c32,$ffcd36,$ff4664,$ff2f62,$ff732d,$ffd590,$00195d,$002227
coef528
;Bandpass Filter, lower frequency: 510 Hz. upper frequency: 545 Hz.
;Sample frequency: 8195 Hz.
;64 coefficients
;Using Bartlett Windowing
dc $064086,$05a85d,$042e34,$0215a6,$ffb998,$fd7cd7,$fbb9e6,$fab4b3,$fa9064,$fb4ac9
dc $fcbe06,$fea7f5,$00b5d0,$029234,$03f2f5,$04a4b5,$04923d,$03c6bf,$026aaa,$00bbf0
dc $ff030f,$fd86e9,$fc815a,$fc1672,$fc4fa4,$fd1b82,$fe51e3,$ffbb88,$011bdc,$023b18
dc $02ef11,$032159,$02d1c9,$02153d,$0110ea,$fff346,$feebd2,$fe2339,$fdb513,$fdac35
dc $fe021b,$fea139,$ff69b8,$00378f,$00e8ee,$0163c1,$019977,$01887f,$013b5b,$00c5b1
dc $003ff1,$ffc28e,$ff6196,$ff2987,$ff1dd9,$ff3957,$ff7020,$ffb2c9,$fff1e3,$002136
dc $003a02,$003be9,$002c5f,$0014d1
coef328
;Bandpass Filter, lower frequency: 320 Hz. upper frequency: 340 Hz.
;Sample frequency: 2049 Hz.
;32 coefficients
;Using Bartlett Windowing
dc $0c45a9,$064d78,$faf791,$f4f4c8,$f964ba,$0382a2,$09b19e,$06a04e,$fdd227,$f7b9d6
dc $f99e5b,$0111a4,$06d634,$05e687,$ffccc8,$fa915f,$fac7fd,$ff9554,$041b67,$046096
dc $00c7c7,$fd18db,$fc944b,$ff19ba,$01dac9,$02655e,$00ca92,$ff02be,$fea66a,$ff84e5
dc $005352,$0053f5
coef202
;Bandpass Filter, lower frequency: 195 Hz. upper frequency: 210 Hz.
;Sample frequency: 2049 Hz.
;48 coefficients
;Using Bartlett Windowing
dc $0851dd,$06a006,$029303,$fdc180,$f9f923,$f8917d,$f9f256,$fd7846,$01bdab,$052826
dc $0682cb,$056b00,$0269c8,$feb45f,$fbb074,$fa6d54,$fb44f2,$fdc5cd,$00e9b7,$038049
dc $04a21b,$040120,$01fa72,$ff6733,$fd42c2,$fc4b0a,$fcbf50,$fe539a,$005942,$0208e7
dc $02cef0,$027d5a,$01524c,$ffd502,$fe9ab0,$fe0c82,$fe453f,$ff1152,$000d6e,$00d410
dc $0125c7,$00fc7e,$008455,$00006e,$ffa9c2,$ff976a,$ffb9f5,$ffe9ca
coef126
;Bandpass Filter, lower frequency: 120 Hz. upper frequency: 134 Hz.
;Sample frequency: 2049 Hz.
;70 coefficients
;Using Bartlett Windowing
dc $05fadc,$0573e4,$04220f,$023d89,$0012ca,$fdf67b,$fc3885,$fb1832,$fabb35,$fb28d1
dc $fc49c3,$fdeccc,$ffcef8,$01a650,$032d3a,$042cc1,$04844c,$042da6,$033ce4,$01dc4a
dc $004509,$feb602,$fd6a0d,$fc8f50,$fc40db,$fc837b,$fd460c,$fe6521,$ffb145,$00f6c2
dc $0205a8,$02b8d8,$02fb0c,$02c929,$0231b1,$015182,$004e9c,$ff51c5,$fe802a,$fdf5f1
dc $fdc284,$fde716,$fe5776,$fefce1,$ffba51,$00716c,$010758,$01689b,$018b85,$0170e5
dc $0122f3,$00b2e0,$00356d,$ffbf44,$ff61a3,$ff27ea,$ff165b,$ff2a2c,$ff5ac7,$ff9bf1
dc $ffe054,$001bfd,$004658,$005b56,$005ba3,$004be8,$00335b,$0019f1,$00068b,$fffd8b
coef78
;Bandpass Filter, lower frequency: 73 Hz. upper frequency: 85 Hz.
;Sample frequency: 512 Hz.
;32 coefficients
;Using Bartlett Windowing
dc $0dc1ff,$07887f,$fb5ff7,$f3f7c1,$f73572,$0186f5,$09a9bb,$09013d,$00f432,$f8f9b8
dc $f7af90,$fd5fa9,$047b33,$06f8f4,$0371e9,$fdabd0,$fab58a,$fc7fa6,$00c0ce,$039428
dc $02fd91,$003000,$fde902,$fdd697,$ff7224,$00fc0e,$0143e8,$007f6d,$ffaf7b,$ff7f04
dc $ffc8cf,$000790
coef48
;Bandpass Filter, lower frequency: 44 Hz. upper frequency: 54 Hz.
;Sample frequency: 512 Hz.
;48 coefficients
;Using Bartlett Windowing
dc $0a177b,$08249f,$0378ce,$fdd387,$f936da,$f72e7e,$f84a21,$fbf85f,$00caa6,$0503cd
dc $0739c9,$06cf5b,$041cbb,$003e37,$fca104,$fa7c70,$fa6959,$fc3ade,$ff20c0,$020070
dc $03dfc0,$043920,$031d63,$011c4a,$ff0299,$fd8a60,$fd1c03,$fdb4bc,$fef704,$005951
dc $015dc3,$01bd01,$01765b,$00c366,$fff84a,$ff6005,$ff22e1,$ff3f0d,$ff92cd,$fff0d1
dc $003477,$004ddf,$004289,$0024d8,$000849,$fff86f,$fff638,$fffb3e
coef30
;Bandpass Filter, lower frequency: 20 Hz. upper frequency: 32 Hz.
;Sample frequency: 512 Hz.
;64 coefficients
;Using Bartlett Windowing
dc $09c0c5,$091b9a,$078fbe,$054f28,$029db2,$ffc8c8,$fd1e46,$fae3b1,$f94ec0,$f88021
dc $f880ed,$f94303,$faa413,$fc72d2,$fe75a2,$0071bb,$0231f9,$038c7f,$046692,$04b659
dc $04826e,$03df85,$02ec91,$01ce08,$00a8f7,$ff9e7d,$fec845,$fe364d,$fdee2a,$fdebb6
dc $fe22ea,$fe8286,$fef716,$ff6dd5,$ffd723,$002827,$005b93,$00717a,$006e67,$0059e7
dc $003cd4,$001fa8,$000925,$fffd6d,$fffdb0,$000861,$0019e6,$002d85,$003e71,$0048ba
dc $0049fc,$0041b3,$003135,$001b4a,$000391,$ffedc5,$ffdd09,$ffd35e,$ffd159,$ffd61f
dc $ffdfa8,$ffeb37,$fff5ee,$fffd5e
ORG P:0
jmp VMAIN
ORG P:I_SSIRD
jsr Receive
ORG P:I_SSIRDE
jsr RecErr
ORG P:VMAIN
jmp DoMain
RecErr movep x:M_SR,x:M_UU
rti
Receive
jclr #3,X:M_SR,RecRight
movep x:M_RX,x:(r0)+
rti
RecRight
movep x:M_RX,x:(r1)+
rti
;#ncoef-1 in n5
;#coef in x1
;input in r6
;coef in r5
do_spec:
move n5,m3
move #states,r3
;rep x1 ;using the repeat instruction gives
;problems with the SSI interrupt,
;because the rep instruction is not
;interruptable. this is a little slower,
;but at least it works
do x1,rep_spec1_1
move r7,x:(r3)+
rep_spec1_1 move r6,r2
move r7,y1
move #buf,r6
do #POINTS/4,LoopSpec1_1
move r5,r4
move x:(r2)+,x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep n5
do n5,rep_spec1_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
rep_spec1_2 macr x0,y0,a (r3)-
move a,y:(r6)+
LoopSpec1_1
move #POINTS/16,n6
move #buf,r6
nop
move y:(r6)+n6,x0
do #POINTS/16*3,LoopSpec1_2
move y:(r6)+,a
abs a
cmp y1,a
jmi Spec1NotMore
move a,y1 ;get maximum value
Spec1NotMore
nop
LoopSpec1_2
rts
;#ncoef-1 in n5
;#coef in x1
;input in r6
;coef in r5
do_spec2:
move n5,m3
move #states,r3
;rep x1
do x1,rep_spec2_1
move r7,x:(r3)+
rep_spec2_1 move r6,r2
move r7,y1
move #buf,r6
move #4,n2
do #POINTS/8,LoopSpec2_1
move r5,r4
move x:(r2)+n2,x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep n5
do n5,rep_spec2_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
rep_spec2_2 macr x0,y0,a (r3)-
move a,y:(r6)+
LoopSpec2_1
move #POINTS/32,n6
move #buf,r6
nop
move y:(r6)+n6,x0
do #POINTS/32*3,LoopSpec2_2
move y:(r6)+,a
abs a
cmp y1,a
jmi Spec2NotMore
move a,y1
Spec2NotMore
nop
LoopSpec2_2
rts
;#ncoef-1 in n5
;#coef in x1
;input in r6
;coef in r5
do_spec3:
move n5,m3
move #states,r3
;rep x1
do x1,rep_spec3_1
move r7,x:(r3)+
rep_spec3_1 move r6,r2
move r7,y1
move #buf,r6
move #16,n2
do #POINTS/16,LoopSpec3_1
move r5,r4
move x:(r2)+n2,x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep n5
do n5,rep_spec3_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
rep_spec3_2 macr x0,y0,a (r3)-
move a,y:(r6)+
LoopSpec3_1
move #POINTS/64,n6
move #buf,r6
nop
move y:(r6)+n6,x0
do #POINTS/64*3,LoopSpec3_2
move y:(r6)+,a
abs a
cmp y1,a
jmi Spec3NotMore
move a,y1
Spec3NotMore
nop
LoopSpec3_2
rts
;#ncoef-1 in n5
;#coef in x1
;input in r6
;coef in r5
do_spec4:
move n5,m3
move #states,r3
;rep x1
do x1,rep_spec4_1
move r7,x:(r3)+
rep_spec4_1 move r6,r2
move r7,y1
move #buf,r6
move #64,n2
do #POINTS/64,LoopSpec4_1
move r5,r4
move x:(r2)+n2,x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep n5
do n5,rep_spec4_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
rep_spec4_2 macr x0,y0,a (r3)-
move a,y:(r6)+
LoopSpec4_1
move #2,n6
move #buf,r6
nop
move y:(r6)+n6,x0
do #POINTS/64-2,LoopSpec4_2
move y:(r6)+,a
abs a
cmp y1,a
jmi Spec4NotMore
move a,y1
Spec4NotMore
nop
LoopSpec4_2
rts
;32780 Hz -> 8195 Hz
low_pass1
;left channel
move #ncoef2K-1,m3
move #states,r3
; rep #ncoef2K
do #ncoef2K,repl_lp1_1
move r7,x:(r3)+
repl_lp1_1
move y:leftbuffaddr,r2
move #.5,y1
move #coef2K,r5
do #POINTS,Loopl_lp1
move r5,r4
move x:(r2),x0
clr a x0,x:(r3)+ y:(r4)+,y0
; rep #ncoef2K-1
do #ncoef2K-1,repl_lp1_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repl_lp1_2 mac x0,y0,a (r3)-
move a,x0
macr y1,x0,a
move a,X:(r2)+
Loopl_lp1
;right channel
move #ncoef2K-1,m3
move #states,r3
; rep #ncoef2K
do #ncoef2K,repr_lp1_1
move r7,x:(r3)+
repr_lp1_1
move y:rightbuffaddr,r2
move #.5,y1
move #coef2K,r5
do #POINTS,Loopr_lp1
move r5,r4
move x:(r2),x0
clr a x0,x:(r3)+ y:(r4)+,y0
; rep #ncoef2K-1
do #ncoef2K-1,repr_lp1_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repr_lp1_2 mac x0,y0,a (r3)-
move a,x0
macr y1,x0,a
move a,X:(r2)+
Loopr_lp1
rts
;8195 Hz -> 2049 Hz
low_pass2
move #ncoef500-1,m3
move #states,r3
;rep #ncoef500
do #ncoef500,repl_lp2_1
move r7,x:(r3)+
repl_lp2_1
move y:leftbuffaddr,r2
move #4,n2
move #.5,y1
do #POINTS/4,Loopl_lp2
move #coef500,r4
move x:(r2),x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep #ncoef500-1
do #ncoef500-1,repl_lp2_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repl_lp2_2 mac x0,y0,a (r3)-
move a,x0
macr y1,x0,a
move a,X:(r2)+n2
Loopl_lp2
move #ncoef500-1,m3
move #states,r3
;rep #ncoef500
do #ncoef500,repr_lp2_1
move r7,x:(r3)+
repr_lp2_1
move y:rightbuffaddr,r2
move #4,n2
move #.5,y1
do #POINTS/4,Loopr_lp2
move #coef500,r4
move x:(r2),x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep #ncoef500-1
do #ncoef500-1,repr_lp2_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repr_lp2_2 mac x0,y0,a (r3)-
move a,x0
macr y1,x0,a
move a,X:(r2)+n2
Loopr_lp2
rts
;2049 Hz -> 512 Hz
low_pass3
move #ncoef125-1,m3
move #states,r3
;rep #ncoef125
do #ncoef125,repl_lp3_1
move r7,x:(r3)+
repl_lp3_1
move y:leftbuffaddr,r2
move #16,n2
;move #.5,y1
do #POINTS/16,Loopl_lp3
move #coef125,r4
move x:(r2),x0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep #ncoef125-1
do #ncoef125-1,repl_lp3_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repl_lp3_2 mac x0,y0,a (r3)-
move a,x0
;macr y1,x0,a
add x0,a
move a,x:(r2)+n2
Loopl_lp3
move #ncoef125-1,m3
move #states,r3
;rep #ncoef125
do #ncoef125,repr_lp3_1
move r7,x:(r3)+
repr_lp3_1
move y:rightbuffaddr,r2
move #16,n2
;move #.5,y1
do #POINTS/16,Loopr_lp3
move #coef125,r4
move X:(R2),X0
clr a x0,x:(r3)+ y:(r4)+,y0
;rep #ncoef125-1
do #ncoef125-1,repr_lp3_2
mac x0,y0,a x:(r3)+,x0 y:(r4)+,y0
repr_lp3_2 mac x0,y0,a (r3)-
move a,x0
;macr y1,x0,a
add x0,a
move a,x:(r2)+n2
Loopr_lp3
rts
DoMain reset
ori #$03,MR
move #LeftBuf,r0
move #RightBuf,r1
move #POINTS*4-1,m0
move m0,m1
move m0,m2
move m0,m3
move #0,r7
move #leftspec,r5
rep #14
move r7,y:(r5)+ ;clear spectrum
move #rightspec,r5
rep #14
move r7,y:(r5)+
movep #$1,x:M_PBC
movep #$3000,x:M_IPR
movep #$4100,x:M_CRA
movep #$A800,x:M_CRB
movep #$0000,x:M_PCC
movep #$01F8,x:M_PCC
movep x:M_SR,x:M_UU
movep x:M_RX,x:M_SR
andi #$FC,MR ;enable interrupts
MainLoop
jclr #0,x:<<HSR,* ;wait for command
movep x:<<HRX,a
move #$123456,x0
cmp x0,a
jne MainLoop
;get values for vu
move r0,r2
move r1,r3
move #POINTS*3,n2
move n2,n3
move x:(r2)+n2,x0
move x:(r3)+n3,x0
move r7,x0
move x0,x1
move x0,y0
move x0,y1
do #POINTS,LoopMax
move x:(r2)+,a
sub y0,a
rep #4
asr a ;kind of a lowpass filter
add y0,a
move a,y0
abs a
cmp x0,a
jmi NotMoreL
move a,x0 ;get maximum value
NotMoreL move x:(r3)+,a
sub y1,a
rep #4
asr a
add y1,a
move a,y1
abs a
cmp x1,a
jmi NotMoreR
move a,x1 ;for right channel too
NotMoreR
nop
LoopMax
jclr #1,x:<<HSR,*
movep x0,x:<<HTX
jclr #1,x:<<HSR,*
movep x1,x:<<HTX
;send data for scope
;Full Range
move #POINTS*3,n2
move n2,n3
move r0,r2
move r1,r3
move x:(r2)+n2,x0
move x:(r3)+n3,x0
move #4,n2
move n2,n3
do #POINTS/4,LoopSendScL
move x:(r2)+n2,a
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendScL
do #POINTS/4,LoopSendScR
move x:(r3)+n3,a
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendScR
;Small Range
move #POINTS*3,n2
move n2,n3
;move r0,r2
;move r1,r3
move x:(r2)+n2,x0
move x:(r3)+n3,x0
do #POINTS/4,LoopSendScL2
move x:(r2)+,a
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendScL2
do #POINTS/4,LoopSendScR2
move x:(r3)+,a
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendScR2
;calculate values for spectrum
move r0,r2
move #POINTS*3,n2
move r1,r3
move n2,n3
move x:(r2)+n2,x0
move x:(r3)+n3,x0
move r2,y:leftbuffaddr
move r3,y:rightbuffaddr
move #>ncoef15K,x1
move #>ncoef15K-1,n5
move y:leftbuffaddr,r6
move #coef15K,r5
jsr do_spec
move y1,y:leftspec+13
move #>ncoef9K3,x1
move #>ncoef9K3-1,n5
move y:leftbuffaddr,r6
move #coef9K3,r5
jsr do_spec
move y1,y:leftspec+12
move #>ncoef5K8,x1
move #>ncoef5K8-1,n5
move y:leftbuffaddr,r6
move #coef5K8,r5
jsr do_spec
move y1,y:leftspec+11
move #>ncoef3K6,x1
move #>ncoef3K6-1,n5
move y:leftbuffaddr,r6
move #coef3K6,r5
jsr do_spec
move y1,y:leftspec+10
move #>ncoef2K2,x1
move #>ncoef2K2-1,n5
move y:leftbuffaddr,r6
move #coef2K2,r5
jsr do_spec
move y1,y:leftspec+9
move #>ncoef15K,x1
move #>ncoef15K-1,n5
move y:rightbuffaddr,r6
move #coef15K,r5
jsr do_spec
move y1,y:rightspec+13
move #>ncoef9K3,x1
move #>ncoef9K3-1,n5
move y:rightbuffaddr,r6
move #coef9K3,r5
jsr do_spec
move y1,y:rightspec+12
move #>ncoef5K8,x1
move #>ncoef5K8-1,n5
move y:rightbuffaddr,r6
move #coef5K8,r5
jsr do_spec
move y1,y:rightspec+11
move #>ncoef3K6,x1
move #>ncoef3K6-1,n5
move y:rightbuffaddr,r6
move #coef3K6,r5
jsr do_spec
move y1,y:rightspec+10
move #>ncoef2K2,x1
move #>ncoef2K2-1,n5
move y:rightbuffaddr,r6
move #coef2K2,r5
jsr do_spec
move y1,y:rightspec+9
jsr low_pass1
move #>ncoef1K4,x1
move #>ncoef1K4-1,n5
move y:leftbuffaddr,r6
move #coef1K4,r5
jsr do_spec2
move y1,y:leftspec+8
move #>ncoef852,x1
move #>ncoef852-1,n5
move y:leftbuffaddr,r6
move #coef852,r5
jsr do_spec2
move y1,y:leftspec+7
move #>ncoef528,x1
move #>ncoef528-1,n5
move y:leftbuffaddr,r6
move #coef528,r5
jsr do_spec2
move y1,y:leftspec+6
move #>ncoef1K4,x1
move #>ncoef1K4-1,n5
move y:rightbuffaddr,r6
move #coef1K4,r5
jsr do_spec2
move y1,y:rightspec+8
move #>ncoef852,x1
move #>ncoef852-1,n5
move y:rightbuffaddr,r6
move #coef852,r5
jsr do_spec2
move y1,y:rightspec+7
move #>ncoef528,x1
move #>ncoef528-1,n5
move y:rightbuffaddr,r6
move #coef528,r5
jsr do_spec2
move y1,y:rightspec+6
jsr low_pass2
move #>ncoef328,x1
move #>ncoef328-1,n5
move y:leftbuffaddr,r6
move #coef328,r5
jsr do_spec3
move y1,y:leftspec+5
move #>ncoef202,x1
move #>ncoef202-1,n5
move y:leftbuffaddr,r6
move #coef202,r5
jsr do_spec3
move y1,y:leftspec+4
move #>ncoef126,x1
move #>ncoef126-1,n5
move y:leftbuffaddr,r6
move #coef126,r5
jsr do_spec3
move y1,y:leftspec+3
move #>ncoef328,x1
move #>ncoef328-1,n5
move y:rightbuffaddr,r6
move #coef328,r5
jsr do_spec3
move y1,y:rightspec+5
move #>ncoef202,x1
move #>ncoef202-1,n5
move y:rightbuffaddr,r6
move #coef202,r5
jsr do_spec3
move y1,y:rightspec+4
move #>ncoef126,x1
move #>ncoef126-1,n5
move y:rightbuffaddr,r6
move #coef126,r5
jsr do_spec3
move y1,y:rightspec+3
jsr low_pass3
move #>ncoef78,x1
move #>ncoef78-1,n5
move y:leftbuffaddr,r6
move #coef78,r5
jsr do_spec4
move y1,y:leftspec+2
move #>ncoef48,x1
move #>ncoef48-1,n5
move y:leftbuffaddr,r6
move #coef48,r5
jsr do_spec4
move y1,a
move #.1,x1 ;pump it up a little
macr y1,x1,a
move a,y:leftspec+1
move #>ncoef30,x1
move #>ncoef30-1,n5
move y:leftbuffaddr,r6
move #coef30,r5
jsr do_spec4
move y1,a
move #.3,x1
macr y1,x1,a
move a,y:leftspec
move #>ncoef78,x1
move #>ncoef78-1,n5
move y:rightbuffaddr,r6
move #coef78,r5
jsr do_spec4
move y1,y:rightspec+2
move #>ncoef48,x1
move #>ncoef48-1,n5
move y:rightbuffaddr,r6
move #coef48,r5
jsr do_spec4
move y1,a
move #.1,x1
macr y1,x1,a
move a,y:rightspec+1
move #>ncoef30,x1
move #>ncoef30-1,n5
move y:rightbuffaddr,r6
move #coef30,r5
jsr do_spec4
move y1,a
move #.3,x1
macr y1,x1,a
move a,y:rightspec
move m0,m3
;wait for command and send data for spectrum
jclr #0,x:<<HSR,*
movep x:<<HRX,x0
move #leftspec,r5
do #14,LoopSendBarsL
move y:(r5)+,a
rep #5
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendBarsL
move #rightspec,r5
do #14,LoopSendBarsR
move y:(r5)+,a
rep #5
asr a
jclr #1,x:<<HSR,*
movep a,x:<<HTX
LoopSendBarsR
jmp MainLoop