* Set only one of the styles to 1 _Style_1 .set 0 _Style_2 .set 1 ; user can use memory from 0980h to 2c00h CBSA .set 1000h CBSZ .set 0FFFh ; Y = B1 * X + B2 * X1 + ... + B10 * X9 + B11 * X10 .ds 2000h X .word 0 X1 .word 0 X2 .word 0 X3 .word 0 X4 .word 0 X5 .word 0 X6 .word 0 X7 .word 0 X8 .word 0 X9 .word 0 X10 .word 0 X11 .word 0 ; do not use ; .ps 0E00h B11 .word 551 B10 .word -525 B9 .word -649 B8 .word 4270 B7 .word -8763 B6 .word 10826 B5 .word -8763 B4 .word 4270 B3 .word -649 B2 .word -525 B1 .word 551 * .include "template.asm" * ;------------------------------; ; Initialize a circular buffer ; ;------------------------------; INITCB: LAR AR7,#CBSA LACC #CBSA SAMM CBSR1 ADD #CBSZ,0 SAMM CBER1 SPLK #0Fh,CBCR LAR AR0,#1000h LACL #0 MAR *,AR7 ZEROCB: SACL *+,0,AR0 BANZ ZEROCB,*-,AR7 MAR *,AR0 ; SPLK #012h,IMR ; RINT CLRC INTM ; Enable interrupts ;---------; ; Style 1 ; ;---------; .if _Style_1 MAIN: B MAIN * RECEIVE: LAMM DRR CALL PROCESS MAR *,AR7 SACL *+,0,AR0 AND #0fffch,0 SAMM DXR RETE * TRANSMIT: RETE .endif ;---------; ; Style 2 ; ;---------; .if _Style_2 MAIN: IDLE LAMM DRR CALL PROCESS MAR *,AR7 SACL *+,0,AR0 AND #0fffch,0 SAMM DXR B MAIN * RECEIVE: RETE * TRANSMIT: RETE .endif * ;--------------------; ; ACC = PROCESS(ACC) ; ;--------------------; PROCESS: LDP #X SACL X LACC #B11,0 SAMM BMAR LAR AR0,#X10 ZAP RPT #10 ; repeat the next instruction 11 times MADD *-,AR0 ; ACC = B11 * X10 + ... B2 * X1 ; PREG = B1 * X APAC SACH X,1 LACC X,0 RET .end