1 ;;; Test 68HC11 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. 6 ;;; 7 .sect .text 8 .globl _start 9 _start: 10 start: 11 lds #stack 12 ldx #0xabcd 13 pshx 14 ldd #0x1234 15 ldx #0x5678 16 bsr _far_bar ; Call to trampoline generated code 17 cpx #0x1234 18 bne fail ; X and D preserved (swapped by _far_bar) 19 cpd #0x5678 20 bne fail 21 pulx 22 cpx #0xabcd ; Stack parameter preserved 23 bne fail 24 ldd #_far_foo ; Get address of trampoline handler 25 xgdx 26 jsr 0,x 27 ldd #_far_bar ; Likewise (unique trampoline check) 28 xgdy 29 jsr 0,y 30 ldaa #%page(_far_no_tramp) 31 ldy #%addr(_far_no_tramp) 32 bsr __call_a16 ; No trampoline generated for _far_no_tramp 33 clra 34 clrb 35 wai 36 fail: 37 ldd #1 38 wai 39 bra start 40 .global __return 41 __return: 42 ins 43 rts 44 45 .sect .bank1,"ax" 46 .globl _far_bar 47 .far _far_bar ; Must mark symbol as far 48 _far_bar: 49 jsr local_bank1 50 xgdx 51 jmp __return 52 53 local_bank1: 54 rts 55 56 .sect .bank2,"ax" 57 .globl _far_foo 58 .far _far_foo 59 _far_foo: 60 jsr local_bank2 61 jmp __return 62 63 local_bank2: 64 rts 65 66 .sect .bank3,"ax" 67 .globl _far_no_tramp 68 .far _far_no_tramp 69 _far_no_tramp: 70 jsr local_bank3 71 jmp __return 72 73 local_bank3: 74 rts 75 76 .sect .text 77 .globl __far_trampoline 78 __far_trampoline: 79 psha ; (2) Save function parameter (high) 80 ;; <Read current page in A> 81 psha ; (2) 82 ;; <Set currenge page from B> 83 pshx ; (4) 84 tsx ; (3) 85 ldab 4,x ; (4) Restore function parameter (low) 86 ldaa 2,x ; (4) Get saved page number 87 staa 4,x ; (4) Save it below return PC 88 pulx ; (5) 89 pula ; (3) 90 pula ; (3) Restore function parameter (high) 91 jmp 0,y ; (4) 92 93 .globl __call_a16 94 __call_a16: 95 ;; xgdx ; (3) 96 ;; <Read current page in A> ; (3) ldaa _current_page 97 psha ; (2) 98 ;; <Set current page from B> ; (4) staa _current_page 99 ;; xgdx ; (3) 100 jmp 0,y ; (4) 101 102 .sect .page0 103 .skip 100 104 stack: 105 106