Hallo PicNick,

ich habe Deinen sehr interessanten Code mal in den Bascom Simulator eingepasst:
Code:
$regfile = "m8def.dat"
$framesize = 32                                             'Stack
$swstack = 32
$hwstack = 64

Dim Array(5) As Byte
Dim Dummy(4) As Byte
Dim Pointer As Word At Dummy(1) Overlay
Dim Bits_ As Byte At Dummy(4) Overlay

Dim I As Byte , J As Byte

Bits_ = 0
Pointer = Varptr(array(1))

For I = 1 To 40
  Gosub Shifter                                             'hier mit Breakpoint PinB.0 auf 0/1 umschalten
  For J = 5 To 1 Step -1
    Print Bin(array(j));
  Next
  Print
Next
End

Shifter:
      Loadadr Pointer , Z
      LDD  XL , Z + 0                                       'low pointer
      LDD  XH , Z + 1                                       'hig pointer

      LD    R24, X                                          ' aktuelles array-byte
      CLC                                                   '  clear carry
      SBIC PINB, 0                                          ' inp-pin   Input -pin = 0/1 ?
      SEC                                                   '   set carry
      ROL   r24                                             ' bit reinschieben
      ST     X, R24                                         'aktuelles byte speichern
      LDD  R24,  Z + 3                                      ' (Bitcounter)
      INC   R24                                             ' bitcounter+1
      ANDI  R24 , 7                                         ' es gilt nur 0-7
      Brne _next_bit
'_next_byte:
      ADIW XL, 1                                            'pointer+1
      STD   Z + 0, XL                                       '  neuen low pointer speichern
      STD   Z + 1, XH                                       'neuen hig pointer speichern
 _next_bit:
      STD  Z + 3, r24                                       'Bitcounter in Bits_ speichern
Return
Der Code shiftet nicht über die Bytegrenzen hinweg. Einfach mal im Simulator durch Umschaltung des grünen Kreies für PinB.0 mit 10111.. durchspielen.
Ich denke, beim Kopieren ist der Sprung zu _next_byte untergegangen.

Gruß
Tomas