Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Wez probke - wyrzuc probke
- opt cex,mex
- k0 equ -0.6626105
- k1 equ 0.9981958
- k2 equ -0.3372223
- k3 equ 3.2*@L10(2.0)/10
- DECABEL MACRO
- move #0.5,B
- asr #32,B,B
- cmp B,A
- tmi B,A
- move #0,R2
- .REPEAT ;normalizacja
- norm R2,A
- .UNTIL <NR>
- ;obliczanie mantysy (B)
- move #k0,B
- move #k1,X1
- move A,Y1
- mac X1,Y1,B
- move A,X1
- move A,Y1
- mpy X1,Y1,A
- move #k2,X1
- move A,Y1
- mac X1,Y1,B
- asl #2,B,B
- ;obliczanie log2(x)
- clr A
- move R2,A2
- asr A
- nop
- add B,A
- ;obliczanie log10(x)
- asr #5,A,A ; /32
- move #k3,X1
- move A,Y1
- mpy X1,Y1,A
- ; move A,X1
- ; move #10,Y1
- ; mpy X1,Y1,A
- asl #3,A,A
- ENDM
- K equ 10
- N equ 256
- dzielnik equ 2
- pi equ 3.141592
- beta equ 2*pi/(N-1)
- org y:0
- DUPF i,0,N/2-1,1
- DC 0.99
- DC (0.54-0.46*@cos(i*beta)) ;Hamminga
- DC (0.42-0.5*@cos(i*beta)+0.08*@cos(2*i*beta)) ;Blackmana
- DC (0.36-0.49*@cos(i*beta)+0.14*@cos(2*i*beta)-0.01*@cos(3*i*beta)) ;Harrisa
- ENDM
- org p:$100
- init
- move #0,r0 ;bufor cykliczny probek
- move #(N-1),m0
- move #0,r4
- move #(2*N-1),m4 ;
- move #4,n4 ;bo mamy 4 okna
- move #0,r4 ;pikaczu, wybieram Cie!
- repeat
- get a
- tst a
- .IF <ne>
- clb a,b
- add #22,b
- nop
- move b,r4
- .ENDI
- ;pobieranie N/2 pierwszych probek sygnalu:
- move #0,r0
- .LOOP #(N/2)
- in x0 ;probka
- move y:(r4)+n4,y0 ;probka okna
- mpy x0,y0,a a,x:(r0)+
- .ENDL
- move (r4)-n4
- .LOOP #(N/2)
- in x0
- move y:(r4)-n4,y0
- mpy x0,y0,a a,x:(r0)+
- .ENDL
- move (r4)+n4
- ;poziomy odniesienia:
- don
- move #0.99999999,a
- .LOOP #K
- in x0
- out a
- .ENDL
- doff
- move #0.0,a
- .LOOP #K
- in x0
- out a
- .ENDL
- move #-0.99999999,a
- .LOOP #K
- in x0
- out a
- .ENDL
- .LOOP #N ; wypluj blok
- in A ; zgarnij probke z wejscia - sync.
- move Y:(R4)+,A ; wez probke z pamieci
- DECABEL
- out A ; wyrzuc to z siebie!
- .ENDL
- move #0,A
- out A
- get A ; obsluz klawiature
- tst A ; ustaw znaczniki
- .IF <NE> ; sprawdza znacznik Z
- clb A,B ; policz wiodace bity akumulatora A
- add #22,B
- .IF <EQ>
- move #$10000,R5
- .ENDI
- sub #1,B
- .IF <EQ>
- move #$10100,R5
- .ENDI
- sub #1,B
- .IF <EQ>
- move #$10200,R5
- .ENDI
- sub #1,B
- .IF <EQ>
- move #$10300,R5
- .ENDI
- ;move B,X0
- ;mpyi #$100,X0,B
- ;add #$10000,B
- ;move B,R5
- .ENDI
- forever
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement