; divide by r7 shifts value in dptr bdiv: clr c mov a,dph rrc a mov dph,a mov a,dpl rrc a mov dpl,a djnz r7,bdiv ret ; getfreq: call ilprt db 'Frequency: ',0 call getln mov r1,#42h ; result mov r0,#30h ; buffer call getrad mov a,42h mov dpl,a ; lo freq mov a,43h mov dph,a ; hi freq ret ; wave: ; initialize input data to center line mov dptr,#rawdat mov r3,#0 clrid: mov a,#0 movx @dptr,a inc dptr djnz r3,clrid mov radix,#10 ; decimal mov radsiz,#5 ; doover: call ilprt db '0) Centerline',cr,lf db '1) Sine wave',cr,lf db '2) Square wave',cr,lf db cr,lf db 'Select: ',0 call getchr push acc call sndchr call crlf pop acc clr c subb a,#'0' cjne a,#0,notctr ret notctr: cjne a,#2,notsqr jmp dosqr notsqr: cjne a,#1,notsin jmp dosin notsin: call ilprt db 'Invalid selection, try again.',cr,lf,0 jmp doover ; ;================================ ; sine wave Dosin: call ilprt db 'Creating sine wave.',cr,lf,0 call getfreq ; dptr has freq mov r7,#5 ; 2^5 = 32 = step size for 256 samples call bdiv mov r5,dpl cjne r5,#0,notiny inc r5 notiny: call ilprt db 'step size: ',0 mov a,r5 call prtrad call crlf mov dptr,#rawdat mov p2,#high stadr mov r0,#0 sinw2: movx a,@r0 ; get sine data from table add a,#80h ; centerline movx @dptr,a ; store in input data mov a,r0 add a,r5 ; next sine cell mov r0,a inc dpl mov a,dpl jnz sinw2 jmp wavdun ;================================ ; square wave Dosqr: call ilprt db 'Creating square wave.',cr,lf,0 call getfreq ; dptr has freq mov r4,dpl mov r5,dph mov r6,#low rate mov r7,#high rate call div16 mov r5,6 sqrw: mov a,r5 ; get step clr c rrc a mov r4,a ; half steps ; push 4 push 5 call ilprt db 'step size: ',0 mov a,r5 call prtrad call crlf call ilprt db 'half step: ',0 mov a,r4 call prtrad call crlf pop 5 pop 4 mov dptr,#rawdat sqrw2: call locyc call hicyc mov a,dpl jnz sqrw2 ; do cycles till end of buffer wavdun: mov radix,#16 mov radsiz,#2 call getchr ret arc equ 117 mid equ 128 hicyc: mov a,#mid+arc sjmp hilo locyc: mov a,#mid-arc hilo: mov r3,4 ; half steps mov r0,a wave3: mov a,r0 movx @dptr,a inc dpl mov a,dpl jz wave4 djnz r3,wave3 ; do half steps wave4: ret