Jetzt hab ich den Bascom gequält (nur was für Erbsenzähler)

Code:
' red0 = (boden_value_red0[2*i]*256 | boden_value_red0[2*i + 1]) >> 2;

Dim Red0 As Word
Dim Boden_value_red0(16) As Byte
Dim I As Byte

Dim X1 As Byte

   X1 = I * 2
   Red0 = Boden_value_red0(x1) * 256
   Incr X1
   Red0 = Red0 Or Boden_value_red0(x1)
   Shift Red0 , Right , 2

End

RED0                             Word              0060          96 
BODEN_VALUE_RED0                 Byte (16)         0062          98 
I                                Byte              0072          114 
X1                               Byte              0073          115 


; X1 = I * 2
	LDS	r16,0x0072	; r16 = i
	LDI	r20,0x02	; r20 = "2"
	MUL	r16,r20		; mul
	LDI	XL,0x73
	LDI	XH,0x00
	ST	X,r0		; X1 

; red0 = tab (X1) * 256
	LDI	XL,0x73		; X1
	LDI	XH,0x00
	LD	r10,X+		; 
	CLR	r11		; 
	LDI	XL,0x61		; 
	LDI	XH,0x00
	ADD	XL,r10
	ADC	XH,r11		; tab[X1]

	LD	r16,X+		; r16:r17 =  tab[X1]
	CLR	r17
	LDI	r20,0x00
	LDI	r21,0x01	; r20:r21 = "256"
	CALL	L_0x012E	; multiply
	LDI	XL,0x60
	LDI	XH,0x00
	ST	X+,r16
	ST	X,r17		; red0 = tab[i*2] * 256

; incr X1
	LDI	XL,0x73
	LDI	XH,0x00
	LD	r24,X
	SUBI	r24,0xFF
	ST	X,r24

; red0 = red0 OR tab(x1)
	LDI	XL,0x60		; 
	LDI	XH,0x00
	LD	r16,X+
	LD	r17,X		; r16:r17 = red0

	LDI	XL,0x73		; s.o.
	LDI	XH,0x00
	LD	r10,X+
	CLR	r11
	LDI	XL,0x61		; tab -offset
	LDI	XH,0x00
	ADD	XL,r10
	ADC	XH,r11
	LD	r20,X		r20:r21 = tab(i*2 + 1)
	CLR	r21

	OR	r16,r20
	OR	r17,r21
	LDI	XL,0x60
	LDI	XH,0x00
	ST	X+,r16		;red0
	ST	X,r17


; shift red0, right, 2
	LDI	r25,0x02	; = "2"
	LDI	XL,0x60		; &red0
	LDI	XH,0x00
	CALL	L_0x0158	; shift right

;---------------END---------------
	CLI

L_0x00EA:
	RJMP	L_0x00EA


;------------------- r16:r17 *= r20:r21 -----------
L_0x012E:		
	PUSH	r0
	MUL	r16,r20
	MOV	r2,r0
	MOV	r3,r1
	MUL	r20,r17
	ADD	r3,r0
	MUL	r21,r16
	ADD	r0,r3
	MOV	r16,r2
	MOV	r17,r0
	POP	r0
	RET

;-------- shift  @(xL:xH)  right r25 times
L_0x0158:
	CPI	r25,0x00
	BREQ	L_0x016C
	LD	r16,X+
	LD	r17,X
L_0x0160:
	LSR	r17
	ROR	r16
	DEC	r25
	BRNE	L_0x0160
	ST	X,r17
	ST	-X,r16
L_0x016C:
	RET
Also ganz brav, er verwendet zum Multiplizieren und zum Shiften Library-Functions. Brauch dadurch mehr platz, aber dann hat er das ein für alle Mal.