Ich hab's ein bißchen kommentiert, wenn das wen interessiert
Listig, daß er das +1 rechts gleich in das Tabellen-Offset eingebaut hat.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







Zitieren

Lesezeichen