Suppi!

Danke, mein Code funktioniert.

Für alle, die es interessiert, der Code sieht jetzt so aus!

Code:
$regfile = "m48def.dat"                                     ' ATmega48, Alternativ: ATmega88 o. ATmega168
$hwstack = 32
$swstack = 32
$framesize = 32
$crystal = 20000000                                         ' CPU kann 20MHz

Dim SubRoutine as word                                      ' Adresse Subroutine (wird in ISR_Horizontal aufgerufen)

SubRoutine = Loadlabel(Test_Routine2)                       ' Adresse Sub-Routine setzen

print hex(SubRoutine)
!call Test_Routine1

'SubRoutine = SubRoutine \ 2
print hex(SubRoutine)

on int0 ISR_Horizontal nosave
enable int0
enable interrupts

do
   nop
loop

' Horizontal-Interrupt
ISR_Horizontal:
   push r24                                                 ' r24 sichern
   lds r24,sreg                                             ' Statusregister nach r24
   push r24                                                 ' Statusregister sichern
   push r30                                                 ' Register Z sichern
   push r31
   lds ZL , {SubRoutine}                                    ' Adresse von SubRoutine nach Z
   lds ZH , {SubRoutine+1}
   LSR ZH                                                   ' R31
   ROR ZL                                                   ' R30
   Icall                                                    ' SubRoutine aufrufen
   pop r31                                                  ' Z-Register restaurieren
   pop r30
   pop r24                                                  ' Statusregister vom Stack holen
   sts sreg,r24                                             ' Statusregister restaurieren
   pop r24                                                  ' r24 restaurieren
Return

Test_Routine1:
   nop
Return

Test_Routine2:
   nop
Return