Files
psopeeps-newserv/system/client-functions/System/CallNativeFunction.s
T
2026-05-11 21:33:35 -07:00

86 lines
1.2 KiB
ArmAsm

# This function implements the $nativecall chat command.
entry_ptr:
reloc0:
.offsetof start
.versions SH4
start:
sts.l -[r15], pr
mov.l r0, [call_addr]
mov.l r4, [arg0]
mov.l r5, [arg1]
mov.l r6, [arg2]
mov.l r7, [arg3]
calls [r0]
nop
lds.l pr, [r15]+
rets
nop
.align 4
call_addr:
.data 0
arg0:
.data 0
arg1:
.data 0
arg2:
.data 0
arg3:
.data 0
.versions PPC
start:
mflr r0
stw [r1 + 4], r0
stwu [r1 - 0x20], r1
bl resume
call_addr:
.zero
arg0:
.zero
arg1:
.zero
arg2:
.zero
arg3:
.zero
arg4:
.zero
arg5:
.zero
arg6:
.zero
arg7:
.zero
arg8:
.zero
arg9:
.zero
resume:
mflr r12
lwz r0, [r12] # call_addr
lwz r3, [r12 + 0x04] # arg0
lwz r4, [r12 + 0x08] # arg1
lwz r5, [r12 + 0x0C] # arg2
lwz r6, [r12 + 0x10] # arg3
lwz r7, [r12 + 0x14] # arg4
lwz r8, [r12 + 0x18] # arg5
lwz r9, [r12 + 0x1C] # arg6
lwz r10, [r12 + 0x20] # arg7
lwz r11, [r12 + 0x24] # arg8
lwz r12, [r12 + 0x28] # arg9
mtctr r0
bctrl
addi r1, r1, 0x20
lwz r0, [r1 + 4]
mtlr r0
blr