Ich hab's ein bißchen kommentiert, wenn das wen interessiert
Code:
red0 = (boden_value_red0[2*i]*256 | boden_value_red0[2*i + 1]) >> 2;
L_0x008E:
LDI YL,0x5C
LDI YH,0x04
OUT SPH,YH
OUT SPL,YL ; work frame
LDD r24,Y + 3 ; get i
MOV r18,r24
CLR r19
MOVW r24,r18 ; --> r24
ADD r24,r18 ; * r18 ---> = *2
ADC r25,r19 ; vielleicht n'carry, weiß man ja nie
MOVW ZL,r24 ;
SUBI ZL,0xA0 ; + 96 = (&boden_value_red0[0])
SBCI ZH,0xFF ; + 96 = (&boden_value_red0[0])
LDD r24,Z + 0 ; r24 = boden_value_red0[2*i]
MOV r18,r24 :r18:r19
CLR r19
LDI r24,0x00 ;r24:r25 = 256
LDI r25,0x01
MUL r18,r24 ; * 256
MOVW r20,r0 ;-> r20
MUL r18,r25
ADD r21,r0
MUL r19,r24
ADD r21,r0 ;-> r21
CLR r1 ; heilige Kuh, muß null sein
LDD r24,Y + 3 ; get i
MOV r18,r24 ; s.o
CLR r19 ; s.o
MOVW r24,r18 ; s.o
ADD r24,r18 ; s.o
ADC r25,r19 ; * 2 (s.o.)
MOVW ZL,r24
SUBI ZL,0x9F ; + 95 = (&boden_value_red0[1])
SBCI ZH,0xFF
LDD r24,Z + 0 ; r24 = boden_value_red0[2*i + 1]
CLR r25
OR r24,r20 ; r24 | r20
OR r25,r21 ; r24 | r21
ASR r25 ; >> 1
ROR r24
ASR r25 ; >> 1
ROR r24
STD Y + 1,r24 ; store red0
STD Y + 2,r25
JMP L_0x00EA ; forEver
L_0x00EA:
RJMP L_0x00EA
Listig, daß er das +1 rechts gleich in das Tabellen-Offset eingebaut hat.
Lesezeichen