1 ;;; Test
68HC12 FAR trampoline generation
2 ;;;
2 trampolines are generated
:
3 ;;;
- one for
'_far_bar'
4 ;;;
- one for
'_far_foo'
5 ;;;
'far_no_tramp' does
not have any trampoline generated.
16 bsr _far_bar ; Call to trampoline generated code
18 bne fail ; X
and D preserved
(swapped by _far_bar
)
22 cpx
#0xabcd ; Stack parameter preserved
24 ldd
#_far_foo ; Get address of trampoline handler
27 ldd
#_far_bar ; Likewise (unique trampoline check)
30 call _far_no_tramp ; No trampoline generated for _far_no_tramp
41 .far _far_bar ; Must mark symbol as far
71 .globl __far_trampoline
73 movb
0,sp
, 2,sp ; Copy page register below the caller
's return
75 jmp 0,y ; We have a 'call
/rtc
' stack layout now
76 ; and can jump to the far handler
77 ; (whose memory bank is mapped due to the
78 ; call to the trampoline).