Files
psopeeps-newserv/system/client-functions.disabled/PsoPeepsV2EXP5xDC.s
T

104 lines
1.6 KiB
ArmAsm

.meta visibility="menu"
.meta key="PsoPeepsV2EXP5xDC"
.meta name="V2 5x"
.meta description="Dreamcast V2 EXP"
.versions 2OEF
entry_ptr:
reloc0:
.offsetof start
start:
# Active DC V2 online EXP table copy.
# Idempotent:
# - base table => multiply by 5
# - 10x table => halve into 5x
# - 5x table => do nothing
mova r0, [active_table_addr]
mov.l r4, [r0]
# r5 = sentinel at index 2: active_table + (2 * 0x24)
mov r5, r4
add r5, 0x48
mov.w r5, [r5]
mova r0, [factor_table]
mov r6, r0
mov r7, 8
find_factor:
mov.w r0, [r6]
cmpeq r0, r5
bt factor_found
add r6, 4
add r7, -1
cmpgt r7, 0
bt find_factor
rets
nop
factor_found:
mov.w r5, [r6 + 2]
test r5, r5
bt halve_table
# r7 = 212 entries
mov r7, 0x0D
shl r7, 4
add r7, 4
# r6 = stride
mov r6, 0x24
multiply_loop:
mov.w r0, [r4]
mulu.w r5, r0
sts macl, r0
mov.w [r4], r0
add r4, r6
add r7, -1
cmpgt r7, 0
bt multiply_loop
rets
nop
halve_table:
# r7 = 212 entries
mov r7, 0x0D
shl r7, 4
add r7, 4
# r6 = stride
mov r6, 0x24
halve_loop:
mov.w r0, [r4]
shlr r0
mov.w [r4], r0
add r4, r6
add r7, -1
cmpgt r7, 0
bt halve_loop
rets
nop
.align 4
active_table_addr:
.data 0x8CD313DC
factor_table:
# base -> 5x
.binary 05000500
.binary 2a000500
.binary 5a000500
.binary 04010500
# 10x -> 5x by halving
.binary 32000000
.binary a4010000
.binary 84030000
.binary 280a0000