Scramble_addr	EQU	0x30
SrcBuf_addr	EQU	0x40
DstBuf_addr	EQU	0x60

		ISEG	AT Scramble_addr
Scramble:	DS	4

		ISEG	AT SrcBuf_addr
SrcBuf:		DS	32

		ISEG	AT DstBuf_addr
DstBuf:		DS	32

;...
;
;at start, r0 contains pointer to SrcBuf
;          b  contains message length
   mov   r1,0
   anl   1,#03h          ;first, calculate pointer into Scramble
   orl   1,#Scramble_addr
Loop:
   mov   a,@r0            ;get data from SrcBuf
   xrl   a,@r1            ;perform scramble
   xrl   0,#(SrcBuf_addr XOR DstBuf_addr)     ;get pointer to DstBuf
   mov   @r0,a            ;store scrambled data
   xrl   0,#(SrcBuf_addr XOR DstBuf_addr)     ;restore pointer to SrcBuf
   inc   r1               ;increment Scramble pointer
   anl   1,#0FBh          ;wrap around Scramble pointer
   inc   r0               ;increment SrcBuf pointer
   anl   0,#0DFh          ;wrap around SrcBuf pointer
   djnz  b,loop