📄 dv336.asm
字号:
ldi @DASNUM,ar0
ldi *ar0,ar2
addi ar1,ar2
cmpi 4096,ar2
bge tjl0
sti ar2,*ar0
br tjl2
tjl0: subi 4096,ar2
sti ar2,*ar0
ldi @DAGN,ar0
ldi *ar0,ar1
cmpi 1,ar1
ldieq -1,ar1
ldine 1,ar1
sti ar1,*ar0
tjl2: ldi @MCTL,ar0
ldi MBUS3,ar1
sti ar1,*ar0
push r0
pushf r0
push r1
pushf r1
ldi @SINTAB,ar0
addi ar2,ar0
ldf *ar0,r0
float 07ffh,r1 ;dpx???
mpyf r1,r0
addf 0.5,r0
fix r0
ldi @DAGN,ar0
ldi *ar0,r1
mpyi r1,r0
addi 2048,r0
ldi @DAADDR,ar0
sti r0,*ar0
popf r1
pop r1
popf r0
pop r0
ldi @MCTL,ar0
ldi MBUS1,ar1
sti ar1,*ar0
n_da: ldi ar4,ar0
and 7h,ar0
cmpi 1,ar0
bne t_ende
;--------------------------------------
ldi @CMODE,ar0
ldi *ar0,ar1
cmpi 4,ar1
bne t_ende
ldi @SJNUM,ar0
ldi *ar0,ar2
addi 1,ar2
sti ar2,*ar0
absi ar2
ldi @JDNUM,ar0
ldi *ar0,ar0
ldi @JCND,ar1
addi ar0,ar1
ldi *ar1,ar0
cmpi ar0,ar2
blt t_ende
ldi 0,ar3
ldi @SJNUM,ar0
sti ar3,*ar0
ldi @MCTL,ar3 ;INIT MAIN BUS
ldi MBUS7,ar0
sti ar0,*ar3
ldi @JDNUM,ar0
ldi *ar0,ar4
addi 1,ar4
cmpi 12,ar4
ldige 0,ar4
sti ar4,*ar0
ldi @JDATAS,ar0
addi ar4,ar0
ldi *ar0,ar1
mpyi S25,ar1
ldi 0,ar2
ldi @DDS_FREQ0H,ar0
sti ar2,*ar0
ldi @DDS_FREQ0L,ar0
sti ar1,*ar0
ldi @DDS_FREQ1H,ar0
sti ar2,*ar0
ldi @DDS_FREQ1L,ar0
sti ar1,*ar0
ldi @DDS_PHASE0,ar0
sti ar2,*ar0
ldi @DDS_PHASE1,ar0
sti ar2,*ar0
ldi @DDS_PHASE2,ar0
sti ar2,*ar0
ldi @DDS_PHASE3,ar0
sti ar2,*ar0
;---------------------------------------
t_ende: ldi @MCTL,ar3
ldi @MCTLS,ar0
ldi *ar0,ar0
sti ar0,*ar3
pop ir0
pop ar4
pop ar3
pop ar2
pop ar1
pop ar0
pop st
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;time_sub ebd!!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub2: msamp
msamp: ldi @SAMNUM,BK
ldi @INADDR,ar2
ldi @SADDR,ar0
ldi *ar0,ar1
ldi @CHNUM,ar0
ldi *ar0,r0
subi 1,r0
mpyi 4000h,r0
addi r0,ar1
ldi DLENTH0,rc
subi 2,rc
float *ar1++%,r0
rptb samp0
samp0: float *ar1++%,r0
|| stf r0,*ar2++
stf r0,*ar2++
ldf 0.0,r0
ldi DLENTH0,rc ;SET DATA LENGTH
subi 1,rc
rptb samp1
samp1: stf r0,*ar2++ ;IMAG PART CLEAR end
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub3: HAMING_windows
haming: ldi @INADDR,ar0
ldi 8192,ar7
ldi @SINTAB,ar6 ;SET SINTAB ADDER
addi 17ffh,ar6 ;97,11
ldi ar7,r5
lsh -1,r5
subi 1,r5
ldi ar7,rc ;SET REPEAT LEN.
subi 1,rc
rptb ham
ldf *ar0,r2
cmpi r5,rc ;1fffh-1000h 1 part
blt part2
beq mid ;0fffh-0 2 part
ldf *ar6--,r6
br nom
mid: nop *ar6++
part2: ldf *ar6++,r6
nom: addf 1.0,r6
mpyf 0.46,r6
addf 0.08,r6
mpyf r6,r2
ham: stf r2,*ar0++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub4: sudc
sudc: ldi @INADDR,ar1
ldi ar1,ar6
ldf 0,r6
ldf 0,r3
ldi 8191,rc
rptb sudc1
sudc1: addf *ar1++,r3
mpyf @XNUM,r3
mpyf 0.25,r3
ldf 0,r5
ldi 0,r0
ldi ar6,ar1
ldi 8191,rc
rptb sudc10
ldf *ar1++,r2
cmpf r3,r2
blt sudc10
subf r3,r2
addf r2,r5
addi 1,r0
sudc10: nop
float r0
call invf
mpyf r0,r5
mpyf @SUMUILT,r5
absf r5
ldi @T_AMP,ar1
stf r5,*ar1
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub5: subak
subak: ldi @INADDR,ar0
ldi 464,r0 ;464Hz
addi r0,ar0 ;real part
ldi ar0,ar1
addi DLENTH0,ar1 ;iamg part
ldi @SBAK,ar2
ldi ar2,ar3
addi 500,ar3
ldi 471,rc ;936-464=472
rptb sbak0
ldf *ar0++,r0
|| ldf *ar1++,r1
sbak0: stf r0,*ar2++
|| stf r1,*ar3++
ubak: ldi @INADDR,ar0
addi 1660,ar0 ;1660Hz
ldi ar0,ar1
addi DLENTH0,ar1 ;iamg part
ldi @UBAK,ar2
ldi ar2,ar3
addi 1000,ar3 ;2640-1660=980Hz
ldi 979,rc
rptb ubak0
ldf *ar0++,r0
|| ldf *ar1++,r1
ubak0: stf r0,*ar2++
|| stf r1,*ar3++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub6: spc1
spc1: ldi @PWADDR,ar2 ;interface:ar0,ar1
subi3 ar0,ar1,rc ; ar0:real part addr.
addi3 r0,ar0,ar1 ; output addr. PWADDR
rptb sends ;use:PWADDR DLENTH
ldf *ar1++,r1 ;use:ar0-ar2,r0,r1,rc
|| ldf *ar0++,r0
mpyf r0,r0
mpyf r1,r1
addf r1,r0
sends: stf r0,*ar2++
rets
;--------------------------------------;comm sub7: spc10
spc10: ldi @PWADDRB,ar2 ;interface:ar0,ar1
subi3 ar0,ar1,rc ; ar0:real part addr.
addi3 r0,ar0,ar1 ; output addr. PWADDR
rptb sendb ;use:PWADDR DLENTH
ldf *ar1++,r1 ;use:ar0-ar2,r0,r1,rc
|| ldf *ar0++,r0
mpyf r0,r0
mpyf r1,r1
addf r1,r0
sendb: stf r0,*ar2++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s50hz:
ldi @PWADDRB,ar0
addi 36,ar0 ;10+36=46
ldf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
addf *ar0++,r0
call sqrt
mpyf @XNUM1,r0
mpyf @SUMUILT,r0
ldi @S50HZ,ar0
stf r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub8: F_sort
csort: ldi ar0,ar1 ;ar0 is source
addi 1,ar1 ;ar6 is object
ldi r7,ar7 ;r7 is sort number
lsh 1,ar7
subi 1,r7
ldi r7,r5
addi 1,r5
csort0: ldi ar7,r2
ldf *ar0++,r1
ldf *ar0++,r0
ldi ar1,ar2
ldi r7,rc
rptb csort1
ldf *ar2++(2),r3
cmpf r3,r0
bgt csort1
subi 2,r2
csort1: nop
ldi ar6,ar5
addi r2,ar5
stf r1,*ar5++
stf r0,*ar5++
subi 1,r5
cmpi 0,r5
bgt csort0 ;sort end
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub9: A_rsort
rsort: ldi ar0,ar1 ;ar0 is source
ldi r7,ar7 ;r7 is sort number
lsh 1,ar7 ;ar6 is object
subi 1,r7
ldi r7,r5
addi 1,r5
rsort0: ldi ar7,r2
ldf *ar0++,r0
ldf *ar0++,r1
ldi ar1,ar2
ldi r7,rc
rptb rsort1
ldf *ar2++(2),r3
cmpf r3,r0
blt rsort1
subi 2,r2
rsort1: nop
ldi ar6,ar5
addi r2,ar5
stf r0,*ar5++
stf r1,*ar5++
subi 1,r5
cmpi 0,r5
bgt rsort0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subA: comp
comp: ldi ar2,ar4 ;ar4 save souce addr.
ldi ar2,ar6 ;use ar0-ar7,r0-r6
ldi r7,r2
lsh 1,r2
addi r2,ar6 ;use: MODIFY MAX ***12
ldf 0,r2 ;interface:input ar0,ar2,ar7,r3,r4,r5
comp0: ldf r5,r6 ;interface:input ar0,ar2,ar7,r3,r4,r5
ldi ar0,ar5 ;ar0 is pwaddr,input data first addr.
ldi ar7,rc ;use init value: ar2 ar0 ar7
subi 1,rc ;ar2 is result addr.
ldf *ar5++,r0 ;ar7 data number
ldi ar5,r1 ;ar6 result end addr.
rptb comp1 ;ar5 save ar0
cmpf *ar5++,r0 ;r5 set mpyi factor
ldflt *-ar5(1),r0 ;r1 save active addr.
comp1: ldilt ar5,r1
subi 1,r1
ldi r1,ar5
mpyf 5,r6
fix r6
subi r6,ar5
lsh 1,r6 ;r6=r6*2
ldi r6,rc
rptb comp2
comp2: stf r2,*ar5++
stf r0,*ar2++
subi ar0,r1
float r1,r1
mpyf r3,r1
addf r4,r1 ;r4=first f
mpyf @MODIFY,r1
stf r1,*ar2++
cmpi ar6,ar2
bz comp3
br comp0 ;find end
comp3: ldi ar4,ar0
ldi ar4,ar6
addi 10h,ar6
ldi ar0,ar1
addi 1,ar1
ldi r7,r5
comp4: ldi r7,r2
lsh 1,r2
ldf *ar0++,r1
ldf *ar0++,r0
ldi ar1,ar2
ldi r7,rc
subi 1,rc
rptb comp5
ldf *ar2++(2),r3
cmpf r3,r0
bgt comp5
subi 2,r2
comp5: nop
ldi ar6,ar5
addi r2,ar5
stf r1,*ar5++
stf r0,*ar5++
subi 1,r5
cmpi 0,r5
ble comend
br comp4 ;sort end
comend: rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subC: tcxb
tcqxb:
ldi @INADDR,ar0
ldi 446,r0
addi r0,ar0
ldi ar0,ar1
addi DLENTH0,ar1
ldf 0,r2
ldi 23,rc
rptb tcqxb1
ldi ar0,ar2
ldi ar1,ar3
ldi 8,r7
tcqxb0: stf r2,*ar2++
|| stf r2,*ar3++
subi 1,r7
cmpi 0,r7
bgt tcqxb0
addi 100,ar0
tcqxb1: addi 100,ar1
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subD: initt0
initt0: ldi 0,r0
ldi 808h,ar0
lsh 12,ar0
addi 20h,ar0
sti r0,*+ar0(4) ;COUNTER CLEAR
ldi FS,r0
sti r0,*+ar0(8)
ldi 3c1h,r0 ;RUN TIMER0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subE: invf
invf: ldf r0,r3 ;use r0,r1,r2,r3
absf r0 ;input & output use r0
pushf r0
pop r1
ash -24,r1
negi r1
subi 1,r1
ash 24,r1
push r1
popf r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
rnd r1
mpyf r1,r0,r2
subrf 1.0,r2
mpyf r1,r2
addf r2,r1
rnd r1,r0
negf r0,r2
ldf r3,r3
ldfn r2,r0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subF: sqrt
sqrt: ldf r0,r3 ;use r0,r1,r2,r3
retsle ;input & output use r0
pushf r0
pop r1
ash -24,r1
addi 1,r1
ash -1,r1
negi r1,r1
ash 24,r1
push r1
popf r1
mpyf 0.5,r0
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -