| CODE |
.def Zero = r15 .def Offset = r16 .def tmp1 = r17 Start: ldi tmp1,Byte1(RAMEND) ; Stack setup out SPL,tmp1 ldi tmp1,Byte2(RAMEND) out SPH,tmp1 clr Zero ; Ct. register ldi Offset,-1 ; Jump_Offset register Next: inc Offset ; Jump_Offset = (0...9) cpi Offset,10 brne PC+2 ldi Offset,0 ldi ZL,Byte1(Jmp_Table) ; Z points to the Jmp_Table ldi ZH,Byte2(Jmp_Table) mov tmp1,Offset ; tmp1 = Offset ; lsl tmp1 ; Comment if Jmp_Table has RJMPs ; Uncomment for JMPs add ZL,tmp1 ; Z += Offset adc ZH,Zero ; ijmp method (before using it, comment the ret method) ijmp ret .org 0x100 Jmp_Table: Jump0: rjmp Next ; ... or anywhere else. Jump1: rjmp Next ; same as above Jump2: rjmp Next Jump3: rjmp Next Jump4: rjmp Next Jump5: rjmp Next Jump6: rjmp Next Jump7: rjmp Next Jump8: rjmp Next Jump9: rjmp Next |