📄 far-hc11.s
字号:
;;; Test 68HC11 FAR trampoline generation;;; 2 trampolines are generated:;;; - one for '_far_bar';;; - one for '_far_foo';;; 'far_no_tramp' does not have any trampoline generated.;;; .sect .text .globl _start_start:start: lds #stack ldx #0xabcd pshx ldd #0x1234 ldx #0x5678 bsr _far_bar ; Call to trampoline generated code cpx #0x1234 bne fail ; X and D preserved (swapped by _far_bar) cpd #0x5678 bne fail pulx cpx #0xabcd ; Stack parameter preserved bne fail ldd #_far_foo ; Get address of trampoline handler xgdx jsr 0,x ldd #_far_bar ; Likewise (unique trampoline check) xgdy jsr 0,y ldaa #%page(_far_no_tramp) ldy #%addr(_far_no_tramp) bsr __call_a16 ; No trampoline generated for _far_no_tramp clra clrb waifail: ldd #1 wai bra start .global __return__return: ins rts .sect .bank1,"ax" .globl _far_bar .far _far_bar ; Must mark symbol as far_far_bar: jsr local_bank1 xgdx jmp __returnlocal_bank1: rts .sect .bank2,"ax" .globl _far_foo .far _far_foo_far_foo: jsr local_bank2 jmp __returnlocal_bank2: rts .sect .bank3,"ax" .globl _far_no_tramp .far _far_no_tramp_far_no_tramp: jsr local_bank3 jmp __returnlocal_bank3: rts .sect .text .globl __far_trampoline__far_trampoline: psha ; (2) Save function parameter (high) ;; <Read current page in A> psha ; (2) ;; <Set currenge page from B> pshx ; (4) tsx ; (3) ldab 4,x ; (4) Restore function parameter (low) ldaa 2,x ; (4) Get saved page number staa 4,x ; (4) Save it below return PC pulx ; (5) pula ; (3) pula ; (3) Restore function parameter (high) jmp 0,y ; (4) .globl __call_a16__call_a16: ;; xgdx ; (3) ;; <Read current page in A> ; (3) ldaa _current_page psha ; (2) ;; <Set current page from B> ; (4) staa _current_page ;; xgdx ; (3) jmp 0,y ; (4) .sect .page0 .skip 100stack:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -