1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
<Comment>* initialization</Comment><br/>
<Label>n</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Number>20</Number><br/>
<Label>start</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Hex>$40</Hex><br/>
<Label>wddr</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Hex>$0</Hex><br/>
<Label>cddr</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Hex>$0</Hex><br/>
<Label>input</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Hex>$ffe0</Hex><br/>
<Label>output</Label><Normal Text> </Normal Text><Directives>equ</Directives><Normal Text> </Normal Text><Hex>$ffe1</Hex><br/>
<Comment>;</Comment><br/>
<Normal Text> </Normal Text><Directives>org</Directives><Normal Text> </Normal Text><Memory>p:</Memory><Normal Text>start</Normal Text><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>wddr</Label><Symbol Separator>,</Symbol Separator><Address Registers>r0</Address Registers><Normal Text> </Normal Text><Comment>;r0 ¬ samples</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>cddr</Label><Symbol Separator>,</Symbol Separator><Address Registers>r4</Address Registers><Normal Text> </Normal Text><Comment>;r1 ¬ coefficients</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>n</Label><Symbols>-</Symbols><Constant>1</Constant><Symbol Separator>,</Symbol Separator><Modifier Registers>m0</Modifier Registers><Normal Text> </Normal Text><Comment>;set modulo arithmetic</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Modifier Registers>m0</Modifier Registers><Symbol Separator>,</Symbol Separator><Modifier Registers>m4</Modifier Registers><Normal Text> </Normal Text><Comment>;for the 2 circular buffers</Comment><br/>
<Comment>;</Comment><br/>
<Normal Text> </Normal Text><Unknown Instructions>opt</Unknown Instructions><Normal Text> cc</Normal Text><br/>
<Comment>; filter loop :8+(n-1) cycles</Comment><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Instructions>movep</Instructions><Normal Text> </Normal Text><Memory>y:</Memory><Normal Text>input</Normal Text><Symbol Separator>,</Symbol Separator><Memory>x:</Memory><Normal Text> </Normal Text><Symbols>(</Symbols><Address Registers>r0</Address Registers><Symbols>)</Symbols><Normal Text> </Normal Text><Comment>;input sample in memory</Comment><br/>
<Normal Text> </Normal Text><Instructions>clr</Instructions><Normal Text> </Normal Text><Data Registers>a</Data Registers><Normal Text> </Normal Text><Memory>x:</Memory><Symbols>(</Symbols><Address Registers>r0</Address Registers><Symbols>)+</Symbols><Symbol Separator>,</Symbol Separator><Data Registers>x0</Data Registers><Normal Text> </Normal Text><Memory>y:</Memory><Normal Text> </Normal Text><Symbols>(</Symbols><Address Registers>r4</Address Registers><Symbols>)+</Symbols><Symbol Separator>,</Symbol Separator><Data Registers>y0</Data Registers><br/>
<Normal Text> </Normal Text><Instructions>rep</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>n</Label><Symbols>-</Symbols><Constant>1</Constant><br/>
<Normal Text> </Normal Text><Instructions>mac</Instructions><Normal Text> </Normal Text><Data Registers>x0</Data Registers><Symbol Separator>,</Symbol Separator><Data Registers>y0</Data Registers><Symbol Separator>,</Symbol Separator><Data Registers>a</Data Registers><Normal Text> </Normal Text><Memory>x:</Memory><Symbols>(</Symbols><Address Registers>r0</Address Registers><Symbols>)+</Symbols><Symbol Separator>,</Symbol Separator><Data Registers>x0</Data Registers><Normal Text> </Normal Text><Memory>y:</Memory><Symbols>(</Symbols><Address Registers>r4</Address Registers><Symbols>)+</Symbols><Symbol Separator>,</Symbol Separator><Data Registers>y0</Data Registers><br/>
<Normal Text> </Normal Text><Instructions>macr</Instructions><Normal Text> </Normal Text><Data Registers>x0</Data Registers><Symbol Separator>,</Symbol Separator><Data Registers>x0</Data Registers><Symbol Separator>,</Symbol Separator><Data Registers>a</Data Registers><Normal Text> </Normal Text><Symbols>(</Symbols><Address Registers>r0</Address Registers><Symbols>)-</Symbols><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Instructions>movep</Instructions><Normal Text> </Normal Text><Data Registers>a</Data Registers><Symbol Separator>,</Symbol Separator><Memory>y:</Memory><Normal Text>output </Normal Text><Comment>;output filtered sample</Comment><br/>
<Normal Text></Normal Text><br/>
<Label>fftr2a</Label><Normal Text> </Normal Text><Directives>macro</Directives><Normal Text> points</Normal Text><Symbol Separator>,</Symbol Separator><Normal Text>data</Normal Text><Symbol Separator>,</Symbol Separator><Normal Text>coef</Normal Text><br/>
<Label>fftr2a</Label><Symbols>:</Symbols><Normal Text> </Normal Text><Unknown Instructions>ident</Unknown Instructions><Normal Text> </Normal Text><Number>1</Number><Symbol Separator>,</Symbol Separator><Number>1</Number><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>points</Label><Symbols>/</Symbols><Constant>2</Constant><Symbol Separator>,</Symbol Separator><Offset Registers>n0</Offset Registers><Normal Text> </Normal Text><Comment>;initialize butterflies per group</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#1</Constant><Symbol Separator>,</Symbol Separator><Offset Registers>n2</Offset Registers><Normal Text> </Normal Text><Comment>;initialize groups per pass</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>points</Label><Symbols>/</Symbols><Constant>4</Constant><Symbol Separator>,</Symbol Separator><Offset Registers>n6</Offset Registers><Normal Text> </Normal Text><Comment>;initialize C pointer offset</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Symbols>-</Symbols><Constant>1</Constant><Symbol Separator>,</Symbol Separator><Modifier Registers>m0</Modifier Registers><Normal Text> </Normal Text><Comment>;initialize A and B address modifiers</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Modifier Registers>m0</Modifier Registers><Symbol Separator>,</Symbol Separator><Modifier Registers>m1</Modifier Registers><Normal Text> </Normal Text><Comment>;for linear addressing</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Modifier Registers>m0</Modifier Registers><Symbol Separator>,</Symbol Separator><Modifier Registers>m4</Modifier Registers><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Modifier Registers>m0</Modifier Registers><Symbol Separator>,</Symbol Separator><Modifier Registers>m5</Modifier Registers><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#0</Constant><Symbol Separator>,</Symbol Separator><Modifier Registers>m6</Modifier Registers><Normal Text> </Normal Text><Comment>;initialize C address modifier for</Comment><br/>
<Normal Text> </Normal Text><Comment>;reverse carry (bit-reversed) addressing</Comment><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Instructions>do</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Functions>@cvi</Functions><Normal Text> </Normal Text><Symbols>(</Symbols><Functions>@log</Functions><Symbols>(</Symbols><Normal Text>points</Normal Text><Symbols>)/</Symbols><Functions>@log</Functions><Symbols>(</Symbols><Number>2</Number><Symbols>)+</Symbols><Float>0.5</Float><Symbols>)</Symbols><Symbol Separator>,</Symbol Separator><Normal Text>_end_pass</Normal Text><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>data</Label><Symbol Separator>,</Symbol Separator><Address Registers>r0</Address Registers><Normal Text> </Normal Text><Comment>;initialize A input pointer</Comment><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Address Registers>r0</Address Registers><Symbol Separator>,</Symbol Separator><Address Registers>r4</Address Registers><Normal Text> </Normal Text><Comment>;initialize A output pointer</Comment><br/>
<Normal Text></Normal Text><br/>
<Label>_end_bfy</Label><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Data Registers>a</Data Registers><Symbol Separator>,</Symbol Separator><Memory>x:</Memory><Symbols>(</Symbols><Address Registers>r5</Address Registers><Symbols>)+</Symbols><Offset Registers>n5</Offset Registers><Normal Text> </Normal Text><Memory>y:</Memory><Symbols>(</Symbols><Address Registers>r1</Address Registers><Symbols>)+</Symbols><Offset Registers>n1</Offset Registers><Symbol Separator>,</Symbol Separator><Data Registers>y1</Data Registers><br/>
<Normal Text></Normal Text><br/>
<Label>end_cell</Label><br/>
<Normal Text> </Normal Text><Instructions>rnd</Instructions><Normal Text> </Normal Text><Data Registers>a</Data Registers><br/>
<Normal Text> </Normal Text><Instructions>movep</Instructions><Normal Text> </Normal Text><Constant>#0</Constant><Symbol Separator>,</Symbol Separator><Memory>x:</Memory><Hex>$fffe</Hex><br/>
<Normal Text> </Normal Text><Directives>dc</Directives><Normal Text> </Normal Text><Functions>@sin</Functions><Symbols>(</Symbols><Functions>@cvf</Functions><Symbols>(</Symbols><Normal Text>count</Normal Text><Symbols>)*</Symbols><Normal Text>freq</Normal Text><Symbols>)</Symbols><br/>
<Normal Text> </Normal Text><Instructions>move</Instructions><Normal Text> </Normal Text><Constant>#</Constant><Label>twiddle</Label><Symbol Separator>,</Symbol Separator><Address Registers>r2</Address Registers><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Instructions>MOVE</Instructions><Normal Text> </Normal Text><Memory>L:</Memory><Constant><$1</Constant><Symbol Separator>,</Symbol Separator><Data Registers>A</Data Registers><br/>
<Normal Text> </Normal Text><Instructions>SUB</Instructions><Normal Text> </Normal Text><Data Registers>X</Data Registers><Symbol Separator>,</Symbol Separator><Data Registers>A</Data Registers><Normal Text> </Normal Text><Memory>L:</Memory><Constant><$3</Constant><Symbol Separator>,</Symbol Separator><Data Registers>B</Data Registers><br/>
<Normal Text></Normal Text><br/>
<Normal Text> </Normal Text><Unknown Instructions>bad_label</Unknown Instructions><br/>
<Normal Text> </Normal Text><Label>good_label</Label><Symbols>:</Symbols><br/>
|