📄 dzbms.asm
字号:
dzbm:
ldi *ar0++,r0
ldi *ar0++,r1
and 0ffh,r0
and 0fh,r1
lsh 8,r1
addi r1,r0
lsh 6,r0
ldi @DZBMF1,ar1
sti r0,*ar1
ldi @PORT2,ar0
ldi *ar0,r2 ;F0C
and 0fh,r2
ldi @F0C,ar1
sti r2,*ar1
ldi 1700,r0
cmpi 2,r2
ldieq 2000,r0
cmpi 3,r2
ldieq 2300,r0
cmpi 4,r2
ldieq 2600,r0
float r0
ldf r0,r1
call outputf
call dzinit
idend: rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
outputf:
mpyf @SINGFXS,r0
addf 0.5,r0
fix r0
mpyf @SINGFXS,r1
addf 0.5,r1
fix r1
ldi 0fh,r6
lsh 16,r6
and3 r6,r0,r5
lsh -16,r5
ldi @DDSD1,ar0
sti r5,*ar0
sti r0,*ar0
ldi @DDSC1,ar0
ldi 8h,r5
sti r5,*ar0
and3 r1,r6,r5
lsh -16,r5
ldi @DDSD1,ar0
sti r5,*ar0
sti r1,*ar0
ldi @DDSC1,ar0
ldi 9h,r5
sti r5,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
outputf1:
cmpi 3,r4
blt ef1
call cinitt1
br ef1e
ef1:
ldi @F1,ar0
ldi *ar0,r0
float r0
mpyf 0.1,r0
mpyf 0.1,r0
call invf
mpyf @T1XS,r0
addf 0.5,r0
fix r0
ldi r0,r4
call initt1
ef1e: rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dzbm subE: crc
;VERITY: VCODE = &H6F: I = 27
;VALOOP: IF I < 1 THEN GOTO VEND
; IF A(I) = 0 THEN I = I - 1: GOTO VALOOP
; K = 0: FOR J = 0 TO 6: K = K + A(I - J) * 2 ^ (6 - J): NEXT J
; I = I - 7
;VLOOP: IF I < 0 THEN GOTO VEND
; VLIU = K XOR VCODE
;VBLOOP: K = VLIU
; IF I < 1 THEN GOTO VEND
;VCLOOP: IF K < 64 THEN K = K * 2 + A(I): I = I - 1
; IF K < 64 AND I > 0 THEN GOTO VCLOOP
; GOTO VLOOP
;VEND: A(1) = 1 AND K: A(2) = (2 AND K) / 2: A(3) = (4 AND K) / 4
; A(4) = (8 AND K) / 8: A(5) = (16 AND K) / 16: A(6) = (32 AND K) / 32
crc: ldi 27,ar7 ;1-27 bits
ldi 6fh,ar6 ;VCODE
ldi @DZBMF1,ar0
addi 26,ar0
valoop: cmpi 1,ar7
blt vend
ldi *ar0,r0
cmpi 0,r0
bne valoop0
subi 1,ar0
subi 1,ar7
br valoop
valoop0:ldi 0,r6 ;r6=K
ldi 6,r0
ldi 6,rc
rptb valoop1
ldi *ar0--,r1
lsh r0,r1
subi 1,r0
valoop1:addi r1,r6
subi 7,ar7
vloop: cmpi 0,ar7
blt vend
xor ar6,r6
cmpi 1,ar7
blt vend
vcloop: cmpi 64,r6
bge vloop
mpyi 2,r6
addi *ar0--,r6
subi 1,ar7
cmpi 64,r6
bge vloop
cmpi 0,ar7
bgt vcloop
vend: ldi @DZBMF1,ar0
ldi r6,r0
and 1,r0
sti r0,*ar0++
ldi r6,r0
and 2,r0
lsh -1,r0
sti r0,*ar0++
ldi r6,r0
and 4,r0
lsh -2,r0
sti r0,*ar0++
ldi r6,r0
and 8,r0
lsh -3,r0
sti r0,*ar0++
ldi r6,r0
and 16,r0
lsh -4,r0
sti r0,*ar0++
ldi r6,r0
and 32,r0
lsh -5,r0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dzinit: ldi @DZBMF1,ar0
ldi *ar0,r0
ldi 1,r2
ldi 0,r1
ldi @DZBMF1,ar2
ldi 26,rc
rptb dzi0
lsh3 r1,r2,r5
and3 r5,r0,r3
negi r1,r4
lsh r4,r3
addi 1,r1
dzi0: sti r3,*ar2++
ldi 1,r1
sti r1,*ar2
call crc
ldi @FIK0,ar0
ldi @FK,ar1
ldi @DZBMF1,ar2
ldi 27,rc
rptb dzi1
ldf *ar0++,r0
ldi *ar2++,r1
cmpi 0,r1
ldfeq 0,r0
dzi1: stf r0,*ar1++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;INTERRUPT SERVER;;;;;;;;;;;;;;;;;;;;;;sub2: timer0
timer0: push st
push r0
pushf r0
push r1
pushf r1
push r2
pushf r2
push ar0
push ar1
push ar2
push BK
push ar3
push ar4
push ar7
ldf 0,r2
ldi @FK,ar0
ldi @DZBMF1,ar1
ldi @DFIK,ar2
ldi @FRXS,ar3
ldi 0,ar7
subi 1,ar0
subi 1,ar2
subi 1,ar3
sdzl: ldi *ar1++,r0
cmpi 0,r0
beqd sdzbm0
addi 1,ar0
addi 1,ar2
addi 1,ar3
addf3 *ar0,*ar2,r0
ldf r0,r1
subf @PMAX,r1
cmpf 0,r1
ldfge r1,r0
stf r0,*ar0
fix r0
ldi @COSIN,ar4
addi r0,ar4
mpyf3 *ar4,*ar3,r0
addf r0,r2
sdzbm0: addi 1,ar7
cmpi 28,ar7
blt sdzl
mpyf @PXS,r2
addf 0.5,r2
fix r2
and 0fffh,r2
ldi 0,r0
ldi @DDSD1,ar0
sti r0,*ar0
sti r2,*ar0++
ldi 0ah,r0
sti r0,*ar0
pop ar7
pop ar4
pop ar3
br t_end
;---------------------------------------
t_end: pop BK
pop ar2
pop ar1
pop ar0
popf r2
pop r2
popf r1
pop r1
popf r0
pop r0
pop st
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ddsinit
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;COMMON,NO CHANG
FS .SET 727H ;FS=8192Hz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADRR
SAMP .WORD 6010H ;3 words
;---------------------------------------
SGAMP .WORD 6020H
F0C .WORD 6022H
JYAMP .WORD 6023H
F1 .WORD 6026H
SFLAG .WORD 6029H
;--------------------------------------------------------------------------
FK .WORD 6040H ;28 WORDS
DZBMF1 .WORD 6060H ;28 WORDS
MCTL .WORD 808064H
STCK .word 809E00H
;------------------------------------------------------------SPECIER ADDR.
PORT2 .word 0c00000H ;SEND DATA
;------------------------------------------------------------------DDS
DDSS .WORD 810002H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -