Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
.nolist
#include "m88def.inc"
.list
main:
ldi r16,low(ramend) ;Stack initialization
out spl,r16
ldi r16,high(ramend)
out sph,r16
ldi r16,$FF&('K' << 1)|('e' >> 6)
ldi r17,$FF&('e' << 2)|('y' >> 5)
ldi r18,$FF&('y' << 3)|('b' >> 4)
ldi r19,$FF&('b' << 4)|('o' >> 3)
ldi r20,$FF&('o' << 5)|('a' >> 2)
ldi r21,$FF&('a' << 6)|('r' >> 1)
ldi r22,$FF&('r' << 7)|('d' >> 0)
ldi r23,0
rcall unpack
foo:
rjmp foo
;--------------------------------------------------------------------------------------------------------
; Autorecursive 7-bit stream-to-byte unpacking routine
; Input = 0:aaaaaaab 1:bbbbbbcc 2:cccccddd 3:ddddeeee 4:eeefffff 5:ffgggggg 6:ghhhhhhh
; Output = 0:0aaaaaaa 1:0bbbbbbb 2:0ccccccc 3:0ddddddd 4:0eeeeeee 5:0fffffff 6:0ggggggg 7:0hhhhhhh
; 15 program words, 84 cycles (5.25 uS @16 MHZ)
unpack:
ldi ZH,high(iter1) ;Initialize iteration entry address pointer
ldi ZL,low(iter1)
ldi r24,low(it_lim) ;Set recursion limit checkpoint
; Iter.1 Iter.2 Iter.3 Iter.4 Iter.5 Iter.6 Iter.7 Iter.8
iter1: lsr r16 ;0aaaaaaa --//-- --//-- --//-- --//-- --//-- --//-- --//--
iter2: ror r17 ;bbbbbbbc 0bbbbbbb --//-- --//-- --//-- --//-- --//-- --//--
iter3: ror r18 ;ccccccdd cccccccd 0ccccccc --//-- --//-- --//-- --//-- --//--
iter4: ror r19 ;dddddeee ddddddee ddddddde 0ddddddd --//-- --//-- --//-- --//--
iter5: ror r20 ;eeeeffff eeeeefff eeeeeeff eeeeeeef 0eeeeeee --//-- --//-- --//--
iter6: ror r21 ;fffggggg ffffgggg fffffggg ffffffgg fffffffg 0fffffff --//-- --//--
iter7: ror r22 ;gghhhhhh ggghhhhh gggghhhh ggggghhh gggggghh gggggggh 0ggggggg --//--
iter8: ror r23 ;h0000000 hh000000 hhh00000 hhhh0000 hhhhh000 hhhhhh00 hhhhhhh0 0hhhhhhh
it_lim: adiw ZH:ZL,1 ;Advance iteration entry pointer
cpse ZL,r24 ;Check for recursion limit, exit if reached. Note that CY is cleared - see below
ijmp ;Do next iteration (iter+1) recursively. ROR becomes LSR because CY = 0 on entry
ret
;--------------------------------------------------------------------------------------------------------