so, soweit möglich getestet:

Besonderheiten:
"dummy" dient nur dazu, damit Bascom bei "Loadadr" keinen Index verlangt, verbraucht aber keinen Platz (Overlay) . könnte man auch anders machen, however.
"channel" Bascom verlangt Index 1-5. das ist aber ungünstig zu rechnen. Besser 0-4 . man braucht dadurch nur auf > 4 ( >= 5) zu prüfen


Code:
 
Dim Empf(5) As Word
Dim Dummy As Byte At Empf Overlay
Dim Channel As Byte
 
Getreceiver:                                                'falling edge detection
   $asm
   PUSH  r24
   PUSH  r25
   PUSH  XL
   PUSH  XH
   !IN   r24, SREG
   PUSH  r24
   LDS   r24, {channel}                                     ' channel 0-4 ( Bascom 1-5)
   CPI   r24, 5                                             ' >= 5 --> skipped
   BRSH  _out_of_range
   LSL   r24                                                ' * 2 (wordlength)
   CLR   r25                                                ' clear  (r24 kann ja nicht grösser als 8 werden)
   Loadadr Dummy , X                                        ' addr Empf(0)  
   ADD   XL, r24                                            ' addr Empf + 2*channel
   ADC   XH, r25
   !IN    r24, TCNT0                                        ' timer0
   ST    X+ , r24                                           ' empf(channel) = timer0
   ST    X  , r25
_out_of_range:
   LDS   r24, {channel}                                     ' channel 0-4 ( Bascom 1-5)
   INC   r24
   STS   {channel}, r24
   LDI   r24, 6
   !OUT  TCNT0, r24
   POP   r24
   !OUT  SREG, r24
   POP   XH
   POP   XL
   POP   r25
   POP   r24
       $end Asm
Return
Anders und vermutl. besser geht' sicher auch

Ein bisschen kann man noch sparen, wenn "empf" komplett im adressbereich < 256 liegt.