fxdoc/asm/fx@3.10-%247.txt

588 lines
20 KiB
Plaintext

Syscall %247 GetKeyWait from Graph 35+E II OS 3.10
Disassembly objective:
Understand the return-to-menu mechanism and hidden functions of GetKey().
Discovered RAM memory:
This group of variables is related to an obscure long-jump-based scheme that
manages global state for GetKeyWait. Check "GetKeyWait_Dispatcher.txt" for
more details.
0x8801b62c: setjmp_buffers (jmp_buf[2])
A datable with two jump buffers of 80 bytes each.
0x8801b6cc: setjmp_buffer_index (u8)
Index into the jump buffer table at 0x8801b62c.
0x8801b6cd (u8)
Controls the setup of a setjmp() at the start of GetKeyWait_Main.
0x8801b6ce (u8)
Copied to 0x8801b6cd in state #4 around <80089e38>.
0x8801340c (i8[16])
0x8801341c (i8[16])
Two arrays of 8-bit integers. Seen used with a common index. Value seen
tested >= 0 using cmp/pz.
0x88013464
An index into the two arrays above.
Call graph:
----------------------------------------------------------------------------
%247 ==> <80056802> (reduction)
----------------------------------------------------------------------------
<80056802> GetKeyWait_Main
%aca setjmp (DONE - Lephe)
<80089d8a> GetKeyWait_Dispatcher (STALLED - Lephe)
<80055d48> Keyboard_Initialize (DONE - Lephe)
%420 OS_inner_Sleep
<8005a60a> ? (and return 1)
<8005a60a> ?
%252 ? (Keyboard_????)
<80053536> ?
<800854c2> ?
%11a Timer_Start(3)
<800854c2> ?
<800578ba> ?
%48e GetAutoPowerOffFlag
<80056e9c> ?
%11b Timer_stop(3)
%241 Keyboard_ClrBuffer
%3ed Interrupt_SetOrClrStatusFlags
%3ef ? (Interrupt_?????StatusFlags)
%3ee Interrupt_QueryStatusFlags
<8005a5f8> ?
%254 ?
<800578f4> ?
(^ Lephe - Yatis v)
<8005a63a> ?
<800571d4> ?
%4e5 ?
<8008c990> ?
<80056d8a> ?
%253 ?
<80056d8a> ?
<8008a692> ?
%250 ?
%48e GetAutoPowerOffFlag
%3f4 PowerOff(1)
%4e5 ?
%4b7 ?
<8008c990> ?
%028 Bdisp_PutDisp_DD
%253 ?
----------------------------------------------------------------------------
<%247 Keyboard_GetKeyWait>
r4: Pointer to matrix code column (uint32_t *, output)
r5: Pointer to matrix code row (uint32_t *, output)
r6: Type of waiting:
0 = KEYWAIT_HALTON_TIMEROFF
1 = KEYWAIT_HALTOFF_TIMEROFF
2 = KEYWAIT_HALTON_TIMERON
r7: Timeout delay in seconds (0..3600); used with KEYWAIT_HALTON_TIMERON.
+0: Zero to allow return to menu; not possible with KEYWAIT_HALTOFF_TIMEROFF.
+4: Pointer to keycode of the GetKey() numbering. Set if such a keycode was
previously injected using %910, otherwise set to 0. Injecting with %910
cannot trigger special functions such as main menu, and %24f is used
instead in the return-to-menu scheme. (uint16_t *, output)
Stack> (+4) (+0) || pr (x:u32) (&x) (+4) (+0)
# Tail-call GetKeyWait_Main with a [u32 *] as an extra parameter. (The u32
# itself is uninitialized, so it's probably an output.)
800567e4: 4f22 sts.l pr, @-r15
800567e6: 7ffc add #-4, r15
800567e8: 61f3 mov r15, r1
800567ea: 2f16 mov.l r1, @-r15
800567ec: 7ffc add #-4, r15
800567ee: 51f5 mov.l @(20,r15), r1
800567f0: 2f12 mov.l r1, @r15
800567f2: 7ffc add #-4, r15
800567f4: 52f5 mov.l @(20,r15), r2
800567f6: b004 bsr <80056802 GetKeyWait_Main>
800567f8: 2f22 mov.l r2, @r15
800567fa: 7f10 add #16, r15
800567fc: 4f26 lds.l @r15+, pr
800567fe: 000b rts
80056800: 0009 nop
<80056802 GetKeyWait_Main>
r4 r5 r6 r7 +0 +4: Same parameters as GetKeyWait
+8: Pointer to u32 (probably an output)
Stack> (&x) (+4) (+0) || r8 r9 r10 r11 r12 r13 r14 pr (timeout) (wait_type)
(row) (column)
80056802: 2f86 mov.l r8, @-r15
80056804: 2f96 mov.l r9, @-r15
80056806: 2fa6 mov.l r10, @-r15
80056808: 2fb6 mov.l r11, @-r15
8005680a: 2fc6 mov.l r12, @-r15
8005680c: 2fd6 mov.l r13, @-r15
8005680e: 2fe6 mov.l r14, @-r15
80056810: 4f22 sts.l pr, @-r15
80056812: 7ff0 add #-16, r15
80056814: d157 mov.l 0x8801b6cd, r1
80056816: 1f73 mov.l r7, @(12,r15)
80056818: 1f62 mov.l r6, @(8,r15)
8005681a: 1f51 mov.l r5, @(4,r15)
8005681c: 2f42 mov.l r4, @r15
8005681e: 6210 mov.b @r1, r2
80056820: 2228 tst r2, r2
80056822: 8b0e bf <80056842>
# If 0x8801b6cd (u8) is equal to 0, call setjmp() using the context number
# 0x8801b6cc (2 buffers are available, with index 0 and 1).
# The return value of the longjmp is apparently some kind of state associated
# to the buffer. Called GetKeyWait_Dispatcher to perform actions depending on
# that state (including long-jumping back here!).
80056824: d554 mov.l 0x8801b6cc, r5
80056826: d455 mov.l 0x8801b62c, r4
80056828: d855 mov.l %aca, r8
8005682a: d956 mov.l 0x80089d8a GetKeyWait_Dispatcher, r9
8005682c: 6650 mov.b @r5, r6
8005682e: 666c extu.b r6, r6
80056830: 6763 mov r6, r7
80056832: 4708 shll2 r7
80056834: 376c add r6, r7
80056836: 4708 shll2 r7
80056838: 4708 shll2 r7
8005683a: 480b jsr @r8
8005683c: 347c add r7, r4
8005683e: 490b jsr @r9
80056840: 6403 mov r0, r4
# If the KEYSC interrupt is disabled, initialize the whole keyboard (ports,
# KEYSC, interrupt, everything).
# The boolean test here and the UCNTREG setting in Keyboard_Initialize suggest
# that the OS always sets bits 1-0 of UCTNREG to 0.
80056842: d651 mov.l 0xa44b000c KEYSC.UCNTREG, r6
80056844: 6261 mov.w @r6, r2
80056846: 2228 tst r2, r2
80056848: 8b02 bf <80056850>
8005684a: d250 mov.l 0x80055d48 Keyboard_Initialize, r2
8005684c: 420b jsr @r2
8005684e: 0009 nop
# Jump over most of GetKeyWait_Main under the following conditions:
# 1. 0x8801345c is non-zero, AND
# 2. Value at index 0x88013464 (u32) of i8 table 0x8801340c is < 0, AND
# 3. Value at same index of i8 table 0x8801341c is < 0
80056850: de4f mov.l 0x8801345c, r14
80056852: 62e2 mov.l @r14, r2
80056854: 2228 tst r2, r2
80056856: 890b bt <80056870>
80056858: d44e mov.l 0x88013464, r4
8005685a: d64f mov.l 0x8801340c, r6
8005685c: 6042 mov.l @r4, r0
8005685e: 026c mov.b @(r0,r6), r2
80056860: 4211 cmp/pz r2
80056862: 8905 bt <80056870>
80056864: d64d mov.l 0x8801341c, r6
80056866: 026c mov.b @(r0,r6), r2
80056868: 4211 cmp/pz r2
8005686a: 8901 bt <80056870>
8005686c: a123 bra <80056ab6>
8005686e: 0009 nop
# If waiting type is KEYWAIT_HALTON_TIMERON, adjust the timeout.
# -> The timeout cannot be more than 0xe10 = 3600 seconds.
# -> Multiply it by 2 and store it back.
80056870: 50f2 mov.l @(8,r15), r0
80056872: 8802 cmp/eq #2, r0
80056874: 8b06 bf <80056884>
80056876: 57f3 mov.l @(12,r15), r7
80056878: 9251 mov.w 0x00000e10, r2
8005687a: 3727 cmp/gt r2, r7
8005687c: 8b00 bf <80056880>
8005687e: 6723 mov r2, r7
80056880: 4700 shll r7
80056882: 1f73 mov.l r7, @(12,r15)
## For waiting type == KEYWAIT_HALTOFF_TIMEROFF
80056884: 50f2 mov.l @(8,r15), r0
80056886: 8801 cmp/eq #1, r0
80056888: 8901 bt <8005688e>
8005688a: a093 bra <800569b4>
8005688c: 0009 nop
# If <80057982>() < 0, give up to <80056b4e>.
8005688e: d344 mov.l 0x80057982, r3
80056890: 430b jsr @r3
80056892: 0009 nop
80056894: 4011 cmp/pz r0
80056896: 8901 bt <8005689c>
80056898: a159 bra <80056b4e>
8005689a: 0009 nop
# If 0x880133e4 = 0, wait for 8 ms. If it's still 0 after that, return
# KEYREP_NOEVENT from GetKeyWait().
8005689c: d824 mov.l 0x880133e4, r8
8005689e: 6682 mov.l @r8, r6
800568a0: 2668 tst r6, r6
800568a2: 8b08 bf <800568b6>
800568a4: d23f mov.l %420 OS_inner_Sleep, r2
800568a6: 420b jsr @r2
800568a8: e408 mov #8, r4
800568aa: 6682 mov.l @r8, r6
800568ac: 2668 tst r6, r6
800568ae: 8f02 bf.s <800568b6>
800568b0: e000 mov #0, r0
800568b2: a1b9 bra <80056c28>
800568b4: 0009 nop
800568b6: d53c mov.l 0x880133cc, r5
800568b8: 6df2 mov.l @r15, r13
800568ba: 5ef1 mov.l @(4,r15), r14
800568bc: d13b mov.l 0x880133fc, r1
800568be: 6a50 mov.b @r5, r10
800568c0: 6aac extu.b r10, r10
800568c2: 2da2 mov.l r10, @r13
800568c4: 8451 mov.b @(1,r5), r0
800568c6: 6b0c extu.b r0, r11
800568c8: 2eb2 mov.l r11, @r14
800568ca: 6c10 mov.b @r1, r12
800568cc: 60cc extu.b r12, r0
800568ce: 8802 cmp/eq #2, r0
800568d0: 8901 bt <800568d6>
800568d2: 8812 cmp/eq #18, r0
800568d4: 8b02 bf <800568dc>
800568d6: 56fe mov.l @(56,r15), r6
800568d8: a015 bra <80056906>
800568da: e201 mov #1, r2
800568dc: 8803 cmp/eq #3, r0
800568de: 8901 bt <800568e4>
800568e0: 8813 cmp/eq #19, r0
800568e2: 8b02 bf <800568ea>
800568e4: 56fe mov.l @(56,r15), r6
800568e6: a00e bra <80056906>
800568e8: e202 mov #2, r2
800568ea: 8811 cmp/eq #17, r0
800568ec: 8b02 bf <800568f4>
800568ee: 56fe mov.l @(56,r15), r6
800568f0: a009 bra <80056906>
800568f2: e203 mov #3, r2
800568f4: 8804 cmp/eq #4, r0
800568f6: 8901 bt <800568fc>
800568f8: 8814 cmp/eq #20, r0
800568fa: 8b02 bf <80056902>
800568fc: 56fe mov.l @(56,r15), r6
800568fe: a002 bra <80056906>
80056900: e204 mov #4, r2
80056902: e200 mov #0, r2
80056904: 56fe mov.l @(56,r15), r6
80056906: 54fd mov.l @(52,r15), r4
80056908: e800 mov #0, r8
8005690a: d911 mov.l 0x8800c254, r9
8005690c: 2620 mov.b r2, @r6
8005690e: de11 mov.l 0x88013408, r14
80056910: d727 mov.l 0x8005a60a, r7
80056912: 2481 mov.w r8, @r4
80056914: 6592 mov.l @r9, r5
80056916: 470b jsr @r7
80056918: 2e52 mov.l r5, @r14
8005691a: a118 bra <80056b4e> # return 1
8005691c: 0009 nop
###
800569b4: 56f2 mov.l @(8,r15), r6
800569b6: 2668 tst r6, r6
800569b8: 8b09 bf <800569ce>
800569ba: d666 mov.l 0x8800d1b8, r6
800569bc: 6260 mov.b @r6, r2
800569be: 2228 tst r2, r2
800569c0: 8b05 bf <800569ce>
800569c2: d665 mov.l 0x8800c254, r6
800569c4: de65 mov.l 0x88013408, r14
800569c6: db66 mov.l 0x8005a60a, r11
800569c8: 6a62 mov.l @r6, r10
800569ca: 4b0b jsr @r11
800569cc: 2ea2 mov.l r10, @r14
800569ce: b4b1 bsr %252
800569d0: 0009 nop
800569d2: d264 mov.l 0x80053536, r2
800569d4: 420b jsr @r2
800569d6: 0009 nop
800569d8: 2008 tst r0, r0
800569da: 891c bt <80056a16>
800569dc: d662 mov.l 0x800854c2, r6
800569de: 460b jsr @r6
800569e0: 0009 nop
800569e2: 8801 cmp/eq #1, r0
800569e4: 8b04 bf <800569f0>
# Start timer 3
800569e6: d261 mov.l %11a Timer_Start, r2
800569e8: 420b jsr @r2
800569ea: e403 mov #3, r4
800569ec: a013 bra <80056a16>
800569ee: 0009 nop
800569f0: d65d mov.l 0x800854c2, r6
800569f2: 460b jsr @r6
800569f4: 0009 nop
800569f6: 8802 cmp/eq #2, r0
800569f8: 8b03 bf <80056a02>
800569fa: b75e bsr <800578ba>
800569fc: 0009 nop
800569fe: a00a bra <80056a16>
80056a00: 0009 nop
80056a02: d25b mov.l %48e GetAutoPowerOffFlag, r2
80056a04: 420b jsr @r2
80056a06: 0009 nop
80056a08: 2008 tst r0, r0
80056a0a: 8b04 bf <80056a16>
80056a0c: b246 bsr <80056e9c>
80056a0e: 0009 nop
# Stop timer 3
80056a10: d258 mov.l %11b Timer_Stop, r2
80056a12: 420b jsr @r2
80056a14: e403 mov #3, r4
###
80056a16: ed80 mov #-128, r13
80056a18: da57 mov.l %3ed Interrupt_SetOrClrStatusFlags, r10
80056a1a: 6ddc extu.b r13, r13
80056a1c: db57 mov.l %3ef, r11
80056a1e: dc58 mov.l %3ee Interrupt_QueryStatusFlags, r12
80056a20: d858 mov.l 0x880133e4, r8
80056a22: d959 mov.l 0x88013480, r9
80056a24: 6682 mov.l @r8, r6
80056a26: 2668 tst r6, r6
80056a28: 8b01 bf <80056a2e>
80056a2a: b194 bsr %241 Keyboard_ClrBuffer
80056a2c: 0009 nop
80056a2e: e500 mov #0, r5
80056a30: 4a0b jsr @r10
80056a32: 64d3 mov r13, r4
80056a34: 4b0b jsr @r11
80056a36: 0009 nop
80056a38: e501 mov #1, r5
80056a3a: 4c0b jsr @r12
80056a3c: 64d3 mov r13, r4
80056a3e: 8801 cmp/eq #1, r0
80056a40: 8b2b bf <80056a9a>
80056a42: d152 mov.l 0x8005a5f8, r1
80056a44: 410b jsr @r1
80056a46: ee00 mov #0, r14
80056a48: b494 bsr %254
80056a4a: 0009 nop
80056a4c: b752 bsr <800578f4>
80056a4e: 64e3 mov r14, r4
80056a50: d14f mov.l 0x8801b6e9, r1
80056a52: 6510 mov.b @r1, r5
80056a54: 2558 tst r5, r5
80056a56: 8b04 bf <80056a62>
80056a58: d640 mov.l 0x88013408, r6
80056a5a: ee01 mov #1, r14
80056a5c: 6262 mov.l @r6, r2
80056a5e: 72ff add #-1, r2
80056a60: 2622 mov.l r2, @r6
80056a62: d14c mov.l 0x880133ec, r1
80056a64: 6212 mov.l @r1, r2
80056a66: 4215 cmp/pl r2
80056a68: 8b03 bf <80056a72>
80056a6a: 6212 mov.l @r1, r2
80056a6c: 72ff add #-1, r2
80056a6e: a006 bra <80056a7e>
80056a70: 2122 mov.l r2, @r1
80056a72: d149 mov.l 0x880133e8, r1
80056a74: 6010 mov.b @r1, r0
80056a76: 8810 cmp/eq #16, r0
80056a78: 8b01 bf <80056a7e>
80056a7a: e200 mov #0, r2
80056a7c: 2120 mov.b r2, @r1
80056a7e: d247 mov.l 0x8005a63a, r2
80056a80: 420b jsr @r2
80056a82: 0009 nop
80056a84: b3a6 bsr <800571d4>
80056a86: 0009 nop
80056a88: 60e3 mov r14, r0
80056a8a: 8801 cmp/eq #1, r0
80056a8c: 8b02 bf <80056a94>
80056a8e: d244 mov.l %4e5, r2
80056a90: 420b jsr @r2
80056a92: 0009 nop
80056a94: d243 mov.l 0x8008c990, r2
80056a96: 420b jsr @r2
80056a98: e400 mov #0, r4
80056a9a: de43 mov.l 0x8801345c, r14
80056a9c: 6791 mov.w @r9, r7
80056a9e: 7701 add #1, r7
80056aa0: 2971 mov.w r7, @r9
80056aa2: 61e2 mov.l @r14, r1
80056aa4: 2118 tst r1, r1
80056aa6: 8b01 bf <80056aac>
80056aa8: a088 bra <80056bbc>
80056aaa: 0009 nop
80056aac: 64f2 mov.l @r15, r4
80056aae: b16c bsr <80056d8a>
80056ab0: 55f1 mov.l @(4,r15), r5
80056ab2: b451 bsr %253
80056ab4: 0009 nop
80056ab6: 64f2 mov.l @r15, r4
80056ab8: b167 bsr <80056d8a>
80056aba: 55f1 mov.l @(4,r15), r5
80056abc: d43b mov.l 0x88013464, r4
80056abe: d63c mov.l 0x8801342c, r6
80056ac0: 6042 mov.l @r4, r0
80056ac2: 026c mov.b @(r0,r6), r2
80056ac4: 602c extu.b r2, r0
80056ac6: 8802 cmp/eq #2, r0
80056ac8: 8901 bt <80056ace>
80056aca: 8812 cmp/eq #18, r0
80056acc: 8b02 bf <80056ad4>
80056ace: 56fe mov.l @(56,r15), r6
80056ad0: a015 bra <80056afe>
80056ad2: e201 mov #1, r2
80056ad4: 8803 cmp/eq #3, r0
80056ad6: 8901 bt <80056adc>
80056ad8: 8813 cmp/eq #19, r0
80056ada: 8b02 bf <80056ae2>
80056adc: 56fe mov.l @(56,r15), r6
80056ade: a00e bra <80056afe>
80056ae0: e202 mov #2, r2
80056ae2: 8811 cmp/eq #17, r0
80056ae4: 8b02 bf <80056aec>
80056ae6: 56fe mov.l @(56,r15), r6
80056ae8: a009 bra <80056afe>
80056aea: e203 mov #3, r2
80056aec: 8804 cmp/eq #4, r0
80056aee: 8901 bt <80056af4>
80056af0: 8814 cmp/eq #20, r0
80056af2: 8b02 bf <80056afa>
80056af4: 56fe mov.l @(56,r15), r6
80056af6: a002 bra <80056afe>
80056af8: e204 mov #4, r2
80056afa: e200 mov #0, r2
80056afc: 56fe mov.l @(56,r15), r6
80056afe: 67f2 mov.l @r15, r7
80056b00: 2620 mov.b r2, @r6
80056b02: 6572 mov.l @r7, r5
80056b04: 4511 cmp/pz r5
80056b06: 8908 bt <80056b1a>
80056b08: 56f1 mov.l @(4,r15), r6
80056b0a: 6262 mov.l @r6, r2
80056b0c: 4211 cmp/pz r2
80056b0e: 8904 bt <80056b1a>
80056b10: d528 mov.l 0x8801343c, r5
80056b12: 6042 mov.l @r4, r0
80056b14: 4000 shll r0
80056b16: a001 bra <80056b1c>
80056b18: 065d mov.w @(r0,r5), r6
80056b1a: e600 mov #0, r6
80056b1c: 58fd mov.l @(52,r15), r8
80056b1e: eb10 mov #16, r11
80056b20: de21 mov.l 0x8801345c, r14
80056b22: 2861 mov.w r6, @r8
80056b24: 6a42 mov.l @r4, r10
80056b26: 69e2 mov.l @r14, r9
80056b28: 7a01 add #1, r10
80056b2a: 24a2 mov.l r10, @r4
80056b2c: 3ab3 cmp/ge r11, r10
80056b2e: 79ff add #-1, r9
80056b30: 8f02 bf.s <80056b38>
80056b32: 2e92 mov.l r9, @r14
80056b34: e200 mov #0, r2
80056b36: 2422 mov.l r2, @r4
80056b38: 52fc mov.l @(48,r15), r2
80056b3a: 2228 tst r2, r2
80056b3c: 8b07 bf <80056b4e>
80056b3e: d21e mov.l 0x8008a692, r2
80056b40: 64f2 mov.l @r15, r4
80056b42: 420b jsr @r2
80056b44: 55f1 mov.l @(4,r15), r5
80056b46: 2008 tst r0, r0
80056b48: 8b01 bf <80056b4e>
80056b4a: ae9b bra <80056884>
80056b4c: 0009 nop
# Error return
80056b4e: a06b bra <80056c28>
80056b50: e001 mov #1, r0
80056bbc: de89 mov.l 0x88013408, r14
80056bbe: 62e2 mov.l @r14, r2
80056bc0: 4215 cmp/pl r2
80056bc2: 891e bt <80056c02>
80056bc4: b03a bsr %250
80056bc6: 0009 nop
80056bc8: 50f2 mov.l @(8,r15), r0
80056bca: 8802 cmp/eq #2, r0
80056bcc: 8919 bt <80056c02>
80056bce: d286 mov.l %48e GetAutoPowerOffFlag, r2
80056bd0: 420b jsr @r2
80056bd2: 0009 nop
80056bd4: 2008 tst r0, r0
80056bd6: 8b14 bf <80056c02>
80056bd8: d184 mov.l 0x8801b6e9, r1
80056bda: 6210 mov.b @r1, r2
80056bdc: 2228 tst r2, r2
80056bde: 8b10 bf <80056c02>
# PowerOff with logo
80056be0: de83 mov.l %3f4 PowerOff, r14
80056be2: 4e0b jsr @r14
80056be4: e401 mov #1, r4
80056be6: d183 mov.l %4e5, r1
80056be8: 410b jsr @r1
80056bea: 0009 nop
80056bec: d582 mov.l %4b7, r5
80056bee: 450b jsr @r5
80056bf0: 0009 nop
80056bf2: 2008 tst r0, r0
80056bf4: 8b02 bf <80056bfc>
80056bf6: d281 mov.l 0x8008c990, r2
80056bf8: 420b jsr @r2
80056bfa: e401 mov #1, r4
80056bfc: d280 mov.l %028 Bdisp_PutDisp_DD, r2
80056bfe: 420b jsr @r2
80056c00: 0009 nop
80056c02: 50f2 mov.l @(8,r15), r0
80056c04: 8802 cmp/eq #2, r0
80056c06: 8901 bt <80056c0c>
80056c08: af0c bra <80056a24>
80056c0a: 0009 nop
80056c0c: 6682 mov.l @r8, r6
80056c0e: 2668 tst r6, r6
80056c10: 8901 bt <80056c16>
80056c12: af07 bra <80056a24>
80056c14: 0009 nop
80056c16: 57f3 mov.l @(12,r15), r7
80056c18: 4715 cmp/pl r7
80056c1a: 8b02 bf <80056c22>
80056c1c: 77ff add #-1, r7
80056c1e: af01 bra <80056a24>
80056c20: 1f73 mov.l r7, @(12,r15)
80056c22: b399 bsr %253
80056c24: 0009 nop
80056c26: e002 mov #2, r0
80056c28: 7f10 add #16, r15
80056c2a: 4f26 lds.l @r15+, pr
80056c2c: 6ef6 mov.l @r15+, r14
80056c2e: 6df6 mov.l @r15+, r13
80056c30: 6cf6 mov.l @r15+, r12
80056c32: 6bf6 mov.l @r15+, r11
80056c34: 6af6 mov.l @r15+, r10
80056c36: 69f6 mov.l @r15+, r9
80056c38: 000b rts
80056c3a: 68f6 mov.l @r15+, r8