fxdoc/asm/fx@3.10/%ac9.txt

49 lines
1.7 KiB
Plaintext

Syscall %ac9 longjmp() from Graph 35+E II OS 3.10
Restores the whole jump buffer, except for r0 which is the return code anyway.
Performs rts to the saved value of pr, effectively jumping to the setjmp() call
site. The corresponding setjmp() is %aca.
RAM globals:
0x880287e4 Temporary storage for the return code of longjmp()
<%ac9 longjmp>
r4: Jump buffer
r5: Return value (cannot be 0 as it would confuse setjmp)
801e3e7c: d011 mov.l 0x880287e4, r0
801e3e7e: 2052 mov.l r5, @r0
801e3e80: 7434 add #52, r4
801e3e82: 5046 mov.l @(24,r4), r0
801e3e84: 401e ldc r0, gbr
801e3e86: 5045 mov.l @(20,r4), r0
801e3e88: 401a lds r0, macl
801e3e8a: 5044 mov.l @(16,r4), r0
801e3e8c: 400a lds r0, mach
801e3e8e: 5142 mov.l @(8,r4), r1
801e3e90: 5241 mov.l @(4,r4), r2
801e3e92: 6342 mov.l @r4, r3
801e3e94: 74cc add #-52, r4
801e3e96: 554b mov.l @(44,r4), r5
801e3e98: 564a mov.l @(40,r4), r6
801e3e9a: 5749 mov.l @(36,r4), r7
801e3e9c: 5848 mov.l @(32,r4), r8
801e3e9e: 5947 mov.l @(28,r4), r9
801e3ea0: 5a46 mov.l @(24,r4), r10
801e3ea2: 5b45 mov.l @(20,r4), r11
801e3ea4: 5c44 mov.l @(16,r4), r12
801e3ea6: 5d43 mov.l @(12,r4), r13
801e3ea8: 5e41 mov.l @(4,r4), r14
801e3eaa: 6043 mov r4, r0
801e3eac: 540c mov.l @(48,r0), r4
801e3eae: 6f02 mov.l @r0, r15
801e3eb0: 5002 mov.l @(8,r0), r0
801e3eb2: 402a lds r0, pr
801e3eb4: d003 mov.l 0x880287e4, r0
801e3eb6: 6002 mov.l @r0, r0
801e3eb8: 8800 cmp/eq #0, r0
801e3eba: 8b00 bf <801e3ebe>
801e3ebc: e001 mov #1, r0
801e3ebe: 000b rts
801e3ec0: 0009 nop