;*************************************************************************** ;QS_ST.ASM : WILL PASS AUDIO into memory and then out ;*************************************************************************** nolist include 'ioequ.asm' include 'intequ.asm' include 'ada_equ.asm' include 'vectors.asm' list ;****************************************************************************** ;---Buffer for talking to the CS4215 org x:0 RX_BUFF_BASE equ * RX_data_1_2 ds 1 ;data time slot 1/2 for RX ISR RX_data_3_4 ds 1 ;data time slot 3/4 for RX ISR RX_data_5_6 ds 1 ;data time slot 5/6 for RX ISR RX_data_7_8 ds 1 ;data time slot 7/8 for RX ISR TX_BUFF_BASE equ * TX_data_1_2 ds 1 ;data time slot 1/2 for TX ISR TX_data_3_4 ds 1 ;data time slot 3/4 for TX ISR TX_data_5_6 ds 1 ;data time slot 5/6 for TX ISR TX_data_7_8 ds 1 ;data time slot 7/8 for TX ISR RX_PTR ds 1 ; Pointer for rx buffer TX_PTR ds 1 ; Pointer for tx buffer X_PTR ds 1 ; X memory pointer ;TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) ;TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) ;CTRL_WD_12 equ NO_PREAMP+HI_PASS_FILT+SAMP_RATE_48+STEREO+DATA_16 ;CLB=0 ;CTRL_WD_34 equ IMMED_3STATE+XTAL1_SELECT+BITS_64+CODEC_MASTER ;CTRL_WD_56 equ $000000 ;CTRL_WD_78 equ $000000 CTRL_WD_12 equ MIN_LEFT_ATTN+MIN_RIGHT_ATTN+LIN2+RIN2 CTRL_WD_34 equ MIN_LEFT_GAIN+MIN_RIGHT_GAIN X_START equ $040000 org p:$100 START main movep #$040003,x:M_PCTL ; set PLL for MPY of 4X ; set up external memory access here movep #$040811,x:M_AAR0 movep #$012421,x:M_BCR ; set up one ext. wait state for all AAR areas ori #3,mr ;mask interrupts movec #0,sp ;clear hardware stack pointer move #0,omr ;operating mode 0 move #$40,r6 ; initialise stack pointer move #-1,m6 ; linear addressing ; set up x_ptr address move #$040000,x0 move x0,x:X_PTR jsr ada_init ; initialize codec move x:X_PTR,r3 loop_1 jset #2,x:M_SSISR0,* ;wait for frame sync to pass jclr #2,x:M_SSISR0,* ;wait for frame sync move x:RX_BUFF_BASE,a ;receive left move x:RX_BUFF_BASE+1,b ;receive right jsr process_stereo ; move to memory and increment move a,x:(r3)+ move b,x:(r3)+ move r3,a cmp #$050000,a ; branch if less then $050000 ; brclr #2,sr,loop_1 brset #3,sr,loop_1 ; read from memory move x:X_PTR,r3 loop_2 move x:(r3)+,a move x:(r3)+,b move a,x:TX_BUFF_BASE ;transmit left move b,x:TX_BUFF_BASE+1 ;transmit right move #CTRL_WD_12,y0 ;set up control words move y0,x:TX_BUFF_BASE+2 move #CTRL_WD_12,y0 move y0,x:TX_BUFF_BASE+3 move r3,a cmp #$050000,a ; brclr #2,sr,loop_2 brset #3,sr,loop_2 move #040000,x0 move x0,x:X_PTR loop_3 nop jmp loop_3 process_stereo nop nop nop rts include 'ada_init.asm' echo end