📄 trap_gen.asm
字号:
LACC * ; ACC = trap_timer (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
SUB #6000h ; ACC = trap_timer - 6000h (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
BCND DECREASE_TRAP,LT ; Branch to DECREASE_TRAP if 0.5 < trap_timer < 0.75
; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
B MIN_TRAP ; Branch to MIN_TRAP if 0.75 < trap_timer < 1
; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
INCREASE_TRAP ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
LACC *,15 ; ACC = trap_max_tmp (Q14)
; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
ADRK #3 ; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
SUB *+,15,AR0 ; ACC = trap_max_tmp - trap_min_tmp (Q14)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo, ARP=AR0
;----------------------------------------------------------------------------------
SACH *- ; FR1 = trap_tmp1 = trap_max_tmp - trap_min_tmp (Q14)
; ARP=AR0, AR0->FR0, AR2->trap_out_lo
;----------------------------------------------------------------------------------
LT *+ ; TREG = FR0 = trap_8192inv = 1/8192 (Q15)
; ARP=AR0, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
MPY *,AR2 ; PREG = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q29)
; ARP=AR0, AR0->FR1, AR2->trap_out_lo, ARP=AR2
;----------------------------------------------------------------------------------
PAC ; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q29)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SFL ; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q30)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SFL ; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
ADDS *+ ; ACC = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
ADDH * ; ACC = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
SACH *- ; trap_out = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SACL * ; trap_out = trap_out+(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SBRK #8 ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
B RESET_DELAY ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
MAX_TRAP ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
LACC *,16 ; ACC = trap_max_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
ADRK #5 ; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
SACH *- ; trap_out = trap_max_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SACL * ; trap_out = trap_max_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SBRK #8 ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
B RESET_DELAY ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
DECREASE_TRAP ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
LACC *,15 ; ACC = trap_max_tmp (Q14)
; ARP=AR2, AR0->FR1, AR2->trap_max_tmp
;----------------------------------------------------------------------------------
ADRK #3 ; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
SUB *+,15,AR0 ; ACC = trap_max_tmp - trap_min_tmp (Q14)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo, ARP=AR0
;----------------------------------------------------------------------------------
SACH *- ; FR1 = trap_tmp1 = trap_max_tmp - trap_min_tmp (Q14)
; ARP=AR0, AR0->FR0, AR2->trap_out_lo
;----------------------------------------------------------------------------------
LT *+ ; TREG = FR0 = trap_8192inv = 1/8192 (Q15)
; ARP=AR0, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
MPY *,AR2 ; PREG = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q29)
; ARP=AR0, AR0->FR1, AR2->trap_out_lo, ARP=AR2
;----------------------------------------------------------------------------------
PAC ; ACC = (1/8192)*(trap_max_tmp-trap_min_tmp) (Q29)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
NEG ; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp) (Q29)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SFL ; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp) (Q30)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SFL ; ACC = -(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
ADDS *+ ; ACC = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
ADDH * ; ACC = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
SACH *- ; trap_out = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SACL * ; trap_out = trap_out-(1/8192)*(trap_max_tmp-trap_min_tmp) (Q31)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SBRK #8 ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
B RESET_DELAY ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
MIN_TRAP ; ARP=AR2, AR0->FR1, AR2->trap_timer
;----------------------------------------------------------------------------------
ADRK #5 ; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
LACC *,16 ; ACC = trap_min_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_min_tmp
;----------------------------------------------------------------------------------
ADRK #2 ; ARP=AR2, AR0->FR1, AR2->trap_out
;----------------------------------------------------------------------------------
SACH *- ; trap_out = trap_min_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SACL * ; trap_out = trap_min_tmp (Q15)
; ARP=AR2, AR0->FR1, AR2->trap_out_lo
;----------------------------------------------------------------------------------
SBRK #8 ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
RESET_DELAY ; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
SPLK #0,* ; trap_delay_cntr = 0 (reset delay counter) (Q0)
; ARP=AR2, AR0->FR1, AR2->trap_delay_cntr
;----------------------------------------------------------------------------------
TRAP_EXIT
;----------------------------------------------------------------------------------
_trapgen_calc_exit:
MAR *,AR1 ; can be removed if this condition is met on
; every path to this code. (i.e., ARP=AR1 here)
CLRC OVM
CLRC SXM
SBRK #(__trapgen_calc_framesize+1)
LAR AR0,*-
PSHD *
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -