; plot power/amplitude graph vector equ 29 ; 4014 vector mode alpha equ 31 ; 4014 text mode toplin equ 768-1 ; 640 - 1 baseline equ 64 ; center baseline samples equ not 128 ; number of amplitude points xstep equ 5 ; Store the contents of DPTR to ADDR shld0 set 0 SHLD MACRO ADDR $nolist if (shld0=0) $list sjmp shld2 SHLD1: MOV A,DPH MOVX @R0,A INC R0 MOV A,DPL MOVX @R0,A ret shld0 set 1 shld2: endif $list MOV P2,#HIGH ADDR MOV R0,#LOW ADDR call shld1 ENDM ; get contents of HL ; DPTR = destination lhld0 set 0 LHLD macro addr $nolist if (lhld0=0) $list sjmp lhld2 lhld1: mov dpl,a MOVX A,@R0 MOV dph,A INC R0 MOVX a,@R0 xch a,dpl ret lhld0 set 1 lhld2: endif $list MOV P2,#HIGH ADDR MOV R0,#LOW ADDR call lhld1 endm ; ;$include(labels.asm) ppas: call initgraf ; title mov r2,#1 mov r3,#30 acall set_cursor mov a,#alpha call sndchr jnb pwramp,ispwrg call ilprt db 'Amplitude',0 sjmp shord ispwrg: call ilprt db 'Power',0 shord: call ilprt db ' Spectrum ',0 mov a,rdh call prtrad mov a,rdl call prtrad call ilprt db ' sclfct: ',0 mov a,sclfct call prtrad mov head,#low pabuf mov counter,#samples ; number of data points ; ; show where baseline is mov dptr,#0 shld x1 shld x2 mov dptr,#baseline clr c mov a,dpl subb a,#8 mov dpl,a mov a,dph subb a,#0 mov dph,a shld y1 shld y2 call dot call ilprt db alpha,'>',0 ; call labels ; setup first data position mov dptr,#baseline shld y1 shld y2 mov dptr,#10 shld x1 shld x2 acall plot ; start at baseline acall savit ;========================================= plotr: mov p2,#high x1 mov r0,#low x1+1 mov r1,#low x2+1 movx a,@r0 add a,#xstep ; x1 = x1 + xstep movx @r0,a movx @r1,a dec r0 dec r1 movx a,@r0 addc a,#0 movx @r0,a movx @r1,a call chkbrk ; quitter ? jnc nokeyb ret nokeyb: mov dph,#high pabuf mov dpl,head movx a,@dptr ; get data inc head mov dpl,a mov dph,#0 ; scale back up mov r0,sclfct ; sclfct sclup: clr c mov a,dpl rlc a ; scale up mov dpl,a mov a,dph rlc a mov dph,a djnz r0,sclup mov a,dpl add a,#low baseline mov dpl,a mov a,dph addc a,#high baseline mov dph,a mov p2,#high y2 ; put in Y2 mov r0,#low y2+1 mov a,dpl movx @r0,a ; y2 = data dec r0 ; to high byte of y2 mov a,dph movx @r0,a ; y2 = data LHLD Y2 ; dont allow data above top clr c mov a,dpl subb a,#low toplin mov a,dph subb a,#high toplin jc dataok mov dptr,#toplin ; stop at top shld y2 dataok: mov dptr,#baseline shld y1 acall plot ; draw it inc counter mov a,counter jz alldone ljmp plotr ;======================================== alldone: ret $include(plot.asm) lcode equ $ dseg at (lcode and 0ff00h)+100h x1: ds 2 y1: ds 2 x2: ds 2 y2: ds 2