mirror of
https://github.com/pret/pokediamond.git
synced 2026-03-21 17:54:29 -05:00
more line endings
This commit is contained in:
parent
675e8f2992
commit
b5cf46393f
2
.gitattributes
vendored
2
.gitattributes
vendored
|
|
@ -2,4 +2,6 @@
|
|||
charmap.txt text eol=crlf
|
||||
m2ctx.sh text eol=lf
|
||||
|
||||
*.png binary
|
||||
|
||||
* text eol=crlf
|
||||
|
|
|
|||
1010
arm7/global.inc
1010
arm7/global.inc
File diff suppressed because it is too large
Load Diff
|
|
@ -1,160 +1,160 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __console_exit
|
||||
__console_exit: ; 0x021D6F78
|
||||
.space 0x4
|
||||
.size __console_exit,.-__console_exit
|
||||
|
||||
.global __stdio_exit
|
||||
__stdio_exit: ; 0x021D6F7C
|
||||
.space 0x4
|
||||
.size __stdio_exit,.-__stdio_exit
|
||||
|
||||
.global __atexit_curr_func
|
||||
__atexit_curr_func: ; 0x021D6F80
|
||||
.space 0x4
|
||||
.size __atexit_curr_func,.-__atexit_curr_func
|
||||
|
||||
.global __aborting
|
||||
__aborting: ; 0x021D6F84
|
||||
.space 0x4
|
||||
.size __aborting,.-__aborting
|
||||
|
||||
.global __atexit_funcs
|
||||
__atexit_funcs: ; 0x021D6F88
|
||||
.space 0x100
|
||||
.size __atexit_funcs,.-__atexit_funcs
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start abort
|
||||
abort: ; 0x020DE14C
|
||||
stmdb sp!, {r3,lr}
|
||||
mov r0, #0x1
|
||||
bl raise
|
||||
ldr r1, _020DE16C ; =__aborting - 0xC
|
||||
mov r0, #0x1
|
||||
str r0, [r1, #0xc]
|
||||
bl exit
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DE16C: .word __aborting - 0xC
|
||||
arm_func_end abort
|
||||
|
||||
arm_func_start exit
|
||||
exit: ; 0x020DE170
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r1, _020DE1B8 ; =__aborting - 0xC
|
||||
mov r4, r0
|
||||
ldr r0, [r1, #0xc]
|
||||
cmp r0, #0x0
|
||||
bne _020DE1AC
|
||||
bl __destroy_global_chain
|
||||
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
|
||||
ldr r0, [r0, #0x4]
|
||||
cmp r0, #0x0
|
||||
beq _020DE1AC
|
||||
blx r0
|
||||
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #0x4]
|
||||
_020DE1AC:
|
||||
mov r0, r4
|
||||
bl __exit
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020DE1B8: .word __console_exit
|
||||
arm_func_end exit
|
||||
|
||||
arm_func_start __exit
|
||||
__exit: ; 0x020DE1BC
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DE1F4
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x0]
|
||||
str r2, [r0, #0x0]
|
||||
b _020DE24C
|
||||
_020DE1F4:
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, #0x0]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DE224
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r1, [r0, #0x0]
|
||||
add r1, r1, #0x1
|
||||
str r1, [r0, #0x0]
|
||||
b _020DE24C
|
||||
_020DE224:
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x0]
|
||||
str r2, [r0, #0x0]
|
||||
_020DE24C:
|
||||
ldr r4, _020DE2DC ; =__console_exit
|
||||
ldr r0, [r4, #0x8]
|
||||
cmp r0, #0x0
|
||||
ble _020DE280
|
||||
ldr r5, _020DE2E0 ; =__atexit_funcs
|
||||
_020DE260:
|
||||
ldr r0, [r4, #0x8]
|
||||
sub r1, r0, #0x1
|
||||
ldr r0, [r5, r1, lsl #0x2]
|
||||
str r1, [r4, #0x8]
|
||||
blx r0
|
||||
ldr r0, [r4, #0x8]
|
||||
cmp r0, #0x0
|
||||
bgt _020DE260
|
||||
_020DE280:
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r1, [r0, #0x0]
|
||||
subs r1, r1, #0x1
|
||||
str r1, [r0, #0x0]
|
||||
bne _020DE29C
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_UnlockMutex
|
||||
_020DE29C:
|
||||
ldr r0, _020DE2DC ; =__console_exit
|
||||
ldr r0, [r0, #0x0]
|
||||
cmp r0, #0x0
|
||||
beq _020DE2BC
|
||||
blx r0
|
||||
ldr r0, _020DE2DC ; =__console_exit
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #0x0]
|
||||
_020DE2BC:
|
||||
mov r0, #0x0
|
||||
bl fflush
|
||||
bl _ExitProcess
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020DE2CC: .word __cs
|
||||
_020DE2D0: .word OSi_ThreadInfo
|
||||
_020DE2D4: .word __cs_id
|
||||
_020DE2D8: .word __cs_ref
|
||||
_020DE2DC: .word __console_exit
|
||||
_020DE2E0: .word __atexit_funcs
|
||||
arm_func_end __exit
|
||||
|
||||
exception abort, 37, 0x00100000
|
||||
exception exit, 77, 0x00100100
|
||||
exception __exit, 297, 0x00200300
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __console_exit
|
||||
__console_exit: ; 0x021D6F78
|
||||
.space 0x4
|
||||
.size __console_exit,.-__console_exit
|
||||
|
||||
.global __stdio_exit
|
||||
__stdio_exit: ; 0x021D6F7C
|
||||
.space 0x4
|
||||
.size __stdio_exit,.-__stdio_exit
|
||||
|
||||
.global __atexit_curr_func
|
||||
__atexit_curr_func: ; 0x021D6F80
|
||||
.space 0x4
|
||||
.size __atexit_curr_func,.-__atexit_curr_func
|
||||
|
||||
.global __aborting
|
||||
__aborting: ; 0x021D6F84
|
||||
.space 0x4
|
||||
.size __aborting,.-__aborting
|
||||
|
||||
.global __atexit_funcs
|
||||
__atexit_funcs: ; 0x021D6F88
|
||||
.space 0x100
|
||||
.size __atexit_funcs,.-__atexit_funcs
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start abort
|
||||
abort: ; 0x020DE14C
|
||||
stmdb sp!, {r3,lr}
|
||||
mov r0, #0x1
|
||||
bl raise
|
||||
ldr r1, _020DE16C ; =__aborting - 0xC
|
||||
mov r0, #0x1
|
||||
str r0, [r1, #0xc]
|
||||
bl exit
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DE16C: .word __aborting - 0xC
|
||||
arm_func_end abort
|
||||
|
||||
arm_func_start exit
|
||||
exit: ; 0x020DE170
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r1, _020DE1B8 ; =__aborting - 0xC
|
||||
mov r4, r0
|
||||
ldr r0, [r1, #0xc]
|
||||
cmp r0, #0x0
|
||||
bne _020DE1AC
|
||||
bl __destroy_global_chain
|
||||
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
|
||||
ldr r0, [r0, #0x4]
|
||||
cmp r0, #0x0
|
||||
beq _020DE1AC
|
||||
blx r0
|
||||
ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #0x4]
|
||||
_020DE1AC:
|
||||
mov r0, r4
|
||||
bl __exit
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020DE1B8: .word __console_exit
|
||||
arm_func_end exit
|
||||
|
||||
arm_func_start __exit
|
||||
__exit: ; 0x020DE1BC
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DE1F4
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x0]
|
||||
str r2, [r0, #0x0]
|
||||
b _020DE24C
|
||||
_020DE1F4:
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, #0x0]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DE224
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r1, [r0, #0x0]
|
||||
add r1, r1, #0x1
|
||||
str r1, [r0, #0x0]
|
||||
b _020DE24C
|
||||
_020DE224:
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DE2D0 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DE2D4 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x0]
|
||||
str r2, [r0, #0x0]
|
||||
_020DE24C:
|
||||
ldr r4, _020DE2DC ; =__console_exit
|
||||
ldr r0, [r4, #0x8]
|
||||
cmp r0, #0x0
|
||||
ble _020DE280
|
||||
ldr r5, _020DE2E0 ; =__atexit_funcs
|
||||
_020DE260:
|
||||
ldr r0, [r4, #0x8]
|
||||
sub r1, r0, #0x1
|
||||
ldr r0, [r5, r1, lsl #0x2]
|
||||
str r1, [r4, #0x8]
|
||||
blx r0
|
||||
ldr r0, [r4, #0x8]
|
||||
cmp r0, #0x0
|
||||
bgt _020DE260
|
||||
_020DE280:
|
||||
ldr r0, _020DE2D8 ; =__cs_ref
|
||||
ldr r1, [r0, #0x0]
|
||||
subs r1, r1, #0x1
|
||||
str r1, [r0, #0x0]
|
||||
bne _020DE29C
|
||||
ldr r0, _020DE2CC ; =__cs
|
||||
bl OS_UnlockMutex
|
||||
_020DE29C:
|
||||
ldr r0, _020DE2DC ; =__console_exit
|
||||
ldr r0, [r0, #0x0]
|
||||
cmp r0, #0x0
|
||||
beq _020DE2BC
|
||||
blx r0
|
||||
ldr r0, _020DE2DC ; =__console_exit
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #0x0]
|
||||
_020DE2BC:
|
||||
mov r0, #0x0
|
||||
bl fflush
|
||||
bl _ExitProcess
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020DE2CC: .word __cs
|
||||
_020DE2D0: .word OSi_ThreadInfo
|
||||
_020DE2D4: .word __cs_id
|
||||
_020DE2D8: .word __cs_ref
|
||||
_020DE2DC: .word __console_exit
|
||||
_020DE2E0: .word __atexit_funcs
|
||||
arm_func_end __exit
|
||||
|
||||
exception abort, 37, 0x00100000
|
||||
exception exit, 77, 0x00100100
|
||||
exception __exit, 297, 0x00200300
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __cs_id
|
||||
__cs_id: ; 0x021D7088
|
||||
.space 0x24
|
||||
.size __cs_id,.-__cs_id
|
||||
|
||||
.global __cs_ref
|
||||
__cs_ref: ; 0x021D70AC
|
||||
.space 0x24
|
||||
.size __cs_ref,.-__cs_ref
|
||||
|
||||
.global __cs
|
||||
__cs: ; 0x021D70D0
|
||||
.space 0xD8
|
||||
.size __cs,.-__cs
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __cs_id
|
||||
__cs_id: ; 0x021D7088
|
||||
.space 0x24
|
||||
.size __cs_id,.-__cs_id
|
||||
|
||||
.global __cs_ref
|
||||
__cs_ref: ; 0x021D70AC
|
||||
.space 0x24
|
||||
.size __cs_ref,.-__cs_ref
|
||||
|
||||
.global __cs
|
||||
__cs: ; 0x021D70D0
|
||||
.space 0xD8
|
||||
.size __cs,.-__cs
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start nan
|
||||
nan: ; 0x020DE2E4
|
||||
ldr r0, _020DE2F4 ; =__float_nan
|
||||
ldr ip, _020DE2F8 ; =_f2d
|
||||
ldr r0, [r0, #0x0]
|
||||
bx r12
|
||||
.balign 4
|
||||
_020DE2F4: .word __float_nan
|
||||
_020DE2F8: .word _f2d
|
||||
arm_func_end nan
|
||||
|
||||
exception nan, 25, 0x00000000
|
||||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start nan
|
||||
nan: ; 0x020DE2E4
|
||||
ldr r0, _020DE2F4 ; =__float_nan
|
||||
ldr ip, _020DE2F8 ; =_f2d
|
||||
ldr r0, [r0, #0x0]
|
||||
bx r12
|
||||
.balign 4
|
||||
_020DE2F4: .word __float_nan
|
||||
_020DE2F8: .word _f2d
|
||||
arm_func_end nan
|
||||
|
||||
exception nan, 25, 0x00000000
|
||||
|
|
|
|||
|
|
@ -1,145 +1,145 @@
|
|||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.data
|
||||
|
||||
.global __files
|
||||
__files: ; 0x02106A58
|
||||
; stdin
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stdin_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stdin_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
; stdout
|
||||
.byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stdout_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stdout_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
; stderr
|
||||
.byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stderr_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stderr_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.size __files,.-__files
|
||||
|
||||
.bss
|
||||
|
||||
.global stderr_buff
|
||||
stderr_buff: ; 0x021D71A8
|
||||
.space 0x100
|
||||
.size stderr_buff,.-stderr_buff
|
||||
|
||||
.global stdout_buff
|
||||
stdout_buff: ; 0x021D72A8
|
||||
.space 0x100
|
||||
.size stdout_buff,.-stdout_buff
|
||||
|
||||
.global stdin_buff
|
||||
stdin_buff: ; 0x021D73A8
|
||||
.space 0x100
|
||||
.size stdin_buff,.-stdin_buff
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __flush_line_buffered_output_files
|
||||
__flush_line_buffered_output_files:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r0, _020DE384 ; =__files
|
||||
mov r4, #0x0
|
||||
mov r5, #0x1
|
||||
mov r8, r0
|
||||
mvn r9, #0x0
|
||||
mov r7, r4
|
||||
mov r6, #0x4c
|
||||
_020DE31C:
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r2, r1, lsl #0x16
|
||||
movs r2, r2, lsr #0x1d
|
||||
beq _020DE35C
|
||||
mov r1, r1, lsl #0x19
|
||||
mov r1, r1, lsr #0x1e
|
||||
tst r1, #0x1
|
||||
beq _020DE35C
|
||||
ldr r1, [r0, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
bne _020DE35C
|
||||
bl fflush
|
||||
cmp r0, #0x0
|
||||
movne r4, r9
|
||||
_020DE35C:
|
||||
cmp r5, #0x3
|
||||
movge r0, r7
|
||||
bge _020DE374
|
||||
mul r0, r5, r6
|
||||
add r5, r5, #0x1
|
||||
add r0, r8, r0
|
||||
_020DE374:
|
||||
cmp r0, #0x0
|
||||
bne _020DE31C
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DE384: .word __files
|
||||
arm_func_end __flush_line_buffered_output_files
|
||||
|
||||
arm_func_start __flush_all
|
||||
__flush_all: ; 0x020DE388
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r0, _020DE3EC ; =__files
|
||||
mov r4, #0x0
|
||||
mov r5, #0x1
|
||||
mov r8, r0
|
||||
mvn r9, #0x0
|
||||
mov r7, r4
|
||||
mov r6, #0x4c
|
||||
_020DE3A8:
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
beq _020DE3C4
|
||||
bl fflush
|
||||
cmp r0, #0x0
|
||||
movne r4, r9
|
||||
_020DE3C4:
|
||||
cmp r5, #0x3
|
||||
movge r0, r7
|
||||
bge _020DE3DC
|
||||
mul r0, r5, r6
|
||||
add r5, r5, #0x1
|
||||
add r0, r8, r0
|
||||
_020DE3DC:
|
||||
cmp r0, #0x0
|
||||
bne _020DE3A8
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DE3EC: .word __files
|
||||
arm_func_end __flush_all
|
||||
|
||||
exception __flush_line_buffered_output_files, 141, 0x00403F00
|
||||
exception __flush_all, 105, 0x00403F00
|
||||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.data
|
||||
|
||||
.global __files
|
||||
__files: ; 0x02106A58
|
||||
; stdin
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stdin_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stdin_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
; stdout
|
||||
.byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stdout_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stdout_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
; stderr
|
||||
.byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word stderr_buff
|
||||
.byte 0x00, 0x01, 0x00, 0x00
|
||||
.word stderr_buff
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.word __read_console
|
||||
.word __write_console
|
||||
.word __close_console
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.size __files,.-__files
|
||||
|
||||
.bss
|
||||
|
||||
.global stderr_buff
|
||||
stderr_buff: ; 0x021D71A8
|
||||
.space 0x100
|
||||
.size stderr_buff,.-stderr_buff
|
||||
|
||||
.global stdout_buff
|
||||
stdout_buff: ; 0x021D72A8
|
||||
.space 0x100
|
||||
.size stdout_buff,.-stdout_buff
|
||||
|
||||
.global stdin_buff
|
||||
stdin_buff: ; 0x021D73A8
|
||||
.space 0x100
|
||||
.size stdin_buff,.-stdin_buff
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __flush_line_buffered_output_files
|
||||
__flush_line_buffered_output_files:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r0, _020DE384 ; =__files
|
||||
mov r4, #0x0
|
||||
mov r5, #0x1
|
||||
mov r8, r0
|
||||
mvn r9, #0x0
|
||||
mov r7, r4
|
||||
mov r6, #0x4c
|
||||
_020DE31C:
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r2, r1, lsl #0x16
|
||||
movs r2, r2, lsr #0x1d
|
||||
beq _020DE35C
|
||||
mov r1, r1, lsl #0x19
|
||||
mov r1, r1, lsr #0x1e
|
||||
tst r1, #0x1
|
||||
beq _020DE35C
|
||||
ldr r1, [r0, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
bne _020DE35C
|
||||
bl fflush
|
||||
cmp r0, #0x0
|
||||
movne r4, r9
|
||||
_020DE35C:
|
||||
cmp r5, #0x3
|
||||
movge r0, r7
|
||||
bge _020DE374
|
||||
mul r0, r5, r6
|
||||
add r5, r5, #0x1
|
||||
add r0, r8, r0
|
||||
_020DE374:
|
||||
cmp r0, #0x0
|
||||
bne _020DE31C
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DE384: .word __files
|
||||
arm_func_end __flush_line_buffered_output_files
|
||||
|
||||
arm_func_start __flush_all
|
||||
__flush_all: ; 0x020DE388
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r0, _020DE3EC ; =__files
|
||||
mov r4, #0x0
|
||||
mov r5, #0x1
|
||||
mov r8, r0
|
||||
mvn r9, #0x0
|
||||
mov r7, r4
|
||||
mov r6, #0x4c
|
||||
_020DE3A8:
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
beq _020DE3C4
|
||||
bl fflush
|
||||
cmp r0, #0x0
|
||||
movne r4, r9
|
||||
_020DE3C4:
|
||||
cmp r5, #0x3
|
||||
movge r0, r7
|
||||
bge _020DE3DC
|
||||
mul r0, r5, r6
|
||||
add r5, r5, #0x1
|
||||
add r0, r8, r0
|
||||
_020DE3DC:
|
||||
cmp r0, #0x0
|
||||
bne _020DE3A8
|
||||
mov r0, r4
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DE3EC: .word __files
|
||||
arm_func_end __flush_all
|
||||
|
||||
exception __flush_line_buffered_output_files, 141, 0x00403F00
|
||||
exception __flush_all, 105, 0x00403F00
|
||||
|
|
|
|||
|
|
@ -1,33 +1,33 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
|
||||
__local_str__msl_assertion_failed: ; 0x02106B3C
|
||||
.asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n"
|
||||
.size __local_str__msl_assertion_failed,.-__local_str__msl_assertion_failed
|
||||
.balign 4, 0
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __msl_assertion_failed
|
||||
__msl_assertion_failed: ; 0x020DE3FC
|
||||
stmdb sp!, {r3-r4,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r4, r0
|
||||
mov lr, r1
|
||||
mov r12, r2
|
||||
str r3, [sp, #0x0]
|
||||
ldr r0, _020DE434 ; =__local_str__msl_assertion_failed
|
||||
mov r1, r4
|
||||
mov r2, lr
|
||||
mov r3, r12
|
||||
bl printf
|
||||
bl abort
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r3-r4,pc}
|
||||
.balign 4
|
||||
_020DE434: .word __local_str__msl_assertion_failed
|
||||
arm_func_end __msl_assertion_failed
|
||||
|
||||
exception __msl_assertion_failed, 61, 0x00200100
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
|
||||
__local_str__msl_assertion_failed: ; 0x02106B3C
|
||||
.asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n"
|
||||
.size __local_str__msl_assertion_failed,.-__local_str__msl_assertion_failed
|
||||
.balign 4, 0
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __msl_assertion_failed
|
||||
__msl_assertion_failed: ; 0x020DE3FC
|
||||
stmdb sp!, {r3-r4,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r4, r0
|
||||
mov lr, r1
|
||||
mov r12, r2
|
||||
str r3, [sp, #0x0]
|
||||
ldr r0, _020DE434 ; =__local_str__msl_assertion_failed
|
||||
mov r1, r4
|
||||
mov r2, lr
|
||||
mov r3, r12
|
||||
bl printf
|
||||
bl abort
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r3-r4,pc}
|
||||
.balign 4
|
||||
_020DE434: .word __local_str__msl_assertion_failed
|
||||
arm_func_end __msl_assertion_failed
|
||||
|
||||
exception __msl_assertion_failed, 61, 0x00200100
|
||||
|
|
|
|||
|
|
@ -1,113 +1,113 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __convert_from_newlines
|
||||
__convert_from_newlines:
|
||||
bx lr
|
||||
arm_func_end __convert_from_newlines
|
||||
|
||||
arm_func_start __convert_to_newlines
|
||||
__convert_to_newlines:
|
||||
bx lr
|
||||
arm_func_end __convert_to_newlines
|
||||
|
||||
arm_func_start __prep_buffer
|
||||
__prep_buffer:
|
||||
ldr r1, [r0, #0x1c]
|
||||
str r1, [r0, #0x24]
|
||||
ldr r3, [r0, #0x20]
|
||||
str r3, [r0, #0x28]
|
||||
ldr r2, [r0, #0x18]
|
||||
ldr r1, [r0, #0x2c]
|
||||
and r1, r2, r1
|
||||
sub r1, r3, r1
|
||||
str r1, [r0, #0x28]
|
||||
ldr r1, [r0, #0x18]
|
||||
str r1, [r0, #0x34]
|
||||
bx lr
|
||||
arm_func_end __prep_buffer
|
||||
|
||||
arm_func_start __load_buffer
|
||||
__load_buffer:
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
mov r5, r2
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
bl __prep_buffer
|
||||
cmp r5, #0x1
|
||||
ldreq r0, [r4, #0x20]
|
||||
add r2, r4, #0x28
|
||||
streq r0, [r4, #0x28]
|
||||
ldr r0, [r4, #0x0]
|
||||
ldr r1, [r4, #0x1c]
|
||||
ldr r3, [r4, #0x48]
|
||||
ldr r12, [r4, #0x3c]
|
||||
blx r12
|
||||
cmp r0, #0x2
|
||||
moveq r1, #0x0
|
||||
streq r1, [r4, #0x28]
|
||||
cmp r6, #0x0
|
||||
ldrne r1, [r4, #0x28]
|
||||
strne r1, [r6, #0x0]
|
||||
cmp r0, #0x0
|
||||
ldmneia sp!, {r4-r6,pc}
|
||||
ldr r1, [r4, #0x18]
|
||||
ldr r0, [r4, #0x28]
|
||||
add r0, r1, r0
|
||||
str r0, [r4, #0x18]
|
||||
ldr r0, [r4, #0x4]
|
||||
mov r0, r0, lsl #0x13
|
||||
movs r0, r0, lsr #0x1f
|
||||
bne _020DE4F4
|
||||
ldr r0, [r4, #0x1c]
|
||||
add r1, r4, #0x28
|
||||
bl __convert_to_newlines
|
||||
_020DE4F4:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,pc}
|
||||
arm_func_end __load_buffer
|
||||
|
||||
arm_func_start __flush_buffer
|
||||
__flush_buffer:
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
ldr r2, [r5, #0x24]
|
||||
ldr r0, [r5, #0x1c]
|
||||
mov r4, r1
|
||||
subs r0, r2, r0
|
||||
beq _020DE574
|
||||
str r0, [r5, #0x28]
|
||||
ldr r0, [r5, #0x4]
|
||||
mov r0, r0, lsl #0x13
|
||||
movs r0, r0, lsr #0x1f
|
||||
bne _020DE538
|
||||
ldr r0, [r5, #0x1c]
|
||||
add r1, r5, #0x28
|
||||
bl __convert_from_newlines
|
||||
_020DE538:
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r1, [r5, #0x1c]
|
||||
ldr r3, [r5, #0x48]
|
||||
ldr r12, [r5, #0x40]
|
||||
add r2, r5, #0x28
|
||||
blx r12
|
||||
cmp r4, #0x0
|
||||
ldrne r1, [r5, #0x28]
|
||||
strne r1, [r4, #0x0]
|
||||
cmp r0, #0x0
|
||||
ldmneia sp!, {r3-r5,pc}
|
||||
ldr r1, [r5, #0x18]
|
||||
ldr r0, [r5, #0x28]
|
||||
add r0, r1, r0
|
||||
str r0, [r5, #0x18]
|
||||
_020DE574:
|
||||
mov r0, r5
|
||||
bl __prep_buffer
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
arm_func_end __flush_buffer
|
||||
|
||||
exception __load_buffer, 141, 0x00200700
|
||||
exception __flush_buffer, 137, 0x00200300
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __convert_from_newlines
|
||||
__convert_from_newlines:
|
||||
bx lr
|
||||
arm_func_end __convert_from_newlines
|
||||
|
||||
arm_func_start __convert_to_newlines
|
||||
__convert_to_newlines:
|
||||
bx lr
|
||||
arm_func_end __convert_to_newlines
|
||||
|
||||
arm_func_start __prep_buffer
|
||||
__prep_buffer:
|
||||
ldr r1, [r0, #0x1c]
|
||||
str r1, [r0, #0x24]
|
||||
ldr r3, [r0, #0x20]
|
||||
str r3, [r0, #0x28]
|
||||
ldr r2, [r0, #0x18]
|
||||
ldr r1, [r0, #0x2c]
|
||||
and r1, r2, r1
|
||||
sub r1, r3, r1
|
||||
str r1, [r0, #0x28]
|
||||
ldr r1, [r0, #0x18]
|
||||
str r1, [r0, #0x34]
|
||||
bx lr
|
||||
arm_func_end __prep_buffer
|
||||
|
||||
arm_func_start __load_buffer
|
||||
__load_buffer:
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
mov r5, r2
|
||||
mov r4, r0
|
||||
mov r6, r1
|
||||
bl __prep_buffer
|
||||
cmp r5, #0x1
|
||||
ldreq r0, [r4, #0x20]
|
||||
add r2, r4, #0x28
|
||||
streq r0, [r4, #0x28]
|
||||
ldr r0, [r4, #0x0]
|
||||
ldr r1, [r4, #0x1c]
|
||||
ldr r3, [r4, #0x48]
|
||||
ldr r12, [r4, #0x3c]
|
||||
blx r12
|
||||
cmp r0, #0x2
|
||||
moveq r1, #0x0
|
||||
streq r1, [r4, #0x28]
|
||||
cmp r6, #0x0
|
||||
ldrne r1, [r4, #0x28]
|
||||
strne r1, [r6, #0x0]
|
||||
cmp r0, #0x0
|
||||
ldmneia sp!, {r4-r6,pc}
|
||||
ldr r1, [r4, #0x18]
|
||||
ldr r0, [r4, #0x28]
|
||||
add r0, r1, r0
|
||||
str r0, [r4, #0x18]
|
||||
ldr r0, [r4, #0x4]
|
||||
mov r0, r0, lsl #0x13
|
||||
movs r0, r0, lsr #0x1f
|
||||
bne _020DE4F4
|
||||
ldr r0, [r4, #0x1c]
|
||||
add r1, r4, #0x28
|
||||
bl __convert_to_newlines
|
||||
_020DE4F4:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,pc}
|
||||
arm_func_end __load_buffer
|
||||
|
||||
arm_func_start __flush_buffer
|
||||
__flush_buffer:
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
ldr r2, [r5, #0x24]
|
||||
ldr r0, [r5, #0x1c]
|
||||
mov r4, r1
|
||||
subs r0, r2, r0
|
||||
beq _020DE574
|
||||
str r0, [r5, #0x28]
|
||||
ldr r0, [r5, #0x4]
|
||||
mov r0, r0, lsl #0x13
|
||||
movs r0, r0, lsr #0x1f
|
||||
bne _020DE538
|
||||
ldr r0, [r5, #0x1c]
|
||||
add r1, r5, #0x28
|
||||
bl __convert_from_newlines
|
||||
_020DE538:
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r1, [r5, #0x1c]
|
||||
ldr r3, [r5, #0x48]
|
||||
ldr r12, [r5, #0x40]
|
||||
add r2, r5, #0x28
|
||||
blx r12
|
||||
cmp r4, #0x0
|
||||
ldrne r1, [r5, #0x28]
|
||||
strne r1, [r4, #0x0]
|
||||
cmp r0, #0x0
|
||||
ldmneia sp!, {r3-r5,pc}
|
||||
ldr r1, [r5, #0x18]
|
||||
ldr r0, [r5, #0x28]
|
||||
add r0, r1, r0
|
||||
str r0, [r5, #0x18]
|
||||
_020DE574:
|
||||
mov r0, r5
|
||||
bl __prep_buffer
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
arm_func_end __flush_buffer
|
||||
|
||||
exception __load_buffer, 141, 0x00200700
|
||||
exception __flush_buffer, 137, 0x00200300
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.rodata
|
||||
|
||||
.global __lower_mapC
|
||||
__lower_mapC: ; 0x0210420C
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||||
.byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||||
.byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
|
||||
.byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
|
||||
.byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
|
||||
.byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
|
||||
.byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
|
||||
.byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
|
||||
.size __lower_mapC,.-__lower_mapC
|
||||
|
||||
.global __upper_mapC
|
||||
__upper_mapC: ; 0x0210428C
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||||
.byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||||
.byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
|
||||
.byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
|
||||
.byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
|
||||
.byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
|
||||
.byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
|
||||
.byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
|
||||
.size __upper_mapC,.-__upper_mapC
|
||||
|
||||
.global __msl_digit
|
||||
__msl_digit: ; 0x0210430C
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458
|
||||
.short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
|
||||
.size __msl_digit,.-__msl_digit
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.rodata
|
||||
|
||||
.global __lower_mapC
|
||||
__lower_mapC: ; 0x0210420C
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||||
.byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||||
.byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
|
||||
.byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
|
||||
.byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
|
||||
.byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
|
||||
.byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
|
||||
.byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
|
||||
.size __lower_mapC,.-__lower_mapC
|
||||
|
||||
.global __upper_mapC
|
||||
__upper_mapC: ; 0x0210428C
|
||||
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
||||
.byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
|
||||
.byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
|
||||
.byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
|
||||
.byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
|
||||
.byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
|
||||
.byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
|
||||
.byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
|
||||
.size __upper_mapC,.-__upper_mapC
|
||||
|
||||
.global __msl_digit
|
||||
__msl_digit: ; 0x0210430C
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458
|
||||
.short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
|
||||
.size __msl_digit,.-__msl_digit
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,9 +1,9 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global errno
|
||||
errno: ; 0x021D74A8
|
||||
.space 0x4
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global errno
|
||||
errno: ; 0x021D74A8
|
||||
.space 0x4
|
||||
.size errno,.-errno
|
||||
|
|
@ -1,107 +1,107 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fclose
|
||||
fclose: ; 0x020DEC88
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
movs r5, r0
|
||||
mvneq r0, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
bl fflush
|
||||
mov r4, r0
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r1, [r5, #0x44]
|
||||
blx r1
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r2, #0x0
|
||||
bic r1, r1, #0x380
|
||||
str r1, [r5, #0x4]
|
||||
str r2, [r5, #0x0]
|
||||
ldr r1, [r5, #0x8]
|
||||
mov r1, r1, lsl #0x1c
|
||||
movs r1, r1, lsr #0x1f
|
||||
subne r0, r2, #0x1
|
||||
ldmneia sp!, {r3-r5,pc}
|
||||
cmp r4, #0x0
|
||||
cmpeq r0, #0x0
|
||||
movne r2, #0x1
|
||||
rsb r0, r2, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
arm_func_end fclose
|
||||
|
||||
arm_func_start fflush
|
||||
fflush:
|
||||
stmdb sp!, {r4,lr}
|
||||
movs r4, r0
|
||||
bne _020DED10
|
||||
bl __flush_all
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DED10:
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #0x0
|
||||
bne _020DED2C
|
||||
ldr r0, [r4, #0x4]
|
||||
mov r1, r0, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
bne _020DED34
|
||||
_020DED2C:
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DED34:
|
||||
mov r0, r0, lsl #0x1b
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x1
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r1, r0, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x3
|
||||
biccs r0, r0, #0x7
|
||||
orrcs r0, r0, #0x2
|
||||
strcs r0, [r4, #0x8]
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x2
|
||||
moveq r0, #0x0
|
||||
streq r0, [r4, #0x28]
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r1, r0, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
beq _020DEDA0
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r4, #0x8]
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DEDA0:
|
||||
mov r0, r4
|
||||
mov r1, #0x0
|
||||
bl __flush_buffer
|
||||
cmp r0, #0x0
|
||||
mov r0, #0x0
|
||||
beq _020DEDCC
|
||||
mov r1, #0x1
|
||||
strb r1, [r4, #0xd]
|
||||
str r0, [r4, #0x28]
|
||||
sub r0, r0, #0x1
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DEDCC:
|
||||
ldr r1, [r4, #0x8]
|
||||
bic r1, r1, #0x7
|
||||
str r1, [r4, #0x8]
|
||||
str r0, [r4, #0x18]
|
||||
str r0, [r4, #0x28]
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end fflush
|
||||
|
||||
exception fclose, 117, 0x00200300
|
||||
exception fflush, 233, 0x00100100
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fclose
|
||||
fclose: ; 0x020DEC88
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
movs r5, r0
|
||||
mvneq r0, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
bl fflush
|
||||
mov r4, r0
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r1, [r5, #0x44]
|
||||
blx r1
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r2, #0x0
|
||||
bic r1, r1, #0x380
|
||||
str r1, [r5, #0x4]
|
||||
str r2, [r5, #0x0]
|
||||
ldr r1, [r5, #0x8]
|
||||
mov r1, r1, lsl #0x1c
|
||||
movs r1, r1, lsr #0x1f
|
||||
subne r0, r2, #0x1
|
||||
ldmneia sp!, {r3-r5,pc}
|
||||
cmp r4, #0x0
|
||||
cmpeq r0, #0x0
|
||||
movne r2, #0x1
|
||||
rsb r0, r2, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
arm_func_end fclose
|
||||
|
||||
arm_func_start fflush
|
||||
fflush:
|
||||
stmdb sp!, {r4,lr}
|
||||
movs r4, r0
|
||||
bne _020DED10
|
||||
bl __flush_all
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DED10:
|
||||
ldrb r0, [r4, #0xd]
|
||||
cmp r0, #0x0
|
||||
bne _020DED2C
|
||||
ldr r0, [r4, #0x4]
|
||||
mov r1, r0, lsl #0x16
|
||||
movs r1, r1, lsr #0x1d
|
||||
bne _020DED34
|
||||
_020DED2C:
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DED34:
|
||||
mov r0, r0, lsl #0x1b
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x1
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r1, r0, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x3
|
||||
biccs r0, r0, #0x7
|
||||
orrcs r0, r0, #0x2
|
||||
strcs r0, [r4, #0x8]
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x2
|
||||
moveq r0, #0x0
|
||||
streq r0, [r4, #0x28]
|
||||
ldr r0, [r4, #0x8]
|
||||
mov r1, r0, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
beq _020DEDA0
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r4, #0x8]
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DEDA0:
|
||||
mov r0, r4
|
||||
mov r1, #0x0
|
||||
bl __flush_buffer
|
||||
cmp r0, #0x0
|
||||
mov r0, #0x0
|
||||
beq _020DEDCC
|
||||
mov r1, #0x1
|
||||
strb r1, [r4, #0xd]
|
||||
str r0, [r4, #0x28]
|
||||
sub r0, r0, #0x1
|
||||
ldmia sp!, {r4,pc}
|
||||
_020DEDCC:
|
||||
ldr r1, [r4, #0x8]
|
||||
bic r1, r1, #0x7
|
||||
str r1, [r4, #0x8]
|
||||
str r0, [r4, #0x18]
|
||||
str r0, [r4, #0x28]
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end fflush
|
||||
|
||||
exception fclose, 117, 0x00200300
|
||||
exception fflush, 233, 0x00100100
|
||||
|
|
|
|||
|
|
@ -1,362 +1,362 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ftell
|
||||
_ftell: ; 0x020DEDE4
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
mov r1, r1, lsr #0x1d
|
||||
and r1, r1, #0xff
|
||||
add r1, r1, #0xff
|
||||
and r1, r1, #0xff
|
||||
cmp r1, #0x1
|
||||
bhi _020DEE10
|
||||
ldrb r1, [r0, #0xd]
|
||||
cmp r1, #0x0
|
||||
beq _020DEE24
|
||||
_020DEE10:
|
||||
ldr r0, _020DEE5C ; =errno
|
||||
mov r1, #0x28
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
bx lr
|
||||
_020DEE24:
|
||||
ldr r1, [r0, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
movs r12, r1, lsr #0x1d
|
||||
ldreq r0, [r0, #0x18]
|
||||
bxeq lr
|
||||
ldr r2, [r0, #0x24]
|
||||
ldr r1, [r0, #0x1c]
|
||||
ldr r3, [r0, #0x34]
|
||||
sub r0, r2, r1
|
||||
cmp r12, #0x3
|
||||
add r0, r3, r0
|
||||
subcs r1, r12, #0x2
|
||||
subcs r0, r0, r1
|
||||
bx lr
|
||||
.balign 4
|
||||
_020DEE5C: .word errno
|
||||
arm_func_end _ftell
|
||||
|
||||
arm_func_start ftell
|
||||
ftell: ; 0x020DEE60
|
||||
stmdb sp!, {r3-r7,lr}
|
||||
ldr r1, _020DEF60 ; =__files
|
||||
mov r7, r0
|
||||
cmp r7, r1
|
||||
moveq r6, #0x2
|
||||
beq _020DEE98
|
||||
ldr r0, _020DEF64 ; =__files + 0x4C
|
||||
cmp r7, r0
|
||||
moveq r6, #0x3
|
||||
beq _020DEE98
|
||||
ldr r0, _020DEF68 ; =__files + 0x98
|
||||
cmp r7, r0
|
||||
moveq r6, #0x4
|
||||
movne r6, #0x5
|
||||
_020DEE98:
|
||||
mov r0, #0x18
|
||||
mul r4, r6, r0
|
||||
ldr r5, _020DEF6C ; =__cs
|
||||
add r0, r5, r4
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DEED8
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DEF74 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DEF78 ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
b _020DEF30
|
||||
_020DEED8:
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DEF74 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, r6, lsl #0x2]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DEF08
|
||||
ldr r1, _020DEF78 ; =__cs_ref
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
add r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
b _020DEF30
|
||||
_020DEF08:
|
||||
add r0, r5, r4
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DEF74 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DEF78 ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
_020DEF30:
|
||||
mov r0, r7
|
||||
bl _ftell
|
||||
ldr r1, _020DEF78 ; =__cs_ref
|
||||
mov r7, r0
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
subs r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
bne _020DEF58
|
||||
add r0, r5, r4
|
||||
bl OS_UnlockMutex
|
||||
_020DEF58:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r7,pc}
|
||||
.balign 4
|
||||
_020DEF60: .word __files
|
||||
_020DEF64: .word __files + 0x4C
|
||||
_020DEF68: .word __files + 0x98
|
||||
_020DEF6C: .word __cs
|
||||
_020DEF70: .word OSi_ThreadInfo
|
||||
_020DEF74: .word __cs_id
|
||||
_020DEF78: .word __cs_ref
|
||||
arm_func_end ftell
|
||||
|
||||
arm_func_start _fseek
|
||||
_fseek: ; 0x020DEF7C
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r4, r2
|
||||
mov r1, r1, lsl #0x16
|
||||
mov r1, r1, lsr #0x1d
|
||||
and r1, r1, #0xff
|
||||
cmp r1, #0x1
|
||||
ldreqb r1, [r5, #0xd]
|
||||
cmpeq r1, #0x0
|
||||
beq _020DEFC8
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DEFC8:
|
||||
ldr r1, [r5, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
bne _020DF018
|
||||
mov r1, #0x0
|
||||
bl __flush_buffer
|
||||
cmp r0, #0x0
|
||||
beq _020DF018
|
||||
mov r0, #0x1
|
||||
strb r0, [r5, #0xd]
|
||||
mov r2, #0x0
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r2, [r5, #0x28]
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DF018:
|
||||
cmp r4, #0x1
|
||||
bne _020DF038
|
||||
mov r0, r5
|
||||
mov r4, #0x0
|
||||
bl _ftell
|
||||
ldr r1, [sp, #0x14]
|
||||
add r0, r1, r0
|
||||
str r0, [sp, #0x14]
|
||||
_020DF038:
|
||||
cmp r4, #0x2
|
||||
beq _020DF0CC
|
||||
ldr r0, [r5, #0x4]
|
||||
mov r0, r0, lsl #0x1b
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x3
|
||||
beq _020DF0CC
|
||||
ldr r0, [r5, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
mov r0, r0, lsr #0x1d
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _020DF0CC
|
||||
ldr r2, [sp, #0x14]
|
||||
ldr r0, [r5, #0x18]
|
||||
cmp r2, r0
|
||||
bhs _020DF088
|
||||
ldr r0, [r5, #0x34]
|
||||
cmp r2, r0
|
||||
bhs _020DF098
|
||||
_020DF088:
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r5, #0x8]
|
||||
b _020DF0D8
|
||||
_020DF098:
|
||||
ldr r1, [r5, #0x1c]
|
||||
sub r0, r2, r0
|
||||
add r0, r1, r0
|
||||
str r0, [r5, #0x24]
|
||||
ldr r1, [r5, #0x18]
|
||||
ldr r0, [sp, #0x14]
|
||||
sub r0, r1, r0
|
||||
str r0, [r5, #0x28]
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
orr r0, r0, #0x2
|
||||
str r0, [r5, #0x8]
|
||||
b _020DF0D8
|
||||
_020DF0CC:
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r5, #0x8]
|
||||
_020DF0D8:
|
||||
ldr r0, [r5, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
movs r0, r0, lsr #0x1d
|
||||
bne _020DF150
|
||||
ldr r12, [r5, #0x38]
|
||||
cmp r12, #0x0
|
||||
beq _020DF13C
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r3, [r5, #0x48]
|
||||
add r1, sp, #0x14
|
||||
mov r2, r4
|
||||
blx r12
|
||||
cmp r0, #0x0
|
||||
beq _020DF13C
|
||||
mov r0, #0x1
|
||||
strb r0, [r5, #0xd]
|
||||
mov r2, #0x0
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r2, [r5, #0x28]
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DF13C:
|
||||
mov r1, #0x0
|
||||
strb r1, [r5, #0xc]
|
||||
ldr r0, [sp, #0x14]
|
||||
str r0, [r5, #0x18]
|
||||
str r1, [r5, #0x28]
|
||||
_020DF150:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020DF160: .word errno
|
||||
arm_func_end _fseek
|
||||
|
||||
arm_func_start fseek
|
||||
fseek:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r3, _020DF274 ; =__files
|
||||
mov r9, r0
|
||||
cmp r9, r3
|
||||
mov r8, r1
|
||||
mov r7, r2
|
||||
moveq r6, #0x2
|
||||
beq _020DF1A4
|
||||
ldr r0, _020DF278 ; =__files + 0x4C
|
||||
cmp r9, r0
|
||||
moveq r6, #0x3
|
||||
beq _020DF1A4
|
||||
ldr r0, _020DF27C ; =__files + 0x98
|
||||
cmp r9, r0
|
||||
moveq r6, #0x4
|
||||
movne r6, #0x5
|
||||
_020DF1A4:
|
||||
mov r0, #0x18
|
||||
mul r4, r6, r0
|
||||
ldr r5, _020DF280 ; =__cs
|
||||
add r0, r5, r4
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DF1E4
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DF288 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DF28C ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
b _020DF23C
|
||||
_020DF1E4:
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DF288 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, r6, lsl #0x2]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DF214
|
||||
ldr r1, _020DF28C ; =__cs_ref
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
add r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
b _020DF23C
|
||||
_020DF214:
|
||||
add r0, r5, r4
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DF288 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DF28C ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
_020DF23C:
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
mov r2, r7
|
||||
bl _fseek
|
||||
ldr r1, _020DF28C ; =__cs_ref
|
||||
mov r7, r0
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
subs r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
bne _020DF26C
|
||||
add r0, r5, r4
|
||||
bl OS_UnlockMutex
|
||||
_020DF26C:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DF274: .word __files
|
||||
_020DF278: .word __files + 0x4C
|
||||
_020DF27C: .word __files + 0x98
|
||||
_020DF280: .word __cs
|
||||
_020DF284: .word OSi_ThreadInfo
|
||||
_020DF288: .word __cs_id
|
||||
_020DF28C: .word __cs_ref
|
||||
arm_func_end fseek
|
||||
|
||||
arm_func_start rewind
|
||||
rewind: ; 0x020DF290
|
||||
stmdb sp!, {r4,lr}
|
||||
mov r1, #0x0
|
||||
mov r4, r0
|
||||
mov r2, r1
|
||||
strb r1, [r4, #0xd]
|
||||
bl fseek
|
||||
mov r0, #0x0
|
||||
strb r0, [r4, #0xd]
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end rewind
|
||||
|
||||
exception ftell, 285, 0x00300F00
|
||||
exception _fseek, 489, 0x00400320
|
||||
exception fseek, 301, 0x00403F00
|
||||
exception rewind, 37, 0x00100100
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ftell
|
||||
_ftell: ; 0x020DEDE4
|
||||
ldr r1, [r0, #0x4]
|
||||
mov r1, r1, lsl #0x16
|
||||
mov r1, r1, lsr #0x1d
|
||||
and r1, r1, #0xff
|
||||
add r1, r1, #0xff
|
||||
and r1, r1, #0xff
|
||||
cmp r1, #0x1
|
||||
bhi _020DEE10
|
||||
ldrb r1, [r0, #0xd]
|
||||
cmp r1, #0x0
|
||||
beq _020DEE24
|
||||
_020DEE10:
|
||||
ldr r0, _020DEE5C ; =errno
|
||||
mov r1, #0x28
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
bx lr
|
||||
_020DEE24:
|
||||
ldr r1, [r0, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
movs r12, r1, lsr #0x1d
|
||||
ldreq r0, [r0, #0x18]
|
||||
bxeq lr
|
||||
ldr r2, [r0, #0x24]
|
||||
ldr r1, [r0, #0x1c]
|
||||
ldr r3, [r0, #0x34]
|
||||
sub r0, r2, r1
|
||||
cmp r12, #0x3
|
||||
add r0, r3, r0
|
||||
subcs r1, r12, #0x2
|
||||
subcs r0, r0, r1
|
||||
bx lr
|
||||
.balign 4
|
||||
_020DEE5C: .word errno
|
||||
arm_func_end _ftell
|
||||
|
||||
arm_func_start ftell
|
||||
ftell: ; 0x020DEE60
|
||||
stmdb sp!, {r3-r7,lr}
|
||||
ldr r1, _020DEF60 ; =__files
|
||||
mov r7, r0
|
||||
cmp r7, r1
|
||||
moveq r6, #0x2
|
||||
beq _020DEE98
|
||||
ldr r0, _020DEF64 ; =__files + 0x4C
|
||||
cmp r7, r0
|
||||
moveq r6, #0x3
|
||||
beq _020DEE98
|
||||
ldr r0, _020DEF68 ; =__files + 0x98
|
||||
cmp r7, r0
|
||||
moveq r6, #0x4
|
||||
movne r6, #0x5
|
||||
_020DEE98:
|
||||
mov r0, #0x18
|
||||
mul r4, r6, r0
|
||||
ldr r5, _020DEF6C ; =__cs
|
||||
add r0, r5, r4
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DEED8
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DEF74 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DEF78 ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
b _020DEF30
|
||||
_020DEED8:
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DEF74 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, r6, lsl #0x2]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DEF08
|
||||
ldr r1, _020DEF78 ; =__cs_ref
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
add r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
b _020DEF30
|
||||
_020DEF08:
|
||||
add r0, r5, r4
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DEF74 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DEF78 ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
_020DEF30:
|
||||
mov r0, r7
|
||||
bl _ftell
|
||||
ldr r1, _020DEF78 ; =__cs_ref
|
||||
mov r7, r0
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
subs r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
bne _020DEF58
|
||||
add r0, r5, r4
|
||||
bl OS_UnlockMutex
|
||||
_020DEF58:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r7,pc}
|
||||
.balign 4
|
||||
_020DEF60: .word __files
|
||||
_020DEF64: .word __files + 0x4C
|
||||
_020DEF68: .word __files + 0x98
|
||||
_020DEF6C: .word __cs
|
||||
_020DEF70: .word OSi_ThreadInfo
|
||||
_020DEF74: .word __cs_id
|
||||
_020DEF78: .word __cs_ref
|
||||
arm_func_end ftell
|
||||
|
||||
arm_func_start _fseek
|
||||
_fseek: ; 0x020DEF7C
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
ldr r1, [r5, #0x4]
|
||||
mov r4, r2
|
||||
mov r1, r1, lsl #0x16
|
||||
mov r1, r1, lsr #0x1d
|
||||
and r1, r1, #0xff
|
||||
cmp r1, #0x1
|
||||
ldreqb r1, [r5, #0xd]
|
||||
cmpeq r1, #0x0
|
||||
beq _020DEFC8
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DEFC8:
|
||||
ldr r1, [r5, #0x8]
|
||||
mov r1, r1, lsl #0x1d
|
||||
mov r1, r1, lsr #0x1d
|
||||
cmp r1, #0x1
|
||||
bne _020DF018
|
||||
mov r1, #0x0
|
||||
bl __flush_buffer
|
||||
cmp r0, #0x0
|
||||
beq _020DF018
|
||||
mov r0, #0x1
|
||||
strb r0, [r5, #0xd]
|
||||
mov r2, #0x0
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r2, [r5, #0x28]
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DF018:
|
||||
cmp r4, #0x1
|
||||
bne _020DF038
|
||||
mov r0, r5
|
||||
mov r4, #0x0
|
||||
bl _ftell
|
||||
ldr r1, [sp, #0x14]
|
||||
add r0, r1, r0
|
||||
str r0, [sp, #0x14]
|
||||
_020DF038:
|
||||
cmp r4, #0x2
|
||||
beq _020DF0CC
|
||||
ldr r0, [r5, #0x4]
|
||||
mov r0, r0, lsl #0x1b
|
||||
mov r0, r0, lsr #0x1d
|
||||
cmp r0, #0x3
|
||||
beq _020DF0CC
|
||||
ldr r0, [r5, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
mov r0, r0, lsr #0x1d
|
||||
sub r0, r0, #0x2
|
||||
cmp r0, #0x1
|
||||
bhi _020DF0CC
|
||||
ldr r2, [sp, #0x14]
|
||||
ldr r0, [r5, #0x18]
|
||||
cmp r2, r0
|
||||
bhs _020DF088
|
||||
ldr r0, [r5, #0x34]
|
||||
cmp r2, r0
|
||||
bhs _020DF098
|
||||
_020DF088:
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r5, #0x8]
|
||||
b _020DF0D8
|
||||
_020DF098:
|
||||
ldr r1, [r5, #0x1c]
|
||||
sub r0, r2, r0
|
||||
add r0, r1, r0
|
||||
str r0, [r5, #0x24]
|
||||
ldr r1, [r5, #0x18]
|
||||
ldr r0, [sp, #0x14]
|
||||
sub r0, r1, r0
|
||||
str r0, [r5, #0x28]
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
orr r0, r0, #0x2
|
||||
str r0, [r5, #0x8]
|
||||
b _020DF0D8
|
||||
_020DF0CC:
|
||||
ldr r0, [r5, #0x8]
|
||||
bic r0, r0, #0x7
|
||||
str r0, [r5, #0x8]
|
||||
_020DF0D8:
|
||||
ldr r0, [r5, #0x8]
|
||||
mov r0, r0, lsl #0x1d
|
||||
movs r0, r0, lsr #0x1d
|
||||
bne _020DF150
|
||||
ldr r12, [r5, #0x38]
|
||||
cmp r12, #0x0
|
||||
beq _020DF13C
|
||||
ldr r0, [r5, #0x0]
|
||||
ldr r3, [r5, #0x48]
|
||||
add r1, sp, #0x14
|
||||
mov r2, r4
|
||||
blx r12
|
||||
cmp r0, #0x0
|
||||
beq _020DF13C
|
||||
mov r0, #0x1
|
||||
strb r0, [r5, #0xd]
|
||||
mov r2, #0x0
|
||||
ldr r0, _020DF160 ; =errno
|
||||
mov r1, #0x28
|
||||
str r2, [r5, #0x28]
|
||||
str r1, [r0, #0x0]
|
||||
sub r0, r1, #0x29
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020DF13C:
|
||||
mov r1, #0x0
|
||||
strb r1, [r5, #0xc]
|
||||
ldr r0, [sp, #0x14]
|
||||
str r0, [r5, #0x18]
|
||||
str r1, [r5, #0x28]
|
||||
_020DF150:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020DF160: .word errno
|
||||
arm_func_end _fseek
|
||||
|
||||
arm_func_start fseek
|
||||
fseek:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
ldr r3, _020DF274 ; =__files
|
||||
mov r9, r0
|
||||
cmp r9, r3
|
||||
mov r8, r1
|
||||
mov r7, r2
|
||||
moveq r6, #0x2
|
||||
beq _020DF1A4
|
||||
ldr r0, _020DF278 ; =__files + 0x4C
|
||||
cmp r9, r0
|
||||
moveq r6, #0x3
|
||||
beq _020DF1A4
|
||||
ldr r0, _020DF27C ; =__files + 0x98
|
||||
cmp r9, r0
|
||||
moveq r6, #0x4
|
||||
movne r6, #0x5
|
||||
_020DF1A4:
|
||||
mov r0, #0x18
|
||||
mul r4, r6, r0
|
||||
ldr r5, _020DF280 ; =__cs
|
||||
add r0, r5, r4
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020DF1E4
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DF288 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DF28C ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
b _020DF23C
|
||||
_020DF1E4:
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r1, _020DF288 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, r6, lsl #0x2]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020DF214
|
||||
ldr r1, _020DF28C ; =__cs_ref
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
add r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
b _020DF23C
|
||||
_020DF214:
|
||||
add r0, r5, r4
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
||||
ldr r2, _020DF288 ; =__cs_id
|
||||
ldr r1, [r0, #0x4]
|
||||
ldr r0, _020DF28C ; =__cs_ref
|
||||
ldr r3, [r1, #0x6c]
|
||||
mov r1, #0x1
|
||||
str r3, [r2, r6, lsl #0x2]
|
||||
str r1, [r0, r6, lsl #0x2]
|
||||
_020DF23C:
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
mov r2, r7
|
||||
bl _fseek
|
||||
ldr r1, _020DF28C ; =__cs_ref
|
||||
mov r7, r0
|
||||
ldr r0, [r1, r6, lsl #0x2]
|
||||
subs r0, r0, #0x1
|
||||
str r0, [r1, r6, lsl #0x2]
|
||||
bne _020DF26C
|
||||
add r0, r5, r4
|
||||
bl OS_UnlockMutex
|
||||
_020DF26C:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
.balign 4
|
||||
_020DF274: .word __files
|
||||
_020DF278: .word __files + 0x4C
|
||||
_020DF27C: .word __files + 0x98
|
||||
_020DF280: .word __cs
|
||||
_020DF284: .word OSi_ThreadInfo
|
||||
_020DF288: .word __cs_id
|
||||
_020DF28C: .word __cs_ref
|
||||
arm_func_end fseek
|
||||
|
||||
arm_func_start rewind
|
||||
rewind: ; 0x020DF290
|
||||
stmdb sp!, {r4,lr}
|
||||
mov r1, #0x0
|
||||
mov r4, r0
|
||||
mov r2, r1
|
||||
strb r1, [r4, #0xd]
|
||||
bl fseek
|
||||
mov r0, #0x0
|
||||
strb r0, [r4, #0xd]
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end rewind
|
||||
|
||||
exception ftell, 285, 0x00300F00
|
||||
exception _fseek, 489, 0x00400320
|
||||
exception fseek, 301, 0x00403F00
|
||||
exception rewind, 37, 0x00100100
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
.global __float_huge
|
||||
__float_huge: ; 0x02106B74
|
||||
.word 0x7F800000 ; inf
|
||||
.size __float_huge,.-__float_huge
|
||||
|
||||
.global __float_nan
|
||||
__float_nan: ; 0x02106B78
|
||||
.word 0x7FFFFFFF ; nan
|
||||
.size __float_nan,.-__float_nan
|
||||
|
||||
.global __double_huge
|
||||
__double_huge: ; 0x02106B7C
|
||||
.word 0x00000000, 0x7FF00000 ; inf
|
||||
.size __double_huge,.-__double_huge
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
.global __float_huge
|
||||
__float_huge: ; 0x02106B74
|
||||
.word 0x7F800000 ; inf
|
||||
.size __float_huge,.-__float_huge
|
||||
|
||||
.global __float_nan
|
||||
__float_nan: ; 0x02106B78
|
||||
.word 0x7FFFFFFF ; nan
|
||||
.size __float_nan,.-__float_nan
|
||||
|
||||
.global __double_huge
|
||||
__double_huge: ; 0x02106B7C
|
||||
.word 0x00000000, 0x7FF00000 ; inf
|
||||
.size __double_huge,.-__double_huge
|
||||
|
|
|
|||
|
|
@ -1,237 +1,237 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$timezone
|
||||
_loc_tim_C$timezone: ; 0x02106B84
|
||||
.asciz ""
|
||||
.size _loc_tim_C$timezone,.-_loc_tim_C$timezone
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$timefmt2
|
||||
_loc_tim_C$timefmt2: ; 0x02106B88
|
||||
.asciz "%T"
|
||||
.size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$AMPM
|
||||
_loc_tim_C$AMPM: ; 0x02106B8C
|
||||
.asciz "AM|PM"
|
||||
.size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_ctyp_C
|
||||
_loc_ctyp_C: ; 0x02106B94
|
||||
.word __mbtowc_noconv
|
||||
.word __wctomb_noconv
|
||||
.size _loc_ctyp_C,.-_loc_ctyp_C
|
||||
|
||||
.global _loc_coll_C
|
||||
_loc_coll_C: ; 0x02106B9C
|
||||
.word 0x20
|
||||
.word 0x6E
|
||||
.word 0x00
|
||||
.word char_coll_tableC
|
||||
.size _loc_coll_C,.-_loc_coll_C
|
||||
|
||||
.global _loc_tim_C
|
||||
_loc_tim_C: ; 0x02106BAC
|
||||
.word _loc_tim_C$AMPM
|
||||
.word _loc_tim_C$datetimefmt
|
||||
.word _loc_tim_C$timefmt
|
||||
.word _loc_tim_C$datefmt
|
||||
.word _loc_tim_C$timefmt2
|
||||
.word _loc_tim_C$daynames
|
||||
.word _loc_tim_C$monthnames
|
||||
.word _loc_tim_C$timezone
|
||||
.size _loc_tim_C,.-_loc_tim_C
|
||||
|
||||
.global char_coll_tableC
|
||||
char_coll_tableC: ; 0x02106BCC
|
||||
.short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008
|
||||
.short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010
|
||||
.short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028
|
||||
.short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016
|
||||
.short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037
|
||||
.short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047
|
||||
.short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057
|
||||
.short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C
|
||||
.short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038
|
||||
.short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048
|
||||
.short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058
|
||||
.short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000
|
||||
.size char_coll_tableC,.-char_coll_tableC
|
||||
|
||||
.global _loc_tim_C$datefmt
|
||||
_loc_tim_C$datefmt: ; 0x02106C8C
|
||||
.asciz "%m/%d/%y"
|
||||
.size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _current_locale
|
||||
_current_locale: ; 0x02106C98
|
||||
.word _loc_tim_C
|
||||
.word _loc_coll_C
|
||||
.word _loc_ctyp_C
|
||||
.size _current_locale,.-_current_locale
|
||||
|
||||
.global _loc_tim_C$timefmt
|
||||
_loc_tim_C$timefmt: ; 0x02106CA4
|
||||
.asciz "%I:%M:%S %p"
|
||||
.size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$datetimefmt
|
||||
_loc_tim_C$datetimefmt: ; 0x02106CB0
|
||||
.asciz "%a %b %e %T %Y"
|
||||
.size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$daynames
|
||||
_loc_tim_C$daynames: ; 0x02106CC0
|
||||
.asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday"
|
||||
.size _loc_tim_C$daynames,.-_loc_tim_C$daynames
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$monthnames
|
||||
_loc_tim_C$monthnames: ; 0x02106D18
|
||||
.asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December"
|
||||
.size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start mbtowc
|
||||
mbtowc:
|
||||
stmdb sp!, {r3,lr}
|
||||
ldr r3, _020DF2CC ; =_current_locale
|
||||
ldr r3, [r3, #0x8]
|
||||
ldr r3, [r3, #0x0]
|
||||
blx r3
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DF2CC: .word _current_locale
|
||||
arm_func_end mbtowc
|
||||
|
||||
arm_func_start __mbtowc_noconv
|
||||
__mbtowc_noconv: ; 0x020DF2D0
|
||||
cmp r1, #0x0
|
||||
moveq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r2, #0x0
|
||||
mvneq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r0, #0x0
|
||||
ldrneb r2, [r1, #0x0]
|
||||
strneh r2, [r0, #0x0]
|
||||
ldrsb r0, [r1, #0x0]
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x0
|
||||
movne r0, #0x1
|
||||
bx lr
|
||||
arm_func_end __mbtowc_noconv
|
||||
|
||||
arm_func_start __wctomb_noconv
|
||||
__wctomb_noconv: ; 0x020DF308
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x0
|
||||
strneb r1, [r0, #0x0]
|
||||
movne r0, #0x1
|
||||
bx lr
|
||||
arm_func_end __wctomb_noconv
|
||||
|
||||
arm_func_start wctomb
|
||||
wctomb: ; 0x020DF31C
|
||||
stmdb sp!, {r3,lr}
|
||||
ldr r2, _020DF334 ; =_current_locale
|
||||
ldr r2, [r2, #0x8]
|
||||
ldr r2, [r2, #0x4]
|
||||
blx r2
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DF334: .word _current_locale
|
||||
arm_func_end wctomb
|
||||
|
||||
arm_func_start mbstowcs
|
||||
mbstowcs: ; 0x020DF338
|
||||
stmdb sp!, {r4-r8,lr}
|
||||
mov r7, r1
|
||||
mov r8, r0
|
||||
mov r0, r7
|
||||
mov r6, r2
|
||||
bl strlen
|
||||
mov r5, r0
|
||||
cmp r8, #0x0
|
||||
mov r4, #0x0
|
||||
beq _020DF3B8
|
||||
cmp r6, #0x0
|
||||
bls _020DF3B8
|
||||
_020DF368:
|
||||
ldrsb r0, [r7, #0x0]
|
||||
cmp r0, #0x0
|
||||
beq _020DF3A0
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, r5
|
||||
bl mbtowc
|
||||
cmp r0, #0x0
|
||||
add r8, r8, #0x2
|
||||
addgt r7, r7, r0
|
||||
subgt r5, r5, r0
|
||||
bgt _020DF3AC
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r4-r8,pc}
|
||||
_020DF3A0:
|
||||
mov r0, #0x0
|
||||
strh r0, [r8, #0x0]
|
||||
b _020DF3B8
|
||||
_020DF3AC:
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r6
|
||||
blo _020DF368
|
||||
_020DF3B8:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4-r8,pc}
|
||||
arm_func_end mbstowcs
|
||||
|
||||
arm_func_start wcstombs
|
||||
wcstombs:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
movs r4, r0
|
||||
mov r9, r1
|
||||
cmpne r9, #0x0
|
||||
mov r8, r2
|
||||
mov r7, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r3-r9,pc}
|
||||
add r6, sp, #0x0
|
||||
_020DF3E4:
|
||||
ldrh r1, [r9, #0x0]
|
||||
cmp r1, #0x0
|
||||
moveq r0, #0x0
|
||||
streqb r0, [r4, r7]
|
||||
beq _020DF430
|
||||
mov r0, r6
|
||||
add r9, r9, #0x2
|
||||
bl wctomb
|
||||
mov r5, r0
|
||||
add r0, r7, r5
|
||||
cmp r0, r8
|
||||
bhi _020DF430
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
add r0, r4, r7
|
||||
bl strncpy
|
||||
add r7, r7, r5
|
||||
cmp r7, r8
|
||||
bls _020DF3E4
|
||||
_020DF430:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
arm_func_end wcstombs
|
||||
|
||||
exception mbtowc, 29, 0x00100000
|
||||
exception wctomb, 29, 0x00100000
|
||||
exception mbstowcs, 137, 0x00301F00
|
||||
exception wcstombs, 121, 0x00403F00
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.data
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$timezone
|
||||
_loc_tim_C$timezone: ; 0x02106B84
|
||||
.asciz ""
|
||||
.size _loc_tim_C$timezone,.-_loc_tim_C$timezone
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$timefmt2
|
||||
_loc_tim_C$timefmt2: ; 0x02106B88
|
||||
.asciz "%T"
|
||||
.size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2
|
||||
|
||||
.balign 4
|
||||
.global _loc_tim_C$AMPM
|
||||
_loc_tim_C$AMPM: ; 0x02106B8C
|
||||
.asciz "AM|PM"
|
||||
.size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_ctyp_C
|
||||
_loc_ctyp_C: ; 0x02106B94
|
||||
.word __mbtowc_noconv
|
||||
.word __wctomb_noconv
|
||||
.size _loc_ctyp_C,.-_loc_ctyp_C
|
||||
|
||||
.global _loc_coll_C
|
||||
_loc_coll_C: ; 0x02106B9C
|
||||
.word 0x20
|
||||
.word 0x6E
|
||||
.word 0x00
|
||||
.word char_coll_tableC
|
||||
.size _loc_coll_C,.-_loc_coll_C
|
||||
|
||||
.global _loc_tim_C
|
||||
_loc_tim_C: ; 0x02106BAC
|
||||
.word _loc_tim_C$AMPM
|
||||
.word _loc_tim_C$datetimefmt
|
||||
.word _loc_tim_C$timefmt
|
||||
.word _loc_tim_C$datefmt
|
||||
.word _loc_tim_C$timefmt2
|
||||
.word _loc_tim_C$daynames
|
||||
.word _loc_tim_C$monthnames
|
||||
.word _loc_tim_C$timezone
|
||||
.size _loc_tim_C,.-_loc_tim_C
|
||||
|
||||
.global char_coll_tableC
|
||||
char_coll_tableC: ; 0x02106BCC
|
||||
.short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008
|
||||
.short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010
|
||||
.short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028
|
||||
.short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016
|
||||
.short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037
|
||||
.short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047
|
||||
.short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057
|
||||
.short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C
|
||||
.short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038
|
||||
.short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048
|
||||
.short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058
|
||||
.short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000
|
||||
.size char_coll_tableC,.-char_coll_tableC
|
||||
|
||||
.global _loc_tim_C$datefmt
|
||||
_loc_tim_C$datefmt: ; 0x02106C8C
|
||||
.asciz "%m/%d/%y"
|
||||
.size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _current_locale
|
||||
_current_locale: ; 0x02106C98
|
||||
.word _loc_tim_C
|
||||
.word _loc_coll_C
|
||||
.word _loc_ctyp_C
|
||||
.size _current_locale,.-_current_locale
|
||||
|
||||
.global _loc_tim_C$timefmt
|
||||
_loc_tim_C$timefmt: ; 0x02106CA4
|
||||
.asciz "%I:%M:%S %p"
|
||||
.size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$datetimefmt
|
||||
_loc_tim_C$datetimefmt: ; 0x02106CB0
|
||||
.asciz "%a %b %e %T %Y"
|
||||
.size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$daynames
|
||||
_loc_tim_C$daynames: ; 0x02106CC0
|
||||
.asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday"
|
||||
.size _loc_tim_C$daynames,.-_loc_tim_C$daynames
|
||||
|
||||
.balign 4, 0
|
||||
.global _loc_tim_C$monthnames
|
||||
_loc_tim_C$monthnames: ; 0x02106D18
|
||||
.asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December"
|
||||
.size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start mbtowc
|
||||
mbtowc:
|
||||
stmdb sp!, {r3,lr}
|
||||
ldr r3, _020DF2CC ; =_current_locale
|
||||
ldr r3, [r3, #0x8]
|
||||
ldr r3, [r3, #0x0]
|
||||
blx r3
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DF2CC: .word _current_locale
|
||||
arm_func_end mbtowc
|
||||
|
||||
arm_func_start __mbtowc_noconv
|
||||
__mbtowc_noconv: ; 0x020DF2D0
|
||||
cmp r1, #0x0
|
||||
moveq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r2, #0x0
|
||||
mvneq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r0, #0x0
|
||||
ldrneb r2, [r1, #0x0]
|
||||
strneh r2, [r0, #0x0]
|
||||
ldrsb r0, [r1, #0x0]
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x0
|
||||
movne r0, #0x1
|
||||
bx lr
|
||||
arm_func_end __mbtowc_noconv
|
||||
|
||||
arm_func_start __wctomb_noconv
|
||||
__wctomb_noconv: ; 0x020DF308
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x0
|
||||
strneb r1, [r0, #0x0]
|
||||
movne r0, #0x1
|
||||
bx lr
|
||||
arm_func_end __wctomb_noconv
|
||||
|
||||
arm_func_start wctomb
|
||||
wctomb: ; 0x020DF31C
|
||||
stmdb sp!, {r3,lr}
|
||||
ldr r2, _020DF334 ; =_current_locale
|
||||
ldr r2, [r2, #0x8]
|
||||
ldr r2, [r2, #0x4]
|
||||
blx r2
|
||||
ldmia sp!, {r3,pc}
|
||||
.balign 4
|
||||
_020DF334: .word _current_locale
|
||||
arm_func_end wctomb
|
||||
|
||||
arm_func_start mbstowcs
|
||||
mbstowcs: ; 0x020DF338
|
||||
stmdb sp!, {r4-r8,lr}
|
||||
mov r7, r1
|
||||
mov r8, r0
|
||||
mov r0, r7
|
||||
mov r6, r2
|
||||
bl strlen
|
||||
mov r5, r0
|
||||
cmp r8, #0x0
|
||||
mov r4, #0x0
|
||||
beq _020DF3B8
|
||||
cmp r6, #0x0
|
||||
bls _020DF3B8
|
||||
_020DF368:
|
||||
ldrsb r0, [r7, #0x0]
|
||||
cmp r0, #0x0
|
||||
beq _020DF3A0
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, r5
|
||||
bl mbtowc
|
||||
cmp r0, #0x0
|
||||
add r8, r8, #0x2
|
||||
addgt r7, r7, r0
|
||||
subgt r5, r5, r0
|
||||
bgt _020DF3AC
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r4-r8,pc}
|
||||
_020DF3A0:
|
||||
mov r0, #0x0
|
||||
strh r0, [r8, #0x0]
|
||||
b _020DF3B8
|
||||
_020DF3AC:
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r6
|
||||
blo _020DF368
|
||||
_020DF3B8:
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4-r8,pc}
|
||||
arm_func_end mbstowcs
|
||||
|
||||
arm_func_start wcstombs
|
||||
wcstombs:
|
||||
stmdb sp!, {r3-r9,lr}
|
||||
movs r4, r0
|
||||
mov r9, r1
|
||||
cmpne r9, #0x0
|
||||
mov r8, r2
|
||||
mov r7, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r3-r9,pc}
|
||||
add r6, sp, #0x0
|
||||
_020DF3E4:
|
||||
ldrh r1, [r9, #0x0]
|
||||
cmp r1, #0x0
|
||||
moveq r0, #0x0
|
||||
streqb r0, [r4, r7]
|
||||
beq _020DF430
|
||||
mov r0, r6
|
||||
add r9, r9, #0x2
|
||||
bl wctomb
|
||||
mov r5, r0
|
||||
add r0, r7, r5
|
||||
cmp r0, r8
|
||||
bhi _020DF430
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
add r0, r4, r7
|
||||
bl strncpy
|
||||
add r7, r7, r5
|
||||
cmp r7, r8
|
||||
bls _020DF3E4
|
||||
_020DF430:
|
||||
mov r0, r7
|
||||
ldmia sp!, {r3-r9,pc}
|
||||
arm_func_end wcstombs
|
||||
|
||||
exception mbtowc, 29, 0x00100000
|
||||
exception wctomb, 29, 0x00100000
|
||||
exception mbstowcs, 137, 0x00301F00
|
||||
exception wcstombs, 121, 0x00403F00
|
||||
|
|
|
|||
|
|
@ -1,111 +1,111 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start memcpy
|
||||
memcpy: ; 0x020DF438
|
||||
mov r12, r0
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
_020DF444:
|
||||
ldrsb r3, [r1], #0x1
|
||||
subs r2, r2, #0x1
|
||||
strb r3, [r12], #0x1
|
||||
bne _020DF444
|
||||
bx lr
|
||||
arm_func_end memcpy
|
||||
|
||||
arm_func_start memmove
|
||||
memmove: ; 0x020DF458
|
||||
cmp r1, r0
|
||||
blo _020DF480
|
||||
mov r12, r0
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
_020DF46C:
|
||||
ldrsb r3, [r1], #0x1
|
||||
subs r2, r2, #0x1
|
||||
strb r3, [r12], #0x1
|
||||
bne _020DF46C
|
||||
bx lr
|
||||
_020DF480:
|
||||
cmp r2, #0x0
|
||||
add r3, r1, r2
|
||||
add r12, r0, r2
|
||||
bxeq lr
|
||||
_020DF490:
|
||||
ldrsb r1, [r3, #-0x1]!
|
||||
subs r2, r2, #0x1
|
||||
strb r1, [r12, #-0x1]!
|
||||
bne _020DF490
|
||||
bx lr
|
||||
arm_func_end memmove
|
||||
|
||||
arm_func_start memset
|
||||
memset: ; 0x020DF4A4
|
||||
stmdb sp!, {r4,lr}
|
||||
mov r4, r0
|
||||
bl __fill_mem
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end memset
|
||||
|
||||
arm_func_start memchr
|
||||
memchr:
|
||||
cmp r2, #0x0
|
||||
and r3, r1, #0xff
|
||||
beq _020DF4DC
|
||||
_020DF4C4:
|
||||
ldrb r1, [r0], #0x1
|
||||
cmp r1, r3
|
||||
subeq r0, r0, #0x1
|
||||
bxeq lr
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF4C4
|
||||
_020DF4DC:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end memchr
|
||||
|
||||
arm_func_start __memrchr
|
||||
__memrchr: ; 0x020DF4E4
|
||||
cmp r2, #0x0
|
||||
and r3, r1, #0xff
|
||||
add r0, r0, r2
|
||||
beq _020DF508
|
||||
_020DF4F4:
|
||||
ldrb r1, [r0, #-0x1]!
|
||||
cmp r1, r3
|
||||
bxeq lr
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF4F4
|
||||
_020DF508:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end __memrchr
|
||||
|
||||
arm_func_start memcmp
|
||||
memcmp: ; 0x020DF510
|
||||
cmp r2, #0x0
|
||||
beq _020DF548
|
||||
_020DF518:
|
||||
ldrb r12, [r0], #0x1
|
||||
ldrb r3, [r1], #0x1
|
||||
cmp r12, r3
|
||||
beq _020DF540
|
||||
ldrb r2, [r0, #-0x1]
|
||||
ldrb r0, [r1, #-0x1]
|
||||
cmp r2, r0
|
||||
mvncc r0, #0x0
|
||||
movcs r0, #0x1
|
||||
bx lr
|
||||
_020DF540:
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF518
|
||||
_020DF548:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end memcmp
|
||||
|
||||
exception memset, 21, 0x00100100
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start memcpy
|
||||
memcpy: ; 0x020DF438
|
||||
mov r12, r0
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
_020DF444:
|
||||
ldrsb r3, [r1], #0x1
|
||||
subs r2, r2, #0x1
|
||||
strb r3, [r12], #0x1
|
||||
bne _020DF444
|
||||
bx lr
|
||||
arm_func_end memcpy
|
||||
|
||||
arm_func_start memmove
|
||||
memmove: ; 0x020DF458
|
||||
cmp r1, r0
|
||||
blo _020DF480
|
||||
mov r12, r0
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
_020DF46C:
|
||||
ldrsb r3, [r1], #0x1
|
||||
subs r2, r2, #0x1
|
||||
strb r3, [r12], #0x1
|
||||
bne _020DF46C
|
||||
bx lr
|
||||
_020DF480:
|
||||
cmp r2, #0x0
|
||||
add r3, r1, r2
|
||||
add r12, r0, r2
|
||||
bxeq lr
|
||||
_020DF490:
|
||||
ldrsb r1, [r3, #-0x1]!
|
||||
subs r2, r2, #0x1
|
||||
strb r1, [r12, #-0x1]!
|
||||
bne _020DF490
|
||||
bx lr
|
||||
arm_func_end memmove
|
||||
|
||||
arm_func_start memset
|
||||
memset: ; 0x020DF4A4
|
||||
stmdb sp!, {r4,lr}
|
||||
mov r4, r0
|
||||
bl __fill_mem
|
||||
mov r0, r4
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end memset
|
||||
|
||||
arm_func_start memchr
|
||||
memchr:
|
||||
cmp r2, #0x0
|
||||
and r3, r1, #0xff
|
||||
beq _020DF4DC
|
||||
_020DF4C4:
|
||||
ldrb r1, [r0], #0x1
|
||||
cmp r1, r3
|
||||
subeq r0, r0, #0x1
|
||||
bxeq lr
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF4C4
|
||||
_020DF4DC:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end memchr
|
||||
|
||||
arm_func_start __memrchr
|
||||
__memrchr: ; 0x020DF4E4
|
||||
cmp r2, #0x0
|
||||
and r3, r1, #0xff
|
||||
add r0, r0, r2
|
||||
beq _020DF508
|
||||
_020DF4F4:
|
||||
ldrb r1, [r0, #-0x1]!
|
||||
cmp r1, r3
|
||||
bxeq lr
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF4F4
|
||||
_020DF508:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end __memrchr
|
||||
|
||||
arm_func_start memcmp
|
||||
memcmp: ; 0x020DF510
|
||||
cmp r2, #0x0
|
||||
beq _020DF548
|
||||
_020DF518:
|
||||
ldrb r12, [r0], #0x1
|
||||
ldrb r3, [r1], #0x1
|
||||
cmp r12, r3
|
||||
beq _020DF540
|
||||
ldrb r2, [r0, #-0x1]
|
||||
ldrb r0, [r1, #-0x1]
|
||||
cmp r2, r0
|
||||
mvncc r0, #0x0
|
||||
movcs r0, #0x1
|
||||
bx lr
|
||||
_020DF540:
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF518
|
||||
_020DF548:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end memcmp
|
||||
|
||||
exception memset, 21, 0x00100100
|
||||
|
|
|
|||
|
|
@ -1,61 +1,61 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __fill_mem
|
||||
__fill_mem: ; 0x020DF550
|
||||
cmp r2, #0x20
|
||||
and r3, r1, #0xff
|
||||
blo _020DF5E4
|
||||
rsb r1, r0, #0x0
|
||||
ands r12, r1, #0x3
|
||||
beq _020DF57C
|
||||
sub r2, r2, r12
|
||||
and r1, r3, #0xff
|
||||
_020DF570:
|
||||
strb r1, [r0], #0x1
|
||||
subs r12, r12, #0x1
|
||||
bne _020DF570
|
||||
_020DF57C:
|
||||
cmp r3, #0x0
|
||||
beq _020DF594
|
||||
mov r1, r3, lsl #0x10
|
||||
orr r1, r1, r3, lsl #0x18
|
||||
orr r1, r1, r3, lsl #0x8
|
||||
orr r3, r3, r1
|
||||
_020DF594:
|
||||
movs r1, r2, lsr #0x5
|
||||
beq _020DF5C8
|
||||
_020DF59C:
|
||||
str r3, [r0, #0x0]
|
||||
str r3, [r0, #0x4]
|
||||
str r3, [r0, #0x8]
|
||||
str r3, [r0, #0xc]
|
||||
str r3, [r0, #0x10]
|
||||
str r3, [r0, #0x14]
|
||||
str r3, [r0, #0x18]
|
||||
str r3, [r0, #0x1c]
|
||||
add r0, r0, #0x20
|
||||
subs r1, r1, #0x1
|
||||
bne _020DF59C
|
||||
_020DF5C8:
|
||||
and r1, r2, #0x1f
|
||||
movs r1, r1, lsr #0x2
|
||||
beq _020DF5E0
|
||||
_020DF5D4:
|
||||
str r3, [r0], #0x4
|
||||
subs r1, r1, #0x1
|
||||
bne _020DF5D4
|
||||
_020DF5E0:
|
||||
and r2, r2, #0x3
|
||||
_020DF5E4:
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
and r1, r3, #0xff
|
||||
_020DF5F0:
|
||||
strb r1, [r0], #0x1
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF5F0
|
||||
bx lr
|
||||
arm_func_end __fill_mem
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __fill_mem
|
||||
__fill_mem: ; 0x020DF550
|
||||
cmp r2, #0x20
|
||||
and r3, r1, #0xff
|
||||
blo _020DF5E4
|
||||
rsb r1, r0, #0x0
|
||||
ands r12, r1, #0x3
|
||||
beq _020DF57C
|
||||
sub r2, r2, r12
|
||||
and r1, r3, #0xff
|
||||
_020DF570:
|
||||
strb r1, [r0], #0x1
|
||||
subs r12, r12, #0x1
|
||||
bne _020DF570
|
||||
_020DF57C:
|
||||
cmp r3, #0x0
|
||||
beq _020DF594
|
||||
mov r1, r3, lsl #0x10
|
||||
orr r1, r1, r3, lsl #0x18
|
||||
orr r1, r1, r3, lsl #0x8
|
||||
orr r3, r3, r1
|
||||
_020DF594:
|
||||
movs r1, r2, lsr #0x5
|
||||
beq _020DF5C8
|
||||
_020DF59C:
|
||||
str r3, [r0, #0x0]
|
||||
str r3, [r0, #0x4]
|
||||
str r3, [r0, #0x8]
|
||||
str r3, [r0, #0xc]
|
||||
str r3, [r0, #0x10]
|
||||
str r3, [r0, #0x14]
|
||||
str r3, [r0, #0x18]
|
||||
str r3, [r0, #0x1c]
|
||||
add r0, r0, #0x20
|
||||
subs r1, r1, #0x1
|
||||
bne _020DF59C
|
||||
_020DF5C8:
|
||||
and r1, r2, #0x1f
|
||||
movs r1, r1, lsr #0x2
|
||||
beq _020DF5E0
|
||||
_020DF5D4:
|
||||
str r3, [r0], #0x4
|
||||
subs r1, r1, #0x1
|
||||
bne _020DF5D4
|
||||
_020DF5E0:
|
||||
and r2, r2, #0x3
|
||||
_020DF5E4:
|
||||
cmp r2, #0x0
|
||||
bxeq lr
|
||||
and r1, r3, #0xff
|
||||
_020DF5F0:
|
||||
strb r1, [r0], #0x1
|
||||
subs r2, r2, #0x1
|
||||
bne _020DF5F0
|
||||
bx lr
|
||||
arm_func_end __fill_mem
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,108 +1,108 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start qsort
|
||||
qsort: ; 0x020E1888
|
||||
stmdb sp!, {r3-r11,lr}
|
||||
sub sp, sp, #0x10
|
||||
mov r9, r1
|
||||
cmp r9, #0x2
|
||||
mov r10, r0
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
addcc sp, sp, #0x10
|
||||
ldmccia sp!, {r3-r11,pc}
|
||||
mov r0, r9, lsr #0x1
|
||||
add r11, r0, #0x1
|
||||
sub r0, r11, #0x1
|
||||
mla r0, r8, r0, r10
|
||||
sub r2, r9, #0x1
|
||||
str r0, [sp, #0xc]
|
||||
mla r0, r8, r2, r10
|
||||
str r0, [sp, #0x8]
|
||||
mul r0, r11, r8
|
||||
mvn r1, #0x0
|
||||
str r0, [sp, #0x4]
|
||||
mul r0, r8, r1
|
||||
str r0, [sp, #0x0]
|
||||
_020E18E0:
|
||||
cmp r11, #0x1
|
||||
bls _020E1908
|
||||
ldr r0, [sp, #0x4]
|
||||
sub r11, r11, #0x1
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0x4]
|
||||
ldr r0, [sp, #0xc]
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0xc]
|
||||
b _020E1950
|
||||
_020E1908:
|
||||
mov r2, r8
|
||||
ldr r4, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
cmp r8, #0x0
|
||||
beq _020E1934
|
||||
_020E191C:
|
||||
ldrsb r0, [r4, #0x0]
|
||||
ldrsb r1, [r3, #0x0]
|
||||
subs r2, r2, #0x1
|
||||
strb r0, [r3], #0x1
|
||||
strb r1, [r4], #0x1
|
||||
bne _020E191C
|
||||
_020E1934:
|
||||
sub r9, r9, #0x1
|
||||
cmp r9, #0x1
|
||||
addeq sp, sp, #0x10
|
||||
ldmeqia sp!, {r3-r11,pc}
|
||||
ldr r0, [sp, #0x8]
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0x8]
|
||||
_020E1950:
|
||||
ldr r1, [sp, #0x4]
|
||||
ldr r0, [sp, #0x0]
|
||||
mov r4, r11
|
||||
add r0, r1, r0
|
||||
cmp r9, r11, lsl #0x1
|
||||
add r5, r10, r0
|
||||
blo _020E18E0
|
||||
_020E196C:
|
||||
mov r4, r4, lsl #0x1
|
||||
sub r0, r4, #0x1
|
||||
mov r6, r5
|
||||
mla r5, r8, r0, r10
|
||||
cmp r9, r4
|
||||
bls _020E199C
|
||||
mov r0, r5
|
||||
add r1, r5, r8
|
||||
blx r7
|
||||
cmp r0, #0x0
|
||||
addlt r4, r4, #0x1
|
||||
addlt r5, r5, r8
|
||||
_020E199C:
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
blx r7
|
||||
cmp r0, #0x0
|
||||
bge _020E18E0
|
||||
mov r2, r8
|
||||
mov r3, r5
|
||||
cmp r8, #0x0
|
||||
beq _020E19D8
|
||||
_020E19C0:
|
||||
ldrsb r1, [r6, #0x0]
|
||||
ldrsb r0, [r3, #0x0]
|
||||
subs r2, r2, #0x1
|
||||
strb r0, [r6], #0x1
|
||||
strb r1, [r3], #0x1
|
||||
bne _020E19C0
|
||||
_020E19D8:
|
||||
cmp r9, r4, lsl #0x1
|
||||
bhs _020E196C
|
||||
b _020E18E0
|
||||
add sp, sp, #0x10
|
||||
ldmia sp!, {r3-r11,pc}
|
||||
arm_func_end qsort
|
||||
|
||||
exception qsort, 357, 0x0070FF00
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start qsort
|
||||
qsort: ; 0x020E1888
|
||||
stmdb sp!, {r3-r11,lr}
|
||||
sub sp, sp, #0x10
|
||||
mov r9, r1
|
||||
cmp r9, #0x2
|
||||
mov r10, r0
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
addcc sp, sp, #0x10
|
||||
ldmccia sp!, {r3-r11,pc}
|
||||
mov r0, r9, lsr #0x1
|
||||
add r11, r0, #0x1
|
||||
sub r0, r11, #0x1
|
||||
mla r0, r8, r0, r10
|
||||
sub r2, r9, #0x1
|
||||
str r0, [sp, #0xc]
|
||||
mla r0, r8, r2, r10
|
||||
str r0, [sp, #0x8]
|
||||
mul r0, r11, r8
|
||||
mvn r1, #0x0
|
||||
str r0, [sp, #0x4]
|
||||
mul r0, r8, r1
|
||||
str r0, [sp, #0x0]
|
||||
_020E18E0:
|
||||
cmp r11, #0x1
|
||||
bls _020E1908
|
||||
ldr r0, [sp, #0x4]
|
||||
sub r11, r11, #0x1
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0x4]
|
||||
ldr r0, [sp, #0xc]
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0xc]
|
||||
b _020E1950
|
||||
_020E1908:
|
||||
mov r2, r8
|
||||
ldr r4, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
cmp r8, #0x0
|
||||
beq _020E1934
|
||||
_020E191C:
|
||||
ldrsb r0, [r4, #0x0]
|
||||
ldrsb r1, [r3, #0x0]
|
||||
subs r2, r2, #0x1
|
||||
strb r0, [r3], #0x1
|
||||
strb r1, [r4], #0x1
|
||||
bne _020E191C
|
||||
_020E1934:
|
||||
sub r9, r9, #0x1
|
||||
cmp r9, #0x1
|
||||
addeq sp, sp, #0x10
|
||||
ldmeqia sp!, {r3-r11,pc}
|
||||
ldr r0, [sp, #0x8]
|
||||
sub r0, r0, r8
|
||||
str r0, [sp, #0x8]
|
||||
_020E1950:
|
||||
ldr r1, [sp, #0x4]
|
||||
ldr r0, [sp, #0x0]
|
||||
mov r4, r11
|
||||
add r0, r1, r0
|
||||
cmp r9, r11, lsl #0x1
|
||||
add r5, r10, r0
|
||||
blo _020E18E0
|
||||
_020E196C:
|
||||
mov r4, r4, lsl #0x1
|
||||
sub r0, r4, #0x1
|
||||
mov r6, r5
|
||||
mla r5, r8, r0, r10
|
||||
cmp r9, r4
|
||||
bls _020E199C
|
||||
mov r0, r5
|
||||
add r1, r5, r8
|
||||
blx r7
|
||||
cmp r0, #0x0
|
||||
addlt r4, r4, #0x1
|
||||
addlt r5, r5, r8
|
||||
_020E199C:
|
||||
mov r0, r6
|
||||
mov r1, r5
|
||||
blx r7
|
||||
cmp r0, #0x0
|
||||
bge _020E18E0
|
||||
mov r2, r8
|
||||
mov r3, r5
|
||||
cmp r8, #0x0
|
||||
beq _020E19D8
|
||||
_020E19C0:
|
||||
ldrsb r1, [r6, #0x0]
|
||||
ldrsb r0, [r3, #0x0]
|
||||
subs r2, r2, #0x1
|
||||
strb r0, [r6], #0x1
|
||||
strb r1, [r3], #0x1
|
||||
bne _020E19C0
|
||||
_020E19D8:
|
||||
cmp r9, r4, lsl #0x1
|
||||
bhs _020E196C
|
||||
b _020E18E0
|
||||
add sp, sp, #0x10
|
||||
ldmia sp!, {r3-r11,pc}
|
||||
arm_func_end qsort
|
||||
|
||||
exception qsort, 357, 0x0070FF00
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,103 +1,103 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global signal_funcs
|
||||
signal_funcs: ; 0x021D74AC
|
||||
.space 0x1c
|
||||
.size signal_funcs,.-signal_funcs
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start raise
|
||||
raise: ; 0x020E2D7C
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
cmp r5, #0x1
|
||||
blt _020E2D94
|
||||
cmp r5, #0x7
|
||||
ble _020E2D9C
|
||||
_020E2D94:
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
_020E2D9C:
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020E2DD0
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x1c]
|
||||
str r2, [r0, #0x1c]
|
||||
b _020E2E28
|
||||
_020E2DD0:
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, #0x1c]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020E2E00
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r1, [r0, #0x1c]
|
||||
add r1, r1, #0x1
|
||||
str r1, [r0, #0x1c]
|
||||
b _020E2E28
|
||||
_020E2E00:
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x1c]
|
||||
str r2, [r0, #0x1c]
|
||||
_020E2E28:
|
||||
ldr r1, _020E2EA8 ; =signal_funcs
|
||||
sub r2, r5, #0x1
|
||||
ldr r4, [r1, r2, lsl #0x2]
|
||||
cmp r4, #0x1
|
||||
movne r0, #0x0
|
||||
strne r0, [r1, r2, lsl #0x2]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r1, [r0, #0x1c]
|
||||
subs r1, r1, #0x1
|
||||
str r1, [r0, #0x1c]
|
||||
bne _020E2E5C
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_UnlockMutex
|
||||
_020E2E5C:
|
||||
cmp r4, #0x1
|
||||
beq _020E2E70
|
||||
cmp r4, #0x0
|
||||
cmpeq r5, #0x1
|
||||
bne _020E2E78
|
||||
_020E2E70:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
_020E2E78:
|
||||
cmp r4, #0x0
|
||||
bne _020E2E88
|
||||
mov r0, #0x0
|
||||
bl exit
|
||||
_020E2E88:
|
||||
mov r0, r5
|
||||
blx r4
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020E2E98: .word __cs + 0xA8
|
||||
_020E2E9C: .word OSi_ThreadInfo
|
||||
_020E2EA0: .word __cs_id
|
||||
_020E2EA4: .word __cs_ref
|
||||
_020E2EA8: .word signal_funcs
|
||||
arm_func_end raise
|
||||
|
||||
exception raise, 305, 0x00200300
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global signal_funcs
|
||||
signal_funcs: ; 0x021D74AC
|
||||
.space 0x1c
|
||||
.size signal_funcs,.-signal_funcs
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start raise
|
||||
raise: ; 0x020E2D7C
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
mov r5, r0
|
||||
cmp r5, #0x1
|
||||
blt _020E2D94
|
||||
cmp r5, #0x7
|
||||
ble _020E2D9C
|
||||
_020E2D94:
|
||||
mvn r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
_020E2D9C:
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_TryLockMutex
|
||||
cmp r0, #0x0
|
||||
bne _020E2DD0
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x1c]
|
||||
str r2, [r0, #0x1c]
|
||||
b _020E2E28
|
||||
_020E2DD0:
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r0, [r0, #0x4]
|
||||
ldr r1, [r1, #0x1c]
|
||||
ldr r0, [r0, #0x6c]
|
||||
cmp r1, r0
|
||||
bne _020E2E00
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r1, [r0, #0x1c]
|
||||
add r1, r1, #0x1
|
||||
str r1, [r0, #0x1c]
|
||||
b _020E2E28
|
||||
_020E2E00:
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_LockMutex
|
||||
ldr r0, _020E2E9C ; =OSi_ThreadInfo
|
||||
ldr r1, _020E2EA0 ; =__cs_id
|
||||
ldr r2, [r0, #0x4]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r3, [r2, #0x6c]
|
||||
mov r2, #0x1
|
||||
str r3, [r1, #0x1c]
|
||||
str r2, [r0, #0x1c]
|
||||
_020E2E28:
|
||||
ldr r1, _020E2EA8 ; =signal_funcs
|
||||
sub r2, r5, #0x1
|
||||
ldr r4, [r1, r2, lsl #0x2]
|
||||
cmp r4, #0x1
|
||||
movne r0, #0x0
|
||||
strne r0, [r1, r2, lsl #0x2]
|
||||
ldr r0, _020E2EA4 ; =__cs_ref
|
||||
ldr r1, [r0, #0x1c]
|
||||
subs r1, r1, #0x1
|
||||
str r1, [r0, #0x1c]
|
||||
bne _020E2E5C
|
||||
ldr r0, _020E2E98 ; =__cs + 0xA8
|
||||
bl OS_UnlockMutex
|
||||
_020E2E5C:
|
||||
cmp r4, #0x1
|
||||
beq _020E2E70
|
||||
cmp r4, #0x0
|
||||
cmpeq r5, #0x1
|
||||
bne _020E2E78
|
||||
_020E2E70:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
_020E2E78:
|
||||
cmp r4, #0x0
|
||||
bne _020E2E88
|
||||
mov r0, #0x0
|
||||
bl exit
|
||||
_020E2E88:
|
||||
mov r0, r5
|
||||
blx r4
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020E2E98: .word __cs + 0xA8
|
||||
_020E2E9C: .word OSi_ThreadInfo
|
||||
_020E2EA0: .word __cs_id
|
||||
_020E2EA4: .word __cs_ref
|
||||
_020E2EA8: .word signal_funcs
|
||||
arm_func_end raise
|
||||
|
||||
exception raise, 305, 0x00200300
|
||||
|
|
|
|||
|
|
@ -1,364 +1,364 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start strlen
|
||||
strlen: ; 0x020E2EAC
|
||||
mvn r2, #0x0
|
||||
_020E2EB0:
|
||||
ldrsb r1, [r0], #0x1
|
||||
add r2, r2, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E2EB0
|
||||
mov r0, r2
|
||||
bx lr
|
||||
arm_func_end strlen
|
||||
|
||||
arm_func_start strcpy
|
||||
strcpy: ; 0x020E2EC8
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
and r4, r1, #0x3
|
||||
and r3, r0, #0x3
|
||||
mov r2, r0
|
||||
cmp r3, r4
|
||||
bne _020E2F64
|
||||
cmp r4, #0x0
|
||||
beq _020E2F20
|
||||
ldrb r3, [r1, #0x0]
|
||||
strb r3, [r0, #0x0]
|
||||
cmp r3, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
rsbs r4, r4, #0x3
|
||||
beq _020E2F18
|
||||
_020E2F00:
|
||||
ldrb r3, [r1, #0x1]!
|
||||
cmp r3, #0x0
|
||||
strb r3, [r2, #0x1]!
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
subs r4, r4, #0x1
|
||||
bne _020E2F00
|
||||
_020E2F18:
|
||||
add r2, r2, #0x1
|
||||
add r1, r1, #0x1
|
||||
_020E2F20:
|
||||
ldr r5, [r1, #0x0]
|
||||
ldr r3, _020E2F88 ; =0xFEFEFEFF
|
||||
mvn r4, r5
|
||||
add lr, r5, r3
|
||||
ldr ip, _020E2F8C ; =0x80808080
|
||||
and r4, lr, r4
|
||||
tst r4, r12
|
||||
bne _020E2F64
|
||||
sub r2, r2, #0x4
|
||||
_020E2F44:
|
||||
str r5, [r2, #0x4]!
|
||||
ldr r5, [r1, #0x4]!
|
||||
add r4, r5, r3
|
||||
mvn lr, r5
|
||||
and lr, r4, lr
|
||||
tst lr, r12
|
||||
beq _020E2F44
|
||||
add r2, r2, #0x4
|
||||
_020E2F64:
|
||||
ldrb r3, [r1, #0x0]
|
||||
strb r3, [r2, #0x0]
|
||||
cmp r3, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
_020E2F74:
|
||||
ldrb r3, [r1, #0x1]!
|
||||
cmp r3, #0x0
|
||||
strb r3, [r2, #0x1]!
|
||||
bne _020E2F74
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020E2F88: .word 0xFEFEFEFF
|
||||
_020E2F8C: .word 0x80808080
|
||||
arm_func_end strcpy
|
||||
|
||||
arm_func_start strncpy
|
||||
strncpy: ; 0x020E2F90
|
||||
stmdb sp!, {r3,lr}
|
||||
mov lr, r0
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r3,pc}
|
||||
_020E2FA0:
|
||||
ldrsb r3, [r1], #0x1
|
||||
mov r12, lr
|
||||
strb r3, [lr], #0x1
|
||||
ldrsb r3, [r12, #0x0]
|
||||
cmp r3, #0x0
|
||||
bne _020E2FD4
|
||||
subs r2, r2, #0x1
|
||||
ldmeqia sp!, {r3,pc}
|
||||
mov r1, #0x0
|
||||
_020E2FC4:
|
||||
strb r1, [lr], #0x1
|
||||
subs r2, r2, #0x1
|
||||
bne _020E2FC4
|
||||
ldmia sp!, {r3,pc}
|
||||
_020E2FD4:
|
||||
subs r2, r2, #0x1
|
||||
bne _020E2FA0
|
||||
ldmia sp!, {r3,pc}
|
||||
arm_func_end strncpy
|
||||
|
||||
arm_func_start strcat
|
||||
strcat: ; 0x020E2FE0
|
||||
mov r3, r0
|
||||
_020E2FE4:
|
||||
ldrsb r2, [r3], #0x1
|
||||
cmp r2, #0x0
|
||||
bne _020E2FE4
|
||||
sub r3, r3, #0x1
|
||||
_020E2FF4:
|
||||
ldrsb r2, [r1], #0x1
|
||||
mov r12, r3
|
||||
strb r2, [r3], #0x1
|
||||
ldrsb r2, [r12, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020E2FF4
|
||||
bx lr
|
||||
arm_func_end strcat
|
||||
|
||||
arm_func_start strncat
|
||||
strncat: ; 0x020E3010
|
||||
stmdb sp!, {r3,lr}
|
||||
mov r12, r0
|
||||
_020E3018:
|
||||
ldrsb r3, [r12], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E3018
|
||||
cmp r2, #0x0
|
||||
sub r12, r12, #0x1
|
||||
beq _020E3054
|
||||
_020E3030:
|
||||
ldrsb r3, [r1], #0x1
|
||||
mov lr, r12
|
||||
strb r3, [r12], #0x1
|
||||
ldrsb r3, [lr, #0x0]
|
||||
cmp r3, #0x0
|
||||
subeq r12, r12, #0x1
|
||||
beq _020E3054
|
||||
subs r2, r2, #0x1
|
||||
bne _020E3030
|
||||
_020E3054:
|
||||
mov r1, #0x0
|
||||
strb r1, [r12, #0x0]
|
||||
ldmia sp!, {r3,pc}
|
||||
arm_func_end strncat
|
||||
|
||||
arm_func_start strcmp
|
||||
strcmp: ; 0x020E3060
|
||||
stmdb sp!, {r4,lr}
|
||||
ldrb r2, [r0, #0x0]
|
||||
ldrb r3, [r1, #0x0]
|
||||
subs r3, r2, r3
|
||||
movne r0, r3
|
||||
ldmneia sp!, {r4,pc}
|
||||
and r4, r0, #0x3
|
||||
and r3, r1, #0x3
|
||||
cmp r3, r4
|
||||
bne _020E313C
|
||||
cmp r4, #0x0
|
||||
beq _020E30D4
|
||||
cmp r2, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
rsbs r4, r4, #0x3
|
||||
beq _020E30CC
|
||||
_020E30A4:
|
||||
ldrb r3, [r0, #0x1]!
|
||||
ldrb r2, [r1, #0x1]!
|
||||
subs r2, r3, r2
|
||||
movne r0, r2
|
||||
ldmneia sp!, {r4,pc}
|
||||
cmp r3, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
subs r4, r4, #0x1
|
||||
bne _020E30A4
|
||||
_020E30CC:
|
||||
add r0, r0, #0x1
|
||||
add r1, r1, #0x1
|
||||
_020E30D4:
|
||||
ldr r2, [r0, #0x0]
|
||||
ldr r3, _020E316C ; =0xFEFEFEFF
|
||||
mvn r4, r2
|
||||
add lr, r2, r3
|
||||
ldr ip, _020E3170 ; =0x80808080
|
||||
and r4, lr, r4
|
||||
tst r4, r12
|
||||
ldr r4, [r1, #0x0]
|
||||
bne _020E3128
|
||||
cmp r2, r4
|
||||
bne _020E311C
|
||||
_020E3100:
|
||||
ldr r2, [r0, #0x4]!
|
||||
ldr r4, [r1, #0x4]!
|
||||
add lr, r2, r3
|
||||
tst lr, r12
|
||||
bne _020E3128
|
||||
cmp r2, r4
|
||||
beq _020E3100
|
||||
_020E311C:
|
||||
sub r0, r0, #0x1
|
||||
sub r1, r1, #0x1
|
||||
b _020E313C
|
||||
_020E3128:
|
||||
ldrb r2, [r0, #0x0]
|
||||
ldrb r3, [r1, #0x0]
|
||||
subs r3, r2, r3
|
||||
movne r0, r3
|
||||
ldmneia sp!, {r4,pc}
|
||||
_020E313C:
|
||||
cmp r2, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
_020E3148:
|
||||
ldrb r3, [r0, #0x1]!
|
||||
ldrb r2, [r1, #0x1]!
|
||||
subs r2, r3, r2
|
||||
movne r0, r2
|
||||
ldmneia sp!, {r4,pc}
|
||||
cmp r3, #0x0
|
||||
bne _020E3148
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020E316C: .word 0xFEFEFEFF
|
||||
_020E3170: .word 0x80808080
|
||||
arm_func_end strcmp
|
||||
|
||||
arm_func_start strncmp
|
||||
strncmp: ; 0x020E3174
|
||||
cmp r2, #0x0
|
||||
beq _020E31A0
|
||||
_020E317C:
|
||||
ldrb r12, [r1], #0x1
|
||||
ldrb r3, [r0], #0x1
|
||||
cmp r3, r12
|
||||
subne r0, r3, r12
|
||||
bxne lr
|
||||
cmp r3, #0x0
|
||||
beq _020E31A0
|
||||
subs r2, r2, #0x1
|
||||
bne _020E317C
|
||||
_020E31A0:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end strncmp
|
||||
|
||||
arm_func_start strchr
|
||||
strchr: ; 0x020E31A8
|
||||
ldrsb r2, [r0], #0x1
|
||||
mov r1, r1, lsl #0x18
|
||||
mov r1, r1, asr #0x18
|
||||
cmp r2, #0x0
|
||||
beq _020E31D4
|
||||
_020E31BC:
|
||||
cmp r2, r1
|
||||
subeq r0, r0, #0x1
|
||||
bxeq lr
|
||||
ldrsb r2, [r0], #0x1
|
||||
cmp r2, #0x0
|
||||
bne _020E31BC
|
||||
_020E31D4:
|
||||
cmp r1, #0x0
|
||||
movne r0, #0x0
|
||||
subeq r0, r0, #0x1
|
||||
bx lr
|
||||
arm_func_end strchr
|
||||
|
||||
arm_func_start strspn
|
||||
strspn: ; 0x020E31E4
|
||||
stmdb sp!, {r4,lr}
|
||||
sub sp, sp, #0x20
|
||||
add r12, sp, #0x0
|
||||
mov r3, #0x8
|
||||
mov r2, #0x0
|
||||
_020E31F8:
|
||||
strb r2, [r12, #0x0]
|
||||
strb r2, [r12, #0x1]
|
||||
strb r2, [r12, #0x2]
|
||||
strb r2, [r12, #0x3]
|
||||
add r12, r12, #0x4
|
||||
subs r3, r3, #0x1
|
||||
bne _020E31F8
|
||||
ldrb r3, [r1, #0x0]
|
||||
add r4, r1, #0x1
|
||||
cmp r3, #0x0
|
||||
beq _020E3254
|
||||
add lr, sp, #0x0
|
||||
mov r2, #0x1
|
||||
_020E322C:
|
||||
and r12, r3, #0xff
|
||||
and r1, r3, #0x7
|
||||
mov r1, r2, lsl r1
|
||||
ldrb r3, [lr, r12, asr #0x3]
|
||||
and r1, r1, #0xff
|
||||
orr r1, r3, r1
|
||||
strb r1, [lr, r12, asr #0x3]
|
||||
ldrb r3, [r4], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E322C
|
||||
_020E3254:
|
||||
ldrb r1, [r0, #0x0]
|
||||
add r4, r0, #0x1
|
||||
cmp r1, #0x0
|
||||
beq _020E3294
|
||||
add r12, sp, #0x0
|
||||
mov r2, #0x1
|
||||
_020E326C:
|
||||
and r3, r1, #0xff
|
||||
and r1, r1, #0x7
|
||||
mov r1, r2, lsl r1
|
||||
ldrb r3, [r12, r3, asr #0x3]
|
||||
and r1, r1, #0xff
|
||||
tst r3, r1
|
||||
bne _020E3294
|
||||
ldrb r1, [r4], #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E326C
|
||||
_020E3294:
|
||||
sub r0, r4, r0
|
||||
sub r0, r0, #0x1
|
||||
add sp, sp, #0x20
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end strspn
|
||||
|
||||
arm_func_start strstr
|
||||
strstr: ; 0x020E32A4
|
||||
stmdb sp!, {r4,lr}
|
||||
cmp r1, #0x0
|
||||
ldrneb r2, [r1, #0x0]
|
||||
cmpne r2, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
ldrb r3, [r0, #0x0]
|
||||
add r4, r0, #0x1
|
||||
cmp r3, #0x0
|
||||
beq _020E3308
|
||||
_020E32C8:
|
||||
cmp r3, r2
|
||||
bne _020E32FC
|
||||
mov lr, r4
|
||||
add r12, r1, #0x1
|
||||
_020E32D8:
|
||||
ldrb r3, [r12], #0x1
|
||||
ldrb r0, [lr], #0x1
|
||||
cmp r0, r3
|
||||
bne _020E32F0
|
||||
cmp r0, #0x0
|
||||
bne _020E32D8
|
||||
_020E32F0:
|
||||
cmp r3, #0x0
|
||||
subeq r0, r4, #0x1
|
||||
ldmeqia sp!, {r4,pc}
|
||||
_020E32FC:
|
||||
ldrb r3, [r4], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E32C8
|
||||
_020E3308:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end strstr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start strlen
|
||||
strlen: ; 0x020E2EAC
|
||||
mvn r2, #0x0
|
||||
_020E2EB0:
|
||||
ldrsb r1, [r0], #0x1
|
||||
add r2, r2, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E2EB0
|
||||
mov r0, r2
|
||||
bx lr
|
||||
arm_func_end strlen
|
||||
|
||||
arm_func_start strcpy
|
||||
strcpy: ; 0x020E2EC8
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
and r4, r1, #0x3
|
||||
and r3, r0, #0x3
|
||||
mov r2, r0
|
||||
cmp r3, r4
|
||||
bne _020E2F64
|
||||
cmp r4, #0x0
|
||||
beq _020E2F20
|
||||
ldrb r3, [r1, #0x0]
|
||||
strb r3, [r0, #0x0]
|
||||
cmp r3, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
rsbs r4, r4, #0x3
|
||||
beq _020E2F18
|
||||
_020E2F00:
|
||||
ldrb r3, [r1, #0x1]!
|
||||
cmp r3, #0x0
|
||||
strb r3, [r2, #0x1]!
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
subs r4, r4, #0x1
|
||||
bne _020E2F00
|
||||
_020E2F18:
|
||||
add r2, r2, #0x1
|
||||
add r1, r1, #0x1
|
||||
_020E2F20:
|
||||
ldr r5, [r1, #0x0]
|
||||
ldr r3, _020E2F88 ; =0xFEFEFEFF
|
||||
mvn r4, r5
|
||||
add lr, r5, r3
|
||||
ldr ip, _020E2F8C ; =0x80808080
|
||||
and r4, lr, r4
|
||||
tst r4, r12
|
||||
bne _020E2F64
|
||||
sub r2, r2, #0x4
|
||||
_020E2F44:
|
||||
str r5, [r2, #0x4]!
|
||||
ldr r5, [r1, #0x4]!
|
||||
add r4, r5, r3
|
||||
mvn lr, r5
|
||||
and lr, r4, lr
|
||||
tst lr, r12
|
||||
beq _020E2F44
|
||||
add r2, r2, #0x4
|
||||
_020E2F64:
|
||||
ldrb r3, [r1, #0x0]
|
||||
strb r3, [r2, #0x0]
|
||||
cmp r3, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
_020E2F74:
|
||||
ldrb r3, [r1, #0x1]!
|
||||
cmp r3, #0x0
|
||||
strb r3, [r2, #0x1]!
|
||||
bne _020E2F74
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020E2F88: .word 0xFEFEFEFF
|
||||
_020E2F8C: .word 0x80808080
|
||||
arm_func_end strcpy
|
||||
|
||||
arm_func_start strncpy
|
||||
strncpy: ; 0x020E2F90
|
||||
stmdb sp!, {r3,lr}
|
||||
mov lr, r0
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r3,pc}
|
||||
_020E2FA0:
|
||||
ldrsb r3, [r1], #0x1
|
||||
mov r12, lr
|
||||
strb r3, [lr], #0x1
|
||||
ldrsb r3, [r12, #0x0]
|
||||
cmp r3, #0x0
|
||||
bne _020E2FD4
|
||||
subs r2, r2, #0x1
|
||||
ldmeqia sp!, {r3,pc}
|
||||
mov r1, #0x0
|
||||
_020E2FC4:
|
||||
strb r1, [lr], #0x1
|
||||
subs r2, r2, #0x1
|
||||
bne _020E2FC4
|
||||
ldmia sp!, {r3,pc}
|
||||
_020E2FD4:
|
||||
subs r2, r2, #0x1
|
||||
bne _020E2FA0
|
||||
ldmia sp!, {r3,pc}
|
||||
arm_func_end strncpy
|
||||
|
||||
arm_func_start strcat
|
||||
strcat: ; 0x020E2FE0
|
||||
mov r3, r0
|
||||
_020E2FE4:
|
||||
ldrsb r2, [r3], #0x1
|
||||
cmp r2, #0x0
|
||||
bne _020E2FE4
|
||||
sub r3, r3, #0x1
|
||||
_020E2FF4:
|
||||
ldrsb r2, [r1], #0x1
|
||||
mov r12, r3
|
||||
strb r2, [r3], #0x1
|
||||
ldrsb r2, [r12, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020E2FF4
|
||||
bx lr
|
||||
arm_func_end strcat
|
||||
|
||||
arm_func_start strncat
|
||||
strncat: ; 0x020E3010
|
||||
stmdb sp!, {r3,lr}
|
||||
mov r12, r0
|
||||
_020E3018:
|
||||
ldrsb r3, [r12], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E3018
|
||||
cmp r2, #0x0
|
||||
sub r12, r12, #0x1
|
||||
beq _020E3054
|
||||
_020E3030:
|
||||
ldrsb r3, [r1], #0x1
|
||||
mov lr, r12
|
||||
strb r3, [r12], #0x1
|
||||
ldrsb r3, [lr, #0x0]
|
||||
cmp r3, #0x0
|
||||
subeq r12, r12, #0x1
|
||||
beq _020E3054
|
||||
subs r2, r2, #0x1
|
||||
bne _020E3030
|
||||
_020E3054:
|
||||
mov r1, #0x0
|
||||
strb r1, [r12, #0x0]
|
||||
ldmia sp!, {r3,pc}
|
||||
arm_func_end strncat
|
||||
|
||||
arm_func_start strcmp
|
||||
strcmp: ; 0x020E3060
|
||||
stmdb sp!, {r4,lr}
|
||||
ldrb r2, [r0, #0x0]
|
||||
ldrb r3, [r1, #0x0]
|
||||
subs r3, r2, r3
|
||||
movne r0, r3
|
||||
ldmneia sp!, {r4,pc}
|
||||
and r4, r0, #0x3
|
||||
and r3, r1, #0x3
|
||||
cmp r3, r4
|
||||
bne _020E313C
|
||||
cmp r4, #0x0
|
||||
beq _020E30D4
|
||||
cmp r2, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
rsbs r4, r4, #0x3
|
||||
beq _020E30CC
|
||||
_020E30A4:
|
||||
ldrb r3, [r0, #0x1]!
|
||||
ldrb r2, [r1, #0x1]!
|
||||
subs r2, r3, r2
|
||||
movne r0, r2
|
||||
ldmneia sp!, {r4,pc}
|
||||
cmp r3, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
subs r4, r4, #0x1
|
||||
bne _020E30A4
|
||||
_020E30CC:
|
||||
add r0, r0, #0x1
|
||||
add r1, r1, #0x1
|
||||
_020E30D4:
|
||||
ldr r2, [r0, #0x0]
|
||||
ldr r3, _020E316C ; =0xFEFEFEFF
|
||||
mvn r4, r2
|
||||
add lr, r2, r3
|
||||
ldr ip, _020E3170 ; =0x80808080
|
||||
and r4, lr, r4
|
||||
tst r4, r12
|
||||
ldr r4, [r1, #0x0]
|
||||
bne _020E3128
|
||||
cmp r2, r4
|
||||
bne _020E311C
|
||||
_020E3100:
|
||||
ldr r2, [r0, #0x4]!
|
||||
ldr r4, [r1, #0x4]!
|
||||
add lr, r2, r3
|
||||
tst lr, r12
|
||||
bne _020E3128
|
||||
cmp r2, r4
|
||||
beq _020E3100
|
||||
_020E311C:
|
||||
sub r0, r0, #0x1
|
||||
sub r1, r1, #0x1
|
||||
b _020E313C
|
||||
_020E3128:
|
||||
ldrb r2, [r0, #0x0]
|
||||
ldrb r3, [r1, #0x0]
|
||||
subs r3, r2, r3
|
||||
movne r0, r3
|
||||
ldmneia sp!, {r4,pc}
|
||||
_020E313C:
|
||||
cmp r2, #0x0
|
||||
moveq r0, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
_020E3148:
|
||||
ldrb r3, [r0, #0x1]!
|
||||
ldrb r2, [r1, #0x1]!
|
||||
subs r2, r3, r2
|
||||
movne r0, r2
|
||||
ldmneia sp!, {r4,pc}
|
||||
cmp r3, #0x0
|
||||
bne _020E3148
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020E316C: .word 0xFEFEFEFF
|
||||
_020E3170: .word 0x80808080
|
||||
arm_func_end strcmp
|
||||
|
||||
arm_func_start strncmp
|
||||
strncmp: ; 0x020E3174
|
||||
cmp r2, #0x0
|
||||
beq _020E31A0
|
||||
_020E317C:
|
||||
ldrb r12, [r1], #0x1
|
||||
ldrb r3, [r0], #0x1
|
||||
cmp r3, r12
|
||||
subne r0, r3, r12
|
||||
bxne lr
|
||||
cmp r3, #0x0
|
||||
beq _020E31A0
|
||||
subs r2, r2, #0x1
|
||||
bne _020E317C
|
||||
_020E31A0:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end strncmp
|
||||
|
||||
arm_func_start strchr
|
||||
strchr: ; 0x020E31A8
|
||||
ldrsb r2, [r0], #0x1
|
||||
mov r1, r1, lsl #0x18
|
||||
mov r1, r1, asr #0x18
|
||||
cmp r2, #0x0
|
||||
beq _020E31D4
|
||||
_020E31BC:
|
||||
cmp r2, r1
|
||||
subeq r0, r0, #0x1
|
||||
bxeq lr
|
||||
ldrsb r2, [r0], #0x1
|
||||
cmp r2, #0x0
|
||||
bne _020E31BC
|
||||
_020E31D4:
|
||||
cmp r1, #0x0
|
||||
movne r0, #0x0
|
||||
subeq r0, r0, #0x1
|
||||
bx lr
|
||||
arm_func_end strchr
|
||||
|
||||
arm_func_start strspn
|
||||
strspn: ; 0x020E31E4
|
||||
stmdb sp!, {r4,lr}
|
||||
sub sp, sp, #0x20
|
||||
add r12, sp, #0x0
|
||||
mov r3, #0x8
|
||||
mov r2, #0x0
|
||||
_020E31F8:
|
||||
strb r2, [r12, #0x0]
|
||||
strb r2, [r12, #0x1]
|
||||
strb r2, [r12, #0x2]
|
||||
strb r2, [r12, #0x3]
|
||||
add r12, r12, #0x4
|
||||
subs r3, r3, #0x1
|
||||
bne _020E31F8
|
||||
ldrb r3, [r1, #0x0]
|
||||
add r4, r1, #0x1
|
||||
cmp r3, #0x0
|
||||
beq _020E3254
|
||||
add lr, sp, #0x0
|
||||
mov r2, #0x1
|
||||
_020E322C:
|
||||
and r12, r3, #0xff
|
||||
and r1, r3, #0x7
|
||||
mov r1, r2, lsl r1
|
||||
ldrb r3, [lr, r12, asr #0x3]
|
||||
and r1, r1, #0xff
|
||||
orr r1, r3, r1
|
||||
strb r1, [lr, r12, asr #0x3]
|
||||
ldrb r3, [r4], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E322C
|
||||
_020E3254:
|
||||
ldrb r1, [r0, #0x0]
|
||||
add r4, r0, #0x1
|
||||
cmp r1, #0x0
|
||||
beq _020E3294
|
||||
add r12, sp, #0x0
|
||||
mov r2, #0x1
|
||||
_020E326C:
|
||||
and r3, r1, #0xff
|
||||
and r1, r1, #0x7
|
||||
mov r1, r2, lsl r1
|
||||
ldrb r3, [r12, r3, asr #0x3]
|
||||
and r1, r1, #0xff
|
||||
tst r3, r1
|
||||
bne _020E3294
|
||||
ldrb r1, [r4], #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E326C
|
||||
_020E3294:
|
||||
sub r0, r4, r0
|
||||
sub r0, r0, #0x1
|
||||
add sp, sp, #0x20
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end strspn
|
||||
|
||||
arm_func_start strstr
|
||||
strstr: ; 0x020E32A4
|
||||
stmdb sp!, {r4,lr}
|
||||
cmp r1, #0x0
|
||||
ldrneb r2, [r1, #0x0]
|
||||
cmpne r2, #0x0
|
||||
ldmeqia sp!, {r4,pc}
|
||||
ldrb r3, [r0, #0x0]
|
||||
add r4, r0, #0x1
|
||||
cmp r3, #0x0
|
||||
beq _020E3308
|
||||
_020E32C8:
|
||||
cmp r3, r2
|
||||
bne _020E32FC
|
||||
mov lr, r4
|
||||
add r12, r1, #0x1
|
||||
_020E32D8:
|
||||
ldrb r3, [r12], #0x1
|
||||
ldrb r0, [lr], #0x1
|
||||
cmp r0, r3
|
||||
bne _020E32F0
|
||||
cmp r0, #0x0
|
||||
bne _020E32D8
|
||||
_020E32F0:
|
||||
cmp r3, #0x0
|
||||
subeq r0, r4, #0x1
|
||||
ldmeqia sp!, {r4,pc}
|
||||
_020E32FC:
|
||||
ldrb r3, [r4], #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020E32C8
|
||||
_020E3308:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,pc}
|
||||
arm_func_end strstr
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,43 +1,43 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fwide
|
||||
fwide:
|
||||
cmp r0, #0x0
|
||||
beq _020E500C
|
||||
ldr r3, [r0, #0x4]
|
||||
mov r2, r3, lsl #0x16
|
||||
movs r2, r2, lsr #0x1d
|
||||
bne _020E5014
|
||||
_020E500C:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020E5014:
|
||||
mov r2, r3, lsl #0x14
|
||||
movs r2, r2, lsr #0x1e
|
||||
beq _020E5034
|
||||
cmp r2, #0x1
|
||||
beq _020E505C
|
||||
cmp r2, #0x2
|
||||
moveq r1, #0x1
|
||||
b _020E5060
|
||||
_020E5034:
|
||||
cmp r1, #0x0
|
||||
ble _020E504C
|
||||
bic r2, r3, #0xc00
|
||||
orr r2, r2, #0x800
|
||||
str r2, [r0, #0x4]
|
||||
b _020E5060
|
||||
_020E504C:
|
||||
biclt r2, r3, #0xc00
|
||||
orrlt r2, r2, #0x400
|
||||
strlt r2, [r0, #0x4]
|
||||
b _020E5060
|
||||
_020E505C:
|
||||
mvn r1, #0x0
|
||||
_020E5060:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
arm_func_end fwide
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fwide
|
||||
fwide:
|
||||
cmp r0, #0x0
|
||||
beq _020E500C
|
||||
ldr r3, [r0, #0x4]
|
||||
mov r2, r3, lsl #0x16
|
||||
movs r2, r2, lsr #0x1d
|
||||
bne _020E5014
|
||||
_020E500C:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020E5014:
|
||||
mov r2, r3, lsl #0x14
|
||||
movs r2, r2, lsr #0x1e
|
||||
beq _020E5034
|
||||
cmp r2, #0x1
|
||||
beq _020E505C
|
||||
cmp r2, #0x2
|
||||
moveq r1, #0x1
|
||||
b _020E5060
|
||||
_020E5034:
|
||||
cmp r1, #0x0
|
||||
ble _020E504C
|
||||
bic r2, r3, #0xc00
|
||||
orr r2, r2, #0x800
|
||||
str r2, [r0, #0x4]
|
||||
b _020E5060
|
||||
_020E504C:
|
||||
biclt r2, r3, #0xc00
|
||||
orrlt r2, r2, #0x400
|
||||
strlt r2, [r0, #0x4]
|
||||
b _020E5060
|
||||
_020E505C:
|
||||
mvn r1, #0x0
|
||||
_020E5060:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
arm_func_end fwide
|
||||
|
|
|
|||
|
|
@ -1,61 +1,61 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.rodata
|
||||
|
||||
.global __wlower_mapC
|
||||
__wlower_mapC: ; 0x02104444
|
||||
.short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007
|
||||
.short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
|
||||
.short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017
|
||||
.short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
|
||||
.short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027
|
||||
.short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
|
||||
.short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037
|
||||
.short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F
|
||||
.short 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067
|
||||
.short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F
|
||||
.short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077
|
||||
.short 0x0078, 0x0079, 0x007A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F
|
||||
.short 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067
|
||||
.short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F
|
||||
.short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077
|
||||
.short 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F
|
||||
|
||||
.global __wctype_mapC
|
||||
__wctype_mapC: ; 0x02104544
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458
|
||||
.short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
|
||||
|
||||
.global __wupper_mapC
|
||||
__wupper_mapC: ; 0x02104644
|
||||
.short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007
|
||||
.short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
|
||||
.short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017
|
||||
.short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
|
||||
.short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027
|
||||
.short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
|
||||
.short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037
|
||||
.short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F
|
||||
.short 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047
|
||||
.short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F
|
||||
.short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057
|
||||
.short 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F
|
||||
.short 0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047
|
||||
.short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F
|
||||
.short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057
|
||||
.short 0x0058, 0x0059, 0x005A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.rodata
|
||||
|
||||
.global __wlower_mapC
|
||||
__wlower_mapC: ; 0x02104444
|
||||
.short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007
|
||||
.short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
|
||||
.short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017
|
||||
.short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
|
||||
.short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027
|
||||
.short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
|
||||
.short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037
|
||||
.short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F
|
||||
.short 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067
|
||||
.short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F
|
||||
.short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077
|
||||
.short 0x0078, 0x0079, 0x007A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F
|
||||
.short 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067
|
||||
.short 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F
|
||||
.short 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077
|
||||
.short 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F
|
||||
|
||||
.global __wctype_mapC
|
||||
__wctype_mapC: ; 0x02104544
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
|
||||
.short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458
|
||||
.short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
|
||||
.short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
|
||||
.short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
|
||||
.short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
|
||||
|
||||
.global __wupper_mapC
|
||||
__wupper_mapC: ; 0x02104644
|
||||
.short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007
|
||||
.short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F
|
||||
.short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017
|
||||
.short 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F
|
||||
.short 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027
|
||||
.short 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F
|
||||
.short 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037
|
||||
.short 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F
|
||||
.short 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047
|
||||
.short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F
|
||||
.short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057
|
||||
.short 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F
|
||||
.short 0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047
|
||||
.short 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F
|
||||
.short 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057
|
||||
.short 0x0058, 0x0059, 0x005A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start wmemcpy
|
||||
wmemcpy: ; 0x020E5068
|
||||
ldr ip, _020E5074 ; =memcpy
|
||||
mov r2, r2, lsl #0x1
|
||||
bx r12
|
||||
.balign 4
|
||||
_020E5074: .word memcpy
|
||||
arm_func_end wmemcpy
|
||||
|
||||
arm_func_start wmemchr
|
||||
wmemchr:
|
||||
cmp r2, #0x0
|
||||
beq _020E5098
|
||||
_020E5080:
|
||||
ldrh r3, [r0, #0x0]
|
||||
cmp r3, r1
|
||||
bxeq lr
|
||||
add r0, r0, #0x2
|
||||
subs r2, r2, #0x1
|
||||
bne _020E5080
|
||||
_020E5098:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end wmemchr
|
||||
|
||||
exception wmemcpy, 17, 0x00000000
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start wmemcpy
|
||||
wmemcpy: ; 0x020E5068
|
||||
ldr ip, _020E5074 ; =memcpy
|
||||
mov r2, r2, lsl #0x1
|
||||
bx r12
|
||||
.balign 4
|
||||
_020E5074: .word memcpy
|
||||
arm_func_end wmemcpy
|
||||
|
||||
arm_func_start wmemchr
|
||||
wmemchr:
|
||||
cmp r2, #0x0
|
||||
beq _020E5098
|
||||
_020E5080:
|
||||
ldrh r3, [r0, #0x0]
|
||||
cmp r3, r1
|
||||
bxeq lr
|
||||
add r0, r0, #0x2
|
||||
subs r2, r2, #0x1
|
||||
bne _020E5080
|
||||
_020E5098:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
arm_func_end wmemchr
|
||||
|
||||
exception wmemcpy, 17, 0x00000000
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,48 +1,48 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start wcslen
|
||||
wcslen: ; 0x020E701C
|
||||
mvn r2, #0x0
|
||||
_020E7020:
|
||||
ldrh r1, [r0], #0x2
|
||||
add r2, r2, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E7020
|
||||
mov r0, r2
|
||||
bx lr
|
||||
arm_func_end wcslen
|
||||
|
||||
arm_func_start wcscpy
|
||||
wcscpy: ; 0x020E7038
|
||||
mov r3, r0
|
||||
_020E703C:
|
||||
ldrh r2, [r1], #0x2
|
||||
mov r12, r3
|
||||
strh r2, [r3], #0x2
|
||||
ldrh r2, [r12, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020E703C
|
||||
bx lr
|
||||
arm_func_end wcscpy
|
||||
|
||||
arm_func_start wcschr
|
||||
wcschr: ; 0x020E7058
|
||||
ldrh r2, [r0], #0x2
|
||||
cmp r2, #0x0
|
||||
beq _020E707C
|
||||
_020E7064:
|
||||
cmp r2, r1
|
||||
subeq r0, r0, #0x2
|
||||
bxeq lr
|
||||
ldrh r2, [r0], #0x2
|
||||
cmp r2, #0x0
|
||||
bne _020E7064
|
||||
_020E707C:
|
||||
cmp r1, #0x0
|
||||
movne r0, #0x0
|
||||
subeq r0, r0, #0x2
|
||||
bx lr
|
||||
arm_func_end wcschr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start wcslen
|
||||
wcslen: ; 0x020E701C
|
||||
mvn r2, #0x0
|
||||
_020E7020:
|
||||
ldrh r1, [r0], #0x2
|
||||
add r2, r2, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020E7020
|
||||
mov r0, r2
|
||||
bx lr
|
||||
arm_func_end wcslen
|
||||
|
||||
arm_func_start wcscpy
|
||||
wcscpy: ; 0x020E7038
|
||||
mov r3, r0
|
||||
_020E703C:
|
||||
ldrh r2, [r1], #0x2
|
||||
mov r12, r3
|
||||
strh r2, [r3], #0x2
|
||||
ldrh r2, [r12, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020E703C
|
||||
bx lr
|
||||
arm_func_end wcscpy
|
||||
|
||||
arm_func_start wcschr
|
||||
wcschr: ; 0x020E7058
|
||||
ldrh r2, [r0], #0x2
|
||||
cmp r2, #0x0
|
||||
beq _020E707C
|
||||
_020E7064:
|
||||
cmp r2, r1
|
||||
subeq r0, r0, #0x2
|
||||
bxeq lr
|
||||
ldrh r2, [r0], #0x2
|
||||
cmp r2, #0x0
|
||||
bne _020E7064
|
||||
_020E707C:
|
||||
cmp r1, #0x0
|
||||
movne r0, #0x0
|
||||
subeq r0, r0, #0x2
|
||||
bx lr
|
||||
arm_func_end wcschr
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,18 +1,18 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start copysign
|
||||
copysign: ; 0x020E8214
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r1, [sp, #0x4]
|
||||
ldr r0, [sp, #0xc]
|
||||
bic r1, r1, #0x80000000
|
||||
and r0, r0, #0x80000000
|
||||
orr r1, r1, r0
|
||||
ldr r0, [sp, #0x0]
|
||||
str r1, [sp, #0x4]
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end copysign
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start copysign
|
||||
copysign: ; 0x020E8214
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r1, [sp, #0x4]
|
||||
ldr r0, [sp, #0xc]
|
||||
bic r1, r1, #0x80000000
|
||||
and r0, r0, #0x80000000
|
||||
orr r1, r1, r0
|
||||
ldr r0, [sp, #0x0]
|
||||
str r1, [sp, #0x4]
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end copysign
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fabs
|
||||
fabs: ; 0x020E823C
|
||||
stmdb sp!, {r0-r3}
|
||||
add r2, sp, #0x0
|
||||
ldr r1, [r2, #0x4]
|
||||
ldr r0, [sp, #0x0]
|
||||
bic r1, r1, #0x80000000
|
||||
str r1, [r2, #0x4]
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end fabs
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start fabs
|
||||
fabs: ; 0x020E823C
|
||||
stmdb sp!, {r0-r3}
|
||||
add r2, sp, #0x0
|
||||
ldr r1, [r2, #0x4]
|
||||
ldr r0, [sp, #0x0]
|
||||
bic r1, r1, #0x80000000
|
||||
str r1, [r2, #0x4]
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end fabs
|
||||
|
|
|
|||
|
|
@ -1,61 +1,61 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start frexp
|
||||
frexp: ; 0x020E825C
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r0, _020E8308 ; =0x7FF00000
|
||||
mov r4, r2
|
||||
bic r3, r1, #0x80000000
|
||||
mov r2, #0x0
|
||||
str r2, [r4, #0x0]
|
||||
cmp r3, r0
|
||||
ldr r0, [sp, #0x8]
|
||||
bge _020E8290
|
||||
orrs r0, r3, r0
|
||||
bne _020E82A4
|
||||
_020E8290:
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E82A4:
|
||||
cmp r3, #0x100000
|
||||
bge _020E82D0
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r3, _020E830C ; =0x43500000
|
||||
bl _dmul
|
||||
mvn r2, #0x35
|
||||
str r0, [sp, #0x8]
|
||||
str r1, [sp, #0xc]
|
||||
str r2, [r4, #0x0]
|
||||
bic r3, r1, #0x80000000
|
||||
_020E82D0:
|
||||
ldr r2, _020E8310 ; =0x800FFFFF
|
||||
ldr r0, _020E8314 ; =0xFFFFFC02
|
||||
and r1, r1, r2
|
||||
orr r1, r1, #0xfe00000
|
||||
orr r1, r1, #0x30000000
|
||||
ldr r2, [r4, #0x0]
|
||||
add r0, r0, r3, asr #0x14
|
||||
add r2, r2, r0
|
||||
ldr r0, [sp, #0x8]
|
||||
str r2, [r4, #0x0]
|
||||
str r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E8308: .word 0x7FF00000
|
||||
_020E830C: .word 0x43500000
|
||||
_020E8310: .word 0x800FFFFF
|
||||
_020E8314: .word 0xFFFFFC02
|
||||
arm_func_end frexp
|
||||
|
||||
exception frexp, 189, 0x00300120
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start frexp
|
||||
frexp: ; 0x020E825C
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r0, _020E8308 ; =0x7FF00000
|
||||
mov r4, r2
|
||||
bic r3, r1, #0x80000000
|
||||
mov r2, #0x0
|
||||
str r2, [r4, #0x0]
|
||||
cmp r3, r0
|
||||
ldr r0, [sp, #0x8]
|
||||
bge _020E8290
|
||||
orrs r0, r3, r0
|
||||
bne _020E82A4
|
||||
_020E8290:
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E82A4:
|
||||
cmp r3, #0x100000
|
||||
bge _020E82D0
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r3, _020E830C ; =0x43500000
|
||||
bl _dmul
|
||||
mvn r2, #0x35
|
||||
str r0, [sp, #0x8]
|
||||
str r1, [sp, #0xc]
|
||||
str r2, [r4, #0x0]
|
||||
bic r3, r1, #0x80000000
|
||||
_020E82D0:
|
||||
ldr r2, _020E8310 ; =0x800FFFFF
|
||||
ldr r0, _020E8314 ; =0xFFFFFC02
|
||||
and r1, r1, r2
|
||||
orr r1, r1, #0xfe00000
|
||||
orr r1, r1, #0x30000000
|
||||
ldr r2, [r4, #0x0]
|
||||
add r0, r0, r3, asr #0x14
|
||||
add r2, r2, r0
|
||||
ldr r0, [sp, #0x8]
|
||||
str r2, [r4, #0x0]
|
||||
str r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E8308: .word 0x7FF00000
|
||||
_020E830C: .word 0x43500000
|
||||
_020E8310: .word 0x800FFFFF
|
||||
_020E8314: .word 0xFFFFFC02
|
||||
arm_func_end frexp
|
||||
|
||||
exception frexp, 189, 0x00300120
|
||||
|
|
|
|||
|
|
@ -1,166 +1,166 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ldexp
|
||||
ldexp: ; 0x020E8318
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r4, r2
|
||||
bl __fpclassifyf
|
||||
cmp r0, #0x2
|
||||
ble _020E8350
|
||||
mov r0, #0x0
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
mov r1, r0
|
||||
bl _deq
|
||||
bne _020E8364
|
||||
_020E8350:
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8364:
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8538 ; =0x7FF00000
|
||||
ldr r1, [sp, #0x8]
|
||||
and r0, r3, r0
|
||||
movs r12, r0, asr #0x14
|
||||
bne _020E83F0
|
||||
bic r0, r3, #0x80000000
|
||||
orrs r0, r1, r0
|
||||
ldreq r0, [sp, #0x8]
|
||||
ldreq r1, [sp, #0xc]
|
||||
ldmeqia sp!, {r4,lr}
|
||||
addeq sp, sp, #0x10
|
||||
bxeq lr
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r3, _020E853C ; =0x43500000
|
||||
mov r2, #0x0
|
||||
bl _dmul
|
||||
mov r3, r1
|
||||
ldr r1, _020E8538 ; =0x7FF00000
|
||||
ldr ip, _020E8540 ; =0xFFFF3CB0
|
||||
and r1, r3, r1
|
||||
mov r2, r0
|
||||
mov r0, r1, asr #0x14
|
||||
str r2, [sp, #0x8]
|
||||
str r3, [sp, #0xc]
|
||||
cmp r4, r12
|
||||
sub r12, r0, #0x36
|
||||
bge _020E83F0
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E83F0:
|
||||
ldr r0, _020E854C ; =0x000007FF
|
||||
cmp r12, r0
|
||||
bne _020E841C
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
bl _dadd
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E841C:
|
||||
add r2, r12, r4
|
||||
sub r0, r0, #0x1
|
||||
cmp r2, r0
|
||||
ble _020E8460
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8460:
|
||||
cmp r2, #0x0
|
||||
ble _020E8488
|
||||
ldr r1, _020E8558 ; =0x800FFFFF
|
||||
ldr r0, [sp, #0x8]
|
||||
and r1, r3, r1
|
||||
orr r1, r1, r2, lsl #0x14
|
||||
str r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8488:
|
||||
mvn r0, #0x35
|
||||
cmp r2, r0
|
||||
bgt _020E8508
|
||||
ldr r0, _020E855C ; =0x0000C350
|
||||
cmp r4, r0
|
||||
ble _020E84D4
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E84D4:
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8508:
|
||||
ldr r0, _020E8558 ; =0x800FFFFF
|
||||
add r1, r2, #0x36
|
||||
and r0, r3, r0
|
||||
orr r3, r0, r1, lsl #0x14
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r1, _020E8560 ; =0x3C900000
|
||||
mov r0, #0x0
|
||||
str r3, [sp, #0xc]
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E8538: .word 0x7FF00000
|
||||
_020E853C: .word 0x43500000
|
||||
_020E8540: .word 0xFFFF3CB0
|
||||
_020E8544: .word 0xC2F8F359
|
||||
_020E8548: .word 0x01A56E1F
|
||||
_020E854C: .word 0x000007FF
|
||||
_020E8550: .word 0x8800759C
|
||||
_020E8554: .word 0x7E37E43C
|
||||
_020E8558: .word 0x800FFFFF
|
||||
_020E855C: .word 0x0000C350
|
||||
_020E8560: .word 0x3C900000
|
||||
arm_func_end ldexp
|
||||
|
||||
exception ldexp, 589, 0x00300120
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ldexp
|
||||
ldexp: ; 0x020E8318
|
||||
stmdb sp!, {r0-r3}
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r4, r2
|
||||
bl __fpclassifyf
|
||||
cmp r0, #0x2
|
||||
ble _020E8350
|
||||
mov r0, #0x0
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
mov r1, r0
|
||||
bl _deq
|
||||
bne _020E8364
|
||||
_020E8350:
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8364:
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8538 ; =0x7FF00000
|
||||
ldr r1, [sp, #0x8]
|
||||
and r0, r3, r0
|
||||
movs r12, r0, asr #0x14
|
||||
bne _020E83F0
|
||||
bic r0, r3, #0x80000000
|
||||
orrs r0, r1, r0
|
||||
ldreq r0, [sp, #0x8]
|
||||
ldreq r1, [sp, #0xc]
|
||||
ldmeqia sp!, {r4,lr}
|
||||
addeq sp, sp, #0x10
|
||||
bxeq lr
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
ldr r3, _020E853C ; =0x43500000
|
||||
mov r2, #0x0
|
||||
bl _dmul
|
||||
mov r3, r1
|
||||
ldr r1, _020E8538 ; =0x7FF00000
|
||||
ldr ip, _020E8540 ; =0xFFFF3CB0
|
||||
and r1, r3, r1
|
||||
mov r2, r0
|
||||
mov r0, r1, asr #0x14
|
||||
str r2, [sp, #0x8]
|
||||
str r3, [sp, #0xc]
|
||||
cmp r4, r12
|
||||
sub r12, r0, #0x36
|
||||
bge _020E83F0
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E83F0:
|
||||
ldr r0, _020E854C ; =0x000007FF
|
||||
cmp r12, r0
|
||||
bne _020E841C
|
||||
ldr r0, [sp, #0x8]
|
||||
ldr r1, [sp, #0xc]
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
bl _dadd
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E841C:
|
||||
add r2, r12, r4
|
||||
sub r0, r0, #0x1
|
||||
cmp r2, r0
|
||||
ble _020E8460
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8460:
|
||||
cmp r2, #0x0
|
||||
ble _020E8488
|
||||
ldr r1, _020E8558 ; =0x800FFFFF
|
||||
ldr r0, [sp, #0x8]
|
||||
and r1, r3, r1
|
||||
orr r1, r1, r2, lsl #0x14
|
||||
str r1, [sp, #0xc]
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8488:
|
||||
mvn r0, #0x35
|
||||
cmp r2, r0
|
||||
bgt _020E8508
|
||||
ldr r0, _020E855C ; =0x0000C350
|
||||
cmp r4, r0
|
||||
ble _020E84D4
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8550 ; =0x8800759C
|
||||
ldr r1, _020E8554 ; =0x7E37E43C
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E84D4:
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r3, [sp, #0xc]
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl copysign
|
||||
mov r2, r0
|
||||
mov r3, r1
|
||||
ldr r0, _020E8544 ; =0xC2F8F359
|
||||
ldr r1, _020E8548 ; =0x01A56E1F
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
_020E8508:
|
||||
ldr r0, _020E8558 ; =0x800FFFFF
|
||||
add r1, r2, #0x36
|
||||
and r0, r3, r0
|
||||
orr r3, r0, r1, lsl #0x14
|
||||
ldr r2, [sp, #0x8]
|
||||
ldr r1, _020E8560 ; =0x3C900000
|
||||
mov r0, #0x0
|
||||
str r3, [sp, #0xc]
|
||||
bl _dmul
|
||||
ldmia sp!, {r4,lr}
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E8538: .word 0x7FF00000
|
||||
_020E853C: .word 0x43500000
|
||||
_020E8540: .word 0xFFFF3CB0
|
||||
_020E8544: .word 0xC2F8F359
|
||||
_020E8548: .word 0x01A56E1F
|
||||
_020E854C: .word 0x000007FF
|
||||
_020E8550: .word 0x8800759C
|
||||
_020E8554: .word 0x7E37E43C
|
||||
_020E8558: .word 0x800FFFFF
|
||||
_020E855C: .word 0x0000C350
|
||||
_020E8560: .word 0x3C900000
|
||||
arm_func_end ldexp
|
||||
|
||||
exception ldexp, 589, 0x00300120
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start pow
|
||||
pow: ; 0x020E8564
|
||||
ldr ip, _020E856C ; =__ieee754_pow
|
||||
bx r12
|
||||
.balign 4
|
||||
_020E856C: .word __ieee754_pow
|
||||
arm_func_end pow
|
||||
|
||||
exception pow, 13, 0x00000000
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start pow
|
||||
pow: ; 0x020E8564
|
||||
ldr ip, _020E856C ; =__ieee754_pow
|
||||
bx r12
|
||||
.balign 4
|
||||
_020E856C: .word __ieee754_pow
|
||||
arm_func_end pow
|
||||
|
||||
exception pow, 13, 0x00000000
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,107 +1,107 @@
|
|||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __msl_generic_count_bits64
|
||||
__msl_generic_count_bits64: ; 0x020E998C
|
||||
mov r3, r0, lsr #0x1
|
||||
ldr r2, _020E9A14 ; =0x55555555
|
||||
orr r3, r3, r1, lsl #0x1f
|
||||
and r3, r3, r2
|
||||
subs r12, r0, r3
|
||||
and r2, r2, r1, lsr #0x1
|
||||
ldr r0, _020E9A18 ; =0x33333333
|
||||
sbc r3, r1, r2
|
||||
mov r1, r12, lsr #0x2
|
||||
orr r1, r1, r3, lsl #0x1e
|
||||
and r2, r12, r0
|
||||
and r1, r1, r0
|
||||
adds r2, r2, r1
|
||||
and r1, r3, r0
|
||||
and r0, r0, r3, lsr #0x2
|
||||
adc r1, r1, r0
|
||||
mov r0, r2, lsr #0x4
|
||||
orr r0, r0, r1, lsl #0x1c
|
||||
adds r2, r2, r0
|
||||
ldr r0, _020E9A1C ; =0x0F0F0F0F
|
||||
adc r1, r1, r1, lsr #0x4
|
||||
and r3, r2, r0
|
||||
and r2, r1, r0
|
||||
mov r0, r3, lsr #0x8
|
||||
orr r0, r0, r2, lsl #0x18
|
||||
adds r1, r3, r0
|
||||
adc r2, r2, r2, lsr #0x8
|
||||
mov r0, r1, lsr #0x10
|
||||
orr r0, r0, r2, lsl #0x10
|
||||
adds r1, r1, r0
|
||||
adc r0, r2, r2, lsr #0x10
|
||||
adds r0, r1, r0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9A14: .word 0x55555555
|
||||
_020E9A18: .word 0x33333333
|
||||
_020E9A1C: .word 0x0F0F0F0F
|
||||
arm_func_end __msl_generic_count_bits64
|
||||
|
||||
arm_func_start __signbitf
|
||||
__signbitf:
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r0, [sp, #0x4]
|
||||
and r0, r0, #0x80000000
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end __signbitf
|
||||
|
||||
arm_func_start __fpclassifyf
|
||||
__fpclassifyf: ; 0x020E9A34
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r2, [sp, #0x4]
|
||||
ldr r0, _020E9A9C ; =0x7FF00000
|
||||
ands r1, r2, r0
|
||||
beq _020E9A70
|
||||
cmp r1, r0
|
||||
bne _020E9A90
|
||||
ldr r0, _020E9AA0 ; =0x000FFFFF
|
||||
tst r2, r0
|
||||
ldreq r0, [sp, #0x0]
|
||||
add sp, sp, #0x10
|
||||
cmpeq r0, #0x0
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x2
|
||||
bx lr
|
||||
_020E9A70:
|
||||
ldr r0, _020E9AA0 ; =0x000FFFFF
|
||||
tst r2, r0
|
||||
ldreq r0, [sp, #0x0]
|
||||
add sp, sp, #0x10
|
||||
cmpeq r0, #0x0
|
||||
movne r0, #0x5
|
||||
moveq r0, #0x3
|
||||
bx lr
|
||||
_020E9A90:
|
||||
mov r0, #0x4
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9A9C: .word 0x7FF00000
|
||||
_020E9AA0: .word 0x000FFFFF
|
||||
arm_func_end __fpclassifyf
|
||||
|
||||
arm_func_start scalbn
|
||||
scalbn: ; 0x020E9AA4
|
||||
stmdb sp!, {r3-r4,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r4, r2
|
||||
add r2, sp, #0x0
|
||||
bl frexp
|
||||
ldr r2, [sp, #0x0]
|
||||
add r2, r2, r4
|
||||
str r2, [sp, #0x0]
|
||||
bl ldexp
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r3-r4,pc}
|
||||
arm_func_end scalbn
|
||||
|
||||
exception scalbn, 45, 0x00200100
|
||||
.include "global.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start __msl_generic_count_bits64
|
||||
__msl_generic_count_bits64: ; 0x020E998C
|
||||
mov r3, r0, lsr #0x1
|
||||
ldr r2, _020E9A14 ; =0x55555555
|
||||
orr r3, r3, r1, lsl #0x1f
|
||||
and r3, r3, r2
|
||||
subs r12, r0, r3
|
||||
and r2, r2, r1, lsr #0x1
|
||||
ldr r0, _020E9A18 ; =0x33333333
|
||||
sbc r3, r1, r2
|
||||
mov r1, r12, lsr #0x2
|
||||
orr r1, r1, r3, lsl #0x1e
|
||||
and r2, r12, r0
|
||||
and r1, r1, r0
|
||||
adds r2, r2, r1
|
||||
and r1, r3, r0
|
||||
and r0, r0, r3, lsr #0x2
|
||||
adc r1, r1, r0
|
||||
mov r0, r2, lsr #0x4
|
||||
orr r0, r0, r1, lsl #0x1c
|
||||
adds r2, r2, r0
|
||||
ldr r0, _020E9A1C ; =0x0F0F0F0F
|
||||
adc r1, r1, r1, lsr #0x4
|
||||
and r3, r2, r0
|
||||
and r2, r1, r0
|
||||
mov r0, r3, lsr #0x8
|
||||
orr r0, r0, r2, lsl #0x18
|
||||
adds r1, r3, r0
|
||||
adc r2, r2, r2, lsr #0x8
|
||||
mov r0, r1, lsr #0x10
|
||||
orr r0, r0, r2, lsl #0x10
|
||||
adds r1, r1, r0
|
||||
adc r0, r2, r2, lsr #0x10
|
||||
adds r0, r1, r0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9A14: .word 0x55555555
|
||||
_020E9A18: .word 0x33333333
|
||||
_020E9A1C: .word 0x0F0F0F0F
|
||||
arm_func_end __msl_generic_count_bits64
|
||||
|
||||
arm_func_start __signbitf
|
||||
__signbitf:
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r0, [sp, #0x4]
|
||||
and r0, r0, #0x80000000
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
arm_func_end __signbitf
|
||||
|
||||
arm_func_start __fpclassifyf
|
||||
__fpclassifyf: ; 0x020E9A34
|
||||
stmdb sp!, {r0-r3}
|
||||
ldr r2, [sp, #0x4]
|
||||
ldr r0, _020E9A9C ; =0x7FF00000
|
||||
ands r1, r2, r0
|
||||
beq _020E9A70
|
||||
cmp r1, r0
|
||||
bne _020E9A90
|
||||
ldr r0, _020E9AA0 ; =0x000FFFFF
|
||||
tst r2, r0
|
||||
ldreq r0, [sp, #0x0]
|
||||
add sp, sp, #0x10
|
||||
cmpeq r0, #0x0
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x2
|
||||
bx lr
|
||||
_020E9A70:
|
||||
ldr r0, _020E9AA0 ; =0x000FFFFF
|
||||
tst r2, r0
|
||||
ldreq r0, [sp, #0x0]
|
||||
add sp, sp, #0x10
|
||||
cmpeq r0, #0x0
|
||||
movne r0, #0x5
|
||||
moveq r0, #0x3
|
||||
bx lr
|
||||
_020E9A90:
|
||||
mov r0, #0x4
|
||||
add sp, sp, #0x10
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9A9C: .word 0x7FF00000
|
||||
_020E9AA0: .word 0x000FFFFF
|
||||
arm_func_end __fpclassifyf
|
||||
|
||||
arm_func_start scalbn
|
||||
scalbn: ; 0x020E9AA4
|
||||
stmdb sp!, {r3-r4,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r4, r2
|
||||
add r2, sp, #0x0
|
||||
bl frexp
|
||||
ldr r2, [sp, #0x0]
|
||||
add r2, r2, r4
|
||||
str r2, [sp, #0x0]
|
||||
bl ldexp
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r3-r4,pc}
|
||||
arm_func_end scalbn
|
||||
|
||||
exception scalbn, 45, 0x00200100
|
||||
|
|
|
|||
|
|
@ -1,78 +1,78 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sys_writec
|
||||
sys_writec: ; 0x020EC5D0
|
||||
str lr, [sp, #-0x4]!
|
||||
mov r1, r0
|
||||
mov r0, #0x3
|
||||
swi 0x123456
|
||||
ldr pc, [sp], #0x4
|
||||
|
||||
arm_func_start sys_readc
|
||||
sys_readc: ; 0x020EC5E4
|
||||
str lr, [sp, #-0x4]!
|
||||
mov r1, #0x0
|
||||
mov r0, #0x7
|
||||
swi 0x123456
|
||||
ldr pc, [sp], #0x4
|
||||
|
||||
arm_func_start sys_exit
|
||||
sys_exit: ; 0x020EC5F8
|
||||
mov r1, #0x0
|
||||
mov r0, #0x18
|
||||
swi 0x123456
|
||||
mov pc, lr
|
||||
|
||||
arm_func_start __read_console
|
||||
__read_console: ; 0x020EC608
|
||||
stmdb sp!, {r3-r7,lr}
|
||||
mov r6, r2
|
||||
ldr r5, [r6, #0x0]
|
||||
mov r7, r1
|
||||
cmp r5, #0x0
|
||||
mov r4, #0x0
|
||||
bls _020EC650
|
||||
_020EC624:
|
||||
bl sys_readc
|
||||
and r1, r0, #0xff
|
||||
cmp r1, #0xd
|
||||
strb r0, [r7, r4]
|
||||
cmpne r1, #0xa
|
||||
addeq r0, r4, #0x1
|
||||
streq r0, [r6, #0x0]
|
||||
beq _020EC650
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r5
|
||||
blo _020EC624
|
||||
_020EC650:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r7,pc}
|
||||
|
||||
arm_func_start __write_console
|
||||
__write_console: ; 0x020EC658
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr r5, [r2, #0x0]
|
||||
mov r6, r1
|
||||
cmp r5, #0x0
|
||||
mov r4, #0x0
|
||||
bls _020EC684
|
||||
_020EC670:
|
||||
add r0, r6, r4
|
||||
bl sys_writec
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r5
|
||||
blo _020EC670
|
||||
_020EC684:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,pc}
|
||||
|
||||
arm_func_start __close_console
|
||||
__close_console: ; 0x020EC68C
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
|
||||
exception __read_console, 81, 0x00300F00
|
||||
exception __write_console, 53, 0x00200700
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sys_writec
|
||||
sys_writec: ; 0x020EC5D0
|
||||
str lr, [sp, #-0x4]!
|
||||
mov r1, r0
|
||||
mov r0, #0x3
|
||||
swi 0x123456
|
||||
ldr pc, [sp], #0x4
|
||||
|
||||
arm_func_start sys_readc
|
||||
sys_readc: ; 0x020EC5E4
|
||||
str lr, [sp, #-0x4]!
|
||||
mov r1, #0x0
|
||||
mov r0, #0x7
|
||||
swi 0x123456
|
||||
ldr pc, [sp], #0x4
|
||||
|
||||
arm_func_start sys_exit
|
||||
sys_exit: ; 0x020EC5F8
|
||||
mov r1, #0x0
|
||||
mov r0, #0x18
|
||||
swi 0x123456
|
||||
mov pc, lr
|
||||
|
||||
arm_func_start __read_console
|
||||
__read_console: ; 0x020EC608
|
||||
stmdb sp!, {r3-r7,lr}
|
||||
mov r6, r2
|
||||
ldr r5, [r6, #0x0]
|
||||
mov r7, r1
|
||||
cmp r5, #0x0
|
||||
mov r4, #0x0
|
||||
bls _020EC650
|
||||
_020EC624:
|
||||
bl sys_readc
|
||||
and r1, r0, #0xff
|
||||
cmp r1, #0xd
|
||||
strb r0, [r7, r4]
|
||||
cmpne r1, #0xa
|
||||
addeq r0, r4, #0x1
|
||||
streq r0, [r6, #0x0]
|
||||
beq _020EC650
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r5
|
||||
blo _020EC624
|
||||
_020EC650:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r3-r7,pc}
|
||||
|
||||
arm_func_start __write_console
|
||||
__write_console: ; 0x020EC658
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr r5, [r2, #0x0]
|
||||
mov r6, r1
|
||||
cmp r5, #0x0
|
||||
mov r4, #0x0
|
||||
bls _020EC684
|
||||
_020EC670:
|
||||
add r0, r6, r4
|
||||
bl sys_writec
|
||||
add r4, r4, #0x1
|
||||
cmp r4, r5
|
||||
blo _020EC670
|
||||
_020EC684:
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,pc}
|
||||
|
||||
arm_func_start __close_console
|
||||
__close_console: ; 0x020EC68C
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
|
||||
exception __read_console, 81, 0x00300F00
|
||||
exception __write_console, 53, 0x00200700
|
||||
|
|
|
|||
|
|
@ -1,54 +1,54 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __global_destructor_chain
|
||||
__global_destructor_chain: ; 0x021D74C8
|
||||
.space 0xC
|
||||
|
||||
.text
|
||||
|
||||
.extern __sinit__
|
||||
arm_func_start __call_static_initializers
|
||||
__call_static_initializers: ; 0x020EC694
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r4, _020EC6BC ; =__sinit__
|
||||
b _020EC6A8
|
||||
_020EC6A0:
|
||||
blx r0
|
||||
add r4, r4, #0x4
|
||||
_020EC6A8:
|
||||
cmp r4, #0x0
|
||||
ldrne r0, [r4, #0x0]
|
||||
cmpne r0, #0x0
|
||||
bne _020EC6A0
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020EC6BC: .word __sinit__
|
||||
|
||||
arm_func_start __destroy_global_chain
|
||||
__destroy_global_chain: ; 0x020EC6C0
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
ldr r4, _020EC700 ; =__global_destructor_chain
|
||||
ldr r2, [r4, #0x0]
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
_020EC6D4: ; 0x020EC6D4
|
||||
mvn r5, #0x0
|
||||
_020EC6D8:
|
||||
ldr r0, [r2, #0x0]
|
||||
mov r1, r5
|
||||
str r0, [r4, #0x0]
|
||||
ldr r0, [r2, #0x8]
|
||||
ldr r2, [r2, #0x4]
|
||||
blx r2
|
||||
ldr r2, [r4, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020EC6D8
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020EC700: .word __global_destructor_chain
|
||||
|
||||
exception __call_static_initializers, 45, 0x00100100
|
||||
exception __destroy_global_chain, 69, 0x00200300
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.bss
|
||||
|
||||
.global __global_destructor_chain
|
||||
__global_destructor_chain: ; 0x021D74C8
|
||||
.space 0xC
|
||||
|
||||
.text
|
||||
|
||||
.extern __sinit__
|
||||
arm_func_start __call_static_initializers
|
||||
__call_static_initializers: ; 0x020EC694
|
||||
stmdb sp!, {r4,lr}
|
||||
ldr r4, _020EC6BC ; =__sinit__
|
||||
b _020EC6A8
|
||||
_020EC6A0:
|
||||
blx r0
|
||||
add r4, r4, #0x4
|
||||
_020EC6A8:
|
||||
cmp r4, #0x0
|
||||
ldrne r0, [r4, #0x0]
|
||||
cmpne r0, #0x0
|
||||
bne _020EC6A0
|
||||
ldmia sp!, {r4,pc}
|
||||
.balign 4
|
||||
_020EC6BC: .word __sinit__
|
||||
|
||||
arm_func_start __destroy_global_chain
|
||||
__destroy_global_chain: ; 0x020EC6C0
|
||||
stmdb sp!, {r3-r5,lr}
|
||||
ldr r4, _020EC700 ; =__global_destructor_chain
|
||||
ldr r2, [r4, #0x0]
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r3-r5,pc}
|
||||
_020EC6D4: ; 0x020EC6D4
|
||||
mvn r5, #0x0
|
||||
_020EC6D8:
|
||||
ldr r0, [r2, #0x0]
|
||||
mov r1, r5
|
||||
str r0, [r4, #0x0]
|
||||
ldr r0, [r2, #0x8]
|
||||
ldr r2, [r2, #0x4]
|
||||
blx r2
|
||||
ldr r2, [r4, #0x0]
|
||||
cmp r2, #0x0
|
||||
bne _020EC6D8
|
||||
ldmia sp!, {r3-r5,pc}
|
||||
.balign 4
|
||||
_020EC700: .word __global_destructor_chain
|
||||
|
||||
exception __call_static_initializers, 45, 0x00100100
|
||||
exception __destroy_global_chain, 69, 0x00200300
|
||||
|
|
|
|||
|
|
@ -1,231 +1,231 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __dsub_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dadd
|
||||
_dadd:
|
||||
stmdb sp!, {r4,lr}
|
||||
eors r12, r1, r3
|
||||
eormi r3, r3, #0x80000000
|
||||
bmi __dsub_start
|
||||
.global __dadd_start
|
||||
__dadd_start:
|
||||
subs r12, r0, r2
|
||||
sbcs lr, r1, r3
|
||||
bhs _020E9B70
|
||||
adds r2, r2, r12
|
||||
adc r3, r3, lr
|
||||
subs r0, r0, r12
|
||||
sbc r1, r1, lr
|
||||
_020E9B70:
|
||||
mov lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
orr r1, lr, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
beq _020E9C6C
|
||||
mov r4, r3, lsr #0x14
|
||||
orr r3, lr, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs lr, r4, lsl #0x15
|
||||
beq _020E9CB4
|
||||
_020E9BA8:
|
||||
subs r4, r12, r4
|
||||
beq _020E9C00
|
||||
cmp r4, #0x20
|
||||
ble _020E9BE4
|
||||
cmp r4, #0x38
|
||||
movge r4, #0x3f
|
||||
sub r4, r4, #0x20
|
||||
rsb lr, r4, #0x20
|
||||
orrs lr, r2, r3, lsl lr
|
||||
mov r2, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, #0x0
|
||||
blo _020E9C28
|
||||
b _020E9C0C
|
||||
_020E9BE4:
|
||||
rsb lr, r4, #0x20
|
||||
movs lr, r2, lsl lr
|
||||
rsb lr, r4, #0x20
|
||||
mov r2, r2, lsr r4
|
||||
orr r2, r2, r3, lsl lr
|
||||
mov r3, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
_020E9C00:
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
blo _020E9C28
|
||||
_020E9C0C:
|
||||
add r12, r12, #0x1
|
||||
and r4, r0, #0x1
|
||||
movs r1, r1, rrx
|
||||
orr r0, r4, r0, rrx
|
||||
mov lr, r12, lsl #0x15
|
||||
cmn lr, #0x200000
|
||||
beq _020E9E38
|
||||
_020E9C28:
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9C6C:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bics r12, r12, #0x800
|
||||
beq _020E9CD8
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020E9E14
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
beq _020E9E00
|
||||
cmn r4, #0x200000
|
||||
bne _020E9E00
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020E9E00
|
||||
b _020E9E14
|
||||
_020E9CB4:
|
||||
cmp r4, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bic r12, r12, #0x800
|
||||
bics r4, r4, #0x800
|
||||
beq _020E9D44
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
bne _020E9E14
|
||||
b _020E9E00
|
||||
_020E9CD8:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020E9D18
|
||||
mov r12, #0x1
|
||||
bic r1, r1, #0x80000000
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
mov r4, r4, lsr #0x15
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
beq _020E9CB4
|
||||
orr r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
b _020E9BA8
|
||||
_020E9D18:
|
||||
mov r12, r3, lsr #0x14
|
||||
mov r1, r3, lsl #0xb
|
||||
orr r1, r1, r2, lsr #0x15
|
||||
mov r0, r2, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
beq _020E9DCC
|
||||
cmn r4, #0x200000
|
||||
bne _020E9DCC
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020E9E00
|
||||
b _020E9E18
|
||||
_020E9D44:
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020E9DDC
|
||||
mov r4, #0x1
|
||||
bic r3, r3, #0x80000000
|
||||
cmp r1, #0x0
|
||||
bpl _020E9D68
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
b _020E9BA8
|
||||
_020E9D68:
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
blo _020E9D88
|
||||
add r12, r12, #0x1
|
||||
and r4, r0, #0x1
|
||||
movs r1, r1, rrx
|
||||
mov r0, r0, rrx
|
||||
orr r0, r0, r4
|
||||
_020E9D88:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
_020E9DCC:
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9DDC:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E00:
|
||||
ldr r1, _020E9E58 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E14:
|
||||
mov r1, r3
|
||||
_020E9E18:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E28: ; 0x020E9E28
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E38:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
ldr r1, _020E9E58 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9E58: .word 0x7FF00000
|
||||
arm_func_end _dadd
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __dsub_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dadd
|
||||
_dadd:
|
||||
stmdb sp!, {r4,lr}
|
||||
eors r12, r1, r3
|
||||
eormi r3, r3, #0x80000000
|
||||
bmi __dsub_start
|
||||
.global __dadd_start
|
||||
__dadd_start:
|
||||
subs r12, r0, r2
|
||||
sbcs lr, r1, r3
|
||||
bhs _020E9B70
|
||||
adds r2, r2, r12
|
||||
adc r3, r3, lr
|
||||
subs r0, r0, r12
|
||||
sbc r1, r1, lr
|
||||
_020E9B70:
|
||||
mov lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
orr r1, lr, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
beq _020E9C6C
|
||||
mov r4, r3, lsr #0x14
|
||||
orr r3, lr, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs lr, r4, lsl #0x15
|
||||
beq _020E9CB4
|
||||
_020E9BA8:
|
||||
subs r4, r12, r4
|
||||
beq _020E9C00
|
||||
cmp r4, #0x20
|
||||
ble _020E9BE4
|
||||
cmp r4, #0x38
|
||||
movge r4, #0x3f
|
||||
sub r4, r4, #0x20
|
||||
rsb lr, r4, #0x20
|
||||
orrs lr, r2, r3, lsl lr
|
||||
mov r2, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, #0x0
|
||||
blo _020E9C28
|
||||
b _020E9C0C
|
||||
_020E9BE4:
|
||||
rsb lr, r4, #0x20
|
||||
movs lr, r2, lsl lr
|
||||
rsb lr, r4, #0x20
|
||||
mov r2, r2, lsr r4
|
||||
orr r2, r2, r3, lsl lr
|
||||
mov r3, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
_020E9C00:
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
blo _020E9C28
|
||||
_020E9C0C:
|
||||
add r12, r12, #0x1
|
||||
and r4, r0, #0x1
|
||||
movs r1, r1, rrx
|
||||
orr r0, r4, r0, rrx
|
||||
mov lr, r12, lsl #0x15
|
||||
cmn lr, #0x200000
|
||||
beq _020E9E38
|
||||
_020E9C28:
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9C6C:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bics r12, r12, #0x800
|
||||
beq _020E9CD8
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020E9E14
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
beq _020E9E00
|
||||
cmn r4, #0x200000
|
||||
bne _020E9E00
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020E9E00
|
||||
b _020E9E14
|
||||
_020E9CB4:
|
||||
cmp r4, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bic r12, r12, #0x800
|
||||
bics r4, r4, #0x800
|
||||
beq _020E9D44
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
bne _020E9E14
|
||||
b _020E9E00
|
||||
_020E9CD8:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020E9D18
|
||||
mov r12, #0x1
|
||||
bic r1, r1, #0x80000000
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
mov r4, r4, lsr #0x15
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
beq _020E9CB4
|
||||
orr r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
b _020E9BA8
|
||||
_020E9D18:
|
||||
mov r12, r3, lsr #0x14
|
||||
mov r1, r3, lsl #0xb
|
||||
orr r1, r1, r2, lsr #0x15
|
||||
mov r0, r2, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
beq _020E9DCC
|
||||
cmn r4, #0x200000
|
||||
bne _020E9DCC
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020E9E00
|
||||
b _020E9E18
|
||||
_020E9D44:
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020E9DDC
|
||||
mov r4, #0x1
|
||||
bic r3, r3, #0x80000000
|
||||
cmp r1, #0x0
|
||||
bpl _020E9D68
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
b _020E9BA8
|
||||
_020E9D68:
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
blo _020E9D88
|
||||
add r12, r12, #0x1
|
||||
and r4, r0, #0x1
|
||||
movs r1, r1, rrx
|
||||
mov r0, r0, rrx
|
||||
orr r0, r0, r4
|
||||
_020E9D88:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
_020E9DCC:
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9DDC:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E00:
|
||||
ldr r1, _020E9E58 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E14:
|
||||
mov r1, r3
|
||||
_020E9E18:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E28: ; 0x020E9E28
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020E9E38:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
ldr r1, _020E9E58 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9E58: .word 0x7FF00000
|
||||
arm_func_end _dadd
|
||||
|
|
|
|||
|
|
@ -1,333 +1,333 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _drdiv
|
||||
_drdiv: ; 0x020EC070
|
||||
eor r1, r1, r3
|
||||
eor r3, r1, r3
|
||||
eor r1, r1, r3
|
||||
eor r0, r0, r2
|
||||
eor r2, r0, r2
|
||||
eor r0, r0, r2
|
||||
|
||||
arm_func_start _ddiv
|
||||
_ddiv: ; 0x020EC088
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr lr, _020EC5C8 ; =0x00000FFE
|
||||
eor r4, r1, r3
|
||||
ands r12, lr, r1, lsr #0x13
|
||||
cmpne r12, lr
|
||||
beq _020EC434
|
||||
bic r1, r1, lr, lsl #0x14
|
||||
orr r1, r1, #0x100000
|
||||
add r12, r12, r4, lsr #0x1f
|
||||
_020EC0AC:
|
||||
ands r4, lr, r3, lsr #0x13
|
||||
cmpne r4, lr
|
||||
beq _020EC4CC
|
||||
bic r3, r3, lr, lsl #0x14
|
||||
orr r3, r3, #0x100000
|
||||
_020EC0C0:
|
||||
sub r12, r12, r4
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
bhs _020EC0DC
|
||||
adds r0, r0, r0
|
||||
adc r1, r1, r1
|
||||
sub r12, r12, #0x2
|
||||
_020EC0DC:
|
||||
sub r4, pc, #0x24 ; _020EC1C0 - #0x100
|
||||
ldrb lr, [r4, r3, lsr #0xc]
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
mov r4, #0x20000000
|
||||
mla r5, lr, r3, r4
|
||||
mov r6, r3, lsl #0xa
|
||||
mov r5, r5, lsr #0x7
|
||||
mul lr, r5, lr
|
||||
orr r6, r6, r2, lsr #0x16
|
||||
mov lr, lr, lsr #0xd
|
||||
mul r5, lr, r6
|
||||
mov r6, r1, lsl #0xa
|
||||
orr r6, r6, r0, lsr #0x16
|
||||
mov r5, r5, lsr #0x10
|
||||
mul r5, lr, r5
|
||||
mov lr, lr, lsl #0xe
|
||||
add lr, lr, r5, lsr #0x10
|
||||
umull r5, r6, lr, r6
|
||||
umull r4, r5, r6, r2
|
||||
mla r5, r3, r6, r5
|
||||
mov r4, r4, lsr #0x1a
|
||||
orr r4, r4, r5, lsl #0x6
|
||||
add r4, r4, r0, lsl #0x2
|
||||
umull lr, r5, r4, lr
|
||||
mov r4, #0x0
|
||||
adds r5, r5, r6, lsl #0x18
|
||||
adc r4, r4, r6, lsr #0x8
|
||||
cmp r12, #0x800
|
||||
bge _020EC2C0
|
||||
add r12, r12, #0x7f0
|
||||
adds r12, r12, #0xc
|
||||
bmi _020EC2D8
|
||||
orr r1, r4, r12, lsl #0x1f
|
||||
bic r12, r12, #0x1
|
||||
add r1, r1, r12, lsl #0x13
|
||||
tst lr, #0x80000000
|
||||
bne _020EC1B0
|
||||
rsbs r2, r2, #0x0
|
||||
mov r4, r4, lsl #0x1
|
||||
add r4, r4, r5, lsr #0x1f
|
||||
mul lr, r2, r4
|
||||
mov r6, #0x0
|
||||
mov r4, r5, lsl #0x1
|
||||
orr r4, r4, #0x1
|
||||
umlal r6, lr, r4, r2
|
||||
rsc r3, r3, #0x0
|
||||
mla lr, r4, r3, lr
|
||||
cmp lr, r0, lsl #0x15
|
||||
bmi _020EC1B0
|
||||
mov r0, r5
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC1B0:
|
||||
adds r0, r5, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC1C0: ; not code
|
||||
.byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1
|
||||
.byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4
|
||||
.byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8
|
||||
.byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD
|
||||
.byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3
|
||||
.byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA
|
||||
.byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2
|
||||
.byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB
|
||||
.byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4
|
||||
.byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E
|
||||
.byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98
|
||||
.byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92
|
||||
.byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D
|
||||
.byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89
|
||||
.byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84
|
||||
.byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
|
||||
_020EC2C0:
|
||||
movs r1, r12, lsl #0x1f
|
||||
orr r1, r1, #0x7f000000
|
||||
orr r1, r1, #0xf00000
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC2D8:
|
||||
mvn r6, r12, asr #0x1
|
||||
cmp r6, #0x34
|
||||
bgt _020EC424
|
||||
beq _020EC400
|
||||
cmp r6, #0x14
|
||||
bge _020EC320
|
||||
rsb r6, r6, #0x13
|
||||
mov lr, r0, lsl r6
|
||||
rsb r6, r6, #0x14
|
||||
mov r0, r5, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r0, r0, r4, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r4, r4, lsr r6
|
||||
orr r1, r4, r12, lsl #0x1f
|
||||
mov r12, lr
|
||||
mov lr, #0x0
|
||||
b _020EC350
|
||||
_020EC320:
|
||||
rsb r6, r6, #0x33
|
||||
mov lr, r1, lsl r6
|
||||
mov r1, r12, lsl #0x1f
|
||||
rsb r6, r6, #0x20
|
||||
orr r12, lr, r0, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov lr, r0, lsl r6
|
||||
mov r5, r5, lsr #0x15
|
||||
orr r5, r5, r4, lsl #0xb
|
||||
rsb r6, r6, #0x1f
|
||||
mov r0, r5, lsr r6
|
||||
mov r4, #0x0
|
||||
_020EC350:
|
||||
rsbs r2, r2, #0x0
|
||||
mul r4, r2, r4
|
||||
mov r5, #0x0
|
||||
umlal r5, r4, r2, r0
|
||||
rsc r3, r3, #0x0
|
||||
mla r4, r0, r3, r4
|
||||
cmp r4, r12
|
||||
cmpeq r5, lr
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
adds r5, r5, r2
|
||||
adc r4, r4, r3
|
||||
cmp r4, r12
|
||||
bmi _020EC3F4
|
||||
bne _020EC398
|
||||
cmp r5, lr
|
||||
beq _020EC3E4
|
||||
blo _020EC3F4
|
||||
_020EC398:
|
||||
subs r5, r5, r2
|
||||
sbc r4, r4, r3
|
||||
_020EC3A0:
|
||||
adds r5, r5, r5
|
||||
adc r4, r4, r4
|
||||
adds r5, r5, r2
|
||||
adc r4, r4, r3
|
||||
adds lr, lr, lr
|
||||
adc r12, r12, r12
|
||||
cmp r4, r12
|
||||
bmi _020EC3E4
|
||||
ldmneia sp!, {r4-r6,lr}
|
||||
bxne lr
|
||||
cmp r5, lr
|
||||
blo _020EC3E4
|
||||
ldmneia sp!, {r4-r6,lr}
|
||||
bxne lr
|
||||
tst r0, #0x1
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
_020EC3E4:
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC3F4:
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
b _020EC3A0
|
||||
_020EC400:
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
movne r0, #0x1
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC424:
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC434:
|
||||
orrs r5, r0, r1, lsl #0x1
|
||||
beq _020EC558
|
||||
cmp r12, lr
|
||||
beq _020EC49C
|
||||
movs r1, r1, lsl #0xc
|
||||
beq _020EC478
|
||||
clz r5, r1
|
||||
movs r1, r1, lsl r5
|
||||
sub r12, r12, r5
|
||||
add r5, r12, #0x1f
|
||||
mov r1, r1, lsr #0xb
|
||||
orr r1, r1, r0, lsr r5
|
||||
rsb r5, r5, #0x20
|
||||
mov r0, r0, lsl r5
|
||||
mov r12, r12, lsl #0x1
|
||||
orr r12, r12, r4, lsr #0x1f
|
||||
b _020EC0AC
|
||||
_020EC478:
|
||||
mvn r12, #0x13
|
||||
clz r5, r0
|
||||
movs r0, r0, lsl r5
|
||||
sub r12, r12, r5
|
||||
mov r1, r0, lsr #0xb
|
||||
mov r0, r0, lsl #0x15
|
||||
mov r12, r12, lsl #0x1
|
||||
orr r12, r12, r4, lsr #0x1f
|
||||
b _020EC0AC
|
||||
_020EC49C:
|
||||
orrs r5, r0, r1, lsl #0xc
|
||||
bne _020EC580
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
bhs _020EC4C0
|
||||
and r5, r3, #0x80000000
|
||||
eor r1, r5, r1
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC4C0:
|
||||
orrs r5, r2, r3, lsl #0xc
|
||||
bne _020EC5A0
|
||||
b _020EC5B8
|
||||
_020EC4CC:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EC544
|
||||
cmp r4, lr
|
||||
beq _020EC52C
|
||||
movs r3, r3, lsl #0xc
|
||||
beq _020EC50C
|
||||
clz r5, r3
|
||||
movs r3, r3, lsl r5
|
||||
sub r4, r4, r5
|
||||
add r5, r4, #0x1f
|
||||
mov r3, r3, lsr #0xb
|
||||
orr r3, r3, r2, lsr r5
|
||||
rsb r5, r5, #0x20
|
||||
mov r2, r2, lsl r5
|
||||
mov r4, r4, lsl #0x1
|
||||
b _020EC0C0
|
||||
_020EC50C:
|
||||
mvn r4, #0x13
|
||||
clz r5, r2
|
||||
movs r2, r2, lsl r5
|
||||
sub r4, r4, r5
|
||||
mov r3, r2, lsr #0xb
|
||||
mov r2, r2, lsl #0x15
|
||||
mov r4, r4, lsl #0x1
|
||||
b _020EC0C0
|
||||
_020EC52C:
|
||||
orrs r5, r2, r3, lsl #0xc
|
||||
bne _020EC5A0
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC544:
|
||||
mov r1, r12, lsl #0x1f
|
||||
orr r1, r1, lr, lsl #0x13
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC558:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EC5B8
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
cmpeq r2, #0x0
|
||||
bhi _020EC5A0
|
||||
eor r1, r1, r3
|
||||
and r1, r1, #0x80000000
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC580:
|
||||
tst r1, #0x80000
|
||||
beq _020EC5B8
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
cmpeq r2, #0x0
|
||||
bhi _020EC5A0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC5A0:
|
||||
tst r3, #0x80000
|
||||
beq _020EC5B8
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC5B8:
|
||||
orr r1, r1, #0x7f000000
|
||||
orr r1, r1, #0xf80000
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EC5C8: .word 0x00000FFE
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _drdiv
|
||||
_drdiv: ; 0x020EC070
|
||||
eor r1, r1, r3
|
||||
eor r3, r1, r3
|
||||
eor r1, r1, r3
|
||||
eor r0, r0, r2
|
||||
eor r2, r0, r2
|
||||
eor r0, r0, r2
|
||||
|
||||
arm_func_start _ddiv
|
||||
_ddiv: ; 0x020EC088
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr lr, _020EC5C8 ; =0x00000FFE
|
||||
eor r4, r1, r3
|
||||
ands r12, lr, r1, lsr #0x13
|
||||
cmpne r12, lr
|
||||
beq _020EC434
|
||||
bic r1, r1, lr, lsl #0x14
|
||||
orr r1, r1, #0x100000
|
||||
add r12, r12, r4, lsr #0x1f
|
||||
_020EC0AC:
|
||||
ands r4, lr, r3, lsr #0x13
|
||||
cmpne r4, lr
|
||||
beq _020EC4CC
|
||||
bic r3, r3, lr, lsl #0x14
|
||||
orr r3, r3, #0x100000
|
||||
_020EC0C0:
|
||||
sub r12, r12, r4
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
bhs _020EC0DC
|
||||
adds r0, r0, r0
|
||||
adc r1, r1, r1
|
||||
sub r12, r12, #0x2
|
||||
_020EC0DC:
|
||||
sub r4, pc, #0x24 ; _020EC1C0 - #0x100
|
||||
ldrb lr, [r4, r3, lsr #0xc]
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
mov r4, #0x20000000
|
||||
mla r5, lr, r3, r4
|
||||
mov r6, r3, lsl #0xa
|
||||
mov r5, r5, lsr #0x7
|
||||
mul lr, r5, lr
|
||||
orr r6, r6, r2, lsr #0x16
|
||||
mov lr, lr, lsr #0xd
|
||||
mul r5, lr, r6
|
||||
mov r6, r1, lsl #0xa
|
||||
orr r6, r6, r0, lsr #0x16
|
||||
mov r5, r5, lsr #0x10
|
||||
mul r5, lr, r5
|
||||
mov lr, lr, lsl #0xe
|
||||
add lr, lr, r5, lsr #0x10
|
||||
umull r5, r6, lr, r6
|
||||
umull r4, r5, r6, r2
|
||||
mla r5, r3, r6, r5
|
||||
mov r4, r4, lsr #0x1a
|
||||
orr r4, r4, r5, lsl #0x6
|
||||
add r4, r4, r0, lsl #0x2
|
||||
umull lr, r5, r4, lr
|
||||
mov r4, #0x0
|
||||
adds r5, r5, r6, lsl #0x18
|
||||
adc r4, r4, r6, lsr #0x8
|
||||
cmp r12, #0x800
|
||||
bge _020EC2C0
|
||||
add r12, r12, #0x7f0
|
||||
adds r12, r12, #0xc
|
||||
bmi _020EC2D8
|
||||
orr r1, r4, r12, lsl #0x1f
|
||||
bic r12, r12, #0x1
|
||||
add r1, r1, r12, lsl #0x13
|
||||
tst lr, #0x80000000
|
||||
bne _020EC1B0
|
||||
rsbs r2, r2, #0x0
|
||||
mov r4, r4, lsl #0x1
|
||||
add r4, r4, r5, lsr #0x1f
|
||||
mul lr, r2, r4
|
||||
mov r6, #0x0
|
||||
mov r4, r5, lsl #0x1
|
||||
orr r4, r4, #0x1
|
||||
umlal r6, lr, r4, r2
|
||||
rsc r3, r3, #0x0
|
||||
mla lr, r4, r3, lr
|
||||
cmp lr, r0, lsl #0x15
|
||||
bmi _020EC1B0
|
||||
mov r0, r5
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC1B0:
|
||||
adds r0, r5, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC1C0: ; not code
|
||||
.byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1
|
||||
.byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4
|
||||
.byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8
|
||||
.byte 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2, 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD
|
||||
.byte 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8, 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3
|
||||
.byte 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF, 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA
|
||||
.byte 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6, 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2
|
||||
.byte 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB
|
||||
.byte 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4
|
||||
.byte 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E
|
||||
.byte 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98
|
||||
.byte 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92
|
||||
.byte 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D
|
||||
.byte 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89
|
||||
.byte 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84
|
||||
.byte 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
|
||||
_020EC2C0:
|
||||
movs r1, r12, lsl #0x1f
|
||||
orr r1, r1, #0x7f000000
|
||||
orr r1, r1, #0xf00000
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC2D8:
|
||||
mvn r6, r12, asr #0x1
|
||||
cmp r6, #0x34
|
||||
bgt _020EC424
|
||||
beq _020EC400
|
||||
cmp r6, #0x14
|
||||
bge _020EC320
|
||||
rsb r6, r6, #0x13
|
||||
mov lr, r0, lsl r6
|
||||
rsb r6, r6, #0x14
|
||||
mov r0, r5, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r0, r0, r4, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r4, r4, lsr r6
|
||||
orr r1, r4, r12, lsl #0x1f
|
||||
mov r12, lr
|
||||
mov lr, #0x0
|
||||
b _020EC350
|
||||
_020EC320:
|
||||
rsb r6, r6, #0x33
|
||||
mov lr, r1, lsl r6
|
||||
mov r1, r12, lsl #0x1f
|
||||
rsb r6, r6, #0x20
|
||||
orr r12, lr, r0, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov lr, r0, lsl r6
|
||||
mov r5, r5, lsr #0x15
|
||||
orr r5, r5, r4, lsl #0xb
|
||||
rsb r6, r6, #0x1f
|
||||
mov r0, r5, lsr r6
|
||||
mov r4, #0x0
|
||||
_020EC350:
|
||||
rsbs r2, r2, #0x0
|
||||
mul r4, r2, r4
|
||||
mov r5, #0x0
|
||||
umlal r5, r4, r2, r0
|
||||
rsc r3, r3, #0x0
|
||||
mla r4, r0, r3, r4
|
||||
cmp r4, r12
|
||||
cmpeq r5, lr
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
adds r5, r5, r2
|
||||
adc r4, r4, r3
|
||||
cmp r4, r12
|
||||
bmi _020EC3F4
|
||||
bne _020EC398
|
||||
cmp r5, lr
|
||||
beq _020EC3E4
|
||||
blo _020EC3F4
|
||||
_020EC398:
|
||||
subs r5, r5, r2
|
||||
sbc r4, r4, r3
|
||||
_020EC3A0:
|
||||
adds r5, r5, r5
|
||||
adc r4, r4, r4
|
||||
adds r5, r5, r2
|
||||
adc r4, r4, r3
|
||||
adds lr, lr, lr
|
||||
adc r12, r12, r12
|
||||
cmp r4, r12
|
||||
bmi _020EC3E4
|
||||
ldmneia sp!, {r4-r6,lr}
|
||||
bxne lr
|
||||
cmp r5, lr
|
||||
blo _020EC3E4
|
||||
ldmneia sp!, {r4-r6,lr}
|
||||
bxne lr
|
||||
tst r0, #0x1
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
_020EC3E4:
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC3F4:
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
b _020EC3A0
|
||||
_020EC400:
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
movne r0, #0x1
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC424:
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC434:
|
||||
orrs r5, r0, r1, lsl #0x1
|
||||
beq _020EC558
|
||||
cmp r12, lr
|
||||
beq _020EC49C
|
||||
movs r1, r1, lsl #0xc
|
||||
beq _020EC478
|
||||
clz r5, r1
|
||||
movs r1, r1, lsl r5
|
||||
sub r12, r12, r5
|
||||
add r5, r12, #0x1f
|
||||
mov r1, r1, lsr #0xb
|
||||
orr r1, r1, r0, lsr r5
|
||||
rsb r5, r5, #0x20
|
||||
mov r0, r0, lsl r5
|
||||
mov r12, r12, lsl #0x1
|
||||
orr r12, r12, r4, lsr #0x1f
|
||||
b _020EC0AC
|
||||
_020EC478:
|
||||
mvn r12, #0x13
|
||||
clz r5, r0
|
||||
movs r0, r0, lsl r5
|
||||
sub r12, r12, r5
|
||||
mov r1, r0, lsr #0xb
|
||||
mov r0, r0, lsl #0x15
|
||||
mov r12, r12, lsl #0x1
|
||||
orr r12, r12, r4, lsr #0x1f
|
||||
b _020EC0AC
|
||||
_020EC49C:
|
||||
orrs r5, r0, r1, lsl #0xc
|
||||
bne _020EC580
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
bhs _020EC4C0
|
||||
and r5, r3, #0x80000000
|
||||
eor r1, r5, r1
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC4C0:
|
||||
orrs r5, r2, r3, lsl #0xc
|
||||
bne _020EC5A0
|
||||
b _020EC5B8
|
||||
_020EC4CC:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EC544
|
||||
cmp r4, lr
|
||||
beq _020EC52C
|
||||
movs r3, r3, lsl #0xc
|
||||
beq _020EC50C
|
||||
clz r5, r3
|
||||
movs r3, r3, lsl r5
|
||||
sub r4, r4, r5
|
||||
add r5, r4, #0x1f
|
||||
mov r3, r3, lsr #0xb
|
||||
orr r3, r3, r2, lsr r5
|
||||
rsb r5, r5, #0x20
|
||||
mov r2, r2, lsl r5
|
||||
mov r4, r4, lsl #0x1
|
||||
b _020EC0C0
|
||||
_020EC50C:
|
||||
mvn r4, #0x13
|
||||
clz r5, r2
|
||||
movs r2, r2, lsl r5
|
||||
sub r4, r4, r5
|
||||
mov r3, r2, lsr #0xb
|
||||
mov r2, r2, lsl #0x15
|
||||
mov r4, r4, lsl #0x1
|
||||
b _020EC0C0
|
||||
_020EC52C:
|
||||
orrs r5, r2, r3, lsl #0xc
|
||||
bne _020EC5A0
|
||||
mov r1, r12, lsl #0x1f
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC544:
|
||||
mov r1, r12, lsl #0x1f
|
||||
orr r1, r1, lr, lsl #0x13
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC558:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EC5B8
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
cmpeq r2, #0x0
|
||||
bhi _020EC5A0
|
||||
eor r1, r1, r3
|
||||
and r1, r1, #0x80000000
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC580:
|
||||
tst r1, #0x80000
|
||||
beq _020EC5B8
|
||||
bic r5, r3, #0x80000000
|
||||
cmp r5, lr, lsl #0x13
|
||||
cmpeq r2, #0x0
|
||||
bhi _020EC5A0
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC5A0:
|
||||
tst r3, #0x80000
|
||||
beq _020EC5B8
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EC5B8:
|
||||
orr r1, r1, #0x7f000000
|
||||
orr r1, r1, #0xf80000
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EC5C8: .word 0x00000FFE
|
||||
|
|
|
|||
|
|
@ -1,85 +1,85 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _d2f
|
||||
_d2f:
|
||||
and r2, r1, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
bics r12, r12, #0x800
|
||||
beq _020E9ED4
|
||||
mov r3, r12, lsl #0x15
|
||||
cmn r3, #0x200000
|
||||
bhs _020E9EB8
|
||||
subs r12, r12, #0x380
|
||||
bls _020E9EE4
|
||||
cmp r12, #0xff
|
||||
bge _020E9F54
|
||||
mov r1, r1, lsl #0xc
|
||||
orr r3, r2, r1, lsr #0x9
|
||||
orr r3, r3, r0, lsr #0x1d
|
||||
movs r1, r0, lsl #0x3
|
||||
orr r0, r3, r12, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020E9EB8:
|
||||
orrs r3, r0, r1, lsl #0xc
|
||||
bne _020E9ECC
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020E9ECC:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020E9ED4:
|
||||
orrs r3, r0, r1, lsl #0xc
|
||||
bne __f_underflow
|
||||
.global __f_result_zero
|
||||
__f_result_zero:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020E9EE4:
|
||||
cmn r12, #0x17
|
||||
beq _020E9F38
|
||||
bmi __f_underflow
|
||||
mov r1, r1, lsl #0xb
|
||||
orr r1, r1, #0x80000000
|
||||
mov r3, r1, lsr #0x8
|
||||
orr r3, r3, r0, lsr #0x1d
|
||||
rsb r12, r12, #0x1
|
||||
movs r1, r0, lsl #0x3
|
||||
orr r0, r2, r3, lsr r12
|
||||
rsb r12, r12, #0x20
|
||||
mov r3, r3, lsl r12
|
||||
orrne r3, r3, #0x1
|
||||
movs r1, r3
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020E9F38:
|
||||
orr r0, r0, r1, lsl #0xc
|
||||
.global __f_very_tiny_result
|
||||
__f_very_tiny_result:
|
||||
movs r1, r0
|
||||
mov r0, r2
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
.global __f_underflow
|
||||
__f_underflow:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020E9F54:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
arm_func_end _d2f
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _d2f
|
||||
_d2f:
|
||||
and r2, r1, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
bics r12, r12, #0x800
|
||||
beq _020E9ED4
|
||||
mov r3, r12, lsl #0x15
|
||||
cmn r3, #0x200000
|
||||
bhs _020E9EB8
|
||||
subs r12, r12, #0x380
|
||||
bls _020E9EE4
|
||||
cmp r12, #0xff
|
||||
bge _020E9F54
|
||||
mov r1, r1, lsl #0xc
|
||||
orr r3, r2, r1, lsr #0x9
|
||||
orr r3, r3, r0, lsr #0x1d
|
||||
movs r1, r0, lsl #0x3
|
||||
orr r0, r3, r12, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020E9EB8:
|
||||
orrs r3, r0, r1, lsl #0xc
|
||||
bne _020E9ECC
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020E9ECC:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020E9ED4:
|
||||
orrs r3, r0, r1, lsl #0xc
|
||||
bne __f_underflow
|
||||
.global __f_result_zero
|
||||
__f_result_zero:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020E9EE4:
|
||||
cmn r12, #0x17
|
||||
beq _020E9F38
|
||||
bmi __f_underflow
|
||||
mov r1, r1, lsl #0xb
|
||||
orr r1, r1, #0x80000000
|
||||
mov r3, r1, lsr #0x8
|
||||
orr r3, r3, r0, lsr #0x1d
|
||||
rsb r12, r12, #0x1
|
||||
movs r1, r0, lsl #0x3
|
||||
orr r0, r2, r3, lsr r12
|
||||
rsb r12, r12, #0x20
|
||||
mov r3, r3, lsl r12
|
||||
orrne r3, r3, #0x1
|
||||
movs r1, r3
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020E9F38:
|
||||
orr r0, r0, r1, lsl #0xc
|
||||
.global __f_very_tiny_result
|
||||
__f_very_tiny_result:
|
||||
movs r1, r0
|
||||
mov r0, r2
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
.global __f_underflow
|
||||
__f_underflow:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020E9F54:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
arm_func_end _d2f
|
||||
|
|
|
|||
|
|
@ -1,30 +1,30 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dfix
|
||||
_dfix: ; 0x020E9F60
|
||||
bic r3, r1, #0x80000000
|
||||
ldr r2, _020E9FA8 ; =0x0000041E
|
||||
subs r2, r2, r3, lsr #0x14
|
||||
ble _020E9F9C
|
||||
cmp r2, #0x20
|
||||
bge _020E9F94
|
||||
mov r3, r1, lsl #0xb
|
||||
orr r3, r3, #0x80000000
|
||||
orr r3, r3, r0, lsr #0x15
|
||||
cmp r1, #0x0
|
||||
mov r0, r3, lsr r2
|
||||
rsbmi r0, r0, #0x0
|
||||
bx lr
|
||||
_020E9F94:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020E9F9C:
|
||||
mvn r0, r1, asr #0x1f
|
||||
add r0, r0, #0x80000000
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9FA8: .word 0x0000041E
|
||||
arm_func_end _dfix
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dfix
|
||||
_dfix: ; 0x020E9F60
|
||||
bic r3, r1, #0x80000000
|
||||
ldr r2, _020E9FA8 ; =0x0000041E
|
||||
subs r2, r2, r3, lsr #0x14
|
||||
ble _020E9F9C
|
||||
cmp r2, #0x20
|
||||
bge _020E9F94
|
||||
mov r3, r1, lsl #0xb
|
||||
orr r3, r3, #0x80000000
|
||||
orr r3, r3, r0, lsr #0x15
|
||||
cmp r1, #0x0
|
||||
mov r0, r3, lsr r2
|
||||
rsbmi r0, r0, #0x0
|
||||
bx lr
|
||||
_020E9F94:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020E9F9C:
|
||||
mvn r0, r1, asr #0x1f
|
||||
add r0, r0, #0x80000000
|
||||
bx lr
|
||||
.balign 4
|
||||
_020E9FA8: .word 0x0000041E
|
||||
arm_func_end _dfix
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_ufrom_d
|
||||
_ll_ufrom_d: ; 0x020E9FAC
|
||||
tst r1, #0x80000000
|
||||
bne _020EA010
|
||||
ldr r2, _020EA034 ; =0x0000043E
|
||||
subs r2, r2, r1, lsr #0x14
|
||||
blt _020EA028
|
||||
cmp r2, #0x40
|
||||
bge _020EA004
|
||||
mov r12, r1, lsl #0xb
|
||||
orr r12, r12, #0x80000000
|
||||
orr r12, r12, r0, lsr #0x15
|
||||
cmp r2, #0x20
|
||||
ble _020E9FEC
|
||||
sub r2, r2, #0x20
|
||||
mov r1, #0x0
|
||||
mov r0, r12, lsr r2
|
||||
bx lr
|
||||
_020E9FEC:
|
||||
mov r3, r0, lsl #0xb
|
||||
mov r1, r12, lsr r2
|
||||
mov r0, r3, lsr r2
|
||||
rsb r2, r2, #0x20
|
||||
orr r0, r0, r12, lsl r2
|
||||
bx lr
|
||||
_020EA004:
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EA010:
|
||||
cmn r1, #0x100000
|
||||
cmpeq r0, #0x0
|
||||
bhi _020EA028
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EA028:
|
||||
mvn r1, #0x0
|
||||
mvn r0, #0x0
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA034: .word 0x0000043E
|
||||
arm_func_end _ll_ufrom_d
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_ufrom_d
|
||||
_ll_ufrom_d: ; 0x020E9FAC
|
||||
tst r1, #0x80000000
|
||||
bne _020EA010
|
||||
ldr r2, _020EA034 ; =0x0000043E
|
||||
subs r2, r2, r1, lsr #0x14
|
||||
blt _020EA028
|
||||
cmp r2, #0x40
|
||||
bge _020EA004
|
||||
mov r12, r1, lsl #0xb
|
||||
orr r12, r12, #0x80000000
|
||||
orr r12, r12, r0, lsr #0x15
|
||||
cmp r2, #0x20
|
||||
ble _020E9FEC
|
||||
sub r2, r2, #0x20
|
||||
mov r1, #0x0
|
||||
mov r0, r12, lsr r2
|
||||
bx lr
|
||||
_020E9FEC:
|
||||
mov r3, r0, lsl #0xb
|
||||
mov r1, r12, lsr r2
|
||||
mov r0, r3, lsr r2
|
||||
rsb r2, r2, #0x20
|
||||
orr r0, r0, r12, lsl r2
|
||||
bx lr
|
||||
_020EA004:
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EA010:
|
||||
cmn r1, #0x100000
|
||||
cmpeq r0, #0x0
|
||||
bhi _020EA028
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EA028:
|
||||
mvn r1, #0x0
|
||||
mvn r0, #0x0
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA034: .word 0x0000043E
|
||||
arm_func_end _ll_ufrom_d
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dflt
|
||||
_dflt: ; 0x020EA038
|
||||
ands r2, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r0, #0x0
|
||||
.global __d_itod_common
|
||||
__d_itod_common:
|
||||
mov r1, #0x0
|
||||
bxeq lr
|
||||
mov r3, #0x400
|
||||
add r3, r3, #0x1e
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
movs r1, r0
|
||||
mov r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, r2, r1, lsr #0xc
|
||||
orr r1, r1, r3, lsl #0x14
|
||||
bx lr
|
||||
arm_func_end _dflt
|
||||
|
||||
arm_func_start _dfltu
|
||||
_dfltu: ; 0x020EA078
|
||||
cmp r0, #0x0
|
||||
.global __d_utod_common
|
||||
__d_utod_common:
|
||||
mov r1, #0x0
|
||||
bxeq lr
|
||||
mov r3, #0x400
|
||||
add r3, r3, #0x1e
|
||||
bmi _020EA09C
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
_020EA09C:
|
||||
mov r1, r0
|
||||
mov r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r3, lsl #0x14
|
||||
bx lr
|
||||
arm_func_end _dfltu
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dflt
|
||||
_dflt: ; 0x020EA038
|
||||
ands r2, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r0, #0x0
|
||||
.global __d_itod_common
|
||||
__d_itod_common:
|
||||
mov r1, #0x0
|
||||
bxeq lr
|
||||
mov r3, #0x400
|
||||
add r3, r3, #0x1e
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
movs r1, r0
|
||||
mov r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, r2, r1, lsr #0xc
|
||||
orr r1, r1, r3, lsl #0x14
|
||||
bx lr
|
||||
arm_func_end _dflt
|
||||
|
||||
arm_func_start _dfltu
|
||||
_dfltu: ; 0x020EA078
|
||||
cmp r0, #0x0
|
||||
.global __d_utod_common
|
||||
__d_utod_common:
|
||||
mov r1, #0x0
|
||||
bxeq lr
|
||||
mov r3, #0x400
|
||||
add r3, r3, #0x1e
|
||||
bmi _020EA09C
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
_020EA09C:
|
||||
mov r1, r0
|
||||
mov r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r3, lsl #0x14
|
||||
bx lr
|
||||
arm_func_end _dfltu
|
||||
|
|
|
|||
|
|
@ -1,246 +1,246 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dmul
|
||||
_dmul: ; 0x020EA0B4
|
||||
stmdb sp!, {r4-r7,lr}
|
||||
eor lr, r1, r3
|
||||
and lr, lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
mov r1, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r6, r12, lsl #0x15
|
||||
cmnne r6, #0x200000
|
||||
beq _020EA1BC
|
||||
orr r1, r1, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
cmnne r5, #0x200000
|
||||
beq _020EA204
|
||||
orr r3, r3, #0x80000000
|
||||
bic r4, r4, #0x800
|
||||
_020EA108:
|
||||
add r12, r4, r12
|
||||
umull r5, r4, r0, r2
|
||||
umull r7, r6, r0, r3
|
||||
adds r4, r7, r4
|
||||
adc r6, r6, #0x0
|
||||
umull r7, r0, r1, r2
|
||||
adds r4, r7, r4
|
||||
adcs r0, r0, r6
|
||||
umull r7, r2, r1, r3
|
||||
adc r1, r2, #0x0
|
||||
adds r0, r0, r7
|
||||
adc r1, r1, #0x0
|
||||
orrs r4, r4, r5
|
||||
orrne r0, r0, #0x1
|
||||
cmp r1, #0x0
|
||||
blt _020EA154
|
||||
sub r12, r12, #0x1
|
||||
adds r0, r0, r0
|
||||
adc r1, r1, r1
|
||||
_020EA154:
|
||||
add r12, r12, #0x2
|
||||
subs r12, r12, #0x400
|
||||
bmi _020EA2F0
|
||||
beq _020EA2F0
|
||||
mov r6, r12, lsl #0x14
|
||||
cmn r6, #0x100000
|
||||
bmi _020EA3F0
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA1BC:
|
||||
bics r12, r12, #0x800
|
||||
beq _020EA218
|
||||
orrs r6, r0, r1, lsl #0x1
|
||||
bne _020EA3A4
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
beq _020EA1F8
|
||||
cmn r5, #0x200000
|
||||
bne _020EA390
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EA390
|
||||
b _020EA3A4
|
||||
_020EA1F8:
|
||||
orrs r5, r3, r2
|
||||
beq _020EA3B8
|
||||
b _020EA390
|
||||
_020EA204:
|
||||
bics r4, r4, #0x800
|
||||
beq _020EA2AC
|
||||
orrs r6, r2, r3, lsl #0x1
|
||||
bne _020EA3A4
|
||||
b _020EA390
|
||||
_020EA218:
|
||||
orrs r6, r0, r1, lsl #0x1
|
||||
beq _020EA280
|
||||
mov r12, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020EA23C
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA258
|
||||
_020EA23C:
|
||||
clz r6, r1
|
||||
movs r1, r1, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r1, r1, r0, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r0, r0, lsl r6
|
||||
sub r12, r12, r6
|
||||
_020EA258:
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
cmnne r5, #0x200000
|
||||
beq _020EA204
|
||||
orr r3, r3, #0x80000000
|
||||
bic r4, r4, #0x800
|
||||
b _020EA108
|
||||
_020EA280:
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
beq _020EA404
|
||||
cmn r5, #0x200000
|
||||
bne _020EA404
|
||||
orrs r6, r2, r3, lsl #0x1
|
||||
beq _020EA3B8
|
||||
b _020EA3A4
|
||||
_020EA2AC:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EA404
|
||||
mov r4, #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020EA2D0
|
||||
sub r4, r4, #0x20
|
||||
movs r3, r2
|
||||
mov r2, #0x0
|
||||
bmi _020EA108
|
||||
_020EA2D0:
|
||||
clz r6, r3
|
||||
movs r3, r3, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r3, r3, r2, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r2, r2, lsl r6
|
||||
sub r4, r4, r6
|
||||
b _020EA108
|
||||
_020EA2F0:
|
||||
cmn r12, #0x34
|
||||
beq _020EA388
|
||||
bmi _020EA3E0
|
||||
mov r2, r1
|
||||
mov r3, r0
|
||||
add r4, r12, #0x34
|
||||
cmp r4, #0x20
|
||||
movge r2, r3
|
||||
movge r3, #0x0
|
||||
subge r4, r4, #0x20
|
||||
rsb r5, r4, #0x20
|
||||
mov r2, r2, lsl r4
|
||||
orr r2, r2, r3, lsr r5
|
||||
movs r3, r3, lsl r4
|
||||
orrne r2, r2, #0x1
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA388:
|
||||
orr r0, r0, r1, lsl #0x1
|
||||
b _020EA3C8
|
||||
_020EA390:
|
||||
ldr r1, _020EA414 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3A4:
|
||||
mov r1, r3
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3B8:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3C8:
|
||||
movs r2, r0
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
addne r0, r0, #0x1
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3E0:
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3F0:
|
||||
ldr r1, _020EA414 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA404:
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA414: .word 0x7FF00000
|
||||
arm_func_end _dmul
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dmul
|
||||
_dmul: ; 0x020EA0B4
|
||||
stmdb sp!, {r4-r7,lr}
|
||||
eor lr, r1, r3
|
||||
and lr, lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
mov r1, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r6, r12, lsl #0x15
|
||||
cmnne r6, #0x200000
|
||||
beq _020EA1BC
|
||||
orr r1, r1, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
cmnne r5, #0x200000
|
||||
beq _020EA204
|
||||
orr r3, r3, #0x80000000
|
||||
bic r4, r4, #0x800
|
||||
_020EA108:
|
||||
add r12, r4, r12
|
||||
umull r5, r4, r0, r2
|
||||
umull r7, r6, r0, r3
|
||||
adds r4, r7, r4
|
||||
adc r6, r6, #0x0
|
||||
umull r7, r0, r1, r2
|
||||
adds r4, r7, r4
|
||||
adcs r0, r0, r6
|
||||
umull r7, r2, r1, r3
|
||||
adc r1, r2, #0x0
|
||||
adds r0, r0, r7
|
||||
adc r1, r1, #0x0
|
||||
orrs r4, r4, r5
|
||||
orrne r0, r0, #0x1
|
||||
cmp r1, #0x0
|
||||
blt _020EA154
|
||||
sub r12, r12, #0x1
|
||||
adds r0, r0, r0
|
||||
adc r1, r1, r1
|
||||
_020EA154:
|
||||
add r12, r12, #0x2
|
||||
subs r12, r12, #0x400
|
||||
bmi _020EA2F0
|
||||
beq _020EA2F0
|
||||
mov r6, r12, lsl #0x14
|
||||
cmn r6, #0x100000
|
||||
bmi _020EA3F0
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA1BC:
|
||||
bics r12, r12, #0x800
|
||||
beq _020EA218
|
||||
orrs r6, r0, r1, lsl #0x1
|
||||
bne _020EA3A4
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
beq _020EA1F8
|
||||
cmn r5, #0x200000
|
||||
bne _020EA390
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EA390
|
||||
b _020EA3A4
|
||||
_020EA1F8:
|
||||
orrs r5, r3, r2
|
||||
beq _020EA3B8
|
||||
b _020EA390
|
||||
_020EA204:
|
||||
bics r4, r4, #0x800
|
||||
beq _020EA2AC
|
||||
orrs r6, r2, r3, lsl #0x1
|
||||
bne _020EA3A4
|
||||
b _020EA390
|
||||
_020EA218:
|
||||
orrs r6, r0, r1, lsl #0x1
|
||||
beq _020EA280
|
||||
mov r12, #0x1
|
||||
cmp r1, #0x0
|
||||
bne _020EA23C
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA258
|
||||
_020EA23C:
|
||||
clz r6, r1
|
||||
movs r1, r1, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r1, r1, r0, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r0, r0, lsl r6
|
||||
sub r12, r12, r6
|
||||
_020EA258:
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
cmnne r5, #0x200000
|
||||
beq _020EA204
|
||||
orr r3, r3, #0x80000000
|
||||
bic r4, r4, #0x800
|
||||
b _020EA108
|
||||
_020EA280:
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r5, r4, lsl #0x15
|
||||
beq _020EA404
|
||||
cmn r5, #0x200000
|
||||
bne _020EA404
|
||||
orrs r6, r2, r3, lsl #0x1
|
||||
beq _020EA3B8
|
||||
b _020EA3A4
|
||||
_020EA2AC:
|
||||
orrs r5, r2, r3, lsl #0x1
|
||||
beq _020EA404
|
||||
mov r4, #0x1
|
||||
cmp r3, #0x0
|
||||
bne _020EA2D0
|
||||
sub r4, r4, #0x20
|
||||
movs r3, r2
|
||||
mov r2, #0x0
|
||||
bmi _020EA108
|
||||
_020EA2D0:
|
||||
clz r6, r3
|
||||
movs r3, r3, lsl r6
|
||||
rsb r6, r6, #0x20
|
||||
orr r3, r3, r2, lsr r6
|
||||
rsb r6, r6, #0x20
|
||||
mov r2, r2, lsl r6
|
||||
sub r4, r4, r6
|
||||
b _020EA108
|
||||
_020EA2F0:
|
||||
cmn r12, #0x34
|
||||
beq _020EA388
|
||||
bmi _020EA3E0
|
||||
mov r2, r1
|
||||
mov r3, r0
|
||||
add r4, r12, #0x34
|
||||
cmp r4, #0x20
|
||||
movge r2, r3
|
||||
movge r3, #0x0
|
||||
subge r4, r4, #0x20
|
||||
rsb r5, r4, #0x20
|
||||
mov r2, r2, lsl r4
|
||||
orr r2, r2, r3, lsr r5
|
||||
movs r3, r3, lsl r4
|
||||
orrne r2, r2, #0x1
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
cmp r2, #0x0
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4-r7,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA388:
|
||||
orr r0, r0, r1, lsl #0x1
|
||||
b _020EA3C8
|
||||
_020EA390:
|
||||
ldr r1, _020EA414 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3A4:
|
||||
mov r1, r3
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3B8:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3C8:
|
||||
movs r2, r0
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
addne r0, r0, #0x1
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3E0:
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA3F0:
|
||||
ldr r1, _020EA414 ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
_020EA404:
|
||||
mov r1, lr
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA414: .word 0x7FF00000
|
||||
arm_func_end _dmul
|
||||
|
|
|
|||
|
|
@ -1,123 +1,123 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dsqrt
|
||||
_dsqrt: ; 0x020EA418
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr r2, _020EA5A8 ; =0x7FF00000
|
||||
cmp r1, r2
|
||||
bhs _020EA564
|
||||
movs r12, r1, lsr #0x14
|
||||
beq _020EA510
|
||||
bic r1, r1, r2
|
||||
orr r1, r1, #0x100000
|
||||
_020EA438:
|
||||
movs r12, r12, asr #0x1
|
||||
bhs _020EA44C
|
||||
sub r12, r12, #0x1
|
||||
movs r0, r0, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
_020EA44C:
|
||||
movs r3, r0, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
mov r2, #0x0
|
||||
mov r4, #0x0
|
||||
mov lr, #0x200000
|
||||
_020EA460:
|
||||
add r6, r4, lr
|
||||
cmp r6, r1
|
||||
addle r4, r6, lr
|
||||
suble r1, r1, r6
|
||||
addle r2, r2, lr
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
movs lr, lr, lsr #0x1
|
||||
bne _020EA460
|
||||
mov r0, #0x0
|
||||
mov r5, #0x0
|
||||
cmp r1, r4
|
||||
cmpeq r3, #0x80000000
|
||||
blo _020EA4A8
|
||||
subs r3, r3, #0x80000000
|
||||
sbc r1, r1, r4
|
||||
add r4, r4, #0x1
|
||||
mov r0, #0x80000000
|
||||
_020EA4A8:
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
mov lr, #0x40000000
|
||||
_020EA4B4:
|
||||
add r6, r5, lr
|
||||
cmp r4, r1
|
||||
cmpeq r6, r3
|
||||
bhi _020EA4D4
|
||||
add r5, r6, lr
|
||||
subs r3, r3, r6
|
||||
sbc r1, r1, r4
|
||||
add r0, r0, lr
|
||||
_020EA4D4:
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
movs lr, lr, lsr #0x1
|
||||
bne _020EA4B4
|
||||
orrs r1, r1, r3
|
||||
biceq r0, r0, #0x1
|
||||
movs r1, r2, lsr #0x1
|
||||
movs r0, r0, rrx
|
||||
adcs r0, r0, #0x0
|
||||
adc r1, r1, #0x0
|
||||
add r1, r1, #0x20000000
|
||||
sub r1, r1, #0x100000
|
||||
add r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EA510:
|
||||
cmp r1, #0x0
|
||||
bne _020EA540
|
||||
cmp r0, #0x0
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
mvn r12, #0x13
|
||||
clz r5, r0
|
||||
movs r0, r0, lsl r5
|
||||
sub r12, r12, r5
|
||||
mov r1, r0, lsr #0xb
|
||||
mov r0, r0, lsl #0x15
|
||||
b _020EA438
|
||||
_020EA540:
|
||||
clz r2, r1
|
||||
movs r1, r1, lsl r2
|
||||
rsb r2, r2, #0x2b
|
||||
mov r1, r1, lsr #0xb
|
||||
orr r1, r1, r0, lsr r2
|
||||
rsb r2, r2, #0x20
|
||||
mov r0, r0, lsl r2
|
||||
rsb r12, r2, #0x1
|
||||
b _020EA438
|
||||
_020EA564:
|
||||
tst r1, #0x80000000
|
||||
beq _020EA580
|
||||
bics r3, r1, #0x80000000
|
||||
cmpeq r0, #0x0
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
b _020EA58C
|
||||
_020EA580:
|
||||
orrs r2, r0, r1, lsl #0xc
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
_020EA58C:
|
||||
ldr r2, _020EA5AC ; =0x7FF80000
|
||||
orr r1, r1, r2
|
||||
ldr r3, _020EA5B0 ; =errno
|
||||
mov r4, #0x21
|
||||
str r4, [r3, #0x0]
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA5A8: .word 0x7FF00000
|
||||
_020EA5AC: .word 0x7FF80000
|
||||
_020EA5B0: .word errno
|
||||
arm_func_end _dsqrt
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dsqrt
|
||||
_dsqrt: ; 0x020EA418
|
||||
stmdb sp!, {r4-r6,lr}
|
||||
ldr r2, _020EA5A8 ; =0x7FF00000
|
||||
cmp r1, r2
|
||||
bhs _020EA564
|
||||
movs r12, r1, lsr #0x14
|
||||
beq _020EA510
|
||||
bic r1, r1, r2
|
||||
orr r1, r1, #0x100000
|
||||
_020EA438:
|
||||
movs r12, r12, asr #0x1
|
||||
bhs _020EA44C
|
||||
sub r12, r12, #0x1
|
||||
movs r0, r0, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
_020EA44C:
|
||||
movs r3, r0, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
mov r2, #0x0
|
||||
mov r4, #0x0
|
||||
mov lr, #0x200000
|
||||
_020EA460:
|
||||
add r6, r4, lr
|
||||
cmp r6, r1
|
||||
addle r4, r6, lr
|
||||
suble r1, r1, r6
|
||||
addle r2, r2, lr
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
movs lr, lr, lsr #0x1
|
||||
bne _020EA460
|
||||
mov r0, #0x0
|
||||
mov r5, #0x0
|
||||
cmp r1, r4
|
||||
cmpeq r3, #0x80000000
|
||||
blo _020EA4A8
|
||||
subs r3, r3, #0x80000000
|
||||
sbc r1, r1, r4
|
||||
add r4, r4, #0x1
|
||||
mov r0, #0x80000000
|
||||
_020EA4A8:
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
mov lr, #0x40000000
|
||||
_020EA4B4:
|
||||
add r6, r5, lr
|
||||
cmp r4, r1
|
||||
cmpeq r6, r3
|
||||
bhi _020EA4D4
|
||||
add r5, r6, lr
|
||||
subs r3, r3, r6
|
||||
sbc r1, r1, r4
|
||||
add r0, r0, lr
|
||||
_020EA4D4:
|
||||
movs r3, r3, lsl #0x1
|
||||
adc r1, r1, r1
|
||||
movs lr, lr, lsr #0x1
|
||||
bne _020EA4B4
|
||||
orrs r1, r1, r3
|
||||
biceq r0, r0, #0x1
|
||||
movs r1, r2, lsr #0x1
|
||||
movs r0, r0, rrx
|
||||
adcs r0, r0, #0x0
|
||||
adc r1, r1, #0x0
|
||||
add r1, r1, #0x20000000
|
||||
sub r1, r1, #0x100000
|
||||
add r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
_020EA510:
|
||||
cmp r1, #0x0
|
||||
bne _020EA540
|
||||
cmp r0, #0x0
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
mvn r12, #0x13
|
||||
clz r5, r0
|
||||
movs r0, r0, lsl r5
|
||||
sub r12, r12, r5
|
||||
mov r1, r0, lsr #0xb
|
||||
mov r0, r0, lsl #0x15
|
||||
b _020EA438
|
||||
_020EA540:
|
||||
clz r2, r1
|
||||
movs r1, r1, lsl r2
|
||||
rsb r2, r2, #0x2b
|
||||
mov r1, r1, lsr #0xb
|
||||
orr r1, r1, r0, lsr r2
|
||||
rsb r2, r2, #0x20
|
||||
mov r0, r0, lsl r2
|
||||
rsb r12, r2, #0x1
|
||||
b _020EA438
|
||||
_020EA564:
|
||||
tst r1, #0x80000000
|
||||
beq _020EA580
|
||||
bics r3, r1, #0x80000000
|
||||
cmpeq r0, #0x0
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
b _020EA58C
|
||||
_020EA580:
|
||||
orrs r2, r0, r1, lsl #0xc
|
||||
ldmeqia sp!, {r4-r6,lr}
|
||||
bxeq lr
|
||||
_020EA58C:
|
||||
ldr r2, _020EA5AC ; =0x7FF80000
|
||||
orr r1, r1, r2
|
||||
ldr r3, _020EA5B0 ; =errno
|
||||
mov r4, #0x21
|
||||
str r4, [r3, #0x0]
|
||||
ldmia sp!, {r4-r6,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA5A8: .word 0x7FF00000
|
||||
_020EA5AC: .word 0x7FF80000
|
||||
_020EA5B0: .word errno
|
||||
arm_func_end _dsqrt
|
||||
|
|
|
|||
|
|
@ -1,283 +1,283 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __dadd_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _drsb
|
||||
_drsb: ; 0x020EA5B4
|
||||
eor r1, r1, r3
|
||||
eor r3, r1, r3
|
||||
eor r1, r1, r3
|
||||
eor r0, r0, r2
|
||||
eor r2, r0, r2
|
||||
eor r0, r0, r2
|
||||
|
||||
arm_func_start _dsub
|
||||
_dsub:
|
||||
stmdb sp!, {r4,lr}
|
||||
eors r12, r1, r3
|
||||
eormi r3, r3, #0x80000000
|
||||
bmi __dadd_start
|
||||
.global __dsub_start
|
||||
__dsub_start:
|
||||
subs r12, r0, r2
|
||||
sbcs lr, r1, r3
|
||||
bhs _020EA5FC
|
||||
eor lr, lr, #0x80000000
|
||||
adds r2, r2, r12
|
||||
adc r3, r3, lr
|
||||
subs r0, r0, r12
|
||||
sbc r1, r1, lr
|
||||
_020EA5FC:
|
||||
mov lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
orr r1, lr, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
beq _020EA800
|
||||
mov r4, r3, lsr #0x14
|
||||
orr r3, lr, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs lr, r4, lsl #0x15
|
||||
beq _020EA848
|
||||
_020EA634:
|
||||
subs r4, r12, r4
|
||||
beq _020EA6DC
|
||||
cmp r4, #0x20
|
||||
ble _020EA670
|
||||
cmp r4, #0x38
|
||||
movge r4, #0x3f
|
||||
sub r4, r4, #0x20
|
||||
rsb lr, r4, #0x20
|
||||
orrs lr, r2, r3, lsl lr
|
||||
mov r2, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, #0x0
|
||||
bmi _020EA698
|
||||
b _020EA788
|
||||
_020EA670:
|
||||
rsb lr, r4, #0x20
|
||||
movs lr, r2, lsl lr
|
||||
rsb lr, r4, #0x20
|
||||
mov r2, r2, lsr r4
|
||||
orr r2, r2, r3, lsl lr
|
||||
mov r3, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, r3
|
||||
bpl _020EA788
|
||||
_020EA698:
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA6DC:
|
||||
subs r0, r0, r2
|
||||
sbc r1, r1, r3
|
||||
orrs lr, r1, r0
|
||||
beq _020EA96C
|
||||
mov lr, r12, lsl #0x14
|
||||
and lr, lr, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
cmp r1, #0x0
|
||||
bmi _020EA764
|
||||
bne _020EA714
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA730
|
||||
_020EA714:
|
||||
clz r4, r1
|
||||
movs r1, r1, lsl r4
|
||||
rsb r4, r4, #0x20
|
||||
orr r1, r1, r0, lsr r4
|
||||
rsb r4, r4, #0x20
|
||||
mov r0, r0, lsl r4
|
||||
sub r12, r12, r4
|
||||
_020EA730:
|
||||
cmp r12, #0x0
|
||||
bgt _020EA76C
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA764:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
_020EA76C:
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA788:
|
||||
mov lr, r12, lsl #0x14
|
||||
and lr, lr, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
cmp r1, #0x0
|
||||
bne _020EA7AC
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA7C8
|
||||
_020EA7AC:
|
||||
clz r4, r1
|
||||
movs r1, r1, lsl r4
|
||||
rsb r4, r4, #0x20
|
||||
orr r1, r1, r0, lsr r4
|
||||
rsb r4, r4, #0x20
|
||||
mov r0, r0, lsl r4
|
||||
sub r12, r12, r4
|
||||
_020EA7C8:
|
||||
cmp r12, #0x0
|
||||
orrgt r12, r12, lr, lsr #0x14
|
||||
bgt _020EA698
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA800:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bics r12, r12, #0x800
|
||||
beq _020EA86C
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020EA948
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
beq _020EA934
|
||||
cmn r4, #0x200000
|
||||
bne _020EA934
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020EA95C
|
||||
b _020EA948
|
||||
_020EA848:
|
||||
cmp r4, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bic r12, r12, #0x800
|
||||
bics r4, r4, #0x800
|
||||
beq _020EA8E4
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
bne _020EA948
|
||||
b _020EA934
|
||||
_020EA86C:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020EA8AC
|
||||
mov r12, #0x1
|
||||
bic r1, r1, #0x80000000
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
mov r4, r4, lsr #0x15
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
beq _020EA848
|
||||
orr r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
b _020EA634
|
||||
_020EA8AC:
|
||||
mov r12, r3, lsr #0x14
|
||||
mov r1, r3, lsl #0xb
|
||||
orr r1, r1, r2, lsr #0x15
|
||||
mov r0, r2, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
beq _020EA8D8
|
||||
cmn r4, #0x200000
|
||||
bne _020EA900
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020EA94C
|
||||
b _020EA934
|
||||
_020EA8D8:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020EA96C
|
||||
b _020EA900
|
||||
_020EA8E4:
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020EA910
|
||||
mov r4, #0x1
|
||||
bic r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
b _020EA634
|
||||
_020EA900:
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA910:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA934:
|
||||
ldr r1, _020EA97C ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA948:
|
||||
mov r1, r3
|
||||
_020EA94C:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA95C:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA96C:
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA97C: .word 0x7FF00000
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __dadd_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _drsb
|
||||
_drsb: ; 0x020EA5B4
|
||||
eor r1, r1, r3
|
||||
eor r3, r1, r3
|
||||
eor r1, r1, r3
|
||||
eor r0, r0, r2
|
||||
eor r2, r0, r2
|
||||
eor r0, r0, r2
|
||||
|
||||
arm_func_start _dsub
|
||||
_dsub:
|
||||
stmdb sp!, {r4,lr}
|
||||
eors r12, r1, r3
|
||||
eormi r3, r3, #0x80000000
|
||||
bmi __dadd_start
|
||||
.global __dsub_start
|
||||
__dsub_start:
|
||||
subs r12, r0, r2
|
||||
sbcs lr, r1, r3
|
||||
bhs _020EA5FC
|
||||
eor lr, lr, #0x80000000
|
||||
adds r2, r2, r12
|
||||
adc r3, r3, lr
|
||||
subs r0, r0, r12
|
||||
sbc r1, r1, lr
|
||||
_020EA5FC:
|
||||
mov lr, #0x80000000
|
||||
mov r12, r1, lsr #0x14
|
||||
orr r1, lr, r1, lsl #0xb
|
||||
orr r1, r1, r0, lsr #0x15
|
||||
mov r0, r0, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
beq _020EA800
|
||||
mov r4, r3, lsr #0x14
|
||||
orr r3, lr, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs lr, r4, lsl #0x15
|
||||
beq _020EA848
|
||||
_020EA634:
|
||||
subs r4, r12, r4
|
||||
beq _020EA6DC
|
||||
cmp r4, #0x20
|
||||
ble _020EA670
|
||||
cmp r4, #0x38
|
||||
movge r4, #0x3f
|
||||
sub r4, r4, #0x20
|
||||
rsb lr, r4, #0x20
|
||||
orrs lr, r2, r3, lsl lr
|
||||
mov r2, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, #0x0
|
||||
bmi _020EA698
|
||||
b _020EA788
|
||||
_020EA670:
|
||||
rsb lr, r4, #0x20
|
||||
movs lr, r2, lsl lr
|
||||
rsb lr, r4, #0x20
|
||||
mov r2, r2, lsr r4
|
||||
orr r2, r2, r3, lsl lr
|
||||
mov r3, r3, lsr r4
|
||||
orrne r2, r2, #0x1
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, r3
|
||||
bpl _020EA788
|
||||
_020EA698:
|
||||
movs r2, r0, lsl #0x15
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
mov r1, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
tst r2, #0x80000000
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
movs r2, r2, lsl #0x1
|
||||
andeqs r2, r0, #0x1
|
||||
ldmeqia sp!, {r4,lr}
|
||||
bxeq lr
|
||||
adds r0, r0, #0x1
|
||||
adc r1, r1, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA6DC:
|
||||
subs r0, r0, r2
|
||||
sbc r1, r1, r3
|
||||
orrs lr, r1, r0
|
||||
beq _020EA96C
|
||||
mov lr, r12, lsl #0x14
|
||||
and lr, lr, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
cmp r1, #0x0
|
||||
bmi _020EA764
|
||||
bne _020EA714
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA730
|
||||
_020EA714:
|
||||
clz r4, r1
|
||||
movs r1, r1, lsl r4
|
||||
rsb r4, r4, #0x20
|
||||
orr r1, r1, r0, lsr r4
|
||||
rsb r4, r4, #0x20
|
||||
mov r0, r0, lsl r4
|
||||
sub r12, r12, r4
|
||||
_020EA730:
|
||||
cmp r12, #0x0
|
||||
bgt _020EA76C
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA764:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
_020EA76C:
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA788:
|
||||
mov lr, r12, lsl #0x14
|
||||
and lr, lr, #0x80000000
|
||||
bic r12, r12, #0x800
|
||||
cmp r1, #0x0
|
||||
bne _020EA7AC
|
||||
sub r12, r12, #0x20
|
||||
movs r1, r0
|
||||
mov r0, #0x0
|
||||
bmi _020EA7C8
|
||||
_020EA7AC:
|
||||
clz r4, r1
|
||||
movs r1, r1, lsl r4
|
||||
rsb r4, r4, #0x20
|
||||
orr r1, r1, r0, lsr r4
|
||||
rsb r4, r4, #0x20
|
||||
mov r0, r0, lsl r4
|
||||
sub r12, r12, r4
|
||||
_020EA7C8:
|
||||
cmp r12, #0x0
|
||||
orrgt r12, r12, lr, lsr #0x14
|
||||
bgt _020EA698
|
||||
rsb r12, r12, #0xc
|
||||
cmp r12, #0x20
|
||||
movge r0, r1
|
||||
movge r1, #0x0
|
||||
subge r12, r12, #0x20
|
||||
rsb r4, r12, #0x20
|
||||
mov r0, r0, lsr r12
|
||||
orr r0, r0, r1, lsl r4
|
||||
orr r1, lr, r1, lsr r12
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA800:
|
||||
cmp r12, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bics r12, r12, #0x800
|
||||
beq _020EA86C
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020EA948
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
beq _020EA934
|
||||
cmn r4, #0x200000
|
||||
bne _020EA934
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020EA95C
|
||||
b _020EA948
|
||||
_020EA848:
|
||||
cmp r4, #0x800
|
||||
movge lr, #0x80000000
|
||||
movlt lr, #0x0
|
||||
bic r12, r12, #0x800
|
||||
bics r4, r4, #0x800
|
||||
beq _020EA8E4
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
bne _020EA948
|
||||
b _020EA934
|
||||
_020EA86C:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020EA8AC
|
||||
mov r12, #0x1
|
||||
bic r1, r1, #0x80000000
|
||||
mov r4, r3, lsr #0x14
|
||||
mov r3, r3, lsl #0xb
|
||||
orr r3, r3, r2, lsr #0x15
|
||||
mov r2, r2, lsl #0xb
|
||||
movs r4, r4, lsl #0x15
|
||||
cmnne r4, #0x200000
|
||||
mov r4, r4, lsr #0x15
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
beq _020EA848
|
||||
orr r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
b _020EA634
|
||||
_020EA8AC:
|
||||
mov r12, r3, lsr #0x14
|
||||
mov r1, r3, lsl #0xb
|
||||
orr r1, r1, r2, lsr #0x15
|
||||
mov r0, r2, lsl #0xb
|
||||
movs r4, r12, lsl #0x15
|
||||
beq _020EA8D8
|
||||
cmn r4, #0x200000
|
||||
bne _020EA900
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
bne _020EA94C
|
||||
b _020EA934
|
||||
_020EA8D8:
|
||||
orrs r4, r0, r1, lsl #0x1
|
||||
beq _020EA96C
|
||||
b _020EA900
|
||||
_020EA8E4:
|
||||
orrs r4, r2, r3, lsl #0x1
|
||||
beq _020EA910
|
||||
mov r4, #0x1
|
||||
bic r3, r3, #0x80000000
|
||||
orr r12, r12, lr, lsr #0x14
|
||||
orr r4, r4, lr, lsr #0x14
|
||||
b _020EA634
|
||||
_020EA900:
|
||||
mov r1, r3
|
||||
mov r0, r2
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA910:
|
||||
cmp r1, #0x0
|
||||
subges r12, r12, #0x1
|
||||
mov r0, r0, lsr #0xb
|
||||
orr r0, r0, r1, lsl #0x15
|
||||
add r1, r1, r1
|
||||
orr r1, lr, r1, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA934:
|
||||
ldr r1, _020EA97C ; =0x7FF00000
|
||||
orr r1, lr, r1
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA948:
|
||||
mov r1, r3
|
||||
_020EA94C:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA95C:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
_020EA96C:
|
||||
mov r1, #0x0
|
||||
mov r0, #0x0
|
||||
ldmia sp!, {r4,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EA97C: .word 0x7FF00000
|
||||
|
|
|
|||
|
|
@ -1,165 +1,165 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __fsub_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fadd
|
||||
_fadd: ; 0x020EA980
|
||||
eors r2, r0, r1
|
||||
eormi r1, r1, #0x80000000
|
||||
bmi __fsub_start
|
||||
.global __fadd_start
|
||||
__fadd_start:
|
||||
subs r12, r0, r1
|
||||
subcc r0, r0, r12
|
||||
addcc r1, r1, r12
|
||||
mov r2, #0x80000000
|
||||
mov r3, r0, lsr #0x17
|
||||
orr r0, r2, r0, lsl #0x8
|
||||
ands r12, r3, #0xff
|
||||
cmpne r12, #0xff
|
||||
beq _020EAA20
|
||||
mov r12, r1, lsr #0x17
|
||||
orr r1, r2, r1, lsl #0x8
|
||||
ands r2, r12, #0xff
|
||||
beq _020EAA60
|
||||
_020EA9C0:
|
||||
subs r12, r3, r12
|
||||
beq _020EA9D8
|
||||
rsb r2, r12, #0x20
|
||||
movs r2, r1, lsl r2
|
||||
mov r1, r1, lsr r12
|
||||
orrne r1, r1, #0x1
|
||||
_020EA9D8:
|
||||
adds r0, r0, r1
|
||||
blo _020EA9F8
|
||||
and r1, r0, #0x1
|
||||
orr r0, r1, r0, rrx
|
||||
add r3, r3, #0x1
|
||||
and r2, r3, #0xff
|
||||
cmp r2, #0xff
|
||||
beq _020EAB68
|
||||
_020EA9F8:
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EAA20:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
ands r3, r3, #0xff
|
||||
beq _020EAA84
|
||||
movs r0, r0, lsl #0x1
|
||||
bne _020EAB94
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAB88
|
||||
cmp r12, #0xff
|
||||
blt _020EAB88
|
||||
cmp r1, #0x0
|
||||
beq _020EAB88
|
||||
b _020EAB94
|
||||
_020EAA60:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
and r3, r3, #0xff
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAAE0
|
||||
_020EAA78:
|
||||
movs r1, r1, lsl #0x1
|
||||
bne _020EAB94
|
||||
b _020EAB88
|
||||
_020EAA84:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EAABC
|
||||
mov r3, #0x1
|
||||
mov r0, r0, lsr #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAAE0
|
||||
cmp r12, #0xff
|
||||
beq _020EAA78
|
||||
orr r1, r1, #0x80000000
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
b _020EA9C0
|
||||
_020EAABC:
|
||||
mov r3, r1, lsr #0x17
|
||||
mov r0, r1, lsl #0x9
|
||||
ands r3, r3, #0xff
|
||||
beq _020EAB48
|
||||
cmp r3, #0xff
|
||||
blt _020EAB48
|
||||
cmp r0, #0x0
|
||||
beq _020EAB88
|
||||
b _020EAB80
|
||||
_020EAAE0:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EAB50
|
||||
mov r1, r1, lsr #0x1
|
||||
mov r12, #0x1
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
cmp r0, #0x0
|
||||
bmi _020EA9C0
|
||||
adds r0, r0, r1
|
||||
blo _020EAB14
|
||||
and r1, r0, #0x1
|
||||
orr r0, r1, r0, rrx
|
||||
add r12, r12, #0x1
|
||||
_020EAB14:
|
||||
cmp r0, #0x0
|
||||
subge r12, r12, #0x1
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r12, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EAB48:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_020EAB50:
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EAB68:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EAB80:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EAB88:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EAB94:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EAB9C: ; 0x020EAB9C
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __fsub_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fadd
|
||||
_fadd: ; 0x020EA980
|
||||
eors r2, r0, r1
|
||||
eormi r1, r1, #0x80000000
|
||||
bmi __fsub_start
|
||||
.global __fadd_start
|
||||
__fadd_start:
|
||||
subs r12, r0, r1
|
||||
subcc r0, r0, r12
|
||||
addcc r1, r1, r12
|
||||
mov r2, #0x80000000
|
||||
mov r3, r0, lsr #0x17
|
||||
orr r0, r2, r0, lsl #0x8
|
||||
ands r12, r3, #0xff
|
||||
cmpne r12, #0xff
|
||||
beq _020EAA20
|
||||
mov r12, r1, lsr #0x17
|
||||
orr r1, r2, r1, lsl #0x8
|
||||
ands r2, r12, #0xff
|
||||
beq _020EAA60
|
||||
_020EA9C0:
|
||||
subs r12, r3, r12
|
||||
beq _020EA9D8
|
||||
rsb r2, r12, #0x20
|
||||
movs r2, r1, lsl r2
|
||||
mov r1, r1, lsr r12
|
||||
orrne r1, r1, #0x1
|
||||
_020EA9D8:
|
||||
adds r0, r0, r1
|
||||
blo _020EA9F8
|
||||
and r1, r0, #0x1
|
||||
orr r0, r1, r0, rrx
|
||||
add r3, r3, #0x1
|
||||
and r2, r3, #0xff
|
||||
cmp r2, #0xff
|
||||
beq _020EAB68
|
||||
_020EA9F8:
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EAA20:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
ands r3, r3, #0xff
|
||||
beq _020EAA84
|
||||
movs r0, r0, lsl #0x1
|
||||
bne _020EAB94
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAB88
|
||||
cmp r12, #0xff
|
||||
blt _020EAB88
|
||||
cmp r1, #0x0
|
||||
beq _020EAB88
|
||||
b _020EAB94
|
||||
_020EAA60:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
and r3, r3, #0xff
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAAE0
|
||||
_020EAA78:
|
||||
movs r1, r1, lsl #0x1
|
||||
bne _020EAB94
|
||||
b _020EAB88
|
||||
_020EAA84:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EAABC
|
||||
mov r3, #0x1
|
||||
mov r0, r0, lsr #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EAAE0
|
||||
cmp r12, #0xff
|
||||
beq _020EAA78
|
||||
orr r1, r1, #0x80000000
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
b _020EA9C0
|
||||
_020EAABC:
|
||||
mov r3, r1, lsr #0x17
|
||||
mov r0, r1, lsl #0x9
|
||||
ands r3, r3, #0xff
|
||||
beq _020EAB48
|
||||
cmp r3, #0xff
|
||||
blt _020EAB48
|
||||
cmp r0, #0x0
|
||||
beq _020EAB88
|
||||
b _020EAB80
|
||||
_020EAAE0:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EAB50
|
||||
mov r1, r1, lsr #0x1
|
||||
mov r12, #0x1
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
cmp r0, #0x0
|
||||
bmi _020EA9C0
|
||||
adds r0, r0, r1
|
||||
blo _020EAB14
|
||||
and r1, r0, #0x1
|
||||
orr r0, r1, r0, rrx
|
||||
add r12, r12, #0x1
|
||||
_020EAB14:
|
||||
cmp r0, #0x0
|
||||
subge r12, r12, #0x1
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r12, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EAB48:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_020EAB50:
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EAB68:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EAB80:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EAB88:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EAB94:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EAB9C: ; 0x020EAB9C
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,376 +1,376 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dgr
|
||||
_dgr: ; 0x020EABA4
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAC18
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAC2C
|
||||
_020EABB8:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EABE8
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movhi r0, #0x1
|
||||
movls r0, #0x0
|
||||
bx lr
|
||||
_020EABD4:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EABE8:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movhi r0, #0x1
|
||||
movls r0, #0x0
|
||||
bx lr
|
||||
_020EAC18:
|
||||
bne _020EABD4
|
||||
cmp r0, #0x0
|
||||
bhi _020EABD4
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EABB8
|
||||
_020EAC2C:
|
||||
bne _020EABD4
|
||||
cmp r2, #0x0
|
||||
bhi _020EABD4
|
||||
b _020EABB8
|
||||
|
||||
arm_func_start _dleq
|
||||
_dleq: ; 0x020EAC3C
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EACBC
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EACD0
|
||||
_020EAC50:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAC84
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movls r0, #0x1
|
||||
movhi r0, #0x0
|
||||
bx lr
|
||||
_020EAC6C:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAC84:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x1
|
||||
bne _020EACA8
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
orr r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
_020EACA8:
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movls r0, #0x1
|
||||
movhi r0, #0x0
|
||||
bx lr
|
||||
_020EACBC:
|
||||
bne _020EAC6C
|
||||
cmp r0, #0x0
|
||||
bhi _020EAC6C
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAC50
|
||||
_020EACD0:
|
||||
bne _020EAC6C
|
||||
cmp r2, #0x0
|
||||
bhi _020EAC6C
|
||||
b _020EAC50
|
||||
|
||||
arm_func_start _dls
|
||||
_dls: ; 0x020EACE0
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAD58
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAD6C
|
||||
_020EACF4:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAD24
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movcc r0, #0x1
|
||||
movcs r0, #0x0
|
||||
bx lr
|
||||
_020EAD10:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAD24:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
bne _020EAD44
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
_020EAD44:
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movcc r0, #0x1
|
||||
movcs r0, #0x0
|
||||
bx lr
|
||||
_020EAD58:
|
||||
bne _020EAD10
|
||||
cmp r0, #0x0
|
||||
bhi _020EAD10
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EACF4
|
||||
_020EAD6C:
|
||||
bne _020EAD10
|
||||
cmp r2, #0x0
|
||||
bhi _020EAD10
|
||||
b _020EACF4
|
||||
|
||||
arm_func_start _deq
|
||||
_deq: ; 0x020EAD7C
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EADE4
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EADF8
|
||||
_020EAD90:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EADC0
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
bx lr
|
||||
_020EADAC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EADC0:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x1
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
bx lr
|
||||
_020EADE4:
|
||||
bne _020EADAC
|
||||
cmp r0, #0x0
|
||||
bhi _020EADAC
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAD90
|
||||
_020EADF8:
|
||||
bne _020EADAC
|
||||
cmp r2, #0x0
|
||||
bhi _020EADAC
|
||||
b _020EAD90
|
||||
|
||||
arm_func_start _dneq
|
||||
_dneq: ; 0x020EAE08
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAE70
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAE84
|
||||
_020EAE1C:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAE4C
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
bx lr
|
||||
_020EAE38:
|
||||
mov r0, #0x1
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAE4C:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
bx lr
|
||||
_020EAE70:
|
||||
bne _020EAE38
|
||||
cmp r0, #0x0
|
||||
bhi _020EAE38
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAE1C
|
||||
_020EAE84:
|
||||
bne _020EAE38
|
||||
cmp r2, #0x0
|
||||
bhi _020EAE38
|
||||
b _020EAE1C
|
||||
|
||||
arm_func_start _fgeq
|
||||
_fgeq: ; 0x020EAE94
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAEDC
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movge r0, #0x1
|
||||
movlt r0, #0x0
|
||||
mrs r12, cpsr
|
||||
biclt r12, r12, #0x20000000
|
||||
orrge r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAEDC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fgr
|
||||
_fgr: ; 0x020EAEF0
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAF38
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movgt r0, #0x1
|
||||
movle r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bicle r12, r12, #0x20000000
|
||||
orrgt r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAF38:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fleq
|
||||
_fleq: ; 0x020EAF4C
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAF9C
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movle r0, #0x1
|
||||
movgt r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orrgt r12, r12, #0x20000000
|
||||
bicgt r12, r12, #0x40000000
|
||||
bicle r12, r12, #0x20000000
|
||||
orrle r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAF9C:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fls
|
||||
_fls: ; 0x020EAFB4
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAFFC
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movlt r0, #0x1
|
||||
movge r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orrge r12, r12, #0x20000000
|
||||
biclt r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAFFC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _feq
|
||||
_feq: ; 0x020EB010
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
blo _020EB064
|
||||
cmp r3, r1, lsl #0x1
|
||||
blo _020EB064
|
||||
orr r3, r0, r1
|
||||
movs r3, r3, lsl #0x1
|
||||
moveq r0, #0x0
|
||||
bne _020EB044
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EB044:
|
||||
cmp r0, r1
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bicne r12, r12, #0x40000000
|
||||
orreq r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EB064:
|
||||
mov r0, #0x1
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _dgr
|
||||
_dgr: ; 0x020EABA4
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAC18
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAC2C
|
||||
_020EABB8:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EABE8
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movhi r0, #0x1
|
||||
movls r0, #0x0
|
||||
bx lr
|
||||
_020EABD4:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EABE8:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movhi r0, #0x1
|
||||
movls r0, #0x0
|
||||
bx lr
|
||||
_020EAC18:
|
||||
bne _020EABD4
|
||||
cmp r0, #0x0
|
||||
bhi _020EABD4
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EABB8
|
||||
_020EAC2C:
|
||||
bne _020EABD4
|
||||
cmp r2, #0x0
|
||||
bhi _020EABD4
|
||||
b _020EABB8
|
||||
|
||||
arm_func_start _dleq
|
||||
_dleq: ; 0x020EAC3C
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EACBC
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EACD0
|
||||
_020EAC50:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAC84
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movls r0, #0x1
|
||||
movhi r0, #0x0
|
||||
bx lr
|
||||
_020EAC6C:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAC84:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x1
|
||||
bne _020EACA8
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
orr r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
_020EACA8:
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movls r0, #0x1
|
||||
movhi r0, #0x0
|
||||
bx lr
|
||||
_020EACBC:
|
||||
bne _020EAC6C
|
||||
cmp r0, #0x0
|
||||
bhi _020EAC6C
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAC50
|
||||
_020EACD0:
|
||||
bne _020EAC6C
|
||||
cmp r2, #0x0
|
||||
bhi _020EAC6C
|
||||
b _020EAC50
|
||||
|
||||
arm_func_start _dls
|
||||
_dls: ; 0x020EACE0
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAD58
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAD6C
|
||||
_020EACF4:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAD24
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movcc r0, #0x1
|
||||
movcs r0, #0x0
|
||||
bx lr
|
||||
_020EAD10:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAD24:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
bne _020EAD44
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bxeq lr
|
||||
_020EAD44:
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movcc r0, #0x1
|
||||
movcs r0, #0x0
|
||||
bx lr
|
||||
_020EAD58:
|
||||
bne _020EAD10
|
||||
cmp r0, #0x0
|
||||
bhi _020EAD10
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EACF4
|
||||
_020EAD6C:
|
||||
bne _020EAD10
|
||||
cmp r2, #0x0
|
||||
bhi _020EAD10
|
||||
b _020EACF4
|
||||
|
||||
arm_func_start _deq
|
||||
_deq: ; 0x020EAD7C
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EADE4
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EADF8
|
||||
_020EAD90:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EADC0
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
bx lr
|
||||
_020EADAC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EADC0:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x1
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
bx lr
|
||||
_020EADE4:
|
||||
bne _020EADAC
|
||||
cmp r0, #0x0
|
||||
bhi _020EADAC
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAD90
|
||||
_020EADF8:
|
||||
bne _020EADAC
|
||||
cmp r2, #0x0
|
||||
bhi _020EADAC
|
||||
b _020EAD90
|
||||
|
||||
arm_func_start _dneq
|
||||
_dneq: ; 0x020EAE08
|
||||
mov r12, #0x200000
|
||||
cmn r12, r1, lsl #0x1
|
||||
bhs _020EAE70
|
||||
cmn r12, r3, lsl #0x1
|
||||
bhs _020EAE84
|
||||
_020EAE1C:
|
||||
orrs r12, r3, r1
|
||||
bmi _020EAE4C
|
||||
cmp r1, r3
|
||||
cmpeq r0, r2
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
bx lr
|
||||
_020EAE38:
|
||||
mov r0, #0x1
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAE4C:
|
||||
orr r12, r0, r12, lsl #0x1
|
||||
orrs r12, r12, r2
|
||||
moveq r0, #0x0
|
||||
bxeq lr
|
||||
cmp r3, r1
|
||||
cmpeq r2, r0
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
bx lr
|
||||
_020EAE70:
|
||||
bne _020EAE38
|
||||
cmp r0, #0x0
|
||||
bhi _020EAE38
|
||||
cmn r12, r3, lsl #0x1
|
||||
blo _020EAE1C
|
||||
_020EAE84:
|
||||
bne _020EAE38
|
||||
cmp r2, #0x0
|
||||
bhi _020EAE38
|
||||
b _020EAE1C
|
||||
|
||||
arm_func_start _fgeq
|
||||
_fgeq: ; 0x020EAE94
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAEDC
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movge r0, #0x1
|
||||
movlt r0, #0x0
|
||||
mrs r12, cpsr
|
||||
biclt r12, r12, #0x20000000
|
||||
orrge r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAEDC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fgr
|
||||
_fgr: ; 0x020EAEF0
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAF38
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movgt r0, #0x1
|
||||
movle r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bicle r12, r12, #0x20000000
|
||||
orrgt r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAF38:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fleq
|
||||
_fleq: ; 0x020EAF4C
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAF9C
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movle r0, #0x1
|
||||
movgt r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orrgt r12, r12, #0x20000000
|
||||
bicgt r12, r12, #0x40000000
|
||||
bicle r12, r12, #0x20000000
|
||||
orrle r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAF9C:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _fls
|
||||
_fls: ; 0x020EAFB4
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
cmpcs r3, r1, lsl #0x1
|
||||
blo _020EAFFC
|
||||
cmp r0, #0x0
|
||||
bicmi r0, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r1, #0x0
|
||||
bicmi r1, r1, #0x80000000
|
||||
rsbmi r1, r1, #0x0
|
||||
cmp r0, r1
|
||||
movlt r0, #0x1
|
||||
movge r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orrge r12, r12, #0x20000000
|
||||
biclt r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EAFFC:
|
||||
mov r0, #0x0
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x20000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
||||
arm_func_start _feq
|
||||
_feq: ; 0x020EB010
|
||||
mov r3, #0xff000000
|
||||
cmp r3, r0, lsl #0x1
|
||||
blo _020EB064
|
||||
cmp r3, r1, lsl #0x1
|
||||
blo _020EB064
|
||||
orr r3, r0, r1
|
||||
movs r3, r3, lsl #0x1
|
||||
moveq r0, #0x0
|
||||
bne _020EB044
|
||||
mrs r12, cpsr
|
||||
orr r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EB044:
|
||||
cmp r0, r1
|
||||
movne r0, #0x1
|
||||
moveq r0, #0x0
|
||||
mrs r12, cpsr
|
||||
bicne r12, r12, #0x40000000
|
||||
orreq r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
_020EB064:
|
||||
mov r0, #0x1
|
||||
mrs r12, cpsr
|
||||
bic r12, r12, #0x40000000
|
||||
msr cpsr_f, r12
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,225 +1,225 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _frdiv
|
||||
_frdiv: ; 0x020EB078
|
||||
eor r0, r0, r1
|
||||
eor r1, r0, r1
|
||||
eor r0, r0, r1
|
||||
|
||||
arm_func_start _fdiv
|
||||
_fdiv: ; 0x020EB084
|
||||
stmdb sp!, {lr}
|
||||
mov r12, #0xff
|
||||
ands r3, r12, r0, lsr #0x17
|
||||
cmpne r3, #0xff
|
||||
beq _020EB258
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
cmpne r12, #0xff
|
||||
beq _020EB294
|
||||
orr r1, r1, #0x800000
|
||||
orr r0, r0, #0x800000
|
||||
bic r2, r0, #0xff000000
|
||||
bic lr, r1, #0xff000000
|
||||
_020EB0B4:
|
||||
cmp r2, lr
|
||||
movcc r2, r2, lsl #0x1
|
||||
subcc r3, r3, #0x1
|
||||
teq r0, r1
|
||||
sub r0, pc, #0x94 ; _020EB138 - #0x100
|
||||
ldrb r1, [r0, lr, lsr #0xf]
|
||||
rsb lr, lr, #0x0
|
||||
mov r0, lr, asr #0x1
|
||||
mul r0, r1, r0
|
||||
add r0, r0, #0x80000000
|
||||
mov r0, r0, lsr #0x6
|
||||
mul r0, r1, r0
|
||||
mov r0, r0, lsr #0xe
|
||||
mul r1, lr, r0
|
||||
sub r12, r3, r12
|
||||
mov r1, r1, lsr #0xc
|
||||
mul r1, r0, r1
|
||||
mov r0, r0, lsl #0xe
|
||||
add r0, r0, r1, lsr #0xf
|
||||
umull r1, r0, r2, r0
|
||||
mov r3, r0
|
||||
orrmi r0, r0, #0x80000000
|
||||
adds r12, r12, #0x7e
|
||||
bmi _020EB35C
|
||||
cmp r12, #0xfe
|
||||
bge _020EB410
|
||||
add r0, r0, r12, lsl #0x17
|
||||
mov r12, r1, lsr #0x1c
|
||||
cmp r12, #0x7
|
||||
beq _020EB238
|
||||
add r0, r0, r1, lsr #0x1f
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB138: ; not code
|
||||
.byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9
|
||||
.byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA
|
||||
.byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE
|
||||
.byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2
|
||||
.byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8
|
||||
.byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF
|
||||
.byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6
|
||||
.byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF
|
||||
.byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7
|
||||
.byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1
|
||||
.byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B
|
||||
.byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95
|
||||
.byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90
|
||||
.byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B
|
||||
.byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86
|
||||
.byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82
|
||||
.byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
|
||||
_020EB238:
|
||||
mov r1, r3, lsl #0x1
|
||||
add r1, r1, #0x1
|
||||
rsb lr, lr, #0x0
|
||||
mul r1, lr, r1
|
||||
cmp r1, r2, lsl #0x18
|
||||
addmi r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB258:
|
||||
eor lr, r0, r1
|
||||
and lr, lr, #0x80000000
|
||||
cmp r3, #0x0
|
||||
beq _020EB2B0
|
||||
movs r0, r0, lsl #0x9
|
||||
bne _020EB3F8
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB3E8
|
||||
cmp r12, #0xff
|
||||
blt _020EB3E8
|
||||
cmp r1, #0x0
|
||||
beq _020EB404
|
||||
b _020EB3E0
|
||||
_020EB294:
|
||||
eor lr, r0, r1
|
||||
and lr, lr, #0x80000000
|
||||
cmp r12, #0x0
|
||||
beq _020EB314
|
||||
_020EB2A4:
|
||||
movs r1, r1, lsl #0x9
|
||||
bne _020EB3E0
|
||||
b _020EB430
|
||||
_020EB2B0:
|
||||
movs r2, r0, lsl #0x9
|
||||
beq _020EB2E4
|
||||
clz r3, r2
|
||||
movs r2, r2, lsl r3
|
||||
rsb r3, r3, #0x0
|
||||
mov r2, r2, lsr #0x8
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
beq _020EB33C
|
||||
cmp r12, #0xff
|
||||
beq _020EB2A4
|
||||
orr r1, r1, #0x800000
|
||||
bic lr, r1, #0xff000000
|
||||
b _020EB0B4
|
||||
_020EB2E4:
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB308
|
||||
cmp r12, #0xff
|
||||
blt _020EB430
|
||||
cmp r1, #0x0
|
||||
beq _020EB430
|
||||
b _020EB3E0
|
||||
_020EB308:
|
||||
cmp r1, #0x0
|
||||
beq _020EB404
|
||||
b _020EB430
|
||||
_020EB314:
|
||||
movs r12, r1, lsl #0x9
|
||||
beq _020EB3E8
|
||||
mov lr, r12
|
||||
clz r12, lr
|
||||
movs lr, lr, lsl r12
|
||||
rsb r12, r12, #0x0
|
||||
mov lr, lr, lsr #0x8
|
||||
orr r0, r0, #0x800000
|
||||
bic r2, r0, #0xff000000
|
||||
b _020EB0B4
|
||||
_020EB33C:
|
||||
movs r12, r1, lsl #0x9
|
||||
beq _020EB3E8
|
||||
mov lr, r12
|
||||
clz r12, lr
|
||||
movs lr, lr, lsl r12
|
||||
rsb r12, r12, #0x0
|
||||
mov lr, lr, lsr #0x8
|
||||
b _020EB0B4
|
||||
_020EB35C:
|
||||
and r0, r0, #0x80000000
|
||||
cmn r12, #0x18
|
||||
beq _020EB3D0
|
||||
bmi _020EB428
|
||||
add r1, r12, #0x17
|
||||
mov r2, r2, lsl r1
|
||||
rsb r12, r12, #0x0
|
||||
mov r3, r3, lsr r12
|
||||
orr r0, r0, r3
|
||||
rsb lr, lr, #0x0
|
||||
mul r1, lr, r3
|
||||
cmp r1, r2
|
||||
ldmeqia sp!, {lr}
|
||||
bxeq lr
|
||||
add r1, r1, lr
|
||||
cmp r1, r2
|
||||
beq _020EB3C4
|
||||
addmi r0, r0, #0x1
|
||||
subpl r1, r1, lr
|
||||
add r1, lr, r1, lsl #0x1
|
||||
cmp r1, r2, lsl #0x1
|
||||
and r3, r0, #0x1
|
||||
addmi r0, r0, #0x1
|
||||
addeq r0, r0, r3
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3C4:
|
||||
add r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3D0:
|
||||
cmn r2, lr
|
||||
addne r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3E0:
|
||||
mov r0, r1
|
||||
b _020EB3F8
|
||||
_020EB3E8:
|
||||
mov r0, #0xff000000
|
||||
orr r0, lr, r0, lsr #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3F8:
|
||||
mvn r0, #0x80000000
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB404:
|
||||
mvn r0, #0x80000000
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB410:
|
||||
tst r0, #0x80000000
|
||||
mov r0, #0xff000000
|
||||
movne r0, r0, asr #0x1
|
||||
moveq r0, r0, lsr #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB428:
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB430:
|
||||
mov r0, lr
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _frdiv
|
||||
_frdiv: ; 0x020EB078
|
||||
eor r0, r0, r1
|
||||
eor r1, r0, r1
|
||||
eor r0, r0, r1
|
||||
|
||||
arm_func_start _fdiv
|
||||
_fdiv: ; 0x020EB084
|
||||
stmdb sp!, {lr}
|
||||
mov r12, #0xff
|
||||
ands r3, r12, r0, lsr #0x17
|
||||
cmpne r3, #0xff
|
||||
beq _020EB258
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
cmpne r12, #0xff
|
||||
beq _020EB294
|
||||
orr r1, r1, #0x800000
|
||||
orr r0, r0, #0x800000
|
||||
bic r2, r0, #0xff000000
|
||||
bic lr, r1, #0xff000000
|
||||
_020EB0B4:
|
||||
cmp r2, lr
|
||||
movcc r2, r2, lsl #0x1
|
||||
subcc r3, r3, #0x1
|
||||
teq r0, r1
|
||||
sub r0, pc, #0x94 ; _020EB138 - #0x100
|
||||
ldrb r1, [r0, lr, lsr #0xf]
|
||||
rsb lr, lr, #0x0
|
||||
mov r0, lr, asr #0x1
|
||||
mul r0, r1, r0
|
||||
add r0, r0, #0x80000000
|
||||
mov r0, r0, lsr #0x6
|
||||
mul r0, r1, r0
|
||||
mov r0, r0, lsr #0xe
|
||||
mul r1, lr, r0
|
||||
sub r12, r3, r12
|
||||
mov r1, r1, lsr #0xc
|
||||
mul r1, r0, r1
|
||||
mov r0, r0, lsl #0xe
|
||||
add r0, r0, r1, lsr #0xf
|
||||
umull r1, r0, r2, r0
|
||||
mov r3, r0
|
||||
orrmi r0, r0, #0x80000000
|
||||
adds r12, r12, #0x7e
|
||||
bmi _020EB35C
|
||||
cmp r12, #0xfe
|
||||
bge _020EB410
|
||||
add r0, r0, r12, lsl #0x17
|
||||
mov r12, r1, lsr #0x1c
|
||||
cmp r12, #0x7
|
||||
beq _020EB238
|
||||
add r0, r0, r1, lsr #0x1f
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB138: ; not code
|
||||
.byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9
|
||||
.byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA
|
||||
.byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE
|
||||
.byte 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xD7, 0xD6, 0xD5, 0xD4, 0xD4, 0xD3, 0xD2
|
||||
.byte 0xD2, 0xD1, 0xD0, 0xD0, 0xCF, 0xCE, 0xCE, 0xCD, 0xCC, 0xCC, 0xCB, 0xCB, 0xCA, 0xC9, 0xC9, 0xC8
|
||||
.byte 0xC8, 0xC7, 0xC6, 0xC6, 0xC5, 0xC5, 0xC4, 0xC3, 0xC3, 0xC2, 0xC2, 0xC1, 0xC0, 0xC0, 0xBF, 0xBF
|
||||
.byte 0xBE, 0xBE, 0xBD, 0xBD, 0xBC, 0xBC, 0xBB, 0xBA, 0xBA, 0xB9, 0xB9, 0xB8, 0xB8, 0xB7, 0xB7, 0xB6
|
||||
.byte 0xB6, 0xB5, 0xB5, 0xB4, 0xB4, 0xB3, 0xB3, 0xB2, 0xB2, 0xB1, 0xB1, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF
|
||||
.byte 0xAE, 0xAE, 0xAD, 0xAD, 0xAC, 0xAC, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA8, 0xA8, 0xA7
|
||||
.byte 0xA7, 0xA7, 0xA6, 0xA6, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA1, 0xA1
|
||||
.byte 0xA0, 0xA0, 0xA0, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B
|
||||
.byte 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x96, 0x96, 0x96, 0x95, 0x95
|
||||
.byte 0x95, 0x94, 0x94, 0x94, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x90, 0x90
|
||||
.byte 0x90, 0x8F, 0x8F, 0x8F, 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B, 0x8B
|
||||
.byte 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x86
|
||||
.byte 0x86, 0x86, 0x86, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82
|
||||
.byte 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80
|
||||
_020EB238:
|
||||
mov r1, r3, lsl #0x1
|
||||
add r1, r1, #0x1
|
||||
rsb lr, lr, #0x0
|
||||
mul r1, lr, r1
|
||||
cmp r1, r2, lsl #0x18
|
||||
addmi r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB258:
|
||||
eor lr, r0, r1
|
||||
and lr, lr, #0x80000000
|
||||
cmp r3, #0x0
|
||||
beq _020EB2B0
|
||||
movs r0, r0, lsl #0x9
|
||||
bne _020EB3F8
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB3E8
|
||||
cmp r12, #0xff
|
||||
blt _020EB3E8
|
||||
cmp r1, #0x0
|
||||
beq _020EB404
|
||||
b _020EB3E0
|
||||
_020EB294:
|
||||
eor lr, r0, r1
|
||||
and lr, lr, #0x80000000
|
||||
cmp r12, #0x0
|
||||
beq _020EB314
|
||||
_020EB2A4:
|
||||
movs r1, r1, lsl #0x9
|
||||
bne _020EB3E0
|
||||
b _020EB430
|
||||
_020EB2B0:
|
||||
movs r2, r0, lsl #0x9
|
||||
beq _020EB2E4
|
||||
clz r3, r2
|
||||
movs r2, r2, lsl r3
|
||||
rsb r3, r3, #0x0
|
||||
mov r2, r2, lsr #0x8
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
beq _020EB33C
|
||||
cmp r12, #0xff
|
||||
beq _020EB2A4
|
||||
orr r1, r1, #0x800000
|
||||
bic lr, r1, #0xff000000
|
||||
b _020EB0B4
|
||||
_020EB2E4:
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB308
|
||||
cmp r12, #0xff
|
||||
blt _020EB430
|
||||
cmp r1, #0x0
|
||||
beq _020EB430
|
||||
b _020EB3E0
|
||||
_020EB308:
|
||||
cmp r1, #0x0
|
||||
beq _020EB404
|
||||
b _020EB430
|
||||
_020EB314:
|
||||
movs r12, r1, lsl #0x9
|
||||
beq _020EB3E8
|
||||
mov lr, r12
|
||||
clz r12, lr
|
||||
movs lr, lr, lsl r12
|
||||
rsb r12, r12, #0x0
|
||||
mov lr, lr, lsr #0x8
|
||||
orr r0, r0, #0x800000
|
||||
bic r2, r0, #0xff000000
|
||||
b _020EB0B4
|
||||
_020EB33C:
|
||||
movs r12, r1, lsl #0x9
|
||||
beq _020EB3E8
|
||||
mov lr, r12
|
||||
clz r12, lr
|
||||
movs lr, lr, lsl r12
|
||||
rsb r12, r12, #0x0
|
||||
mov lr, lr, lsr #0x8
|
||||
b _020EB0B4
|
||||
_020EB35C:
|
||||
and r0, r0, #0x80000000
|
||||
cmn r12, #0x18
|
||||
beq _020EB3D0
|
||||
bmi _020EB428
|
||||
add r1, r12, #0x17
|
||||
mov r2, r2, lsl r1
|
||||
rsb r12, r12, #0x0
|
||||
mov r3, r3, lsr r12
|
||||
orr r0, r0, r3
|
||||
rsb lr, lr, #0x0
|
||||
mul r1, lr, r3
|
||||
cmp r1, r2
|
||||
ldmeqia sp!, {lr}
|
||||
bxeq lr
|
||||
add r1, r1, lr
|
||||
cmp r1, r2
|
||||
beq _020EB3C4
|
||||
addmi r0, r0, #0x1
|
||||
subpl r1, r1, lr
|
||||
add r1, lr, r1, lsl #0x1
|
||||
cmp r1, r2, lsl #0x1
|
||||
and r3, r0, #0x1
|
||||
addmi r0, r0, #0x1
|
||||
addeq r0, r0, r3
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3C4:
|
||||
add r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3D0:
|
||||
cmn r2, lr
|
||||
addne r0, r0, #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3E0:
|
||||
mov r0, r1
|
||||
b _020EB3F8
|
||||
_020EB3E8:
|
||||
mov r0, #0xff000000
|
||||
orr r0, lr, r0, lsr #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB3F8:
|
||||
mvn r0, #0x80000000
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB404:
|
||||
mvn r0, #0x80000000
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB410:
|
||||
tst r0, #0x80000000
|
||||
mov r0, #0xff000000
|
||||
movne r0, r0, asr #0x1
|
||||
moveq r0, r0, lsr #0x1
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB428:
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
_020EB430:
|
||||
mov r0, lr
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,46 +1,46 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _f2d
|
||||
_f2d:
|
||||
and r2, r0, #0x80000000
|
||||
mov r12, r0, lsr #0x17
|
||||
mov r3, r0, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB46C
|
||||
cmp r12, #0xff
|
||||
beq _020EB498
|
||||
_020EB458:
|
||||
add r12, r12, #0x380
|
||||
mov r0, r3, lsl #0x14
|
||||
orr r1, r2, r3, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
bx lr
|
||||
_020EB46C:
|
||||
cmp r3, #0x0
|
||||
bne _020EB480
|
||||
mov r1, r2
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB480:
|
||||
mov r3, r3, lsr #0x1
|
||||
clz r12, r3
|
||||
movs r3, r3, lsl r12
|
||||
rsb r12, r12, #0x1
|
||||
add r3, r3, r3
|
||||
b _020EB458
|
||||
_020EB498:
|
||||
cmp r3, #0x0
|
||||
bhi _020EB4B0
|
||||
ldr r1, _020EB4BC ; =0x7FF00000
|
||||
orr r1, r1, r2
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB4B0:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EB4BC: .word 0x7FF00000
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _f2d
|
||||
_f2d:
|
||||
and r2, r0, #0x80000000
|
||||
mov r12, r0, lsr #0x17
|
||||
mov r3, r0, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB46C
|
||||
cmp r12, #0xff
|
||||
beq _020EB498
|
||||
_020EB458:
|
||||
add r12, r12, #0x380
|
||||
mov r0, r3, lsl #0x14
|
||||
orr r1, r2, r3, lsr #0xc
|
||||
orr r1, r1, r12, lsl #0x14
|
||||
bx lr
|
||||
_020EB46C:
|
||||
cmp r3, #0x0
|
||||
bne _020EB480
|
||||
mov r1, r2
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB480:
|
||||
mov r3, r3, lsr #0x1
|
||||
clz r12, r3
|
||||
movs r3, r3, lsl r12
|
||||
rsb r12, r12, #0x1
|
||||
add r3, r3, r3
|
||||
b _020EB458
|
||||
_020EB498:
|
||||
cmp r3, #0x0
|
||||
bhi _020EB4B0
|
||||
ldr r1, _020EB4BC ; =0x7FF00000
|
||||
orr r1, r1, r2
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB4B0:
|
||||
mvn r0, #0x0
|
||||
bic r1, r0, #0x80000000
|
||||
bx lr
|
||||
.balign 4
|
||||
_020EB4BC: .word 0x7FF00000
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ffix
|
||||
_ffix: ; 0x020EB4C0
|
||||
bic r1, r0, #0x80000000
|
||||
mov r2, #0x9e
|
||||
subs r2, r2, r1, lsr #0x17
|
||||
ble _020EB4E8
|
||||
mov r1, r1, lsl #0x8
|
||||
orr r1, r1, #0x80000000
|
||||
cmp r0, #0x0
|
||||
mov r0, r1, lsr r2
|
||||
rsbmi r0, r0, #0x0
|
||||
bx lr
|
||||
_020EB4E8:
|
||||
mvn r0, r0, asr #0x1f
|
||||
add r0, r0, #0x80000000
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ffix
|
||||
_ffix: ; 0x020EB4C0
|
||||
bic r1, r0, #0x80000000
|
||||
mov r2, #0x9e
|
||||
subs r2, r2, r1, lsr #0x17
|
||||
ble _020EB4E8
|
||||
mov r1, r1, lsl #0x8
|
||||
orr r1, r1, #0x80000000
|
||||
cmp r0, #0x0
|
||||
mov r0, r1, lsr r2
|
||||
rsbmi r0, r0, #0x0
|
||||
bx lr
|
||||
_020EB4E8:
|
||||
mvn r0, r0, asr #0x1f
|
||||
add r0, r0, #0x80000000
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,25 +1,25 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ffixu
|
||||
_ffixu: ; 0x020EB4F4
|
||||
tst r0, #0x80000000
|
||||
bne _020EB518
|
||||
mov r1, #0x9e
|
||||
subs r1, r1, r0, lsr #0x17
|
||||
blt _020EB52C
|
||||
mov r2, r0, lsl #0x8
|
||||
orr r0, r2, #0x80000000
|
||||
mov r0, r0, lsr r1
|
||||
bx lr
|
||||
_020EB518:
|
||||
mov r2, #0xff000000
|
||||
cmp r2, r0, lsl #0x1
|
||||
movcs r0, #0x0
|
||||
mvncc r0, #0x0
|
||||
bx lr
|
||||
_020EB52C:
|
||||
mvn r0, #0x0
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ffixu
|
||||
_ffixu: ; 0x020EB4F4
|
||||
tst r0, #0x80000000
|
||||
bne _020EB518
|
||||
mov r1, #0x9e
|
||||
subs r1, r1, r0, lsr #0x17
|
||||
blt _020EB52C
|
||||
mov r2, r0, lsl #0x8
|
||||
orr r0, r2, #0x80000000
|
||||
mov r0, r0, lsr r1
|
||||
bx lr
|
||||
_020EB518:
|
||||
mov r2, #0xff000000
|
||||
cmp r2, r0, lsl #0x1
|
||||
movcs r0, #0x0
|
||||
mvncc r0, #0x0
|
||||
bx lr
|
||||
_020EB52C:
|
||||
mvn r0, #0x0
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,51 +1,51 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fflt
|
||||
_fflt: ; 0x020EB534
|
||||
ands r2, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r0, #0x0
|
||||
.global __f_itof_common
|
||||
__f_itof_common:
|
||||
bxeq lr
|
||||
clz r3, r0
|
||||
movs r0, r0, lsl r3
|
||||
rsb r3, r3, #0x9e
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r3, r1, #0x7f
|
||||
andeqs r3, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
|
||||
arm_func_start _ffltu
|
||||
_ffltu: ; 0x020EB57C
|
||||
cmp r0, #0x0
|
||||
.global __f_utof_common
|
||||
__f_utof_common:
|
||||
bxeq lr
|
||||
mov r3, #0x9e
|
||||
bmi _020EB598
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
_020EB598:
|
||||
ands r2, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r2, #0x80
|
||||
bxeq lr
|
||||
ands r1, r2, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fflt
|
||||
_fflt: ; 0x020EB534
|
||||
ands r2, r0, #0x80000000
|
||||
rsbmi r0, r0, #0x0
|
||||
cmp r0, #0x0
|
||||
.global __f_itof_common
|
||||
__f_itof_common:
|
||||
bxeq lr
|
||||
clz r3, r0
|
||||
movs r0, r0, lsl r3
|
||||
rsb r3, r3, #0x9e
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r3, r1, #0x7f
|
||||
andeqs r3, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
|
||||
arm_func_start _ffltu
|
||||
_ffltu: ; 0x020EB57C
|
||||
cmp r0, #0x0
|
||||
.global __f_utof_common
|
||||
__f_utof_common:
|
||||
bxeq lr
|
||||
mov r3, #0x9e
|
||||
bmi _020EB598
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
_020EB598:
|
||||
ands r2, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r2, #0x80
|
||||
bxeq lr
|
||||
ands r1, r2, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,147 +1,147 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fmul
|
||||
_fmul: ; 0x020EB5C4
|
||||
eor r2, r0, r1
|
||||
and r2, r2, #0x80000000
|
||||
mov r12, #0xff
|
||||
ands r3, r12, r0, lsr #0x17
|
||||
mov r0, r0, lsl #0x8
|
||||
cmpne r3, #0xff
|
||||
beq _020EB640
|
||||
orr r0, r0, #0x80000000
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
cmpne r12, #0xff
|
||||
beq _020EB680
|
||||
orr r1, r1, #0x80000000
|
||||
_020EB5F8:
|
||||
add r12, r3, r12
|
||||
umull r1, r3, r0, r1
|
||||
movs r0, r3
|
||||
addpl r0, r0, r0
|
||||
subpl r12, r12, #0x1
|
||||
subs r12, r12, #0x7f
|
||||
bmi _020EB70C
|
||||
cmp r12, #0xfe
|
||||
bge _020EB778
|
||||
ands r3, r0, #0xff
|
||||
orr r0, r2, r0, lsr #0x8
|
||||
add r0, r0, r12, lsl #0x17
|
||||
tst r3, #0x80
|
||||
bxeq lr
|
||||
orrs r1, r1, r3, lsl #0x19
|
||||
andeqs r3, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB640:
|
||||
cmp r3, #0x0
|
||||
beq _020EB694
|
||||
movs r0, r0, lsl #0x1
|
||||
bne __f_result_x_NaN
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB674
|
||||
cmp r12, #0xff
|
||||
blt __f_result_INF
|
||||
cmp r1, #0x0
|
||||
beq __f_result_INF
|
||||
b __f_result_x_NaN
|
||||
_020EB674:
|
||||
cmp r1, #0x0
|
||||
beq __f_result_invalid
|
||||
b __f_result_INF
|
||||
_020EB680:
|
||||
cmp r12, #0x0
|
||||
beq _020EB6F0
|
||||
_020EB688:
|
||||
movs r1, r1, lsl #0x1
|
||||
bne __f_result_x_NaN
|
||||
b __f_result_INF
|
||||
_020EB694:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EB6CC
|
||||
mov r0, r0, lsr #0x1
|
||||
clz r3, r0
|
||||
movs r0, r0, lsl r3
|
||||
rsb r3, r3, #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB6F0
|
||||
cmp r12, #0xff
|
||||
beq _020EB688
|
||||
orr r1, r1, #0x80000000
|
||||
b _020EB5F8
|
||||
_020EB6CC:
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB79C
|
||||
cmp r12, #0xff
|
||||
blt _020EB79C
|
||||
cmp r1, #0x0
|
||||
beq __f_result_invalid
|
||||
b __f_result_x_NaN
|
||||
_020EB6F0:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EB79C
|
||||
mov r1, r1, lsr #0x1
|
||||
clz r12, r1
|
||||
movs r1, r1, lsl r12
|
||||
rsb r12, r12, #0x1
|
||||
b _020EB5F8
|
||||
_020EB70C:
|
||||
cmn r12, #0x18
|
||||
beq _020EB754
|
||||
bmi _020EB794
|
||||
cmp r1, #0x0
|
||||
orrne r0, r0, #0x1
|
||||
mov r3, r0
|
||||
mov r0, r0, lsr #0x8
|
||||
rsb r12, r12, #0x0
|
||||
orr r0, r2, r0, lsr r12
|
||||
rsb r12, r12, #0x18
|
||||
movs r1, r3, lsl r12
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB754:
|
||||
mov r0, r0, lsl #0x1
|
||||
b _020EB784
|
||||
.global __f_result_INF
|
||||
__f_result_INF:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
.global __f_result_x_NaN
|
||||
__f_result_x_NaN:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
.global __f_result_invalid
|
||||
__f_result_invalid:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EB778:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EB784:
|
||||
movs r1, r0
|
||||
mov r0, r2
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB794:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020EB79C:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fmul
|
||||
_fmul: ; 0x020EB5C4
|
||||
eor r2, r0, r1
|
||||
and r2, r2, #0x80000000
|
||||
mov r12, #0xff
|
||||
ands r3, r12, r0, lsr #0x17
|
||||
mov r0, r0, lsl #0x8
|
||||
cmpne r3, #0xff
|
||||
beq _020EB640
|
||||
orr r0, r0, #0x80000000
|
||||
ands r12, r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
cmpne r12, #0xff
|
||||
beq _020EB680
|
||||
orr r1, r1, #0x80000000
|
||||
_020EB5F8:
|
||||
add r12, r3, r12
|
||||
umull r1, r3, r0, r1
|
||||
movs r0, r3
|
||||
addpl r0, r0, r0
|
||||
subpl r12, r12, #0x1
|
||||
subs r12, r12, #0x7f
|
||||
bmi _020EB70C
|
||||
cmp r12, #0xfe
|
||||
bge _020EB778
|
||||
ands r3, r0, #0xff
|
||||
orr r0, r2, r0, lsr #0x8
|
||||
add r0, r0, r12, lsl #0x17
|
||||
tst r3, #0x80
|
||||
bxeq lr
|
||||
orrs r1, r1, r3, lsl #0x19
|
||||
andeqs r3, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB640:
|
||||
cmp r3, #0x0
|
||||
beq _020EB694
|
||||
movs r0, r0, lsl #0x1
|
||||
bne __f_result_x_NaN
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB674
|
||||
cmp r12, #0xff
|
||||
blt __f_result_INF
|
||||
cmp r1, #0x0
|
||||
beq __f_result_INF
|
||||
b __f_result_x_NaN
|
||||
_020EB674:
|
||||
cmp r1, #0x0
|
||||
beq __f_result_invalid
|
||||
b __f_result_INF
|
||||
_020EB680:
|
||||
cmp r12, #0x0
|
||||
beq _020EB6F0
|
||||
_020EB688:
|
||||
movs r1, r1, lsl #0x1
|
||||
bne __f_result_x_NaN
|
||||
b __f_result_INF
|
||||
_020EB694:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EB6CC
|
||||
mov r0, r0, lsr #0x1
|
||||
clz r3, r0
|
||||
movs r0, r0, lsl r3
|
||||
rsb r3, r3, #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB6F0
|
||||
cmp r12, #0xff
|
||||
beq _020EB688
|
||||
orr r1, r1, #0x80000000
|
||||
b _020EB5F8
|
||||
_020EB6CC:
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB79C
|
||||
cmp r12, #0xff
|
||||
blt _020EB79C
|
||||
cmp r1, #0x0
|
||||
beq __f_result_invalid
|
||||
b __f_result_x_NaN
|
||||
_020EB6F0:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EB79C
|
||||
mov r1, r1, lsr #0x1
|
||||
clz r12, r1
|
||||
movs r1, r1, lsl r12
|
||||
rsb r12, r12, #0x1
|
||||
b _020EB5F8
|
||||
_020EB70C:
|
||||
cmn r12, #0x18
|
||||
beq _020EB754
|
||||
bmi _020EB794
|
||||
cmp r1, #0x0
|
||||
orrne r0, r0, #0x1
|
||||
mov r3, r0
|
||||
mov r0, r0, lsr #0x8
|
||||
rsb r12, r12, #0x0
|
||||
orr r0, r2, r0, lsr r12
|
||||
rsb r12, r12, #0x18
|
||||
movs r1, r3, lsl r12
|
||||
bxeq lr
|
||||
tst r1, #0x80000000
|
||||
bxeq lr
|
||||
movs r1, r1, lsl #0x1
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB754:
|
||||
mov r0, r0, lsl #0x1
|
||||
b _020EB784
|
||||
.global __f_result_INF
|
||||
__f_result_INF:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
.global __f_result_x_NaN
|
||||
__f_result_x_NaN:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
.global __f_result_invalid
|
||||
__f_result_invalid:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EB778:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EB784:
|
||||
movs r1, r0
|
||||
mov r0, r2
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB794:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
_020EB79C:
|
||||
mov r0, r2
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,195 +1,195 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __fadd_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _frsb
|
||||
_frsb: ; 0x020EB7A4
|
||||
eor r0, r0, r1
|
||||
eor r1, r0, r1
|
||||
eor r0, r0, r1
|
||||
|
||||
arm_func_start _fsub
|
||||
_fsub: ; 0x020EB7B0
|
||||
eors r2, r0, r1
|
||||
eormi r1, r1, #0x80000000
|
||||
bmi __fadd_start
|
||||
.global __fsub_start
|
||||
__fsub_start:
|
||||
subs r12, r0, r1
|
||||
eorcc r12, r12, #0x80000000
|
||||
subcc r0, r0, r12
|
||||
addcc r1, r1, r12
|
||||
mov r2, #0x80000000
|
||||
mov r3, r0, lsr #0x17
|
||||
orr r0, r2, r0, lsl #0x8
|
||||
ands r12, r3, #0xff
|
||||
cmpne r12, #0xff
|
||||
beq _020EB8D8
|
||||
mov r12, r1, lsr #0x17
|
||||
orr r1, r2, r1, lsl #0x8
|
||||
ands r2, r12, #0xff
|
||||
beq _020EB918
|
||||
_020EB7F4:
|
||||
subs r12, r3, r12
|
||||
beq _020EB83C
|
||||
rsb r2, r12, #0x20
|
||||
movs r2, r1, lsl r2
|
||||
mov r1, r1, lsr r12
|
||||
orrne r1, r1, #0x1
|
||||
subs r0, r0, r1
|
||||
bpl _020EB880
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB83C:
|
||||
subs r0, r0, r1
|
||||
beq _020EB9E4
|
||||
mov r2, r3, lsl #0x17
|
||||
and r2, r2, #0x80000000
|
||||
bic r3, r3, #0x100
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
cmp r3, #0x0
|
||||
bgt _020EB870
|
||||
rsb r3, r3, #0x9
|
||||
orr r0, r2, r0, lsr r3
|
||||
bx lr
|
||||
_020EB870:
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EB880:
|
||||
mov r2, r3, lsl #0x17
|
||||
and r2, r2, #0x80000000
|
||||
bic r3, r3, #0x100
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
cmp r3, #0x0
|
||||
bgt _020EB8AC
|
||||
rsb r3, r3, #0x9
|
||||
orr r0, r2, r0, lsr r3
|
||||
bx lr
|
||||
_020EB8AC:
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB8D8:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
ands r3, r3, #0xff
|
||||
beq _020EB940
|
||||
movs r0, r0, lsl #0x1
|
||||
bne _020EBA18
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EBA0C
|
||||
cmp r12, #0xff
|
||||
blt _020EBA0C
|
||||
cmp r1, #0x0
|
||||
beq _020EBA20
|
||||
b _020EBA18
|
||||
_020EB918:
|
||||
cmp r12, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
and r3, r3, #0xff
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB9A8
|
||||
_020EB930:
|
||||
eor r2, r2, #0x80000000
|
||||
movs r1, r1, lsl #0x1
|
||||
bne _020EBA18
|
||||
b _020EBA0C
|
||||
_020EB940:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EB978
|
||||
mov r0, r0, lsr #0x1
|
||||
mov r3, #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB9A8
|
||||
cmp r12, #0xff
|
||||
beq _020EB930
|
||||
orr r1, r1, #0x80000000
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
b _020EB7F4
|
||||
_020EB978:
|
||||
mov r3, r1, lsr #0x17
|
||||
mov r0, r1, lsl #0x9
|
||||
ands r2, r3, #0xff
|
||||
beq _020EB99C
|
||||
cmp r2, #0xff
|
||||
blt _020EB9C4
|
||||
cmp r0, #0x0
|
||||
bne _020EBA04
|
||||
b _020EBA0C
|
||||
_020EB99C:
|
||||
cmp r0, #0x0
|
||||
beq _020EB9E4
|
||||
b _020EB9C4
|
||||
_020EB9A8:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EB9CC
|
||||
mov r1, r1, lsr #0x1
|
||||
mov r12, #0x1
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
b _020EB7F4
|
||||
_020EB9C4:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_020EB9CC:
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EB9E4:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB9EC: ; 0x020EB9EC
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EBA04:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EBA0C:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EBA18:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EBA20:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern __fadd_start
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _frsb
|
||||
_frsb: ; 0x020EB7A4
|
||||
eor r0, r0, r1
|
||||
eor r1, r0, r1
|
||||
eor r0, r0, r1
|
||||
|
||||
arm_func_start _fsub
|
||||
_fsub: ; 0x020EB7B0
|
||||
eors r2, r0, r1
|
||||
eormi r1, r1, #0x80000000
|
||||
bmi __fadd_start
|
||||
.global __fsub_start
|
||||
__fsub_start:
|
||||
subs r12, r0, r1
|
||||
eorcc r12, r12, #0x80000000
|
||||
subcc r0, r0, r12
|
||||
addcc r1, r1, r12
|
||||
mov r2, #0x80000000
|
||||
mov r3, r0, lsr #0x17
|
||||
orr r0, r2, r0, lsl #0x8
|
||||
ands r12, r3, #0xff
|
||||
cmpne r12, #0xff
|
||||
beq _020EB8D8
|
||||
mov r12, r1, lsr #0x17
|
||||
orr r1, r2, r1, lsl #0x8
|
||||
ands r2, r12, #0xff
|
||||
beq _020EB918
|
||||
_020EB7F4:
|
||||
subs r12, r3, r12
|
||||
beq _020EB83C
|
||||
rsb r2, r12, #0x20
|
||||
movs r2, r1, lsl r2
|
||||
mov r1, r1, lsr r12
|
||||
orrne r1, r1, #0x1
|
||||
subs r0, r0, r1
|
||||
bpl _020EB880
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB83C:
|
||||
subs r0, r0, r1
|
||||
beq _020EB9E4
|
||||
mov r2, r3, lsl #0x17
|
||||
and r2, r2, #0x80000000
|
||||
bic r3, r3, #0x100
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
cmp r3, #0x0
|
||||
bgt _020EB870
|
||||
rsb r3, r3, #0x9
|
||||
orr r0, r2, r0, lsr r3
|
||||
bx lr
|
||||
_020EB870:
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EB880:
|
||||
mov r2, r3, lsl #0x17
|
||||
and r2, r2, #0x80000000
|
||||
bic r3, r3, #0x100
|
||||
clz r12, r0
|
||||
movs r0, r0, lsl r12
|
||||
sub r3, r3, r12
|
||||
cmp r3, #0x0
|
||||
bgt _020EB8AC
|
||||
rsb r3, r3, #0x9
|
||||
orr r0, r2, r0, lsr r3
|
||||
bx lr
|
||||
_020EB8AC:
|
||||
ands r1, r0, #0xff
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bxeq lr
|
||||
tst r1, #0x80
|
||||
bxeq lr
|
||||
ands r1, r1, #0x7f
|
||||
andeqs r1, r0, #0x1
|
||||
addne r0, r0, #0x1
|
||||
bx lr
|
||||
_020EB8D8:
|
||||
cmp r3, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
ands r3, r3, #0xff
|
||||
beq _020EB940
|
||||
movs r0, r0, lsl #0x1
|
||||
bne _020EBA18
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x9
|
||||
ands r12, r12, #0xff
|
||||
beq _020EBA0C
|
||||
cmp r12, #0xff
|
||||
blt _020EBA0C
|
||||
cmp r1, #0x0
|
||||
beq _020EBA20
|
||||
b _020EBA18
|
||||
_020EB918:
|
||||
cmp r12, #0x100
|
||||
movge r2, #0x80000000
|
||||
movlt r2, #0x0
|
||||
and r3, r3, #0xff
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB9A8
|
||||
_020EB930:
|
||||
eor r2, r2, #0x80000000
|
||||
movs r1, r1, lsl #0x1
|
||||
bne _020EBA18
|
||||
b _020EBA0C
|
||||
_020EB940:
|
||||
movs r0, r0, lsl #0x1
|
||||
beq _020EB978
|
||||
mov r0, r0, lsr #0x1
|
||||
mov r3, #0x1
|
||||
mov r12, r1, lsr #0x17
|
||||
mov r1, r1, lsl #0x8
|
||||
ands r12, r12, #0xff
|
||||
beq _020EB9A8
|
||||
cmp r12, #0xff
|
||||
beq _020EB930
|
||||
orr r1, r1, #0x80000000
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
b _020EB7F4
|
||||
_020EB978:
|
||||
mov r3, r1, lsr #0x17
|
||||
mov r0, r1, lsl #0x9
|
||||
ands r2, r3, #0xff
|
||||
beq _020EB99C
|
||||
cmp r2, #0xff
|
||||
blt _020EB9C4
|
||||
cmp r0, #0x0
|
||||
bne _020EBA04
|
||||
b _020EBA0C
|
||||
_020EB99C:
|
||||
cmp r0, #0x0
|
||||
beq _020EB9E4
|
||||
b _020EB9C4
|
||||
_020EB9A8:
|
||||
movs r1, r1, lsl #0x1
|
||||
beq _020EB9CC
|
||||
mov r1, r1, lsr #0x1
|
||||
mov r12, #0x1
|
||||
orr r12, r12, r2, lsr #0x17
|
||||
orr r3, r3, r2, lsr #0x17
|
||||
b _020EB7F4
|
||||
_020EB9C4:
|
||||
mov r0, r1
|
||||
bx lr
|
||||
_020EB9CC:
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
orr r0, r2, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EB9E4:
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
_020EB9EC: ; 0x020EB9EC
|
||||
cmp r0, #0x0
|
||||
subges r3, r3, #0x1
|
||||
add r0, r0, r0
|
||||
mov r0, r0, lsr #0x9
|
||||
orr r0, r0, r3, lsl #0x17
|
||||
bx lr
|
||||
_020EBA04:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EBA0C:
|
||||
mov r0, #0xff000000
|
||||
orr r0, r2, r0, lsr #0x1
|
||||
bx lr
|
||||
_020EBA18:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
_020EBA20:
|
||||
mvn r0, #0x80000000
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fp_init
|
||||
_fp_init: ; 0x020EC5CC
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _fp_init
|
||||
_fp_init: ; 0x020EC5CC
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,167 +1,167 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_mod
|
||||
_ll_mod: ; 0x020EBA28
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, r1
|
||||
orr r4, r4, #0x1
|
||||
b _020EBA48
|
||||
|
||||
arm_func_start _ll_sdiv
|
||||
_ll_sdiv: ; 0x020EBA38
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
eor r4, r1, r3
|
||||
mov r4, r4, asr #0x1
|
||||
mov r4, r4, lsl #0x1
|
||||
_020EBA48:
|
||||
orrs r5, r3, r2
|
||||
bne _020EBA58
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBA58:
|
||||
mov r5, r0, lsr #0x1f
|
||||
add r5, r5, r1
|
||||
mov r6, r2, lsr #0x1f
|
||||
add r6, r6, r3
|
||||
orrs r6, r5, r6
|
||||
bne _020EBA8C
|
||||
mov r1, r2
|
||||
bl _s32_div_f
|
||||
ands r4, r4, #0x1
|
||||
movne r0, r1
|
||||
mov r1, r0, asr #0x1f
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBA8C:
|
||||
cmp r1, #0x0
|
||||
bge _020EBA9C
|
||||
rsbs r0, r0, #0x0
|
||||
rsc r1, r1, #0x0
|
||||
_020EBA9C:
|
||||
cmp r3, #0x0
|
||||
bge _020EBAAC
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
_020EBAAC:
|
||||
orrs r5, r1, r0
|
||||
beq _020EBBD0
|
||||
mov r5, #0x0
|
||||
mov r6, #0x1
|
||||
cmp r3, #0x0
|
||||
bmi _020EBAD8
|
||||
_020EBAC4:
|
||||
add r5, r5, #0x1
|
||||
adds r2, r2, r2
|
||||
adcs r3, r3, r3
|
||||
bpl _020EBAC4
|
||||
add r6, r6, r5
|
||||
_020EBAD8:
|
||||
cmp r1, #0x0
|
||||
blt _020EBAF8
|
||||
_020EBAE0:
|
||||
cmp r6, #0x1
|
||||
beq _020EBAF8
|
||||
sub r6, r6, #0x1
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
bpl _020EBAE0
|
||||
_020EBAF8:
|
||||
mov r7, #0x0
|
||||
mov r12, #0x0
|
||||
mov r11, #0x0
|
||||
b _020EBB20
|
||||
_020EBB08:
|
||||
orr r12, r12, #0x1
|
||||
subs r6, r6, #0x1
|
||||
beq _020EBB78
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
adcs r7, r7, r7
|
||||
_020EBB20:
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, r3
|
||||
sbcs r7, r7, #0x0
|
||||
adds r12, r12, r12
|
||||
adc r11, r11, r11
|
||||
cmp r7, #0x0
|
||||
bge _020EBB08
|
||||
_020EBB3C:
|
||||
subs r6, r6, #0x1
|
||||
beq _020EBB70
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
adc r7, r7, r7
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
adc r7, r7, #0x0
|
||||
adds r12, r12, r12
|
||||
adc r11, r11, r11
|
||||
cmp r7, #0x0
|
||||
bge _020EBB08
|
||||
b _020EBB3C
|
||||
_020EBB70:
|
||||
adds r0, r0, r2
|
||||
adc r1, r1, r3
|
||||
_020EBB78:
|
||||
ands r7, r4, #0x1
|
||||
moveq r0, r12
|
||||
moveq r1, r11
|
||||
beq _020EBBB0
|
||||
subs r7, r5, #0x20
|
||||
movge r0, r1, lsr r7
|
||||
bge _020EBBD4
|
||||
rsb r7, r5, #0x20
|
||||
mov r0, r0, lsr r5
|
||||
orr r0, r0, r1, lsl r7
|
||||
mov r1, r1, lsr r5
|
||||
b _020EBBB0
|
||||
_020EBBA8: ; 0x020EBBA8
|
||||
mov r0, r1, lsr r7
|
||||
mov r1, #0x0
|
||||
_020EBBB0:
|
||||
cmp r4, #0x0
|
||||
blt _020EBBC0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBBC0:
|
||||
rsbs r0, r0, #0x0
|
||||
rsc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBBD0:
|
||||
mov r0, #0x0
|
||||
_020EBBD4:
|
||||
mov r1, #0x0
|
||||
cmp r4, #0x0
|
||||
blt _020EBBC0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start _ll_udiv
|
||||
_ll_udiv: ; 0x020EBBE8
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, #0x0
|
||||
b _020EBBFC
|
||||
|
||||
arm_func_start _ull_mod
|
||||
_ull_mod: ; 0x020EBBF4
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, #0x1
|
||||
_020EBBFC:
|
||||
orrs r5, r3, r2
|
||||
bne _020EBC0C
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBC0C:
|
||||
orrs r5, r1, r3
|
||||
bne _020EBAAC
|
||||
mov r1, r2
|
||||
bl _u32_div_not_0_f
|
||||
cmp r4, #0x0
|
||||
movne r0, r1
|
||||
mov r1, #0x0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_mod
|
||||
_ll_mod: ; 0x020EBA28
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, r1
|
||||
orr r4, r4, #0x1
|
||||
b _020EBA48
|
||||
|
||||
arm_func_start _ll_sdiv
|
||||
_ll_sdiv: ; 0x020EBA38
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
eor r4, r1, r3
|
||||
mov r4, r4, asr #0x1
|
||||
mov r4, r4, lsl #0x1
|
||||
_020EBA48:
|
||||
orrs r5, r3, r2
|
||||
bne _020EBA58
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBA58:
|
||||
mov r5, r0, lsr #0x1f
|
||||
add r5, r5, r1
|
||||
mov r6, r2, lsr #0x1f
|
||||
add r6, r6, r3
|
||||
orrs r6, r5, r6
|
||||
bne _020EBA8C
|
||||
mov r1, r2
|
||||
bl _s32_div_f
|
||||
ands r4, r4, #0x1
|
||||
movne r0, r1
|
||||
mov r1, r0, asr #0x1f
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBA8C:
|
||||
cmp r1, #0x0
|
||||
bge _020EBA9C
|
||||
rsbs r0, r0, #0x0
|
||||
rsc r1, r1, #0x0
|
||||
_020EBA9C:
|
||||
cmp r3, #0x0
|
||||
bge _020EBAAC
|
||||
rsbs r2, r2, #0x0
|
||||
rsc r3, r3, #0x0
|
||||
_020EBAAC:
|
||||
orrs r5, r1, r0
|
||||
beq _020EBBD0
|
||||
mov r5, #0x0
|
||||
mov r6, #0x1
|
||||
cmp r3, #0x0
|
||||
bmi _020EBAD8
|
||||
_020EBAC4:
|
||||
add r5, r5, #0x1
|
||||
adds r2, r2, r2
|
||||
adcs r3, r3, r3
|
||||
bpl _020EBAC4
|
||||
add r6, r6, r5
|
||||
_020EBAD8:
|
||||
cmp r1, #0x0
|
||||
blt _020EBAF8
|
||||
_020EBAE0:
|
||||
cmp r6, #0x1
|
||||
beq _020EBAF8
|
||||
sub r6, r6, #0x1
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
bpl _020EBAE0
|
||||
_020EBAF8:
|
||||
mov r7, #0x0
|
||||
mov r12, #0x0
|
||||
mov r11, #0x0
|
||||
b _020EBB20
|
||||
_020EBB08:
|
||||
orr r12, r12, #0x1
|
||||
subs r6, r6, #0x1
|
||||
beq _020EBB78
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
adcs r7, r7, r7
|
||||
_020EBB20:
|
||||
subs r0, r0, r2
|
||||
sbcs r1, r1, r3
|
||||
sbcs r7, r7, #0x0
|
||||
adds r12, r12, r12
|
||||
adc r11, r11, r11
|
||||
cmp r7, #0x0
|
||||
bge _020EBB08
|
||||
_020EBB3C:
|
||||
subs r6, r6, #0x1
|
||||
beq _020EBB70
|
||||
adds r0, r0, r0
|
||||
adcs r1, r1, r1
|
||||
adc r7, r7, r7
|
||||
adds r0, r0, r2
|
||||
adcs r1, r1, r3
|
||||
adc r7, r7, #0x0
|
||||
adds r12, r12, r12
|
||||
adc r11, r11, r11
|
||||
cmp r7, #0x0
|
||||
bge _020EBB08
|
||||
b _020EBB3C
|
||||
_020EBB70:
|
||||
adds r0, r0, r2
|
||||
adc r1, r1, r3
|
||||
_020EBB78:
|
||||
ands r7, r4, #0x1
|
||||
moveq r0, r12
|
||||
moveq r1, r11
|
||||
beq _020EBBB0
|
||||
subs r7, r5, #0x20
|
||||
movge r0, r1, lsr r7
|
||||
bge _020EBBD4
|
||||
rsb r7, r5, #0x20
|
||||
mov r0, r0, lsr r5
|
||||
orr r0, r0, r1, lsl r7
|
||||
mov r1, r1, lsr r5
|
||||
b _020EBBB0
|
||||
_020EBBA8: ; 0x020EBBA8
|
||||
mov r0, r1, lsr r7
|
||||
mov r1, #0x0
|
||||
_020EBBB0:
|
||||
cmp r4, #0x0
|
||||
blt _020EBBC0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBBC0:
|
||||
rsbs r0, r0, #0x0
|
||||
rsc r1, r1, #0x0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBBD0:
|
||||
mov r0, #0x0
|
||||
_020EBBD4:
|
||||
mov r1, #0x0
|
||||
cmp r4, #0x0
|
||||
blt _020EBBC0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
|
||||
arm_func_start _ll_udiv
|
||||
_ll_udiv: ; 0x020EBBE8
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, #0x0
|
||||
b _020EBBFC
|
||||
|
||||
arm_func_start _ull_mod
|
||||
_ull_mod: ; 0x020EBBF4
|
||||
stmdb sp!, {r4-r7,r11-r12,lr}
|
||||
mov r4, #0x1
|
||||
_020EBBFC:
|
||||
orrs r5, r3, r2
|
||||
bne _020EBC0C
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
_020EBC0C:
|
||||
orrs r5, r1, r3
|
||||
bne _020EBAAC
|
||||
mov r1, r2
|
||||
bl _u32_div_not_0_f
|
||||
cmp r4, #0x0
|
||||
movne r0, r1
|
||||
mov r1, #0x0
|
||||
ldmia sp!, {r4-r7,r11-r12,lr}
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_mul
|
||||
_ll_mul: ; 0x020EBC30
|
||||
stmdb sp!, {r4-r5,lr}
|
||||
umull r5, r4, r0, r2
|
||||
mla r4, r0, r3, r4
|
||||
mla r4, r2, r1, r4
|
||||
mov r1, r4
|
||||
mov r0, r5
|
||||
ldmia sp!, {r4-r5,lr}
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_mul
|
||||
_ll_mul: ; 0x020EBC30
|
||||
stmdb sp!, {r4-r5,lr}
|
||||
umull r5, r4, r0, r2
|
||||
mla r4, r0, r3, r4
|
||||
mla r4, r2, r1, r4
|
||||
mov r1, r4
|
||||
mov r0, r5
|
||||
ldmia sp!, {r4-r5,lr}
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_shl
|
||||
_ll_shl: ; 0x020EBC50
|
||||
ands r2, r2, #0x3f
|
||||
bxeq lr
|
||||
subs r3, r2, #0x20
|
||||
bge _020EBC74
|
||||
rsb r3, r2, #0x20
|
||||
mov r1, r1, lsl r2
|
||||
orr r1, r1, r0, lsr r3
|
||||
mov r0, r0, lsl r2
|
||||
bx lr
|
||||
_020EBC74:
|
||||
mov r1, r0, lsl r3
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _ll_shl
|
||||
_ll_shl: ; 0x020EBC50
|
||||
ands r2, r2, #0x3f
|
||||
bxeq lr
|
||||
subs r3, r2, #0x20
|
||||
bge _020EBC74
|
||||
rsb r3, r2, #0x20
|
||||
mov r1, r1, lsl r2
|
||||
orr r1, r1, r0, lsr r3
|
||||
mov r0, r0, lsl r2
|
||||
bx lr
|
||||
_020EBC74:
|
||||
mov r1, r0, lsl r3
|
||||
mov r0, #0x0
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,139 +1,139 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _s32_div_f
|
||||
_s32_div_f: ; 0x020EBC80
|
||||
eor r12, r0, r1
|
||||
and r12, r12, #0x80000000
|
||||
cmp r0, #0x0
|
||||
rsblt r0, r0, #0x0
|
||||
addlt r12, r12, #0x1
|
||||
cmp r1, #0x0
|
||||
rsblt r1, r1, #0x0
|
||||
beq _020EBE78
|
||||
cmp r0, r1
|
||||
movcc r1, r0
|
||||
movcc r0, #0x0
|
||||
blo _020EBE78
|
||||
mov r2, #0x1c
|
||||
mov r3, r0, lsr #0x4
|
||||
cmp r1, r3, lsr #0xc
|
||||
suble r2, r2, #0x10
|
||||
movle r3, r3, lsr #0x10
|
||||
cmp r1, r3, lsr #0x4
|
||||
suble r2, r2, #0x8
|
||||
movle r3, r3, lsr #0x8
|
||||
cmp r1, r3
|
||||
suble r2, r2, #0x4
|
||||
movle r3, r3, lsr #0x4
|
||||
mov r0, r0, lsl r2
|
||||
rsb r1, r1, #0x0
|
||||
adds r0, r0, r0
|
||||
add r2, r2, r2, lsl #0x1
|
||||
add pc, pc, r2, lsl #0x2
|
||||
mov r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
mov r1, r3
|
||||
_020EBE78:
|
||||
ands r3, r12, #0x80000000
|
||||
rsbne r0, r0, #0x0
|
||||
ands r3, r12, #0x1
|
||||
rsbne r1, r1, #0x0
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _s32_div_f
|
||||
_s32_div_f: ; 0x020EBC80
|
||||
eor r12, r0, r1
|
||||
and r12, r12, #0x80000000
|
||||
cmp r0, #0x0
|
||||
rsblt r0, r0, #0x0
|
||||
addlt r12, r12, #0x1
|
||||
cmp r1, #0x0
|
||||
rsblt r1, r1, #0x0
|
||||
beq _020EBE78
|
||||
cmp r0, r1
|
||||
movcc r1, r0
|
||||
movcc r0, #0x0
|
||||
blo _020EBE78
|
||||
mov r2, #0x1c
|
||||
mov r3, r0, lsr #0x4
|
||||
cmp r1, r3, lsr #0xc
|
||||
suble r2, r2, #0x10
|
||||
movle r3, r3, lsr #0x10
|
||||
cmp r1, r3, lsr #0x4
|
||||
suble r2, r2, #0x8
|
||||
movle r3, r3, lsr #0x8
|
||||
cmp r1, r3
|
||||
suble r2, r2, #0x4
|
||||
movle r3, r3, lsr #0x4
|
||||
mov r0, r0, lsl r2
|
||||
rsb r1, r1, #0x0
|
||||
adds r0, r0, r0
|
||||
add r2, r2, r2, lsl #0x1
|
||||
add pc, pc, r2, lsl #0x2
|
||||
mov r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
mov r1, r3
|
||||
_020EBE78:
|
||||
ands r3, r12, #0x80000000
|
||||
rsbne r0, r0, #0x0
|
||||
ands r3, r12, #0x1
|
||||
rsbne r1, r1, #0x0
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,131 +1,131 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _u32_div_f
|
||||
_u32_div_f: ; 0x020EBE8C
|
||||
cmp r1, #0x0
|
||||
bxeq lr
|
||||
|
||||
arm_func_start _u32_div_not_0_f
|
||||
_u32_div_not_0_f:
|
||||
cmp r0, r1
|
||||
movcc r1, r0
|
||||
movcc r0, #0x0
|
||||
bxcc lr
|
||||
mov r2, #0x1c
|
||||
mov r3, r0, lsr #0x4
|
||||
cmp r1, r3, lsr #0xc
|
||||
suble r2, r2, #0x10
|
||||
movle r3, r3, lsr #0x10
|
||||
cmp r1, r3, lsr #0x4
|
||||
suble r2, r2, #0x8
|
||||
movle r3, r3, lsr #0x8
|
||||
cmp r1, r3
|
||||
suble r2, r2, #0x4
|
||||
movle r3, r3, lsr #0x4
|
||||
mov r0, r0, lsl r2
|
||||
rsb r1, r1, #0x0
|
||||
adds r0, r0, r0
|
||||
add r2, r2, r2, lsl #0x1
|
||||
add pc, pc, r2, lsl #0x2
|
||||
mov r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
mov r1, r3
|
||||
bx lr
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start _u32_div_f
|
||||
_u32_div_f: ; 0x020EBE8C
|
||||
cmp r1, #0x0
|
||||
bxeq lr
|
||||
|
||||
arm_func_start _u32_div_not_0_f
|
||||
_u32_div_not_0_f:
|
||||
cmp r0, r1
|
||||
movcc r1, r0
|
||||
movcc r0, #0x0
|
||||
bxcc lr
|
||||
mov r2, #0x1c
|
||||
mov r3, r0, lsr #0x4
|
||||
cmp r1, r3, lsr #0xc
|
||||
suble r2, r2, #0x10
|
||||
movle r3, r3, lsr #0x10
|
||||
cmp r1, r3, lsr #0x4
|
||||
suble r2, r2, #0x8
|
||||
movle r3, r3, lsr #0x8
|
||||
cmp r1, r3
|
||||
suble r2, r2, #0x4
|
||||
movle r3, r3, lsr #0x4
|
||||
mov r0, r0, lsl r2
|
||||
rsb r1, r1, #0x0
|
||||
adds r0, r0, r0
|
||||
add r2, r2, r2, lsl #0x1
|
||||
add pc, pc, r2, lsl #0x2
|
||||
mov r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
mov r1, r3
|
||||
bx lr
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
.macro exception what, size, data
|
||||
.section .exceptix,4,1,2
|
||||
.balign 4, 0
|
||||
.type ?exc$\what, @object
|
||||
.global ?exc$\what
|
||||
.size ?exc$\what, 12
|
||||
?exc$\what:
|
||||
.word \what
|
||||
.short \size
|
||||
.word \data
|
||||
.previous
|
||||
.endm
|
||||
.macro exception what, size, data
|
||||
.section .exceptix,4,1,2
|
||||
.balign 4, 0
|
||||
.type ?exc$\what, @object
|
||||
.global ?exc$\what
|
||||
.size ?exc$\what, 12
|
||||
?exc$\what:
|
||||
.word \what
|
||||
.short \size
|
||||
.word \data
|
||||
.previous
|
||||
.endm
|
||||
|
|
|
|||
|
|
@ -1,32 +1,32 @@
|
|||
#include "nitro.h"
|
||||
#include "NNS_FND_allocator.h"
|
||||
#include "NNS_FND_expheap.h"
|
||||
|
||||
ARM_FUNC void *AllocatorAllocForExpHeap(NNSFndAllocator * pAllocator, u32 size)
|
||||
{
|
||||
return NNS_FndAllocFromExpHeapEx(pAllocator->pHeap, size, pAllocator->heapParam1);
|
||||
}
|
||||
|
||||
ARM_FUNC void AllocatorFreeForExpHeap(NNSFndAllocator * pAllocator, void *memBlock)
|
||||
{
|
||||
NNS_FndFreeToExpHeap(pAllocator->pHeap, memBlock);
|
||||
}
|
||||
|
||||
ARM_FUNC void *NNS_FndAllocFromAllocator(NNSFndAllocator * pAllocator, u32 size)
|
||||
{
|
||||
return pAllocator->pFunc->pfAlloc(pAllocator, size);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndFreeToAllocator(NNSFndAllocator * pAllocator, void *memBlock)
|
||||
{
|
||||
pAllocator->pFunc->pfFree(pAllocator, memBlock);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle pHeap, int alignment)
|
||||
{
|
||||
static const NNSFndAllocatorFunc pFunc = {AllocatorAllocForExpHeap, AllocatorFreeForExpHeap};
|
||||
pAllocator->pFunc = &pFunc;
|
||||
pAllocator->pHeap = pHeap;
|
||||
pAllocator->heapParam1 = alignment;
|
||||
pAllocator->heapParam2 = 0;
|
||||
}
|
||||
#include "nitro.h"
|
||||
#include "NNS_FND_allocator.h"
|
||||
#include "NNS_FND_expheap.h"
|
||||
|
||||
ARM_FUNC void *AllocatorAllocForExpHeap(NNSFndAllocator * pAllocator, u32 size)
|
||||
{
|
||||
return NNS_FndAllocFromExpHeapEx(pAllocator->pHeap, size, pAllocator->heapParam1);
|
||||
}
|
||||
|
||||
ARM_FUNC void AllocatorFreeForExpHeap(NNSFndAllocator * pAllocator, void *memBlock)
|
||||
{
|
||||
NNS_FndFreeToExpHeap(pAllocator->pHeap, memBlock);
|
||||
}
|
||||
|
||||
ARM_FUNC void *NNS_FndAllocFromAllocator(NNSFndAllocator * pAllocator, u32 size)
|
||||
{
|
||||
return pAllocator->pFunc->pfAlloc(pAllocator, size);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndFreeToAllocator(NNSFndAllocator * pAllocator, void *memBlock)
|
||||
{
|
||||
pAllocator->pFunc->pfFree(pAllocator, memBlock);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndInitAllocatorForExpHeap(NNSFndAllocator * pAllocator, NNSFndHeapHandle pHeap, int alignment)
|
||||
{
|
||||
static const NNSFndAllocatorFunc pFunc = {AllocatorAllocForExpHeap, AllocatorFreeForExpHeap};
|
||||
pAllocator->pFunc = &pFunc;
|
||||
pAllocator->pHeap = pHeap;
|
||||
pAllocator->heapParam1 = alignment;
|
||||
pAllocator->heapParam2 = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,385 +1,385 @@
|
|||
#include "global.h"
|
||||
#include "NNS_FND_expheap.h"
|
||||
|
||||
typedef struct NNSiMemRegion {
|
||||
void* start;
|
||||
void* end;
|
||||
} NNSiMemRegion;
|
||||
|
||||
static inline u16 GetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return NNSi_FndGetBitValue(block->attribute, 8, 7);
|
||||
}
|
||||
|
||||
static inline void SetAllocDirForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 direction)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 15, 1, direction);
|
||||
}
|
||||
|
||||
static inline void SetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 alignment)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 8, 7, alignment);
|
||||
}
|
||||
|
||||
static inline void SetGroupIDForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 groupID)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 0, 8, groupID);
|
||||
}
|
||||
|
||||
static inline void* GetMemPtrForMBlock(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return AddU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
}
|
||||
|
||||
static inline void* GetMBlockHeadPtr(void* block)
|
||||
{
|
||||
return SubU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
}
|
||||
|
||||
static inline void* GetMBlockEndAddr(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return AddU32ToPtr(GetMemPtrForMBlock(block), block->blockSize);
|
||||
}
|
||||
|
||||
static inline u16 GetAllocMode(NNSiFndExpHeapHead* pExHeapHd)
|
||||
{
|
||||
return NNSi_FndGetBitValue(pExHeapHd->feature, 0, 1);
|
||||
}
|
||||
|
||||
static inline void SetAllocMode(NNSiFndExpHeapHead* pExHeapHd, u16 mode)
|
||||
{
|
||||
NNSi_FndSetBitValue(pExHeapHd->feature, 0, 1, mode);
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHeapHead(NNSiFndHeapHead* pHHead)
|
||||
{
|
||||
return AddU32ToPtr(pHHead, sizeof(NNSiFndHeapHead));
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHandle(NNSFndHeapHandle heap)
|
||||
{
|
||||
return GetExpHeapHeadPtrFromHeapHead(heap);
|
||||
}
|
||||
|
||||
static inline NNSiFndHeapHead* GetHeapHeadPtrFromExpHeapHead(NNSiFndExpHeapHead* pEHHead)
|
||||
{
|
||||
return SubU32ToPtr(pEHHead, sizeof(NNSiFndHeapHead));
|
||||
}
|
||||
|
||||
ARM_FUNC void GetRegionOfMBlock(NNSiMemRegion* region, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
region->start = SubU32ToPtr(block, GetAlignmentForMBlock(block));
|
||||
region->end = GetMBlockEndAddr(block);
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* RemoveMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* const prev = block->pMBHeadPrev;
|
||||
NNSiFndExpHeapMBlockHead* const next = block->pMBHeadNext;
|
||||
|
||||
if (prev != NULL)
|
||||
{
|
||||
prev->pMBHeadNext = next;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->head = next;
|
||||
}
|
||||
|
||||
if (next != NULL)
|
||||
{
|
||||
next->pMBHeadPrev = prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->tail = prev;
|
||||
}
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* InsertMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* target, NNSiFndExpHeapMBlockHead* prev)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* next;
|
||||
target->pMBHeadPrev = prev;
|
||||
if (prev != NULL)
|
||||
{
|
||||
next = prev->pMBHeadNext;
|
||||
prev->pMBHeadNext = target;
|
||||
}
|
||||
else
|
||||
{
|
||||
next = list->head;
|
||||
list->head = target;
|
||||
}
|
||||
target->pMBHeadNext = next;
|
||||
if (next != NULL)
|
||||
{
|
||||
next->pMBHeadPrev = target;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->tail = target;
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* InitMBlock(const NNSiMemRegion* pRegion, u16 signature)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* block = pRegion->start;
|
||||
block->signature = signature;
|
||||
block->attribute = 0;
|
||||
block->blockSize = GetOffsetFromPtr(GetMemPtrForMBlock(block), pRegion->end);
|
||||
block->pMBHeadPrev = NULL;
|
||||
block->pMBHeadNext = NULL;
|
||||
return block;
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapMBlockHead* InitFreeMBlock(const NNSiMemRegion* region)
|
||||
{
|
||||
return InitMBlock(region, 0x4652);
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndHeapHead* InitExpHeap(void* startAddress, void* endAddress, u16 optFlag)
|
||||
{
|
||||
NNSiFndHeapHead* pHeapHd = (NNSiFndHeapHead*)startAddress;
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
NNSi_FndInitHeapHead(pHeapHd, 0x45585048, AddU32ToPtr(pExpHeapHd, sizeof(NNSiFndExpHeapHead)), endAddress, optFlag);
|
||||
pExpHeapHd->groupID = 0;
|
||||
pExpHeapHd->feature = 0;
|
||||
SetAllocMode(pExpHeapHd, 0);
|
||||
|
||||
NNSiFndExpHeapMBlockHead* pMBHead;
|
||||
NNSiMemRegion region;
|
||||
|
||||
region.start = pHeapHd->heapStart;
|
||||
region.end = pHeapHd->heapEnd;
|
||||
pMBHead = InitFreeMBlock(®ion);
|
||||
|
||||
pExpHeapHd->mbFreeList.head = pMBHead;
|
||||
pExpHeapHd->mbFreeList.tail = pMBHead;
|
||||
pExpHeapHd->mbUsedList.head = NULL;
|
||||
pExpHeapHd->mbUsedList.tail = NULL;
|
||||
|
||||
return pHeapHd;
|
||||
}
|
||||
|
||||
static inline void AppendMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
(void) InsertMBlock(list, block, list->tail);
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocUsedBlockFromFreeBlock(NNSiFndExpHeapHead* pEHHead, NNSiFndExpHeapMBlockHead* pMBHeadFree, void* mblock, u32 size, u16 direction)
|
||||
{
|
||||
NNSiMemRegion freeRgnT;
|
||||
NNSiMemRegion freeRgnB;
|
||||
NNSiFndExpHeapMBlockHead* pMBHeadFreePrev;
|
||||
|
||||
GetRegionOfMBlock(&freeRgnT, pMBHeadFree);
|
||||
|
||||
freeRgnB.end = freeRgnT.end;
|
||||
freeRgnB.start = AddU32ToPtr(mblock, size);
|
||||
freeRgnT.end = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
|
||||
pMBHeadFreePrev = RemoveMBlock(&pEHHead->mbFreeList, pMBHeadFree);
|
||||
|
||||
if (GetOffsetFromPtr(freeRgnT.start, freeRgnT.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
{
|
||||
freeRgnT.end = freeRgnT.start;
|
||||
}
|
||||
else
|
||||
{
|
||||
pMBHeadFreePrev = InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnT), pMBHeadFreePrev);
|
||||
}
|
||||
if (GetOffsetFromPtr(freeRgnB.start, freeRgnB.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
{
|
||||
freeRgnB.start= freeRgnB.end;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnB), pMBHeadFreePrev);
|
||||
}
|
||||
|
||||
FillAllocMemory(GetHeapHeadPtrFromExpHeapHead(pEHHead), freeRgnT.end, GetOffsetFromPtr(freeRgnT.end, freeRgnB.start));
|
||||
|
||||
NNSiFndExpHeapMBlockHead* pMBHeadNewUsed;
|
||||
NNSiMemRegion region;
|
||||
|
||||
region.start = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
region.end = freeRgnB.start;
|
||||
|
||||
pMBHeadNewUsed = InitMBlock(®ion, 0x5544);
|
||||
SetAllocDirForMBlock(pMBHeadNewUsed, direction);
|
||||
SetAlignmentForMBlock(pMBHeadNewUsed, (u16)GetOffsetFromPtr(freeRgnT.end, pMBHeadNewUsed));
|
||||
SetGroupIDForMBlock(pMBHeadNewUsed, pEHHead->groupID);
|
||||
AppendMBlock(&pEHHead->mbUsedList, pMBHeadNewUsed);
|
||||
|
||||
return mblock;
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocFromHead(NNSiFndHeapHead* pHeapHd, u32 size, int alignment)
|
||||
{
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHd = NULL;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL;
|
||||
u32 foundSize = 0xFFFFFFFF;
|
||||
void* foundMBlock = NULL;
|
||||
|
||||
for (pMBlkHd = pExpHeapHd->mbFreeList.head; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadNext)
|
||||
{
|
||||
void *const mblock = GetMemPtrForMBlock(pMBlkHd);
|
||||
void *const reqMBlock = NNSi_FndRoundUpPtr(mblock, alignment);
|
||||
const u32 offset = GetOffsetFromPtr(mblock, reqMBlock);
|
||||
if (pMBlkHd->blockSize >= size + offset && foundSize > pMBlkHd->blockSize)
|
||||
{
|
||||
pMBlkHdFound = pMBlkHd;
|
||||
foundSize = pMBlkHd->blockSize;
|
||||
foundMBlock = reqMBlock;
|
||||
if (bAllocFirst || foundSize == size)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pMBlkHdFound)
|
||||
return NULL;
|
||||
|
||||
return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 0);
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocFromTail(NNSiFndHeapHead* pHeapHd, u32 size, int alignment)
|
||||
{
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHd = NULL;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL;
|
||||
u32 foundSize = 0xFFFFFFFF;
|
||||
void* foundMBlock = NULL;
|
||||
|
||||
for (pMBlkHd = pExpHeapHd->mbFreeList.tail; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadPrev)
|
||||
{
|
||||
void *const mblock = GetMemPtrForMBlock(pMBlkHd);
|
||||
void *const mBlockEnd = AddU32ToPtr(mblock, pMBlkHd->blockSize);
|
||||
void *const reqMBlock = NNSi_FndRoundDownPtr(SubU32ToPtr(mBlockEnd, size), alignment);
|
||||
if (ComparePtr(reqMBlock, mblock) >= 0 && foundSize > pMBlkHd->blockSize)
|
||||
{
|
||||
pMBlkHdFound = pMBlkHd;
|
||||
foundSize = pMBlkHd->blockSize;
|
||||
foundMBlock = reqMBlock;
|
||||
if (bAllocFirst || foundSize == size)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pMBlkHdFound)
|
||||
return NULL;
|
||||
|
||||
return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 1);
|
||||
}
|
||||
|
||||
ARM_FUNC BOOL RecycleRegion(NNSiFndExpHeapHead* pEHHead, const NNSiMemRegion* pRegion)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* pBlkPtrFree = NULL;
|
||||
NNSiMemRegion freeRgn = *pRegion;
|
||||
NNSiFndExpHeapMBlockHead* pBlk;
|
||||
for (pBlk = pEHHead->mbFreeList.head; pBlk; pBlk = pBlk->pMBHeadNext)
|
||||
{
|
||||
if (pBlk < (NNSiFndExpHeapMBlockHead*)pRegion->start)
|
||||
{
|
||||
pBlkPtrFree = pBlk;
|
||||
continue;
|
||||
}
|
||||
if (pBlk == pRegion->end)
|
||||
{
|
||||
freeRgn.end = GetMBlockEndAddr(pBlk);
|
||||
(void)RemoveMBlock(&pEHHead->mbFreeList, pBlk);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (pBlkPtrFree && GetMBlockEndAddr(pBlkPtrFree) == pRegion->start)
|
||||
{
|
||||
freeRgn.start = pBlkPtrFree;
|
||||
pBlkPtrFree = RemoveMBlock(&pEHHead->mbFreeList, pBlkPtrFree);
|
||||
}
|
||||
if (GetOffsetFromPtr(freeRgn.start, freeRgn.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
return FALSE;
|
||||
InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgn), pBlkPtrFree);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u16 optFlag)
|
||||
{
|
||||
void* endAddress = NNSi_FndRoundDownPtr(AddU32ToPtr(startAddress, size), 4);
|
||||
startAddress = NNSi_FndRoundUpPtr(startAddress, 4);
|
||||
if (NNSiGetUIntPtr(startAddress) > NNSiGetUIntPtr(endAddress) || GetOffsetFromPtr(startAddress, endAddress) < sizeof(NNSiFndHeapHead) + sizeof(NNSiFndExpHeapHead) + sizeof(NNSiFndExpHeapMBlockHead) + 4)
|
||||
return NULL;
|
||||
return InitExpHeap(startAddress, endAddress, optFlag);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndDestroyExpHeap(NNSFndHeapHandle handle)
|
||||
{
|
||||
NNSi_FndFinalizeHeap(handle);
|
||||
}
|
||||
|
||||
ARM_FUNC void* NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle handle, u32 size, int alignment)
|
||||
{
|
||||
if (size == 0)
|
||||
size = 1;
|
||||
size = NNSi_FndRoundUp(size, 4);
|
||||
if (alignment >= 0)
|
||||
return AllocFromHead(handle, size, alignment);
|
||||
else
|
||||
return AllocFromTail(handle, size, -alignment);
|
||||
}
|
||||
|
||||
/*
|
||||
ARM_FUNC u32 NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size)
|
||||
{
|
||||
NNSiFndExpHeapHead* pEHHead;
|
||||
NNSiFndExpHeapMBlockHead* pMBHead;
|
||||
pEHHead = GetExpHeapHeadPtrFromHandle(heap);
|
||||
pMBHead = GetMBlockHeadPtr(memBlock);
|
||||
size = NNSi_FndRoundUp(size, 4);
|
||||
if (size == pMBHead->blockSize)
|
||||
return size;
|
||||
if (size > pMBHead->blockSize)
|
||||
{
|
||||
void* crUsedEnd = GetMBlockEndAddr(pMBHead);
|
||||
NNSiFndExpHeapMBlockHead* block;
|
||||
for (block = pEHHead->mbFreeList.head; block; block = block->pMBHeadNext)
|
||||
{
|
||||
if (block == crUsedEnd)
|
||||
break;
|
||||
}
|
||||
if (!block || size > pMBHead->blockSize + sizeof(NNSiFndExpHeapMBlockHead) + block->blockSize)
|
||||
return 0;
|
||||
|
||||
NNSiMemRegion rgnNewFree;
|
||||
void* oldFreeStart;
|
||||
NNSiFndExpHeapMBlockHead* nextBlockPrev;
|
||||
|
||||
GetRegionOfMBlock(&rgnNewFree, block);
|
||||
nextBlockPrev = RemoveMBlock(&pEHHead->mbFreeList, block);
|
||||
oldFreeStart = rgnNewFree.start;
|
||||
rgnNewFree.start = AddU32ToPtr(memBlock, size);
|
||||
if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
rgnNewFree.start = rgnNewFree.end;
|
||||
pMBHead->blockSize = GetOffsetFromPtr(memBlock, rgnNewFree.start);
|
||||
if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) >= sizeof(NNSiFndExpHeapMBlockHead))
|
||||
(void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&rgnNewFree), nextBlockPrev);
|
||||
FillAllocMemory(heap, oldFreeStart, GetOffsetFromPtr(oldFreeStart, rgnNewFree.start));
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSiMemRegion rgnNewFree;
|
||||
const u32 oldBlockSize = pMBHead->blockSize;
|
||||
rgnNewFree.start = AddU32ToPtr(memBlock, size);
|
||||
rgnNewFree.end = GetMBlockEndAddr(pMBHead);
|
||||
pMBHead->blockSize = size;
|
||||
if (!RecycleRegion(pEHHead, &rgnNewFree))
|
||||
pMBHead->blockSize = oldBlockSize;
|
||||
}
|
||||
return pMBHead->blockSize;
|
||||
}
|
||||
*/
|
||||
#include "global.h"
|
||||
#include "NNS_FND_expheap.h"
|
||||
|
||||
typedef struct NNSiMemRegion {
|
||||
void* start;
|
||||
void* end;
|
||||
} NNSiMemRegion;
|
||||
|
||||
static inline u16 GetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return NNSi_FndGetBitValue(block->attribute, 8, 7);
|
||||
}
|
||||
|
||||
static inline void SetAllocDirForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 direction)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 15, 1, direction);
|
||||
}
|
||||
|
||||
static inline void SetAlignmentForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 alignment)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 8, 7, alignment);
|
||||
}
|
||||
|
||||
static inline void SetGroupIDForMBlock(NNSiFndExpHeapMBlockHead* pEHMBHead, u16 groupID)
|
||||
{
|
||||
NNSi_FndSetBitValue(pEHMBHead->attribute, 0, 8, groupID);
|
||||
}
|
||||
|
||||
static inline void* GetMemPtrForMBlock(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return AddU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
}
|
||||
|
||||
static inline void* GetMBlockHeadPtr(void* block)
|
||||
{
|
||||
return SubU32ToPtr(block, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
}
|
||||
|
||||
static inline void* GetMBlockEndAddr(NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
return AddU32ToPtr(GetMemPtrForMBlock(block), block->blockSize);
|
||||
}
|
||||
|
||||
static inline u16 GetAllocMode(NNSiFndExpHeapHead* pExHeapHd)
|
||||
{
|
||||
return NNSi_FndGetBitValue(pExHeapHd->feature, 0, 1);
|
||||
}
|
||||
|
||||
static inline void SetAllocMode(NNSiFndExpHeapHead* pExHeapHd, u16 mode)
|
||||
{
|
||||
NNSi_FndSetBitValue(pExHeapHd->feature, 0, 1, mode);
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHeapHead(NNSiFndHeapHead* pHHead)
|
||||
{
|
||||
return AddU32ToPtr(pHHead, sizeof(NNSiFndHeapHead));
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapHead* GetExpHeapHeadPtrFromHandle(NNSFndHeapHandle heap)
|
||||
{
|
||||
return GetExpHeapHeadPtrFromHeapHead(heap);
|
||||
}
|
||||
|
||||
static inline NNSiFndHeapHead* GetHeapHeadPtrFromExpHeapHead(NNSiFndExpHeapHead* pEHHead)
|
||||
{
|
||||
return SubU32ToPtr(pEHHead, sizeof(NNSiFndHeapHead));
|
||||
}
|
||||
|
||||
ARM_FUNC void GetRegionOfMBlock(NNSiMemRegion* region, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
region->start = SubU32ToPtr(block, GetAlignmentForMBlock(block));
|
||||
region->end = GetMBlockEndAddr(block);
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* RemoveMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* const prev = block->pMBHeadPrev;
|
||||
NNSiFndExpHeapMBlockHead* const next = block->pMBHeadNext;
|
||||
|
||||
if (prev != NULL)
|
||||
{
|
||||
prev->pMBHeadNext = next;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->head = next;
|
||||
}
|
||||
|
||||
if (next != NULL)
|
||||
{
|
||||
next->pMBHeadPrev = prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->tail = prev;
|
||||
}
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* InsertMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* target, NNSiFndExpHeapMBlockHead* prev)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* next;
|
||||
target->pMBHeadPrev = prev;
|
||||
if (prev != NULL)
|
||||
{
|
||||
next = prev->pMBHeadNext;
|
||||
prev->pMBHeadNext = target;
|
||||
}
|
||||
else
|
||||
{
|
||||
next = list->head;
|
||||
list->head = target;
|
||||
}
|
||||
target->pMBHeadNext = next;
|
||||
if (next != NULL)
|
||||
{
|
||||
next->pMBHeadPrev = target;
|
||||
}
|
||||
else
|
||||
{
|
||||
list->tail = target;
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndExpHeapMBlockHead* InitMBlock(const NNSiMemRegion* pRegion, u16 signature)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* block = pRegion->start;
|
||||
block->signature = signature;
|
||||
block->attribute = 0;
|
||||
block->blockSize = GetOffsetFromPtr(GetMemPtrForMBlock(block), pRegion->end);
|
||||
block->pMBHeadPrev = NULL;
|
||||
block->pMBHeadNext = NULL;
|
||||
return block;
|
||||
}
|
||||
|
||||
static inline NNSiFndExpHeapMBlockHead* InitFreeMBlock(const NNSiMemRegion* region)
|
||||
{
|
||||
return InitMBlock(region, 0x4652);
|
||||
}
|
||||
|
||||
ARM_FUNC NNSiFndHeapHead* InitExpHeap(void* startAddress, void* endAddress, u16 optFlag)
|
||||
{
|
||||
NNSiFndHeapHead* pHeapHd = (NNSiFndHeapHead*)startAddress;
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
NNSi_FndInitHeapHead(pHeapHd, 0x45585048, AddU32ToPtr(pExpHeapHd, sizeof(NNSiFndExpHeapHead)), endAddress, optFlag);
|
||||
pExpHeapHd->groupID = 0;
|
||||
pExpHeapHd->feature = 0;
|
||||
SetAllocMode(pExpHeapHd, 0);
|
||||
|
||||
NNSiFndExpHeapMBlockHead* pMBHead;
|
||||
NNSiMemRegion region;
|
||||
|
||||
region.start = pHeapHd->heapStart;
|
||||
region.end = pHeapHd->heapEnd;
|
||||
pMBHead = InitFreeMBlock(®ion);
|
||||
|
||||
pExpHeapHd->mbFreeList.head = pMBHead;
|
||||
pExpHeapHd->mbFreeList.tail = pMBHead;
|
||||
pExpHeapHd->mbUsedList.head = NULL;
|
||||
pExpHeapHd->mbUsedList.tail = NULL;
|
||||
|
||||
return pHeapHd;
|
||||
}
|
||||
|
||||
static inline void AppendMBlock(NNSiFndExpMBlockList* list, NNSiFndExpHeapMBlockHead* block)
|
||||
{
|
||||
(void) InsertMBlock(list, block, list->tail);
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocUsedBlockFromFreeBlock(NNSiFndExpHeapHead* pEHHead, NNSiFndExpHeapMBlockHead* pMBHeadFree, void* mblock, u32 size, u16 direction)
|
||||
{
|
||||
NNSiMemRegion freeRgnT;
|
||||
NNSiMemRegion freeRgnB;
|
||||
NNSiFndExpHeapMBlockHead* pMBHeadFreePrev;
|
||||
|
||||
GetRegionOfMBlock(&freeRgnT, pMBHeadFree);
|
||||
|
||||
freeRgnB.end = freeRgnT.end;
|
||||
freeRgnB.start = AddU32ToPtr(mblock, size);
|
||||
freeRgnT.end = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
|
||||
pMBHeadFreePrev = RemoveMBlock(&pEHHead->mbFreeList, pMBHeadFree);
|
||||
|
||||
if (GetOffsetFromPtr(freeRgnT.start, freeRgnT.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
{
|
||||
freeRgnT.end = freeRgnT.start;
|
||||
}
|
||||
else
|
||||
{
|
||||
pMBHeadFreePrev = InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnT), pMBHeadFreePrev);
|
||||
}
|
||||
if (GetOffsetFromPtr(freeRgnB.start, freeRgnB.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
{
|
||||
freeRgnB.start= freeRgnB.end;
|
||||
}
|
||||
else
|
||||
{
|
||||
(void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgnB), pMBHeadFreePrev);
|
||||
}
|
||||
|
||||
FillAllocMemory(GetHeapHeadPtrFromExpHeapHead(pEHHead), freeRgnT.end, GetOffsetFromPtr(freeRgnT.end, freeRgnB.start));
|
||||
|
||||
NNSiFndExpHeapMBlockHead* pMBHeadNewUsed;
|
||||
NNSiMemRegion region;
|
||||
|
||||
region.start = SubU32ToPtr(mblock, sizeof(NNSiFndExpHeapMBlockHead));
|
||||
region.end = freeRgnB.start;
|
||||
|
||||
pMBHeadNewUsed = InitMBlock(®ion, 0x5544);
|
||||
SetAllocDirForMBlock(pMBHeadNewUsed, direction);
|
||||
SetAlignmentForMBlock(pMBHeadNewUsed, (u16)GetOffsetFromPtr(freeRgnT.end, pMBHeadNewUsed));
|
||||
SetGroupIDForMBlock(pMBHeadNewUsed, pEHHead->groupID);
|
||||
AppendMBlock(&pEHHead->mbUsedList, pMBHeadNewUsed);
|
||||
|
||||
return mblock;
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocFromHead(NNSiFndHeapHead* pHeapHd, u32 size, int alignment)
|
||||
{
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHd = NULL;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL;
|
||||
u32 foundSize = 0xFFFFFFFF;
|
||||
void* foundMBlock = NULL;
|
||||
|
||||
for (pMBlkHd = pExpHeapHd->mbFreeList.head; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadNext)
|
||||
{
|
||||
void *const mblock = GetMemPtrForMBlock(pMBlkHd);
|
||||
void *const reqMBlock = NNSi_FndRoundUpPtr(mblock, alignment);
|
||||
const u32 offset = GetOffsetFromPtr(mblock, reqMBlock);
|
||||
if (pMBlkHd->blockSize >= size + offset && foundSize > pMBlkHd->blockSize)
|
||||
{
|
||||
pMBlkHdFound = pMBlkHd;
|
||||
foundSize = pMBlkHd->blockSize;
|
||||
foundMBlock = reqMBlock;
|
||||
if (bAllocFirst || foundSize == size)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pMBlkHdFound)
|
||||
return NULL;
|
||||
|
||||
return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 0);
|
||||
}
|
||||
|
||||
ARM_FUNC void* AllocFromTail(NNSiFndHeapHead* pHeapHd, u32 size, int alignment)
|
||||
{
|
||||
NNSiFndExpHeapHead* pExpHeapHd = GetExpHeapHeadPtrFromHeapHead(pHeapHd);
|
||||
const BOOL bAllocFirst = GetAllocMode(pExpHeapHd) == 0;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHd = NULL;
|
||||
NNSiFndExpHeapMBlockHead* pMBlkHdFound = NULL;
|
||||
u32 foundSize = 0xFFFFFFFF;
|
||||
void* foundMBlock = NULL;
|
||||
|
||||
for (pMBlkHd = pExpHeapHd->mbFreeList.tail; pMBlkHd; pMBlkHd = pMBlkHd->pMBHeadPrev)
|
||||
{
|
||||
void *const mblock = GetMemPtrForMBlock(pMBlkHd);
|
||||
void *const mBlockEnd = AddU32ToPtr(mblock, pMBlkHd->blockSize);
|
||||
void *const reqMBlock = NNSi_FndRoundDownPtr(SubU32ToPtr(mBlockEnd, size), alignment);
|
||||
if (ComparePtr(reqMBlock, mblock) >= 0 && foundSize > pMBlkHd->blockSize)
|
||||
{
|
||||
pMBlkHdFound = pMBlkHd;
|
||||
foundSize = pMBlkHd->blockSize;
|
||||
foundMBlock = reqMBlock;
|
||||
if (bAllocFirst || foundSize == size)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pMBlkHdFound)
|
||||
return NULL;
|
||||
|
||||
return AllocUsedBlockFromFreeBlock(pExpHeapHd, pMBlkHdFound, foundMBlock, size, 1);
|
||||
}
|
||||
|
||||
ARM_FUNC BOOL RecycleRegion(NNSiFndExpHeapHead* pEHHead, const NNSiMemRegion* pRegion)
|
||||
{
|
||||
NNSiFndExpHeapMBlockHead* pBlkPtrFree = NULL;
|
||||
NNSiMemRegion freeRgn = *pRegion;
|
||||
NNSiFndExpHeapMBlockHead* pBlk;
|
||||
for (pBlk = pEHHead->mbFreeList.head; pBlk; pBlk = pBlk->pMBHeadNext)
|
||||
{
|
||||
if (pBlk < (NNSiFndExpHeapMBlockHead*)pRegion->start)
|
||||
{
|
||||
pBlkPtrFree = pBlk;
|
||||
continue;
|
||||
}
|
||||
if (pBlk == pRegion->end)
|
||||
{
|
||||
freeRgn.end = GetMBlockEndAddr(pBlk);
|
||||
(void)RemoveMBlock(&pEHHead->mbFreeList, pBlk);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (pBlkPtrFree && GetMBlockEndAddr(pBlkPtrFree) == pRegion->start)
|
||||
{
|
||||
freeRgn.start = pBlkPtrFree;
|
||||
pBlkPtrFree = RemoveMBlock(&pEHHead->mbFreeList, pBlkPtrFree);
|
||||
}
|
||||
if (GetOffsetFromPtr(freeRgn.start, freeRgn.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
return FALSE;
|
||||
InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&freeRgn), pBlkPtrFree);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
ARM_FUNC NNSFndHeapHandle NNS_FndCreateExpHeapEx(void *startAddress, u32 size, u16 optFlag)
|
||||
{
|
||||
void* endAddress = NNSi_FndRoundDownPtr(AddU32ToPtr(startAddress, size), 4);
|
||||
startAddress = NNSi_FndRoundUpPtr(startAddress, 4);
|
||||
if (NNSiGetUIntPtr(startAddress) > NNSiGetUIntPtr(endAddress) || GetOffsetFromPtr(startAddress, endAddress) < sizeof(NNSiFndHeapHead) + sizeof(NNSiFndExpHeapHead) + sizeof(NNSiFndExpHeapMBlockHead) + 4)
|
||||
return NULL;
|
||||
return InitExpHeap(startAddress, endAddress, optFlag);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndDestroyExpHeap(NNSFndHeapHandle handle)
|
||||
{
|
||||
NNSi_FndFinalizeHeap(handle);
|
||||
}
|
||||
|
||||
ARM_FUNC void* NNS_FndAllocFromExpHeapEx(NNSFndHeapHandle handle, u32 size, int alignment)
|
||||
{
|
||||
if (size == 0)
|
||||
size = 1;
|
||||
size = NNSi_FndRoundUp(size, 4);
|
||||
if (alignment >= 0)
|
||||
return AllocFromHead(handle, size, alignment);
|
||||
else
|
||||
return AllocFromTail(handle, size, -alignment);
|
||||
}
|
||||
|
||||
/*
|
||||
ARM_FUNC u32 NNS_FndResizeForMBlockExpHeap(NNSFndHeapHandle heap, void *memBlock, u32 size)
|
||||
{
|
||||
NNSiFndExpHeapHead* pEHHead;
|
||||
NNSiFndExpHeapMBlockHead* pMBHead;
|
||||
pEHHead = GetExpHeapHeadPtrFromHandle(heap);
|
||||
pMBHead = GetMBlockHeadPtr(memBlock);
|
||||
size = NNSi_FndRoundUp(size, 4);
|
||||
if (size == pMBHead->blockSize)
|
||||
return size;
|
||||
if (size > pMBHead->blockSize)
|
||||
{
|
||||
void* crUsedEnd = GetMBlockEndAddr(pMBHead);
|
||||
NNSiFndExpHeapMBlockHead* block;
|
||||
for (block = pEHHead->mbFreeList.head; block; block = block->pMBHeadNext)
|
||||
{
|
||||
if (block == crUsedEnd)
|
||||
break;
|
||||
}
|
||||
if (!block || size > pMBHead->blockSize + sizeof(NNSiFndExpHeapMBlockHead) + block->blockSize)
|
||||
return 0;
|
||||
|
||||
NNSiMemRegion rgnNewFree;
|
||||
void* oldFreeStart;
|
||||
NNSiFndExpHeapMBlockHead* nextBlockPrev;
|
||||
|
||||
GetRegionOfMBlock(&rgnNewFree, block);
|
||||
nextBlockPrev = RemoveMBlock(&pEHHead->mbFreeList, block);
|
||||
oldFreeStart = rgnNewFree.start;
|
||||
rgnNewFree.start = AddU32ToPtr(memBlock, size);
|
||||
if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) < sizeof(NNSiFndExpHeapMBlockHead))
|
||||
rgnNewFree.start = rgnNewFree.end;
|
||||
pMBHead->blockSize = GetOffsetFromPtr(memBlock, rgnNewFree.start);
|
||||
if (GetOffsetFromPtr(rgnNewFree.start, rgnNewFree.end) >= sizeof(NNSiFndExpHeapMBlockHead))
|
||||
(void)InsertMBlock(&pEHHead->mbFreeList, InitFreeMBlock(&rgnNewFree), nextBlockPrev);
|
||||
FillAllocMemory(heap, oldFreeStart, GetOffsetFromPtr(oldFreeStart, rgnNewFree.start));
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSiMemRegion rgnNewFree;
|
||||
const u32 oldBlockSize = pMBHead->blockSize;
|
||||
rgnNewFree.start = AddU32ToPtr(memBlock, size);
|
||||
rgnNewFree.end = GetMBlockEndAddr(pMBHead);
|
||||
pMBHead->blockSize = size;
|
||||
if (!RecycleRegion(pEHHead, &rgnNewFree))
|
||||
pMBHead->blockSize = oldBlockSize;
|
||||
}
|
||||
return pMBHead->blockSize;
|
||||
}
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,55 +1,55 @@
|
|||
#include "nitro.h"
|
||||
#include "NNS_FND_heapcommon.h"
|
||||
#include "NNS_FND_list.h"
|
||||
|
||||
BOOL sRootListInitialized;
|
||||
NNSFndList sRootList;
|
||||
|
||||
ARM_FUNC void *NNS_FndGetNextListObject(NNSFndList *, void *);
|
||||
|
||||
ARM_FUNC static NNSiFndHeapHead* FindContainHeap(NNSFndList * pList, const void * memBlock)
|
||||
{
|
||||
NNSiFndHeapHead * pHead = NULL;
|
||||
|
||||
while ((pHead = NNS_FndGetNextListObject(pList, pHead)) != NULL)
|
||||
{
|
||||
if (pHead->heapStart <= memBlock && memBlock < pHead->heapEnd)
|
||||
{
|
||||
NNSiFndHeapHead * ret = FindContainHeap(&pHead->childList, memBlock);
|
||||
if (ret == NULL)
|
||||
ret = pHead;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ARM_FUNC static NNSFndList* FindListContainHeap(const void * memBlock)
|
||||
{
|
||||
NNSFndList* ret = &sRootList;
|
||||
NNSiFndHeapHead* pHead = FindContainHeap(&sRootList, memBlock);
|
||||
if (pHead != NULL)
|
||||
ret = &pHead->childList;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ARM_FUNC void NNSi_FndInitHeapHead(NNSiFndHeapHead *pHead, u32 signature, void* heapStart, void* heapEnd, u16 optionFlag)
|
||||
{
|
||||
pHead->signature = signature;
|
||||
pHead->heapStart = heapStart;
|
||||
pHead->heapEnd = heapEnd;
|
||||
pHead->attribute = 0;
|
||||
SetOptForHeap(pHead, optionFlag);
|
||||
NNS_FndInitList(&pHead->childList, 4);
|
||||
if (!sRootListInitialized)
|
||||
{
|
||||
NNS_FndInitList(&sRootList, 4);
|
||||
sRootListInitialized = TRUE;
|
||||
}
|
||||
NNS_FndAppendListObject(FindListContainHeap(pHead), pHead);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNSi_FndFinalizeHeap(NNSiFndHeapHead *pHead)
|
||||
{
|
||||
NNS_FndRemoveListObject(FindListContainHeap(pHead), pHead);
|
||||
}
|
||||
#include "nitro.h"
|
||||
#include "NNS_FND_heapcommon.h"
|
||||
#include "NNS_FND_list.h"
|
||||
|
||||
BOOL sRootListInitialized;
|
||||
NNSFndList sRootList;
|
||||
|
||||
ARM_FUNC void *NNS_FndGetNextListObject(NNSFndList *, void *);
|
||||
|
||||
ARM_FUNC static NNSiFndHeapHead* FindContainHeap(NNSFndList * pList, const void * memBlock)
|
||||
{
|
||||
NNSiFndHeapHead * pHead = NULL;
|
||||
|
||||
while ((pHead = NNS_FndGetNextListObject(pList, pHead)) != NULL)
|
||||
{
|
||||
if (pHead->heapStart <= memBlock && memBlock < pHead->heapEnd)
|
||||
{
|
||||
NNSiFndHeapHead * ret = FindContainHeap(&pHead->childList, memBlock);
|
||||
if (ret == NULL)
|
||||
ret = pHead;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ARM_FUNC static NNSFndList* FindListContainHeap(const void * memBlock)
|
||||
{
|
||||
NNSFndList* ret = &sRootList;
|
||||
NNSiFndHeapHead* pHead = FindContainHeap(&sRootList, memBlock);
|
||||
if (pHead != NULL)
|
||||
ret = &pHead->childList;
|
||||
return ret;
|
||||
}
|
||||
|
||||
ARM_FUNC void NNSi_FndInitHeapHead(NNSiFndHeapHead *pHead, u32 signature, void* heapStart, void* heapEnd, u16 optionFlag)
|
||||
{
|
||||
pHead->signature = signature;
|
||||
pHead->heapStart = heapStart;
|
||||
pHead->heapEnd = heapEnd;
|
||||
pHead->attribute = 0;
|
||||
SetOptForHeap(pHead, optionFlag);
|
||||
NNS_FndInitList(&pHead->childList, 4);
|
||||
if (!sRootListInitialized)
|
||||
{
|
||||
NNS_FndInitList(&sRootList, 4);
|
||||
sRootListInitialized = TRUE;
|
||||
}
|
||||
NNS_FndAppendListObject(FindListContainHeap(pHead), pHead);
|
||||
}
|
||||
|
||||
ARM_FUNC void NNSi_FndFinalizeHeap(NNSiFndHeapHead *pHead)
|
||||
{
|
||||
NNS_FndRemoveListObject(FindListContainHeap(pHead), pHead);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,128 +1,128 @@
|
|||
#include "nitro.h"
|
||||
#include "NNS_FND_list.h"
|
||||
|
||||
#define OBJ_TO_LINK(list, obj) ((NNSFndLink*)((void*)(obj) + (list)->offset))
|
||||
|
||||
ARM_FUNC void NNS_FndInitList(NNSFndList* list, s32 alignment)
|
||||
{
|
||||
list->headObject = NULL;
|
||||
list->tailObject = NULL;
|
||||
list->numObjects = 0;
|
||||
list->offset = (u16)alignment;
|
||||
}
|
||||
|
||||
ARM_FUNC static void SetFirstObject(NNSFndList* list, void* object)
|
||||
{
|
||||
NNSFndLink* tail = OBJ_TO_LINK(list, object);
|
||||
tail->nextObject = NULL;
|
||||
tail->prevObject = NULL;
|
||||
list->headObject = object;
|
||||
list->tailObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndAppendListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (list->headObject == NULL)
|
||||
{
|
||||
SetFirstObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink *tail = OBJ_TO_LINK(list, object);
|
||||
tail->prevObject = list->tailObject;
|
||||
tail->nextObject = NULL;
|
||||
OBJ_TO_LINK(list, list->tailObject)->nextObject = object;
|
||||
list->tailObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndPrependListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (list->headObject == NULL)
|
||||
{
|
||||
SetFirstObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink *tail = OBJ_TO_LINK(list, object);
|
||||
tail->prevObject = NULL;
|
||||
tail->nextObject = list->headObject;
|
||||
OBJ_TO_LINK(list, list->headObject)->prevObject = object;
|
||||
list->headObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndInsertListObject(NNSFndList* list, void* where, void* object)
|
||||
{
|
||||
if (where == NULL)
|
||||
{
|
||||
NNS_FndAppendListObject(list, object);
|
||||
}
|
||||
|
||||
else if (where == list->headObject)
|
||||
{
|
||||
NNS_FndPrependListObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink* tail = OBJ_TO_LINK(list, object);
|
||||
void* prevObject = OBJ_TO_LINK(list, where)->prevObject;
|
||||
NNSFndLink* head = OBJ_TO_LINK(list, prevObject);
|
||||
tail->prevObject = prevObject;
|
||||
tail->nextObject = where;
|
||||
head->nextObject = object;
|
||||
OBJ_TO_LINK(list, where)->prevObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndRemoveListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
NNSFndLink* node = OBJ_TO_LINK(list, object);
|
||||
if (node->prevObject == NULL)
|
||||
{
|
||||
list->headObject = node->nextObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
OBJ_TO_LINK(list, node->prevObject)->nextObject = node->nextObject;
|
||||
}
|
||||
if (node->nextObject == NULL)
|
||||
{
|
||||
list->tailObject = node->prevObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
OBJ_TO_LINK(list, node->nextObject)->prevObject = node->prevObject;
|
||||
}
|
||||
node->prevObject = NULL;
|
||||
node->nextObject = NULL;
|
||||
list->numObjects--;
|
||||
}
|
||||
|
||||
ARM_FUNC void * NNS_FndGetNextListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (object == NULL)
|
||||
{
|
||||
return list->headObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OBJ_TO_LINK(list, object)->nextObject;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void * NNS_FndGetPrevListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (object == NULL)
|
||||
{
|
||||
return list->tailObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OBJ_TO_LINK(list, object)->prevObject;
|
||||
}
|
||||
}
|
||||
#include "nitro.h"
|
||||
#include "NNS_FND_list.h"
|
||||
|
||||
#define OBJ_TO_LINK(list, obj) ((NNSFndLink*)((void*)(obj) + (list)->offset))
|
||||
|
||||
ARM_FUNC void NNS_FndInitList(NNSFndList* list, s32 alignment)
|
||||
{
|
||||
list->headObject = NULL;
|
||||
list->tailObject = NULL;
|
||||
list->numObjects = 0;
|
||||
list->offset = (u16)alignment;
|
||||
}
|
||||
|
||||
ARM_FUNC static void SetFirstObject(NNSFndList* list, void* object)
|
||||
{
|
||||
NNSFndLink* tail = OBJ_TO_LINK(list, object);
|
||||
tail->nextObject = NULL;
|
||||
tail->prevObject = NULL;
|
||||
list->headObject = object;
|
||||
list->tailObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndAppendListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (list->headObject == NULL)
|
||||
{
|
||||
SetFirstObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink *tail = OBJ_TO_LINK(list, object);
|
||||
tail->prevObject = list->tailObject;
|
||||
tail->nextObject = NULL;
|
||||
OBJ_TO_LINK(list, list->tailObject)->nextObject = object;
|
||||
list->tailObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndPrependListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (list->headObject == NULL)
|
||||
{
|
||||
SetFirstObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink *tail = OBJ_TO_LINK(list, object);
|
||||
tail->prevObject = NULL;
|
||||
tail->nextObject = list->headObject;
|
||||
OBJ_TO_LINK(list, list->headObject)->prevObject = object;
|
||||
list->headObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndInsertListObject(NNSFndList* list, void* where, void* object)
|
||||
{
|
||||
if (where == NULL)
|
||||
{
|
||||
NNS_FndAppendListObject(list, object);
|
||||
}
|
||||
|
||||
else if (where == list->headObject)
|
||||
{
|
||||
NNS_FndPrependListObject(list, object);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNSFndLink* tail = OBJ_TO_LINK(list, object);
|
||||
void* prevObject = OBJ_TO_LINK(list, where)->prevObject;
|
||||
NNSFndLink* head = OBJ_TO_LINK(list, prevObject);
|
||||
tail->prevObject = prevObject;
|
||||
tail->nextObject = where;
|
||||
head->nextObject = object;
|
||||
OBJ_TO_LINK(list, where)->prevObject = object;
|
||||
list->numObjects++;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void NNS_FndRemoveListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
NNSFndLink* node = OBJ_TO_LINK(list, object);
|
||||
if (node->prevObject == NULL)
|
||||
{
|
||||
list->headObject = node->nextObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
OBJ_TO_LINK(list, node->prevObject)->nextObject = node->nextObject;
|
||||
}
|
||||
if (node->nextObject == NULL)
|
||||
{
|
||||
list->tailObject = node->prevObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
OBJ_TO_LINK(list, node->nextObject)->prevObject = node->prevObject;
|
||||
}
|
||||
node->prevObject = NULL;
|
||||
node->nextObject = NULL;
|
||||
list->numObjects--;
|
||||
}
|
||||
|
||||
ARM_FUNC void * NNS_FndGetNextListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (object == NULL)
|
||||
{
|
||||
return list->headObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OBJ_TO_LINK(list, object)->nextObject;
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC void * NNS_FndGetPrevListObject(NNSFndList* list, void* object)
|
||||
{
|
||||
if (object == NULL)
|
||||
{
|
||||
return list->tailObject;
|
||||
}
|
||||
else
|
||||
{
|
||||
return OBJ_TO_LINK(list, object)->prevObject;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,349 +1,349 @@
|
|||
#include "global.h"
|
||||
#include "filesystem.h"
|
||||
#include "NNS_g2d.h"
|
||||
#include "gf_gfx_loader.h"
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
NNSG2dCharacterData * pCharData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedBGCharacterData(pFile, &pCharData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pCharData->szByte;
|
||||
BG_LoadCharTilesData(unkStruct02016B94_2, (u8)layer, pCharData->pRawData, szByte, numTiles);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return szByte;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
NNSG2dScreenData * pScreenData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedScreenData(pFile, &pScreenData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pScreenData->szByte;
|
||||
if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) layer) != NULL)
|
||||
BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte);
|
||||
BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte, tileOffset);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id)
|
||||
{
|
||||
GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, location, 0, palSlotOffset, szByte, heap_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id)
|
||||
{
|
||||
static void (*const load_funcs[])(void *, u32, u32) = {
|
||||
GX_LoadBGPltt,
|
||||
GX_LoadOBJPltt,
|
||||
GX_LoadBGExtPltt,
|
||||
GX_LoadOBJExtPltt,
|
||||
GXS_LoadBGPltt,
|
||||
GXS_LoadOBJPltt,
|
||||
GXS_LoadBGExtPltt,
|
||||
GXS_LoadOBJExtPltt
|
||||
};
|
||||
NNSG2dPaletteData * pPltData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, FALSE, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedPaletteData(pFile, &pPltData))
|
||||
{
|
||||
pPltData->pRawData = (void *)((u32)pPltData->pRawData + srcOffset);
|
||||
if (szByte == 0)
|
||||
szByte = pPltData->szByte - srcOffset;
|
||||
DC_FlushRange(pPltData->pRawData, szByte);
|
||||
switch (location)
|
||||
{
|
||||
case GF_PAL_LOCATION_MAIN_BGEXT:
|
||||
GX_BeginLoadBGExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GX_EndLoadBGExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_SUB_BGEXT:
|
||||
GXS_BeginLoadBGExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GXS_EndLoadBGExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_MAIN_OBJEXT:
|
||||
GX_BeginLoadOBJExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GX_EndLoadOBJExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_SUB_OBJEXT:
|
||||
GXS_BeginLoadOBJExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GXS_EndLoadOBJExtPltt();
|
||||
break;
|
||||
default:
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
break;
|
||||
}
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
static void (*const load_funcs[])(void *, u32, u32) = {
|
||||
GX_LoadOBJ,
|
||||
GXS_LoadOBJ
|
||||
};
|
||||
|
||||
NNSG2dCharacterData* pCharData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pCharData->szByte;
|
||||
DC_FlushRange(pCharData->pRawData, szByte);
|
||||
load_funcs[layer](pCharData->pRawData, baseAddr, szByte);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return szByte;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, TRUE);
|
||||
NNSG2dPaletteData* pPlttData;
|
||||
NNSG2dPaletteCompressInfo* pCompressInfo;
|
||||
if (pFile != NULL)
|
||||
{
|
||||
BOOL isCompressed = NNS_G2dGetUnpackedPaletteCompressInfo(pFile, &pCompressInfo);
|
||||
if (NNS_G2dGetUnpackedPaletteData(pFile, &pPlttData))
|
||||
{
|
||||
if (isCompressed)
|
||||
{
|
||||
NNS_G2dLoadPaletteEx(pPlttData, pCompressInfo, baseAddr, vramType, pPltProxy);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNS_G2dLoadPalette(pPlttData, baseAddr, vramType, pPltProxy);
|
||||
}
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy)
|
||||
{
|
||||
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
|
||||
NNS_G2dLoadImage1DMapping,
|
||||
NNS_G2dLoadImage2DMapping
|
||||
};
|
||||
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
u32 retSize = 0;
|
||||
NNSG2dCharacterData * pSrcData;
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pSrcData))
|
||||
{
|
||||
if (szByte != 0)
|
||||
pSrcData->szByte = szByte;
|
||||
load_funcs[layer](pSrcData, baseAddr, type, pImgProxy);
|
||||
retSize = pSrcData->szByte;
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return retSize;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy)
|
||||
{
|
||||
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
|
||||
NNS_G2dLoadImage1DMapping,
|
||||
NNS_G2dLoadImage2DMapping
|
||||
};
|
||||
NNSG2dCharacterData * pCharacterData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharacterData))
|
||||
{
|
||||
if (szByte != 0)
|
||||
pCharacterData->szByte = szByte;
|
||||
switch (type)
|
||||
{
|
||||
case NNS_G2D_VRAM_TYPE_2DMAIN:
|
||||
pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK));
|
||||
break;
|
||||
case NNS_G2D_VRAM_TYPE_2DSUB:
|
||||
pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK));
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
load_funcs[layer](pCharacterData, baseAddr, type, pImageProxy);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedBGCharacterData(pFile, ppCharData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedScreenData(pFile, ppScrData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedPaletteData(pFile, ppPltData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedCellBank(pFile, ppCellBank))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedAnimBank(pFile, ppAnimBank))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id)
|
||||
{
|
||||
return GfGfxLoader_LoadFromNarc(narcId, memberId, TRUE, heap_id, FALSE);
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd)
|
||||
{
|
||||
void * dest;
|
||||
void * dest2;
|
||||
if (isCompressed || allocAtEnd == TRUE)
|
||||
{
|
||||
u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
dest = AllocFromHeapAtEnd(heap_id, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
dest = AllocFromHeap(heap_id, size);
|
||||
}
|
||||
if (dest != NULL)
|
||||
{
|
||||
ReadWholeNarcMemberByIdPair(dest, narcId, memberNo);
|
||||
if (isCompressed)
|
||||
{
|
||||
if (allocAtEnd == FALSE)
|
||||
{
|
||||
dest2 = AllocFromHeap(heap_id, (*(u32 *)dest) >> 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest2 = AllocFromHeapAtEnd(heap_id, (*(u32 *)dest) >> 8);
|
||||
}
|
||||
if (dest2 != NULL)
|
||||
{
|
||||
MI_UncompressLZ8(dest, dest2);
|
||||
FreeToHeap(dest);
|
||||
}
|
||||
dest = dest2; // UB: if dest2 is NULL, dest is never freed
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p)
|
||||
{
|
||||
void * dest;
|
||||
void * dest2;
|
||||
*size_p = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
if (isCompressed || allocAtEnd == TRUE)
|
||||
{
|
||||
dest = AllocFromHeapAtEnd(heap_id, *size_p);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest = AllocFromHeap(heap_id, *size_p);
|
||||
}
|
||||
if (dest != NULL)
|
||||
{
|
||||
ReadWholeNarcMemberByIdPair(dest, narcId, memberNo);
|
||||
if (isCompressed)
|
||||
{
|
||||
*size_p = (*(u32 *)dest) >> 8;
|
||||
if (allocAtEnd == FALSE)
|
||||
{
|
||||
dest2 = AllocFromHeap(heap_id, *size_p);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest2 = AllocFromHeapAtEnd(heap_id, *size_p);
|
||||
}
|
||||
if (dest2 != NULL)
|
||||
{
|
||||
MI_UncompressLZ8(dest, dest2);
|
||||
FreeToHeap(dest);
|
||||
}
|
||||
dest = dest2; // UB: if dest2 is NULL, dest is never freed
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "filesystem.h"
|
||||
#include "NNS_g2d.h"
|
||||
#include "gf_gfx_loader.h"
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
NNSG2dCharacterData * pCharData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedBGCharacterData(pFile, &pCharData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pCharData->szByte;
|
||||
BG_LoadCharTilesData(unkStruct02016B94_2, (u8)layer, pCharData->pRawData, szByte, numTiles);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return szByte;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
NNSG2dScreenData * pScreenData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedScreenData(pFile, &pScreenData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pScreenData->szByte;
|
||||
if (GetBgTilemapBuffer(unkStruct02016B94_2, (u8) layer) != NULL)
|
||||
BG_LoadScreenTilemapData(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte);
|
||||
BgCopyOrUncompressTilemapBufferRangeToVram(unkStruct02016B94_2, (u8) layer, pScreenData->rawData, szByte, tileOffset);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id)
|
||||
{
|
||||
GfGfxLoader_GXLoadPalWithSrcOffset(narcId, memberNo, location, 0, palSlotOffset, szByte, heap_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id)
|
||||
{
|
||||
static void (*const load_funcs[])(void *, u32, u32) = {
|
||||
GX_LoadBGPltt,
|
||||
GX_LoadOBJPltt,
|
||||
GX_LoadBGExtPltt,
|
||||
GX_LoadOBJExtPltt,
|
||||
GXS_LoadBGPltt,
|
||||
GXS_LoadOBJPltt,
|
||||
GXS_LoadBGExtPltt,
|
||||
GXS_LoadOBJExtPltt
|
||||
};
|
||||
NNSG2dPaletteData * pPltData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberNo, FALSE, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedPaletteData(pFile, &pPltData))
|
||||
{
|
||||
pPltData->pRawData = (void *)((u32)pPltData->pRawData + srcOffset);
|
||||
if (szByte == 0)
|
||||
szByte = pPltData->szByte - srcOffset;
|
||||
DC_FlushRange(pPltData->pRawData, szByte);
|
||||
switch (location)
|
||||
{
|
||||
case GF_PAL_LOCATION_MAIN_BGEXT:
|
||||
GX_BeginLoadBGExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GX_EndLoadBGExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_SUB_BGEXT:
|
||||
GXS_BeginLoadBGExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GXS_EndLoadBGExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_MAIN_OBJEXT:
|
||||
GX_BeginLoadOBJExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GX_EndLoadOBJExtPltt();
|
||||
break;
|
||||
case GF_PAL_LOCATION_SUB_OBJEXT:
|
||||
GXS_BeginLoadOBJExtPltt();
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
GXS_EndLoadOBJExtPltt();
|
||||
break;
|
||||
default:
|
||||
load_funcs[location](pPltData->pRawData, palSlotOffset, szByte);
|
||||
break;
|
||||
}
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id)
|
||||
{
|
||||
static void (*const load_funcs[])(void *, u32, u32) = {
|
||||
GX_LoadOBJ,
|
||||
GXS_LoadOBJ
|
||||
};
|
||||
|
||||
NNSG2dCharacterData* pCharData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharData))
|
||||
{
|
||||
if (szByte == 0)
|
||||
szByte = pCharData->szByte;
|
||||
DC_FlushRange(pCharData->pRawData, szByte);
|
||||
load_funcs[layer](pCharData->pRawData, baseAddr, szByte);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return szByte;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, TRUE);
|
||||
NNSG2dPaletteData* pPlttData;
|
||||
NNSG2dPaletteCompressInfo* pCompressInfo;
|
||||
if (pFile != NULL)
|
||||
{
|
||||
BOOL isCompressed = NNS_G2dGetUnpackedPaletteCompressInfo(pFile, &pCompressInfo);
|
||||
if (NNS_G2dGetUnpackedPaletteData(pFile, &pPlttData))
|
||||
{
|
||||
if (isCompressed)
|
||||
{
|
||||
NNS_G2dLoadPaletteEx(pPlttData, pCompressInfo, baseAddr, vramType, pPltProxy);
|
||||
}
|
||||
else
|
||||
{
|
||||
NNS_G2dLoadPalette(pPlttData, baseAddr, vramType, pPltProxy);
|
||||
}
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy)
|
||||
{
|
||||
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
|
||||
NNS_G2dLoadImage1DMapping,
|
||||
NNS_G2dLoadImage2DMapping
|
||||
};
|
||||
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
u32 retSize = 0;
|
||||
NNSG2dCharacterData * pSrcData;
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pSrcData))
|
||||
{
|
||||
if (szByte != 0)
|
||||
pSrcData->szByte = szByte;
|
||||
load_funcs[layer](pSrcData, baseAddr, type, pImgProxy);
|
||||
retSize = pSrcData->szByte;
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
return retSize;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy)
|
||||
{
|
||||
static void (*const load_funcs[])(const NNSG2dCharacterData *, u32, NNS_G2D_VRAM_TYPE, NNSG2dImageProxy *) = {
|
||||
NNS_G2dLoadImage1DMapping,
|
||||
NNS_G2dLoadImage2DMapping
|
||||
};
|
||||
NNSG2dCharacterData * pCharacterData;
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, TRUE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (NNS_G2dGetUnpackedCharacterData(pFile, &pCharacterData))
|
||||
{
|
||||
if (szByte != 0)
|
||||
pCharacterData->szByte = szByte;
|
||||
switch (type)
|
||||
{
|
||||
case NNS_G2D_VRAM_TYPE_2DMAIN:
|
||||
pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK));
|
||||
break;
|
||||
case NNS_G2D_VRAM_TYPE_2DSUB:
|
||||
pCharacterData->mapingType = (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK));
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
load_funcs[layer](pCharacterData, baseAddr, type, pImageProxy);
|
||||
}
|
||||
FreeToHeap(pFile);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedBGCharacterData(pFile, ppCharData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedScreenData(pFile, ppScrData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, FALSE, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedPaletteData(pFile, ppPltData))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedCellBank(pFile, ppCellBank))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id)
|
||||
{
|
||||
void * pFile = GfGfxLoader_LoadFromNarc(narcId, memberId, isCompressed, heap_id, FALSE);
|
||||
if (pFile != NULL)
|
||||
{
|
||||
if (!NNS_G2dGetUnpackedAnimBank(pFile, ppAnimBank))
|
||||
{
|
||||
FreeToHeap(pFile);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return pFile;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id)
|
||||
{
|
||||
return GfGfxLoader_LoadFromNarc(narcId, memberId, TRUE, heap_id, FALSE);
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd)
|
||||
{
|
||||
void * dest;
|
||||
void * dest2;
|
||||
if (isCompressed || allocAtEnd == TRUE)
|
||||
{
|
||||
u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
dest = AllocFromHeapAtEnd(heap_id, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 size = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
dest = AllocFromHeap(heap_id, size);
|
||||
}
|
||||
if (dest != NULL)
|
||||
{
|
||||
ReadWholeNarcMemberByIdPair(dest, narcId, memberNo);
|
||||
if (isCompressed)
|
||||
{
|
||||
if (allocAtEnd == FALSE)
|
||||
{
|
||||
dest2 = AllocFromHeap(heap_id, (*(u32 *)dest) >> 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest2 = AllocFromHeapAtEnd(heap_id, (*(u32 *)dest) >> 8);
|
||||
}
|
||||
if (dest2 != NULL)
|
||||
{
|
||||
MI_UncompressLZ8(dest, dest2);
|
||||
FreeToHeap(dest);
|
||||
}
|
||||
dest = dest2; // UB: if dest2 is NULL, dest is never freed
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p)
|
||||
{
|
||||
void * dest;
|
||||
void * dest2;
|
||||
*size_p = GetNarcMemberSizeByIdPair(narcId, memberNo);
|
||||
if (isCompressed || allocAtEnd == TRUE)
|
||||
{
|
||||
dest = AllocFromHeapAtEnd(heap_id, *size_p);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest = AllocFromHeap(heap_id, *size_p);
|
||||
}
|
||||
if (dest != NULL)
|
||||
{
|
||||
ReadWholeNarcMemberByIdPair(dest, narcId, memberNo);
|
||||
if (isCompressed)
|
||||
{
|
||||
*size_p = (*(u32 *)dest) >> 8;
|
||||
if (allocAtEnd == FALSE)
|
||||
{
|
||||
dest2 = AllocFromHeap(heap_id, *size_p);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest2 = AllocFromHeapAtEnd(heap_id, *size_p);
|
||||
}
|
||||
if (dest2 != NULL)
|
||||
{
|
||||
MI_UncompressLZ8(dest, dest2);
|
||||
FreeToHeap(dest);
|
||||
}
|
||||
dest = dest2; // UB: if dest2 is NULL, dest is never freed
|
||||
}
|
||||
}
|
||||
return dest;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,183 +1,183 @@
|
|||
#include "global.h"
|
||||
#include "MI_memory.h"
|
||||
#include "gf_rtc.h"
|
||||
#include "RTC_convert.h"
|
||||
|
||||
typedef struct GF_RTC_Work
|
||||
{
|
||||
BOOL getDateTimeSuccess;
|
||||
BOOL getDateTimeLock;
|
||||
s32 getDateTimeSleep;
|
||||
RTCResult getDateTimeErrorCode;
|
||||
RTCDate date; // 10
|
||||
RTCTime time; // 20
|
||||
RTCDate date_async; // 2C
|
||||
RTCTime time_async; // 3C
|
||||
} GF_RTC_Work;
|
||||
|
||||
GF_RTC_Work sGFRTCWork;
|
||||
|
||||
#define MAX_SECONDS (3155759999ll)
|
||||
|
||||
void GF_RTC_GetDateTime(GF_RTC_Work * work);
|
||||
|
||||
THUMB_FUNC void GF_InitRTCWork(void)
|
||||
{
|
||||
RTC_Init();
|
||||
__builtin__clear(&sGFRTCWork, sizeof(sGFRTCWork));
|
||||
sGFRTCWork.getDateTimeSuccess = FALSE;
|
||||
sGFRTCWork.getDateTimeLock = FALSE;
|
||||
sGFRTCWork.getDateTimeSleep = 0;
|
||||
GF_RTC_GetDateTime(&sGFRTCWork);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_UpdateOnFrame(void)
|
||||
{
|
||||
if (!sGFRTCWork.getDateTimeLock)
|
||||
{
|
||||
if (++sGFRTCWork.getDateTimeSleep > 10)
|
||||
{
|
||||
sGFRTCWork.getDateTimeSleep = 0;
|
||||
GF_RTC_GetDateTime(&sGFRTCWork);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_GetDateTime_Callback(RTCResult result, void * data)
|
||||
{
|
||||
GF_RTC_Work * work = (GF_RTC_Work *)data;
|
||||
work->getDateTimeErrorCode = result;
|
||||
GF_ASSERT(result == RTC_RESULT_SUCCESS);
|
||||
work->getDateTimeSuccess = TRUE;
|
||||
work->date = work->date_async;
|
||||
work->time = work->time_async;
|
||||
work->getDateTimeLock = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_GetDateTime(GF_RTC_Work * work)
|
||||
{
|
||||
work->getDateTimeLock = TRUE;
|
||||
RTCResult result = RTC_GetDateTimeAsync(&work->date_async, &work->time_async, GF_RTC_GetDateTime_Callback, work);
|
||||
work->getDateTimeErrorCode = result;
|
||||
GF_ASSERT(result == RTC_RESULT_SUCCESS);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyDateTime(RTCDate * date, RTCTime * time)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*date = sGFRTCWork.date;
|
||||
*time = sGFRTCWork.time;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyTime(RTCTime * time)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*time = sGFRTCWork.time;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyDate(RTCDate * date)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*date = sGFRTCWork.date;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GF_RTC_TimeToSec(void)
|
||||
{
|
||||
RTCTime* time = &sGFRTCWork.time;
|
||||
return 60 * time->minute + 3600 * time->hour + time->second;
|
||||
}
|
||||
|
||||
THUMB_FUNC s64 GF_RTC_DateTimeToSec(void)
|
||||
{
|
||||
return RTC_ConvertDateTimeToSecond(&sGFRTCWork.date, &sGFRTCWork.time);
|
||||
}
|
||||
|
||||
static inline BOOL IsLeapYear(s32 year)
|
||||
{
|
||||
return ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GF_RTC_GetDayOfYear(const RTCDate * date)
|
||||
{
|
||||
RTCDate date_stack;
|
||||
s32 days;
|
||||
static const u16 sGF_DaysPerMonth[] = {
|
||||
0, // Jan
|
||||
31, // Feb
|
||||
59, // Mar
|
||||
90, // Apr
|
||||
120, // May
|
||||
151, // Jun
|
||||
181, // Jul
|
||||
212, // Aug
|
||||
243, // Sep
|
||||
273, // Oct
|
||||
304, // Nov
|
||||
334, // Dec
|
||||
};
|
||||
|
||||
days = date->day;
|
||||
days += sGF_DaysPerMonth[date->month - 1];
|
||||
if (date->month >= RTC_MONTH_MARCH && IsLeapYear(date->year))
|
||||
days++;
|
||||
date_stack = *date;
|
||||
date_stack.month = RTC_MONTH_JANUARY;
|
||||
date_stack.day = 1;
|
||||
RTC_ConvertDateToDay(&date_stack);
|
||||
RTC_ConvertDateToDay(date);
|
||||
return days;
|
||||
}
|
||||
|
||||
enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void);
|
||||
enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour);
|
||||
|
||||
THUMB_FUNC BOOL IsNighttime(void)
|
||||
{
|
||||
switch (GF_RTC_GetTimeOfDay())
|
||||
{
|
||||
case RTC_TIMEOFDAY_NITE:
|
||||
case RTC_TIMEOFDAY_LATE:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void)
|
||||
{
|
||||
RTCTime time;
|
||||
GF_RTC_CopyTime(&time);
|
||||
return GF_RTC_GetTimeOfDayByHour(time.hour);
|
||||
}
|
||||
|
||||
THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour)
|
||||
{
|
||||
static const u8 sTimeOfDayByHour[] = {
|
||||
// 00:00 - 03:59
|
||||
RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE,
|
||||
// 04:00 - 09:59
|
||||
RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN,
|
||||
// 10:00 - 16:59
|
||||
RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY,
|
||||
// 17:00 - 19:59
|
||||
RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE,
|
||||
// 20:00 - 23:59
|
||||
RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE,
|
||||
};
|
||||
|
||||
GF_ASSERT(hour >= 0 && hour < 24);
|
||||
return sTimeOfDayByHour[hour];
|
||||
}
|
||||
|
||||
THUMB_FUNC s64 GF_RTC_TimeDelta(s64 first, s64 last)
|
||||
{
|
||||
RTCDate maxDate = { 99, 12, 31, 0 };
|
||||
RTCTime maxTime = { 23, 59, 59 };
|
||||
|
||||
s64 check = RTC_ConvertDateTimeToSecond(&maxDate, &maxTime);
|
||||
GF_ASSERT(check == MAX_SECONDS);
|
||||
if (first < last)
|
||||
return last - first;
|
||||
else
|
||||
return last + (MAX_SECONDS - first);
|
||||
}
|
||||
#include "global.h"
|
||||
#include "MI_memory.h"
|
||||
#include "gf_rtc.h"
|
||||
#include "RTC_convert.h"
|
||||
|
||||
typedef struct GF_RTC_Work
|
||||
{
|
||||
BOOL getDateTimeSuccess;
|
||||
BOOL getDateTimeLock;
|
||||
s32 getDateTimeSleep;
|
||||
RTCResult getDateTimeErrorCode;
|
||||
RTCDate date; // 10
|
||||
RTCTime time; // 20
|
||||
RTCDate date_async; // 2C
|
||||
RTCTime time_async; // 3C
|
||||
} GF_RTC_Work;
|
||||
|
||||
GF_RTC_Work sGFRTCWork;
|
||||
|
||||
#define MAX_SECONDS (3155759999ll)
|
||||
|
||||
void GF_RTC_GetDateTime(GF_RTC_Work * work);
|
||||
|
||||
THUMB_FUNC void GF_InitRTCWork(void)
|
||||
{
|
||||
RTC_Init();
|
||||
__builtin__clear(&sGFRTCWork, sizeof(sGFRTCWork));
|
||||
sGFRTCWork.getDateTimeSuccess = FALSE;
|
||||
sGFRTCWork.getDateTimeLock = FALSE;
|
||||
sGFRTCWork.getDateTimeSleep = 0;
|
||||
GF_RTC_GetDateTime(&sGFRTCWork);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_UpdateOnFrame(void)
|
||||
{
|
||||
if (!sGFRTCWork.getDateTimeLock)
|
||||
{
|
||||
if (++sGFRTCWork.getDateTimeSleep > 10)
|
||||
{
|
||||
sGFRTCWork.getDateTimeSleep = 0;
|
||||
GF_RTC_GetDateTime(&sGFRTCWork);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_GetDateTime_Callback(RTCResult result, void * data)
|
||||
{
|
||||
GF_RTC_Work * work = (GF_RTC_Work *)data;
|
||||
work->getDateTimeErrorCode = result;
|
||||
GF_ASSERT(result == RTC_RESULT_SUCCESS);
|
||||
work->getDateTimeSuccess = TRUE;
|
||||
work->date = work->date_async;
|
||||
work->time = work->time_async;
|
||||
work->getDateTimeLock = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_GetDateTime(GF_RTC_Work * work)
|
||||
{
|
||||
work->getDateTimeLock = TRUE;
|
||||
RTCResult result = RTC_GetDateTimeAsync(&work->date_async, &work->time_async, GF_RTC_GetDateTime_Callback, work);
|
||||
work->getDateTimeErrorCode = result;
|
||||
GF_ASSERT(result == RTC_RESULT_SUCCESS);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyDateTime(RTCDate * date, RTCTime * time)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*date = sGFRTCWork.date;
|
||||
*time = sGFRTCWork.time;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyTime(RTCTime * time)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*time = sGFRTCWork.time;
|
||||
}
|
||||
|
||||
THUMB_FUNC void GF_RTC_CopyDate(RTCDate * date)
|
||||
{
|
||||
GF_ASSERT(sGFRTCWork.getDateTimeSuccess == TRUE);
|
||||
*date = sGFRTCWork.date;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GF_RTC_TimeToSec(void)
|
||||
{
|
||||
RTCTime* time = &sGFRTCWork.time;
|
||||
return 60 * time->minute + 3600 * time->hour + time->second;
|
||||
}
|
||||
|
||||
THUMB_FUNC s64 GF_RTC_DateTimeToSec(void)
|
||||
{
|
||||
return RTC_ConvertDateTimeToSecond(&sGFRTCWork.date, &sGFRTCWork.time);
|
||||
}
|
||||
|
||||
static inline BOOL IsLeapYear(s32 year)
|
||||
{
|
||||
return ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GF_RTC_GetDayOfYear(const RTCDate * date)
|
||||
{
|
||||
RTCDate date_stack;
|
||||
s32 days;
|
||||
static const u16 sGF_DaysPerMonth[] = {
|
||||
0, // Jan
|
||||
31, // Feb
|
||||
59, // Mar
|
||||
90, // Apr
|
||||
120, // May
|
||||
151, // Jun
|
||||
181, // Jul
|
||||
212, // Aug
|
||||
243, // Sep
|
||||
273, // Oct
|
||||
304, // Nov
|
||||
334, // Dec
|
||||
};
|
||||
|
||||
days = date->day;
|
||||
days += sGF_DaysPerMonth[date->month - 1];
|
||||
if (date->month >= RTC_MONTH_MARCH && IsLeapYear(date->year))
|
||||
days++;
|
||||
date_stack = *date;
|
||||
date_stack.month = RTC_MONTH_JANUARY;
|
||||
date_stack.day = 1;
|
||||
RTC_ConvertDateToDay(&date_stack);
|
||||
RTC_ConvertDateToDay(date);
|
||||
return days;
|
||||
}
|
||||
|
||||
enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void);
|
||||
enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour);
|
||||
|
||||
THUMB_FUNC BOOL IsNighttime(void)
|
||||
{
|
||||
switch (GF_RTC_GetTimeOfDay())
|
||||
{
|
||||
case RTC_TIMEOFDAY_NITE:
|
||||
case RTC_TIMEOFDAY_LATE:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDay(void)
|
||||
{
|
||||
RTCTime time;
|
||||
GF_RTC_CopyTime(&time);
|
||||
return GF_RTC_GetTimeOfDayByHour(time.hour);
|
||||
}
|
||||
|
||||
THUMB_FUNC enum RTC_TimeOfDay GF_RTC_GetTimeOfDayByHour(s32 hour)
|
||||
{
|
||||
static const u8 sTimeOfDayByHour[] = {
|
||||
// 00:00 - 03:59
|
||||
RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE, RTC_TIMEOFDAY_LATE,
|
||||
// 04:00 - 09:59
|
||||
RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN, RTC_TIMEOFDAY_MORN,
|
||||
// 10:00 - 16:59
|
||||
RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY, RTC_TIMEOFDAY_DAY,
|
||||
// 17:00 - 19:59
|
||||
RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE, RTC_TIMEOFDAY_EVE,
|
||||
// 20:00 - 23:59
|
||||
RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE, RTC_TIMEOFDAY_NITE,
|
||||
};
|
||||
|
||||
GF_ASSERT(hour >= 0 && hour < 24);
|
||||
return sTimeOfDayByHour[hour];
|
||||
}
|
||||
|
||||
THUMB_FUNC s64 GF_RTC_TimeDelta(s64 first, s64 last)
|
||||
{
|
||||
RTCDate maxDate = { 99, 12, 31, 0 };
|
||||
RTCTime maxTime = { 23, 59, 59 };
|
||||
|
||||
s64 check = RTC_ConvertDateTimeToSecond(&maxDate, &maxTime);
|
||||
GF_ASSERT(check == MAX_SECONDS);
|
||||
if (first < last)
|
||||
return last - first;
|
||||
else
|
||||
return last + (MAX_SECONDS - first);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,327 +1,327 @@
|
|||
#include "global.h"
|
||||
#include "string_util.h"
|
||||
#include "rs_migrate_string.h"
|
||||
|
||||
static const u16 conversion_table[][2] = {
|
||||
{0x0001, 0x01DE}, // <space>
|
||||
{0x0003, 0x0003}, // あ
|
||||
{0x0005, 0x0005}, // い
|
||||
{0x0007, 0x0007}, // う
|
||||
{0x0009, 0x0009}, // え
|
||||
{0x000B, 0x000B}, // お
|
||||
{0x000C, 0x000C}, // か
|
||||
{0x000E, 0x000E}, // き
|
||||
{0x0010, 0x0010}, // く
|
||||
{0x0012, 0x0012}, // け
|
||||
{0x0014, 0x0014}, // こ
|
||||
{0x0016, 0x0016}, // さ
|
||||
{0x0018, 0x0018}, // し
|
||||
{0x001A, 0x001A}, // す
|
||||
{0x001C, 0x001C}, // せ
|
||||
{0x001E, 0x001E}, // そ
|
||||
{0x0020, 0x0020}, // た
|
||||
{0x0022, 0x0022}, // ち
|
||||
{0x0025, 0x0025}, // つ
|
||||
{0x0027, 0x0027}, // て
|
||||
{0x0029, 0x0029}, // と
|
||||
{0x002B, 0x002B}, // な
|
||||
{0x002C, 0x002C}, // に
|
||||
{0x002D, 0x002D}, // ぬ
|
||||
{0x002E, 0x002E}, // ね
|
||||
{0x002F, 0x002F}, // の
|
||||
{0x0030, 0x0030}, // は
|
||||
{0x0033, 0x0033}, // ひ
|
||||
{0x0036, 0x0036}, // ふ
|
||||
{0x0039, 0x0039}, // へ
|
||||
{0x003C, 0x003C}, // ほ
|
||||
{0x003F, 0x003F}, // ま
|
||||
{0x0040, 0x0040}, // み
|
||||
{0x0041, 0x0041}, // む
|
||||
{0x0042, 0x0042}, // め
|
||||
{0x0043, 0x0043}, // も
|
||||
{0x0045, 0x0045}, // や
|
||||
{0x0047, 0x0047}, // ゆ
|
||||
{0x0049, 0x0049}, // よ
|
||||
{0x004A, 0x004A}, // ら
|
||||
{0x004B, 0x004B}, // り
|
||||
{0x004C, 0x004C}, // る
|
||||
{0x004D, 0x004D}, // れ
|
||||
{0x004E, 0x004E}, // ろ
|
||||
{0x004F, 0x004F}, // わ
|
||||
{0x0050, 0x0050}, // を
|
||||
{0x0051, 0x0051}, // ん
|
||||
{0x0002, 0x0002}, // ぁ
|
||||
{0x0004, 0x0004}, // ぃ
|
||||
{0x0006, 0x0006}, // ぅ
|
||||
{0x0008, 0x0008}, // ぇ
|
||||
{0x000A, 0x000A}, // ぉ
|
||||
{0x0044, 0x0044}, // ゃ
|
||||
{0x0046, 0x0046}, // ゅ
|
||||
{0x0048, 0x0048}, // ょ
|
||||
{0x000D, 0x000D}, // が
|
||||
{0x000F, 0x000F}, // ぎ
|
||||
{0x0011, 0x0011}, // ぐ
|
||||
{0x0013, 0x0013}, // げ
|
||||
{0x0015, 0x0015}, // ご
|
||||
{0x0017, 0x0017}, // ざ
|
||||
{0x0019, 0x0019}, // じ
|
||||
{0x001B, 0x001B}, // ず
|
||||
{0x001D, 0x001D}, // ぜ
|
||||
{0x001F, 0x001F}, // ぞ
|
||||
{0x0021, 0x0021}, // だ
|
||||
{0x0023, 0x0023}, // ぢ
|
||||
{0x0026, 0x0026}, // づ
|
||||
{0x0028, 0x0028}, // で
|
||||
{0x002A, 0x002A}, // ど
|
||||
{0x0031, 0x0031}, // ば
|
||||
{0x0034, 0x0034}, // び
|
||||
{0x0037, 0x0037}, // ぶ
|
||||
{0x003A, 0x003A}, // べ
|
||||
{0x003D, 0x003D}, // ぼ
|
||||
{0x0032, 0x0032}, // ぱ
|
||||
{0x0035, 0x0035}, // ぴ
|
||||
{0x0038, 0x0038}, // ぷ
|
||||
{0x003B, 0x003B}, // ぺ
|
||||
{0x003E, 0x003E}, // ぽ
|
||||
{0x0024, 0x0024}, // っ
|
||||
{0x0053, 0x0053}, // ア
|
||||
{0x0055, 0x0055}, // イ
|
||||
{0x0057, 0x0057}, // ウ
|
||||
{0x0059, 0x0059}, // エ
|
||||
{0x005B, 0x005B}, // オ
|
||||
{0x005C, 0x005C}, // カ
|
||||
{0x005E, 0x005E}, // キ
|
||||
{0x0060, 0x0060}, // ク
|
||||
{0x0062, 0x0062}, // ケ
|
||||
{0x0064, 0x0064}, // コ
|
||||
{0x0066, 0x0066}, // サ
|
||||
{0x0068, 0x0068}, // シ
|
||||
{0x006A, 0x006A}, // ス
|
||||
{0x006C, 0x006C}, // セ
|
||||
{0x006E, 0x006E}, // ソ
|
||||
{0x0070, 0x0070}, // タ
|
||||
{0x0072, 0x0072}, // チ
|
||||
{0x0075, 0x0075}, // ツ
|
||||
{0x0077, 0x0077}, // テ
|
||||
{0x0079, 0x0079}, // ト
|
||||
{0x007B, 0x007B}, // ナ
|
||||
{0x007C, 0x007C}, // ニ
|
||||
{0x007D, 0x007D}, // ヌ
|
||||
{0x007E, 0x007E}, // ネ
|
||||
{0x007F, 0x007F}, // ノ
|
||||
{0x0080, 0x0080}, // ハ
|
||||
{0x0083, 0x0083}, // ヒ
|
||||
{0x0086, 0x0086}, // フ
|
||||
{0x0089, 0x0089}, // ヘ
|
||||
{0x008C, 0x008C}, // ホ
|
||||
{0x008F, 0x008F}, // マ
|
||||
{0x0090, 0x0090}, // ミ
|
||||
{0x0091, 0x0091}, // ム
|
||||
{0x0092, 0x0092}, // メ
|
||||
{0x0093, 0x0093}, // モ
|
||||
{0x0095, 0x0095}, // ヤ
|
||||
{0x0097, 0x0097}, // ユ
|
||||
{0x0099, 0x0099}, // ヨ
|
||||
{0x009A, 0x009A}, // ラ
|
||||
{0x009B, 0x009B}, // リ
|
||||
{0x009C, 0x009C}, // ル
|
||||
{0x009D, 0x009D}, // レ
|
||||
{0x009E, 0x009E}, // ロ
|
||||
{0x009F, 0x009F}, // ワ
|
||||
{0x00A0, 0x00A0}, // ヲ
|
||||
{0x00A1, 0x00A1}, // ン
|
||||
{0x0052, 0x0052}, // ァ
|
||||
{0x0054, 0x0054}, // ィ
|
||||
{0x0056, 0x0056}, // ゥ
|
||||
{0x0058, 0x0058}, // ェ
|
||||
{0x005A, 0x005A}, // ォ
|
||||
{0x0094, 0x0094}, // ャ
|
||||
{0x0096, 0x0096}, // ュ
|
||||
{0x0098, 0x0098}, // ョ
|
||||
{0x005D, 0x005D}, // ガ
|
||||
{0x005F, 0x005F}, // ギ
|
||||
{0x0061, 0x0061}, // グ
|
||||
{0x0063, 0x0063}, // ゲ
|
||||
{0x0065, 0x0065}, // ゴ
|
||||
{0x0067, 0x0067}, // ザ
|
||||
{0x0069, 0x0069}, // ジ
|
||||
{0x006B, 0x006B}, // ズ
|
||||
{0x006D, 0x006D}, // ゼ
|
||||
{0x006F, 0x006F}, // ゾ
|
||||
{0x0071, 0x0071}, // ダ
|
||||
{0x0073, 0x0073}, // ヂ
|
||||
{0x0076, 0x0076}, // ヅ
|
||||
{0x0078, 0x0078}, // デ
|
||||
{0x007A, 0x007A}, // ド
|
||||
{0x0081, 0x0081}, // バ
|
||||
{0x0084, 0x0084}, // ビ
|
||||
{0x0087, 0x0087}, // ブ
|
||||
{0x008A, 0x008A}, // ベ
|
||||
{0x008D, 0x008D}, // ボ
|
||||
{0x0082, 0x0082}, // パ
|
||||
{0x0085, 0x0085}, // ピ
|
||||
{0x0088, 0x0088}, // プ
|
||||
{0x008B, 0x008B}, // ペ
|
||||
{0x008E, 0x008E}, // ポ
|
||||
{0x0074, 0x0074}, // ッ
|
||||
{0x00A2, 0x0121}, // 0
|
||||
{0x00A3, 0x0122}, // 1
|
||||
{0x00A4, 0x0123}, // 2
|
||||
{0x00A5, 0x0124}, // 3
|
||||
{0x00A6, 0x0125}, // 4
|
||||
{0x00A7, 0x0126}, // 5
|
||||
{0x00A8, 0x0127}, // 6
|
||||
{0x00A9, 0x0128}, // 7
|
||||
{0x00AA, 0x0129}, // 8
|
||||
{0x00AB, 0x012A}, // 9
|
||||
{0x00E1, 0x01AB}, // !
|
||||
{0x00E2, 0x01AC}, // ?
|
||||
{0x00E4, 0x01AE}, // .
|
||||
{0x00F1, 0x01BE}, // -
|
||||
{0x00E6, 0x01B0}, // ·
|
||||
{0x00E5, 0x01AF}, // …
|
||||
{0x00EA, 0x00EA}, // “
|
||||
{0x00EB, 0x00EB}, // ”
|
||||
{0x00E8, 0x01B2}, // ‘
|
||||
{0x00E9, 0x01B3}, // '
|
||||
{0x00EE, 0x01BB}, // ♂
|
||||
{0x00EF, 0x01BC}, // ♀
|
||||
{0x0112, 0x0112}, // ¥
|
||||
{0x00E3, 0x01AD}, // ,
|
||||
{0x00F2, 0x0176}, // ×
|
||||
{0x00E7, 0x01B1}, // /
|
||||
{0x00AC, 0x012B}, // A
|
||||
{0x00AD, 0x012C}, // B
|
||||
{0x00AE, 0x012D}, // C
|
||||
{0x00AF, 0x012E}, // D
|
||||
{0x00B0, 0x012F}, // E
|
||||
{0x00B1, 0x0130}, // F
|
||||
{0x00B2, 0x0131}, // G
|
||||
{0x00B3, 0x0132}, // H
|
||||
{0x00B4, 0x0133}, // I
|
||||
{0x00B5, 0x0134}, // J
|
||||
{0x00B6, 0x0135}, // K
|
||||
{0x00B7, 0x0136}, // L
|
||||
{0x00B8, 0x0137}, // M
|
||||
{0x00B9, 0x0138}, // N
|
||||
{0x00BA, 0x0139}, // O
|
||||
{0x00BB, 0x013A}, // P
|
||||
{0x00BC, 0x013B}, // Q
|
||||
{0x00BD, 0x013C}, // R
|
||||
{0x00BE, 0x013D}, // S
|
||||
{0x00BF, 0x013E}, // T
|
||||
{0x00C0, 0x013F}, // U
|
||||
{0x00C1, 0x0140}, // V
|
||||
{0x00C2, 0x0141}, // W
|
||||
{0x00C3, 0x0142}, // X
|
||||
{0x00C4, 0x0143}, // Y
|
||||
{0x00C5, 0x0144}, // Z
|
||||
{0x00C6, 0x0145}, // a
|
||||
{0x00C7, 0x0146}, // b
|
||||
{0x00C8, 0x0147}, // c
|
||||
{0x00C9, 0x0148}, // d
|
||||
{0x00CA, 0x0149}, // e
|
||||
{0x00CB, 0x014A}, // f
|
||||
{0x00CC, 0x014B}, // g
|
||||
{0x00CD, 0x014C}, // h
|
||||
{0x00CE, 0x014D}, // i
|
||||
{0x00CF, 0x014E}, // j
|
||||
{0x00D0, 0x014F}, // k
|
||||
{0x00D1, 0x0150}, // l
|
||||
{0x00D2, 0x0151}, // m
|
||||
{0x00D3, 0x0152}, // n
|
||||
{0x00D4, 0x0153}, // o
|
||||
{0x00D5, 0x0154}, // p
|
||||
{0x00D6, 0x0155}, // q
|
||||
{0x00D7, 0x0156}, // r
|
||||
{0x00D8, 0x0157}, // s
|
||||
{0x00D9, 0x0158}, // t
|
||||
{0x00DA, 0x0159}, // u
|
||||
{0x00DB, 0x015A}, // v
|
||||
{0x00DC, 0x015B}, // w
|
||||
{0x00DD, 0x015C}, // x
|
||||
{0x00DE, 0x015D}, // y
|
||||
{0x00DF, 0x015E}, // z
|
||||
{0x011F, 0x011F}, // ▶
|
||||
{0x00F6, 0x01C4}, // :
|
||||
{0x0163, 0x0163}, // Ä
|
||||
{0x0175, 0x0175}, // Ö
|
||||
{0x017B, 0x017B}, // Ü
|
||||
{0x0183, 0x0183}, // ä
|
||||
{0x0195, 0x0195}, // ö
|
||||
{0x019B, 0x019B}, // ü
|
||||
};
|
||||
|
||||
static THUMB_FUNC u16 GetOpeningQuote(u32 language)
|
||||
{
|
||||
switch (language)
|
||||
{
|
||||
default:
|
||||
return 0xEA;
|
||||
case LANGUAGE_ENGLISH:
|
||||
case LANGUAGE_ITALIAN:
|
||||
case LANGUAGE_SPANISH:
|
||||
return 0x1B4;
|
||||
case LANGUAGE_FRENCH:
|
||||
return 0x1B7;
|
||||
case LANGUAGE_GERMAN:
|
||||
return 0x1B6;
|
||||
}
|
||||
}
|
||||
|
||||
static THUMB_FUNC u16 GetClosingQuote(u32 language)
|
||||
{
|
||||
switch (language)
|
||||
{
|
||||
default:
|
||||
return 0xEB;
|
||||
case LANGUAGE_ENGLISH:
|
||||
case LANGUAGE_ITALIAN:
|
||||
case LANGUAGE_SPANISH:
|
||||
return 0x1B5;
|
||||
case LANGUAGE_FRENCH:
|
||||
return 0x1B8;
|
||||
case LANGUAGE_GERMAN:
|
||||
return 0x1B4;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language)
|
||||
{
|
||||
BOOL notFullWidth;
|
||||
u32 i;
|
||||
|
||||
notFullWidth = (language != LANGUAGE_JAPANESE);
|
||||
for (i = 0; i < length - 1; i++)
|
||||
{
|
||||
if (rs_str[i] == 0xFF) // RS: EOS
|
||||
break;
|
||||
if (rs_str[i] >= 0xF7) // RS: DYNAMIC
|
||||
{
|
||||
// If we're here, the provided name is corrupt.
|
||||
// Fill it with question marks.
|
||||
s32 r3 = (s32)((length - 1) < 10 ? (length - 1) : 10);
|
||||
s32 r1;
|
||||
for (r1 = 0; r1 < r3; r1++)
|
||||
{
|
||||
dp_str[r1] = 0x1AC; // DP: ?
|
||||
}
|
||||
dp_str[r1] = EOS;
|
||||
return FALSE;
|
||||
}
|
||||
switch (conversion_table[rs_str[i]][notFullWidth])
|
||||
{
|
||||
case 0xEA: // RS: Opening double quote
|
||||
dp_str[i] = GetOpeningQuote(language);
|
||||
break;
|
||||
case 0xEB: // RS: Closing double quote
|
||||
dp_str[i] = GetClosingQuote(language);
|
||||
break;
|
||||
default:
|
||||
dp_str[i] = conversion_table[rs_str[i]][notFullWidth];
|
||||
break;
|
||||
}
|
||||
}
|
||||
dp_str[i] = EOS;
|
||||
return TRUE;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "string_util.h"
|
||||
#include "rs_migrate_string.h"
|
||||
|
||||
static const u16 conversion_table[][2] = {
|
||||
{0x0001, 0x01DE}, // <space>
|
||||
{0x0003, 0x0003}, // あ
|
||||
{0x0005, 0x0005}, // い
|
||||
{0x0007, 0x0007}, // う
|
||||
{0x0009, 0x0009}, // え
|
||||
{0x000B, 0x000B}, // お
|
||||
{0x000C, 0x000C}, // か
|
||||
{0x000E, 0x000E}, // き
|
||||
{0x0010, 0x0010}, // く
|
||||
{0x0012, 0x0012}, // け
|
||||
{0x0014, 0x0014}, // こ
|
||||
{0x0016, 0x0016}, // さ
|
||||
{0x0018, 0x0018}, // し
|
||||
{0x001A, 0x001A}, // す
|
||||
{0x001C, 0x001C}, // せ
|
||||
{0x001E, 0x001E}, // そ
|
||||
{0x0020, 0x0020}, // た
|
||||
{0x0022, 0x0022}, // ち
|
||||
{0x0025, 0x0025}, // つ
|
||||
{0x0027, 0x0027}, // て
|
||||
{0x0029, 0x0029}, // と
|
||||
{0x002B, 0x002B}, // な
|
||||
{0x002C, 0x002C}, // に
|
||||
{0x002D, 0x002D}, // ぬ
|
||||
{0x002E, 0x002E}, // ね
|
||||
{0x002F, 0x002F}, // の
|
||||
{0x0030, 0x0030}, // は
|
||||
{0x0033, 0x0033}, // ひ
|
||||
{0x0036, 0x0036}, // ふ
|
||||
{0x0039, 0x0039}, // へ
|
||||
{0x003C, 0x003C}, // ほ
|
||||
{0x003F, 0x003F}, // ま
|
||||
{0x0040, 0x0040}, // み
|
||||
{0x0041, 0x0041}, // む
|
||||
{0x0042, 0x0042}, // め
|
||||
{0x0043, 0x0043}, // も
|
||||
{0x0045, 0x0045}, // や
|
||||
{0x0047, 0x0047}, // ゆ
|
||||
{0x0049, 0x0049}, // よ
|
||||
{0x004A, 0x004A}, // ら
|
||||
{0x004B, 0x004B}, // り
|
||||
{0x004C, 0x004C}, // る
|
||||
{0x004D, 0x004D}, // れ
|
||||
{0x004E, 0x004E}, // ろ
|
||||
{0x004F, 0x004F}, // わ
|
||||
{0x0050, 0x0050}, // を
|
||||
{0x0051, 0x0051}, // ん
|
||||
{0x0002, 0x0002}, // ぁ
|
||||
{0x0004, 0x0004}, // ぃ
|
||||
{0x0006, 0x0006}, // ぅ
|
||||
{0x0008, 0x0008}, // ぇ
|
||||
{0x000A, 0x000A}, // ぉ
|
||||
{0x0044, 0x0044}, // ゃ
|
||||
{0x0046, 0x0046}, // ゅ
|
||||
{0x0048, 0x0048}, // ょ
|
||||
{0x000D, 0x000D}, // が
|
||||
{0x000F, 0x000F}, // ぎ
|
||||
{0x0011, 0x0011}, // ぐ
|
||||
{0x0013, 0x0013}, // げ
|
||||
{0x0015, 0x0015}, // ご
|
||||
{0x0017, 0x0017}, // ざ
|
||||
{0x0019, 0x0019}, // じ
|
||||
{0x001B, 0x001B}, // ず
|
||||
{0x001D, 0x001D}, // ぜ
|
||||
{0x001F, 0x001F}, // ぞ
|
||||
{0x0021, 0x0021}, // だ
|
||||
{0x0023, 0x0023}, // ぢ
|
||||
{0x0026, 0x0026}, // づ
|
||||
{0x0028, 0x0028}, // で
|
||||
{0x002A, 0x002A}, // ど
|
||||
{0x0031, 0x0031}, // ば
|
||||
{0x0034, 0x0034}, // び
|
||||
{0x0037, 0x0037}, // ぶ
|
||||
{0x003A, 0x003A}, // べ
|
||||
{0x003D, 0x003D}, // ぼ
|
||||
{0x0032, 0x0032}, // ぱ
|
||||
{0x0035, 0x0035}, // ぴ
|
||||
{0x0038, 0x0038}, // ぷ
|
||||
{0x003B, 0x003B}, // ぺ
|
||||
{0x003E, 0x003E}, // ぽ
|
||||
{0x0024, 0x0024}, // っ
|
||||
{0x0053, 0x0053}, // ア
|
||||
{0x0055, 0x0055}, // イ
|
||||
{0x0057, 0x0057}, // ウ
|
||||
{0x0059, 0x0059}, // エ
|
||||
{0x005B, 0x005B}, // オ
|
||||
{0x005C, 0x005C}, // カ
|
||||
{0x005E, 0x005E}, // キ
|
||||
{0x0060, 0x0060}, // ク
|
||||
{0x0062, 0x0062}, // ケ
|
||||
{0x0064, 0x0064}, // コ
|
||||
{0x0066, 0x0066}, // サ
|
||||
{0x0068, 0x0068}, // シ
|
||||
{0x006A, 0x006A}, // ス
|
||||
{0x006C, 0x006C}, // セ
|
||||
{0x006E, 0x006E}, // ソ
|
||||
{0x0070, 0x0070}, // タ
|
||||
{0x0072, 0x0072}, // チ
|
||||
{0x0075, 0x0075}, // ツ
|
||||
{0x0077, 0x0077}, // テ
|
||||
{0x0079, 0x0079}, // ト
|
||||
{0x007B, 0x007B}, // ナ
|
||||
{0x007C, 0x007C}, // ニ
|
||||
{0x007D, 0x007D}, // ヌ
|
||||
{0x007E, 0x007E}, // ネ
|
||||
{0x007F, 0x007F}, // ノ
|
||||
{0x0080, 0x0080}, // ハ
|
||||
{0x0083, 0x0083}, // ヒ
|
||||
{0x0086, 0x0086}, // フ
|
||||
{0x0089, 0x0089}, // ヘ
|
||||
{0x008C, 0x008C}, // ホ
|
||||
{0x008F, 0x008F}, // マ
|
||||
{0x0090, 0x0090}, // ミ
|
||||
{0x0091, 0x0091}, // ム
|
||||
{0x0092, 0x0092}, // メ
|
||||
{0x0093, 0x0093}, // モ
|
||||
{0x0095, 0x0095}, // ヤ
|
||||
{0x0097, 0x0097}, // ユ
|
||||
{0x0099, 0x0099}, // ヨ
|
||||
{0x009A, 0x009A}, // ラ
|
||||
{0x009B, 0x009B}, // リ
|
||||
{0x009C, 0x009C}, // ル
|
||||
{0x009D, 0x009D}, // レ
|
||||
{0x009E, 0x009E}, // ロ
|
||||
{0x009F, 0x009F}, // ワ
|
||||
{0x00A0, 0x00A0}, // ヲ
|
||||
{0x00A1, 0x00A1}, // ン
|
||||
{0x0052, 0x0052}, // ァ
|
||||
{0x0054, 0x0054}, // ィ
|
||||
{0x0056, 0x0056}, // ゥ
|
||||
{0x0058, 0x0058}, // ェ
|
||||
{0x005A, 0x005A}, // ォ
|
||||
{0x0094, 0x0094}, // ャ
|
||||
{0x0096, 0x0096}, // ュ
|
||||
{0x0098, 0x0098}, // ョ
|
||||
{0x005D, 0x005D}, // ガ
|
||||
{0x005F, 0x005F}, // ギ
|
||||
{0x0061, 0x0061}, // グ
|
||||
{0x0063, 0x0063}, // ゲ
|
||||
{0x0065, 0x0065}, // ゴ
|
||||
{0x0067, 0x0067}, // ザ
|
||||
{0x0069, 0x0069}, // ジ
|
||||
{0x006B, 0x006B}, // ズ
|
||||
{0x006D, 0x006D}, // ゼ
|
||||
{0x006F, 0x006F}, // ゾ
|
||||
{0x0071, 0x0071}, // ダ
|
||||
{0x0073, 0x0073}, // ヂ
|
||||
{0x0076, 0x0076}, // ヅ
|
||||
{0x0078, 0x0078}, // デ
|
||||
{0x007A, 0x007A}, // ド
|
||||
{0x0081, 0x0081}, // バ
|
||||
{0x0084, 0x0084}, // ビ
|
||||
{0x0087, 0x0087}, // ブ
|
||||
{0x008A, 0x008A}, // ベ
|
||||
{0x008D, 0x008D}, // ボ
|
||||
{0x0082, 0x0082}, // パ
|
||||
{0x0085, 0x0085}, // ピ
|
||||
{0x0088, 0x0088}, // プ
|
||||
{0x008B, 0x008B}, // ペ
|
||||
{0x008E, 0x008E}, // ポ
|
||||
{0x0074, 0x0074}, // ッ
|
||||
{0x00A2, 0x0121}, // 0
|
||||
{0x00A3, 0x0122}, // 1
|
||||
{0x00A4, 0x0123}, // 2
|
||||
{0x00A5, 0x0124}, // 3
|
||||
{0x00A6, 0x0125}, // 4
|
||||
{0x00A7, 0x0126}, // 5
|
||||
{0x00A8, 0x0127}, // 6
|
||||
{0x00A9, 0x0128}, // 7
|
||||
{0x00AA, 0x0129}, // 8
|
||||
{0x00AB, 0x012A}, // 9
|
||||
{0x00E1, 0x01AB}, // !
|
||||
{0x00E2, 0x01AC}, // ?
|
||||
{0x00E4, 0x01AE}, // .
|
||||
{0x00F1, 0x01BE}, // -
|
||||
{0x00E6, 0x01B0}, // ·
|
||||
{0x00E5, 0x01AF}, // …
|
||||
{0x00EA, 0x00EA}, // “
|
||||
{0x00EB, 0x00EB}, // ”
|
||||
{0x00E8, 0x01B2}, // ‘
|
||||
{0x00E9, 0x01B3}, // '
|
||||
{0x00EE, 0x01BB}, // ♂
|
||||
{0x00EF, 0x01BC}, // ♀
|
||||
{0x0112, 0x0112}, // ¥
|
||||
{0x00E3, 0x01AD}, // ,
|
||||
{0x00F2, 0x0176}, // ×
|
||||
{0x00E7, 0x01B1}, // /
|
||||
{0x00AC, 0x012B}, // A
|
||||
{0x00AD, 0x012C}, // B
|
||||
{0x00AE, 0x012D}, // C
|
||||
{0x00AF, 0x012E}, // D
|
||||
{0x00B0, 0x012F}, // E
|
||||
{0x00B1, 0x0130}, // F
|
||||
{0x00B2, 0x0131}, // G
|
||||
{0x00B3, 0x0132}, // H
|
||||
{0x00B4, 0x0133}, // I
|
||||
{0x00B5, 0x0134}, // J
|
||||
{0x00B6, 0x0135}, // K
|
||||
{0x00B7, 0x0136}, // L
|
||||
{0x00B8, 0x0137}, // M
|
||||
{0x00B9, 0x0138}, // N
|
||||
{0x00BA, 0x0139}, // O
|
||||
{0x00BB, 0x013A}, // P
|
||||
{0x00BC, 0x013B}, // Q
|
||||
{0x00BD, 0x013C}, // R
|
||||
{0x00BE, 0x013D}, // S
|
||||
{0x00BF, 0x013E}, // T
|
||||
{0x00C0, 0x013F}, // U
|
||||
{0x00C1, 0x0140}, // V
|
||||
{0x00C2, 0x0141}, // W
|
||||
{0x00C3, 0x0142}, // X
|
||||
{0x00C4, 0x0143}, // Y
|
||||
{0x00C5, 0x0144}, // Z
|
||||
{0x00C6, 0x0145}, // a
|
||||
{0x00C7, 0x0146}, // b
|
||||
{0x00C8, 0x0147}, // c
|
||||
{0x00C9, 0x0148}, // d
|
||||
{0x00CA, 0x0149}, // e
|
||||
{0x00CB, 0x014A}, // f
|
||||
{0x00CC, 0x014B}, // g
|
||||
{0x00CD, 0x014C}, // h
|
||||
{0x00CE, 0x014D}, // i
|
||||
{0x00CF, 0x014E}, // j
|
||||
{0x00D0, 0x014F}, // k
|
||||
{0x00D1, 0x0150}, // l
|
||||
{0x00D2, 0x0151}, // m
|
||||
{0x00D3, 0x0152}, // n
|
||||
{0x00D4, 0x0153}, // o
|
||||
{0x00D5, 0x0154}, // p
|
||||
{0x00D6, 0x0155}, // q
|
||||
{0x00D7, 0x0156}, // r
|
||||
{0x00D8, 0x0157}, // s
|
||||
{0x00D9, 0x0158}, // t
|
||||
{0x00DA, 0x0159}, // u
|
||||
{0x00DB, 0x015A}, // v
|
||||
{0x00DC, 0x015B}, // w
|
||||
{0x00DD, 0x015C}, // x
|
||||
{0x00DE, 0x015D}, // y
|
||||
{0x00DF, 0x015E}, // z
|
||||
{0x011F, 0x011F}, // ▶
|
||||
{0x00F6, 0x01C4}, // :
|
||||
{0x0163, 0x0163}, // Ä
|
||||
{0x0175, 0x0175}, // Ö
|
||||
{0x017B, 0x017B}, // Ü
|
||||
{0x0183, 0x0183}, // ä
|
||||
{0x0195, 0x0195}, // ö
|
||||
{0x019B, 0x019B}, // ü
|
||||
};
|
||||
|
||||
static THUMB_FUNC u16 GetOpeningQuote(u32 language)
|
||||
{
|
||||
switch (language)
|
||||
{
|
||||
default:
|
||||
return 0xEA;
|
||||
case LANGUAGE_ENGLISH:
|
||||
case LANGUAGE_ITALIAN:
|
||||
case LANGUAGE_SPANISH:
|
||||
return 0x1B4;
|
||||
case LANGUAGE_FRENCH:
|
||||
return 0x1B7;
|
||||
case LANGUAGE_GERMAN:
|
||||
return 0x1B6;
|
||||
}
|
||||
}
|
||||
|
||||
static THUMB_FUNC u16 GetClosingQuote(u32 language)
|
||||
{
|
||||
switch (language)
|
||||
{
|
||||
default:
|
||||
return 0xEB;
|
||||
case LANGUAGE_ENGLISH:
|
||||
case LANGUAGE_ITALIAN:
|
||||
case LANGUAGE_SPANISH:
|
||||
return 0x1B5;
|
||||
case LANGUAGE_FRENCH:
|
||||
return 0x1B8;
|
||||
case LANGUAGE_GERMAN:
|
||||
return 0x1B4;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language)
|
||||
{
|
||||
BOOL notFullWidth;
|
||||
u32 i;
|
||||
|
||||
notFullWidth = (language != LANGUAGE_JAPANESE);
|
||||
for (i = 0; i < length - 1; i++)
|
||||
{
|
||||
if (rs_str[i] == 0xFF) // RS: EOS
|
||||
break;
|
||||
if (rs_str[i] >= 0xF7) // RS: DYNAMIC
|
||||
{
|
||||
// If we're here, the provided name is corrupt.
|
||||
// Fill it with question marks.
|
||||
s32 r3 = (s32)((length - 1) < 10 ? (length - 1) : 10);
|
||||
s32 r1;
|
||||
for (r1 = 0; r1 < r3; r1++)
|
||||
{
|
||||
dp_str[r1] = 0x1AC; // DP: ?
|
||||
}
|
||||
dp_str[r1] = EOS;
|
||||
return FALSE;
|
||||
}
|
||||
switch (conversion_table[rs_str[i]][notFullWidth])
|
||||
{
|
||||
case 0xEA: // RS: Opening double quote
|
||||
dp_str[i] = GetOpeningQuote(language);
|
||||
break;
|
||||
case 0xEB: // RS: Closing double quote
|
||||
dp_str[i] = GetClosingQuote(language);
|
||||
break;
|
||||
default:
|
||||
dp_str[i] = conversion_table[rs_str[i]][notFullWidth];
|
||||
break;
|
||||
}
|
||||
}
|
||||
dp_str[i] = EOS;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,98 +1,98 @@
|
|||
#include "global.h"
|
||||
#include "MI_memory.h"
|
||||
#include "heap.h"
|
||||
#include "sav_chatot.h"
|
||||
|
||||
THUMB_FUNC u32 Sav2_Chatot_sizeof(void)
|
||||
{
|
||||
return sizeof(struct SaveChatotSoundClip);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
MI_CpuClear32(chatot, sizeof(struct SaveChatotSoundClip));
|
||||
chatot->exists = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id)
|
||||
{
|
||||
struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip));
|
||||
Sav2_Chatot_init(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2)
|
||||
{
|
||||
return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
return chatot->exists;
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
chatot->exists = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
return chatot->data;
|
||||
}
|
||||
|
||||
static inline s8 transform(u8 value)
|
||||
{
|
||||
return (s8)(value - 8);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data)
|
||||
{
|
||||
s32 i;
|
||||
s32 dest_i;
|
||||
u8 val;
|
||||
s8 val2;
|
||||
|
||||
for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2)
|
||||
{
|
||||
val = (u8)(data[i] & 0xF);
|
||||
val2 = transform(val);
|
||||
dest[dest_i + 0] = (s8)(val2 << 4);
|
||||
val = (u8)(data[i] >> 4);
|
||||
val2 = transform(val);
|
||||
dest[dest_i + 1] = (s8)(val2 << 4);
|
||||
}
|
||||
}
|
||||
|
||||
static inline u8 untransform(s8 val)
|
||||
{
|
||||
val /= 16;
|
||||
return (u8)(val + 8);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data)
|
||||
{
|
||||
s32 src_i;
|
||||
s32 i = 0;
|
||||
u8 val2;
|
||||
s8 val;
|
||||
chatot->exists = TRUE;
|
||||
|
||||
for (src_i = 0; src_i < 2000; src_i += 2)
|
||||
{
|
||||
val = data[src_i + 0];
|
||||
val2 = untransform(val);
|
||||
chatot->data[i] = (s8)val2;
|
||||
|
||||
val = data[src_i + 1];
|
||||
val2 = untransform(val);
|
||||
chatot->data[i] |= val2 << 4;
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src)
|
||||
{
|
||||
MI_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip));
|
||||
}
|
||||
#include "global.h"
|
||||
#include "MI_memory.h"
|
||||
#include "heap.h"
|
||||
#include "sav_chatot.h"
|
||||
|
||||
THUMB_FUNC u32 Sav2_Chatot_sizeof(void)
|
||||
{
|
||||
return sizeof(struct SaveChatotSoundClip);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
MI_CpuClear32(chatot, sizeof(struct SaveChatotSoundClip));
|
||||
chatot->exists = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct SaveChatotSoundClip * Chatot_new(u32 heap_id)
|
||||
{
|
||||
struct SaveChatotSoundClip * ret = (struct SaveChatotSoundClip *)AllocFromHeap(heap_id, sizeof(struct SaveChatotSoundClip));
|
||||
Sav2_Chatot_init(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2)
|
||||
{
|
||||
return (struct SaveChatotSoundClip *) SavArray_get(sav2, 22);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL Chatot_exists(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
return chatot->exists;
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_invalidate(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
chatot->exists = FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot)
|
||||
{
|
||||
return chatot->data;
|
||||
}
|
||||
|
||||
static inline s8 transform(u8 value)
|
||||
{
|
||||
return (s8)(value - 8);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_Decode(s8 * dest, const s8 * data)
|
||||
{
|
||||
s32 i;
|
||||
s32 dest_i;
|
||||
u8 val;
|
||||
s8 val2;
|
||||
|
||||
for (dest_i = 0, i = 0; i < 1000; i++, dest_i += 2)
|
||||
{
|
||||
val = (u8)(data[i] & 0xF);
|
||||
val2 = transform(val);
|
||||
dest[dest_i + 0] = (s8)(val2 << 4);
|
||||
val = (u8)(data[i] >> 4);
|
||||
val2 = transform(val);
|
||||
dest[dest_i + 1] = (s8)(val2 << 4);
|
||||
}
|
||||
}
|
||||
|
||||
static inline u8 untransform(s8 val)
|
||||
{
|
||||
val /= 16;
|
||||
return (u8)(val + 8);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data)
|
||||
{
|
||||
s32 src_i;
|
||||
s32 i = 0;
|
||||
u8 val2;
|
||||
s8 val;
|
||||
chatot->exists = TRUE;
|
||||
|
||||
for (src_i = 0; src_i < 2000; src_i += 2)
|
||||
{
|
||||
val = data[src_i + 0];
|
||||
val2 = untransform(val);
|
||||
chatot->data[i] = (s8)val2;
|
||||
|
||||
val = data[src_i + 1];
|
||||
val2 = untransform(val);
|
||||
chatot->data[i] |= val2 << 4;
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src)
|
||||
{
|
||||
MI_CpuCopyFast(src, dest, sizeof(struct SaveChatotSoundClip));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,442 +1,442 @@
|
|||
#include "global.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/seal_constants.h"
|
||||
#include "constants/decorations.h"
|
||||
#include "scrcmd.h"
|
||||
#include "module_06.h"
|
||||
|
||||
extern void FUN_02038AD0(struct TaskManager *);
|
||||
|
||||
static const u16 UNK_020F40A6[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40A0[] = {
|
||||
ITEM_STEEL_MAIL,
|
||||
ITEM_LUXURY_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40B4[] = {
|
||||
ITEM_TUNNEL_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40AC[] = {
|
||||
ITEM_BLOOM_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40BC[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40F8[] = {
|
||||
ITEM_HEART_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4102[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
ITEM_REPEAT_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40DA[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40EE[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40D0[] = {
|
||||
ITEM_SNOW_MAIL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40C6[] = {
|
||||
ITEM_HEAL_POWDER,
|
||||
ITEM_ENERGYPOWDER,
|
||||
ITEM_ENERGY_ROOT,
|
||||
ITEM_REVIVAL_HERB,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40E4[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F410C[] = {
|
||||
DECORATION_YELLOW_CUSHION,
|
||||
DECORATION_CUPBOARD,
|
||||
DECORATION_TV,
|
||||
DECORATION_REFRIGERATOR,
|
||||
DECORATION_PRETTY_SINK,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4118[] = {
|
||||
DECORATION_MUNCHLAX_DOLL,
|
||||
DECORATION_BONSLY_DOLL,
|
||||
DECORATION_MIME_JR__DOLL,
|
||||
DECORATION_MANTYKE_DOLL,
|
||||
DECORATION_BUIZEL_DOLL,
|
||||
DECORATION_CHATOT_DOLL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4126[] = {
|
||||
ITEM_PROTEIN,
|
||||
ITEM_IRON,
|
||||
ITEM_CALCIUM,
|
||||
ITEM_ZINC,
|
||||
ITEM_CARBOS,
|
||||
ITEM_HP_UP,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4134[] = {
|
||||
ITEM_TM38,
|
||||
ITEM_TM25,
|
||||
ITEM_TM14,
|
||||
ITEM_TM22,
|
||||
ITEM_TM52,
|
||||
ITEM_TM15,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41B2[] = {
|
||||
SEAL_STAR_A,
|
||||
SEAL_A,
|
||||
SEAL_FIRE_A,
|
||||
SEAL_SONG_A,
|
||||
SEAL_LINE_B,
|
||||
SEAL_ELE_B,
|
||||
SEAL_PARTY_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4142[] = {
|
||||
SEAL_HEART_B,
|
||||
SEAL_STAR_C,
|
||||
SEAL_FIRE_C,
|
||||
SEAL_FLORA_B,
|
||||
SEAL_SONG_C,
|
||||
SEAL_SMOKE_A,
|
||||
SEAL_ELE_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4152[] = {
|
||||
SEAL_FOAMY_D,
|
||||
SEAL_PARTY_C,
|
||||
SEAL_FLORA_F,
|
||||
SEAL_SONG_G,
|
||||
SEAL_HEART_F,
|
||||
SEAL_LINE_A,
|
||||
SEAL_ELE_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4162[] = {
|
||||
SEAL_HEART_C,
|
||||
SEAL_STAR_D,
|
||||
SEAL_FIRE_D,
|
||||
SEAL_FLORA_C,
|
||||
SEAL_SONG_D,
|
||||
SEAL_SMOKE_B,
|
||||
SEAL_FOAMY_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4172[] = {
|
||||
SEAL_HEART_D,
|
||||
SEAL_FOAMY_B,
|
||||
SEAL_PARTY_A,
|
||||
SEAL_FLORA_D,
|
||||
SEAL_SONG_E,
|
||||
SEAL_STAR_E,
|
||||
SEAL_SMOKE_C,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4182[] = {
|
||||
ITEM_TM83,
|
||||
ITEM_TM17,
|
||||
ITEM_TM54,
|
||||
ITEM_TM20,
|
||||
ITEM_TM33,
|
||||
ITEM_TM16,
|
||||
ITEM_TM70,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4192[] = {
|
||||
SEAL_HEART_A,
|
||||
SEAL_STAR_B,
|
||||
SEAL_FIRE_B,
|
||||
SEAL_SONG_B,
|
||||
SEAL_LINE_C,
|
||||
SEAL_ELE_C,
|
||||
SEAL_FLORA_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41A2[] = {
|
||||
SEAL_FOAMY_C,
|
||||
SEAL_PARTY_B,
|
||||
SEAL_FLORA_E,
|
||||
SEAL_SONG_F,
|
||||
SEAL_HEART_E,
|
||||
SEAL_STAR_F,
|
||||
SEAL_SMOKE_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41D4[] = {
|
||||
ITEM_X_SPEED,
|
||||
ITEM_X_ATTACK,
|
||||
ITEM_X_DEFENSE,
|
||||
ITEM_GUARD_SPEC_,
|
||||
ITEM_DIRE_HIT,
|
||||
ITEM_X_ACCURACY,
|
||||
ITEM_X_SPECIAL,
|
||||
ITEM_X_SP__DEF,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41C2[] = {
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
ITEM_REPEAT_BALL,
|
||||
ITEM_LUXURY_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41E6[] = {
|
||||
ITEM_POTION,
|
||||
ITEM_SUPER_POTION,
|
||||
ITEM_HYPER_POTION,
|
||||
ITEM_MAX_POTION,
|
||||
ITEM_REVIVE,
|
||||
ITEM_ANTIDOTE,
|
||||
ITEM_PARLYZ_HEAL,
|
||||
ITEM_BURN_HEAL,
|
||||
ITEM_ICE_HEAL,
|
||||
ITEM_AWAKENING,
|
||||
ITEM_FULL_HEAL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41FE[] = {
|
||||
ITEM_POKE_BALL,
|
||||
ITEM_GREAT_BALL,
|
||||
ITEM_ULTRA_BALL,
|
||||
ITEM_ESCAPE_ROPE,
|
||||
ITEM_POKE_DOLL,
|
||||
ITEM_REPEL,
|
||||
ITEM_SUPER_REPEL,
|
||||
ITEM_MAX_REPEL,
|
||||
ITEM_GRASS_MAIL,
|
||||
ITEM_FLAME_MAIL,
|
||||
ITEM_BUBBLE_MAIL,
|
||||
ITEM_SPACE_MAIL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 sNormalMartBadgeThresholds[][2] = {
|
||||
// Balls
|
||||
{ITEM_POKE_BALL, 1},
|
||||
{ITEM_GREAT_BALL, 3},
|
||||
{ITEM_ULTRA_BALL, 4},
|
||||
// Potions
|
||||
{ITEM_POTION, 1},
|
||||
{ITEM_SUPER_POTION, 2},
|
||||
{ITEM_HYPER_POTION, 4},
|
||||
{ITEM_MAX_POTION, 5},
|
||||
{ITEM_FULL_RESTORE, 6},
|
||||
// Revives
|
||||
{ITEM_REVIVE, 3},
|
||||
// Status heal
|
||||
{ITEM_ANTIDOTE, 1},
|
||||
{ITEM_PARLYZ_HEAL, 1},
|
||||
{ITEM_AWAKENING, 2},
|
||||
{ITEM_BURN_HEAL, 2},
|
||||
{ITEM_ICE_HEAL, 2},
|
||||
{ITEM_FULL_HEAL, 4},
|
||||
// Dungeon items
|
||||
{ITEM_ESCAPE_ROPE, 2},
|
||||
// Repels
|
||||
{ITEM_REPEL, 2},
|
||||
{ITEM_SUPER_REPEL, 3},
|
||||
{ITEM_MAX_REPEL, 4},
|
||||
};
|
||||
|
||||
const u16 *sDecorationMartPointers[] = {
|
||||
UNK_020F410C,
|
||||
UNK_020F4118,
|
||||
};
|
||||
|
||||
const u16 *sSpecialMartPointers[] = {
|
||||
UNK_020F40A6,
|
||||
UNK_020F40B4,
|
||||
UNK_020F40AC,
|
||||
UNK_020F40BC,
|
||||
UNK_020F40C6,
|
||||
UNK_020F40F8,
|
||||
UNK_020F40DA,
|
||||
UNK_020F40E4,
|
||||
UNK_020F41E6,
|
||||
UNK_020F41FE,
|
||||
UNK_020F41D4,
|
||||
UNK_020F4126,
|
||||
UNK_020F4182,
|
||||
UNK_020F4134,
|
||||
UNK_020F40EE,
|
||||
UNK_020F40D0,
|
||||
UNK_020F4102,
|
||||
UNK_020F40A0,
|
||||
UNK_020F41C2,
|
||||
};
|
||||
|
||||
const u16 *sSealsMartPointers[] = {
|
||||
UNK_020F4192,
|
||||
UNK_020F4142,
|
||||
UNK_020F4162,
|
||||
UNK_020F4172,
|
||||
UNK_020F41A2,
|
||||
UNK_020F4152,
|
||||
UNK_020F41B2,
|
||||
};
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_NormalMart(struct ScriptContext * ctx) //0147 - todo: Pokemart?
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
s32 param;
|
||||
u16 martItems[64];
|
||||
u8 martIdx = 0;
|
||||
u8 badgeCount = 0;
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (PlayerProfile_TestBadgeFlag(Sav2_PlayerData_GetProfileAddr(ctx->fieldSystem->saveBlock2), i) == TRUE)
|
||||
badgeCount++;
|
||||
}
|
||||
switch (badgeCount)
|
||||
{
|
||||
case 0:
|
||||
param = 1;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
param = 2;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
param = 3;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
param = 4;
|
||||
break;
|
||||
case 7:
|
||||
param = 5;
|
||||
break;
|
||||
case 8:
|
||||
param = 6;
|
||||
break;
|
||||
default:
|
||||
param = 1;
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < NELEMS(sNormalMartBadgeThresholds); i++)
|
||||
{
|
||||
if (param >= sNormalMartBadgeThresholds[i][1])
|
||||
{
|
||||
martItems[martIdx] = sNormalMartBadgeThresholds[i][0];
|
||||
martIdx++;
|
||||
}
|
||||
}
|
||||
martItems[martIdx] = 0xFFFF; // terminator
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, martItems, MART_ITEMS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_SpecialMart(struct ScriptContext * ctx) //0148
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
u32 sp0;
|
||||
|
||||
// Fakematch?
|
||||
if ((u16)(whichMart + (u16)(-8u)) <= 5)
|
||||
sp0 = 1;
|
||||
else
|
||||
sp0 = 0;
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSpecialMartPointers[whichMart], MART_ITEMS, sp0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_GoodsMart(struct ScriptContext * ctx) //0149
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
u32 sp0;
|
||||
|
||||
if (whichMart <= 1)
|
||||
sp0 = 1;
|
||||
else
|
||||
sp0 = 0;
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sDecorationMartPointers[whichMart], MART_DECORATIONS, sp0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_SealsMart(struct ScriptContext * ctx) //014A
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSealsMartPointers[whichMart], MART_SEALS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_AccessoriesShop(struct ScriptContext * ctx) //0257 - todo: Unsure if this is correct, SDSME has it as SprtSave?
|
||||
{
|
||||
FUN_02038AD0(ctx->fieldSystem->taskManager);
|
||||
return TRUE;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/seal_constants.h"
|
||||
#include "constants/decorations.h"
|
||||
#include "scrcmd.h"
|
||||
#include "module_06.h"
|
||||
|
||||
extern void FUN_02038AD0(struct TaskManager *);
|
||||
|
||||
static const u16 UNK_020F40A6[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40A0[] = {
|
||||
ITEM_STEEL_MAIL,
|
||||
ITEM_LUXURY_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40B4[] = {
|
||||
ITEM_TUNNEL_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40AC[] = {
|
||||
ITEM_BLOOM_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40BC[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40F8[] = {
|
||||
ITEM_HEART_MAIL,
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4102[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
ITEM_REPEAT_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40DA[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40EE[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40D0[] = {
|
||||
ITEM_SNOW_MAIL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40C6[] = {
|
||||
ITEM_HEAL_POWDER,
|
||||
ITEM_ENERGYPOWDER,
|
||||
ITEM_ENERGY_ROOT,
|
||||
ITEM_REVIVAL_HERB,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F40E4[] = {
|
||||
ITEM_AIR_MAIL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F410C[] = {
|
||||
DECORATION_YELLOW_CUSHION,
|
||||
DECORATION_CUPBOARD,
|
||||
DECORATION_TV,
|
||||
DECORATION_REFRIGERATOR,
|
||||
DECORATION_PRETTY_SINK,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4118[] = {
|
||||
DECORATION_MUNCHLAX_DOLL,
|
||||
DECORATION_BONSLY_DOLL,
|
||||
DECORATION_MIME_JR__DOLL,
|
||||
DECORATION_MANTYKE_DOLL,
|
||||
DECORATION_BUIZEL_DOLL,
|
||||
DECORATION_CHATOT_DOLL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4126[] = {
|
||||
ITEM_PROTEIN,
|
||||
ITEM_IRON,
|
||||
ITEM_CALCIUM,
|
||||
ITEM_ZINC,
|
||||
ITEM_CARBOS,
|
||||
ITEM_HP_UP,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4134[] = {
|
||||
ITEM_TM38,
|
||||
ITEM_TM25,
|
||||
ITEM_TM14,
|
||||
ITEM_TM22,
|
||||
ITEM_TM52,
|
||||
ITEM_TM15,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41B2[] = {
|
||||
SEAL_STAR_A,
|
||||
SEAL_A,
|
||||
SEAL_FIRE_A,
|
||||
SEAL_SONG_A,
|
||||
SEAL_LINE_B,
|
||||
SEAL_ELE_B,
|
||||
SEAL_PARTY_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4142[] = {
|
||||
SEAL_HEART_B,
|
||||
SEAL_STAR_C,
|
||||
SEAL_FIRE_C,
|
||||
SEAL_FLORA_B,
|
||||
SEAL_SONG_C,
|
||||
SEAL_SMOKE_A,
|
||||
SEAL_ELE_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4152[] = {
|
||||
SEAL_FOAMY_D,
|
||||
SEAL_PARTY_C,
|
||||
SEAL_FLORA_F,
|
||||
SEAL_SONG_G,
|
||||
SEAL_HEART_F,
|
||||
SEAL_LINE_A,
|
||||
SEAL_ELE_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4162[] = {
|
||||
SEAL_HEART_C,
|
||||
SEAL_STAR_D,
|
||||
SEAL_FIRE_D,
|
||||
SEAL_FLORA_C,
|
||||
SEAL_SONG_D,
|
||||
SEAL_SMOKE_B,
|
||||
SEAL_FOAMY_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4172[] = {
|
||||
SEAL_HEART_D,
|
||||
SEAL_FOAMY_B,
|
||||
SEAL_PARTY_A,
|
||||
SEAL_FLORA_D,
|
||||
SEAL_SONG_E,
|
||||
SEAL_STAR_E,
|
||||
SEAL_SMOKE_C,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4182[] = {
|
||||
ITEM_TM83,
|
||||
ITEM_TM17,
|
||||
ITEM_TM54,
|
||||
ITEM_TM20,
|
||||
ITEM_TM33,
|
||||
ITEM_TM16,
|
||||
ITEM_TM70,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F4192[] = {
|
||||
SEAL_HEART_A,
|
||||
SEAL_STAR_B,
|
||||
SEAL_FIRE_B,
|
||||
SEAL_SONG_B,
|
||||
SEAL_LINE_C,
|
||||
SEAL_ELE_C,
|
||||
SEAL_FLORA_A,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41A2[] = {
|
||||
SEAL_FOAMY_C,
|
||||
SEAL_PARTY_B,
|
||||
SEAL_FLORA_E,
|
||||
SEAL_SONG_F,
|
||||
SEAL_HEART_E,
|
||||
SEAL_STAR_F,
|
||||
SEAL_SMOKE_D,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41D4[] = {
|
||||
ITEM_X_SPEED,
|
||||
ITEM_X_ATTACK,
|
||||
ITEM_X_DEFENSE,
|
||||
ITEM_GUARD_SPEC_,
|
||||
ITEM_DIRE_HIT,
|
||||
ITEM_X_ACCURACY,
|
||||
ITEM_X_SPECIAL,
|
||||
ITEM_X_SP__DEF,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41C2[] = {
|
||||
ITEM_HEAL_BALL,
|
||||
ITEM_NET_BALL,
|
||||
ITEM_NEST_BALL,
|
||||
ITEM_DUSK_BALL,
|
||||
ITEM_QUICK_BALL,
|
||||
ITEM_TIMER_BALL,
|
||||
ITEM_REPEAT_BALL,
|
||||
ITEM_LUXURY_BALL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41E6[] = {
|
||||
ITEM_POTION,
|
||||
ITEM_SUPER_POTION,
|
||||
ITEM_HYPER_POTION,
|
||||
ITEM_MAX_POTION,
|
||||
ITEM_REVIVE,
|
||||
ITEM_ANTIDOTE,
|
||||
ITEM_PARLYZ_HEAL,
|
||||
ITEM_BURN_HEAL,
|
||||
ITEM_ICE_HEAL,
|
||||
ITEM_AWAKENING,
|
||||
ITEM_FULL_HEAL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 UNK_020F41FE[] = {
|
||||
ITEM_POKE_BALL,
|
||||
ITEM_GREAT_BALL,
|
||||
ITEM_ULTRA_BALL,
|
||||
ITEM_ESCAPE_ROPE,
|
||||
ITEM_POKE_DOLL,
|
||||
ITEM_REPEL,
|
||||
ITEM_SUPER_REPEL,
|
||||
ITEM_MAX_REPEL,
|
||||
ITEM_GRASS_MAIL,
|
||||
ITEM_FLAME_MAIL,
|
||||
ITEM_BUBBLE_MAIL,
|
||||
ITEM_SPACE_MAIL,
|
||||
0xFFFF
|
||||
};
|
||||
|
||||
static const u16 sNormalMartBadgeThresholds[][2] = {
|
||||
// Balls
|
||||
{ITEM_POKE_BALL, 1},
|
||||
{ITEM_GREAT_BALL, 3},
|
||||
{ITEM_ULTRA_BALL, 4},
|
||||
// Potions
|
||||
{ITEM_POTION, 1},
|
||||
{ITEM_SUPER_POTION, 2},
|
||||
{ITEM_HYPER_POTION, 4},
|
||||
{ITEM_MAX_POTION, 5},
|
||||
{ITEM_FULL_RESTORE, 6},
|
||||
// Revives
|
||||
{ITEM_REVIVE, 3},
|
||||
// Status heal
|
||||
{ITEM_ANTIDOTE, 1},
|
||||
{ITEM_PARLYZ_HEAL, 1},
|
||||
{ITEM_AWAKENING, 2},
|
||||
{ITEM_BURN_HEAL, 2},
|
||||
{ITEM_ICE_HEAL, 2},
|
||||
{ITEM_FULL_HEAL, 4},
|
||||
// Dungeon items
|
||||
{ITEM_ESCAPE_ROPE, 2},
|
||||
// Repels
|
||||
{ITEM_REPEL, 2},
|
||||
{ITEM_SUPER_REPEL, 3},
|
||||
{ITEM_MAX_REPEL, 4},
|
||||
};
|
||||
|
||||
const u16 *sDecorationMartPointers[] = {
|
||||
UNK_020F410C,
|
||||
UNK_020F4118,
|
||||
};
|
||||
|
||||
const u16 *sSpecialMartPointers[] = {
|
||||
UNK_020F40A6,
|
||||
UNK_020F40B4,
|
||||
UNK_020F40AC,
|
||||
UNK_020F40BC,
|
||||
UNK_020F40C6,
|
||||
UNK_020F40F8,
|
||||
UNK_020F40DA,
|
||||
UNK_020F40E4,
|
||||
UNK_020F41E6,
|
||||
UNK_020F41FE,
|
||||
UNK_020F41D4,
|
||||
UNK_020F4126,
|
||||
UNK_020F4182,
|
||||
UNK_020F4134,
|
||||
UNK_020F40EE,
|
||||
UNK_020F40D0,
|
||||
UNK_020F4102,
|
||||
UNK_020F40A0,
|
||||
UNK_020F41C2,
|
||||
};
|
||||
|
||||
const u16 *sSealsMartPointers[] = {
|
||||
UNK_020F4192,
|
||||
UNK_020F4142,
|
||||
UNK_020F4162,
|
||||
UNK_020F4172,
|
||||
UNK_020F41A2,
|
||||
UNK_020F4152,
|
||||
UNK_020F41B2,
|
||||
};
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_NormalMart(struct ScriptContext * ctx) //0147 - todo: Pokemart?
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
s32 param;
|
||||
u16 martItems[64];
|
||||
u8 martIdx = 0;
|
||||
u8 badgeCount = 0;
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (PlayerProfile_TestBadgeFlag(Sav2_PlayerData_GetProfileAddr(ctx->fieldSystem->saveBlock2), i) == TRUE)
|
||||
badgeCount++;
|
||||
}
|
||||
switch (badgeCount)
|
||||
{
|
||||
case 0:
|
||||
param = 1;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
param = 2;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
param = 3;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
param = 4;
|
||||
break;
|
||||
case 7:
|
||||
param = 5;
|
||||
break;
|
||||
case 8:
|
||||
param = 6;
|
||||
break;
|
||||
default:
|
||||
param = 1;
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < NELEMS(sNormalMartBadgeThresholds); i++)
|
||||
{
|
||||
if (param >= sNormalMartBadgeThresholds[i][1])
|
||||
{
|
||||
martItems[martIdx] = sNormalMartBadgeThresholds[i][0];
|
||||
martIdx++;
|
||||
}
|
||||
}
|
||||
martItems[martIdx] = 0xFFFF; // terminator
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, martItems, MART_ITEMS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_SpecialMart(struct ScriptContext * ctx) //0148
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
u32 sp0;
|
||||
|
||||
// Fakematch?
|
||||
if ((u16)(whichMart + (u16)(-8u)) <= 5)
|
||||
sp0 = 1;
|
||||
else
|
||||
sp0 = 0;
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSpecialMartPointers[whichMart], MART_ITEMS, sp0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_GoodsMart(struct ScriptContext * ctx) //0149
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
u32 sp0;
|
||||
|
||||
if (whichMart <= 1)
|
||||
sp0 = 1;
|
||||
else
|
||||
sp0 = 0;
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sDecorationMartPointers[whichMart], MART_DECORATIONS, sp0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_SealsMart(struct ScriptContext * ctx) //014A
|
||||
{
|
||||
u16 whichMart = ScriptGetVar(ctx);
|
||||
|
||||
MOD06_0223D3D0(ctx->taskManager, ctx->fieldSystem, sSealsMartPointers[whichMart], MART_SEALS, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL ScrCmd_AccessoriesShop(struct ScriptContext * ctx) //0257 - todo: Unsure if this is correct, SDSME has it as SprtSave?
|
||||
{
|
||||
FUN_02038AD0(ctx->fieldSystem->taskManager);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,157 +1,157 @@
|
|||
#include "script.h"
|
||||
|
||||
THUMB_FUNC void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount)
|
||||
{
|
||||
int i;
|
||||
|
||||
ctx->mode = 0;
|
||||
ctx->scriptPtr = NULL;
|
||||
ctx->stackDepth = 0;
|
||||
ctx->nativePtr = NULL;
|
||||
ctx->cmdTable = cmdTable;
|
||||
ctx->cmdCount = cmdCount;
|
||||
|
||||
for (i = 0; i < NELEMS(ctx->data); i++)
|
||||
ctx->data[i] = 0;
|
||||
|
||||
for (i = 0; i < NELEMS(ctx->stack); i++)
|
||||
ctx->stack[i] = NULL;
|
||||
|
||||
ctx->taskManager = NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ctx->scriptPtr = ptr;
|
||||
ctx->mode = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *))
|
||||
{
|
||||
ctx->mode = 2;
|
||||
ctx->nativePtr = ptr;
|
||||
}
|
||||
|
||||
THUMB_FUNC void StopScript(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->mode = 0;
|
||||
ctx->scriptPtr = 0;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManager)
|
||||
{
|
||||
ctx->taskManager = taskManager;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 RunScriptCommand(struct ScriptContext *ctx)
|
||||
{
|
||||
if (ctx->mode == 0)
|
||||
return FALSE;
|
||||
|
||||
switch (ctx->mode)
|
||||
{
|
||||
case 0:
|
||||
return FALSE;
|
||||
case 2:
|
||||
if (ctx->nativePtr)
|
||||
{
|
||||
if (ctx->nativePtr(ctx) == TRUE)
|
||||
ctx->mode = 1;
|
||||
return TRUE;
|
||||
}
|
||||
ctx->mode = 1;
|
||||
case 1:
|
||||
while (1)
|
||||
{
|
||||
u16 cmdCode;
|
||||
ScrCmdFunc *func;
|
||||
|
||||
if (!ctx->scriptPtr)
|
||||
{
|
||||
ctx->mode = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
cmdCode = ScriptReadHalfword(ctx);
|
||||
if (cmdCode >= ctx->cmdCount)
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
ctx->mode = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
func = &ctx->cmdTable[cmdCode];
|
||||
|
||||
if ((*func)(ctx) == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
if (ctx->stackDepth + 1 >= 20)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->stack[ctx->stackDepth] = ptr;
|
||||
ctx->stackDepth++;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC const u8 *ScriptPop(struct ScriptContext *ctx)
|
||||
{
|
||||
if (ctx->stackDepth == 0)
|
||||
return NULL;
|
||||
|
||||
ctx->stackDepth--;
|
||||
return ctx->stack[ctx->stackDepth];
|
||||
}
|
||||
|
||||
THUMB_FUNC void ScriptJump(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ctx->scriptPtr = ptr;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
u8 ret = ScriptPush(ctx, ctx->scriptPtr);
|
||||
ctx->scriptPtr = ptr;
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void ScriptReturn(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->scriptPtr = ScriptPop(ctx);
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 ScriptReadHalfword(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 value = *(ctx->scriptPtr++);
|
||||
value += *(ctx->scriptPtr++) << 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 ScriptReadWord(struct ScriptContext *ctx)
|
||||
{
|
||||
u32 value0 = *(ctx->scriptPtr++);
|
||||
u32 value1 = *(ctx->scriptPtr++);
|
||||
u32 value2 = *(ctx->scriptPtr++);
|
||||
u32 value3 = *(ctx->scriptPtr++);
|
||||
u32 retVal = 0;
|
||||
|
||||
retVal += value3;
|
||||
retVal <<= 8;
|
||||
retVal += value2;
|
||||
retVal <<= 8;
|
||||
retVal += value1;
|
||||
retVal <<= 8;
|
||||
retVal += value0;
|
||||
return retVal;
|
||||
}
|
||||
#include "script.h"
|
||||
|
||||
THUMB_FUNC void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount)
|
||||
{
|
||||
int i;
|
||||
|
||||
ctx->mode = 0;
|
||||
ctx->scriptPtr = NULL;
|
||||
ctx->stackDepth = 0;
|
||||
ctx->nativePtr = NULL;
|
||||
ctx->cmdTable = cmdTable;
|
||||
ctx->cmdCount = cmdCount;
|
||||
|
||||
for (i = 0; i < NELEMS(ctx->data); i++)
|
||||
ctx->data[i] = 0;
|
||||
|
||||
for (i = 0; i < NELEMS(ctx->stack); i++)
|
||||
ctx->stack[i] = NULL;
|
||||
|
||||
ctx->taskManager = NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ctx->scriptPtr = ptr;
|
||||
ctx->mode = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *))
|
||||
{
|
||||
ctx->mode = 2;
|
||||
ctx->nativePtr = ptr;
|
||||
}
|
||||
|
||||
THUMB_FUNC void StopScript(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->mode = 0;
|
||||
ctx->scriptPtr = 0;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManager)
|
||||
{
|
||||
ctx->taskManager = taskManager;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 RunScriptCommand(struct ScriptContext *ctx)
|
||||
{
|
||||
if (ctx->mode == 0)
|
||||
return FALSE;
|
||||
|
||||
switch (ctx->mode)
|
||||
{
|
||||
case 0:
|
||||
return FALSE;
|
||||
case 2:
|
||||
if (ctx->nativePtr)
|
||||
{
|
||||
if (ctx->nativePtr(ctx) == TRUE)
|
||||
ctx->mode = 1;
|
||||
return TRUE;
|
||||
}
|
||||
ctx->mode = 1;
|
||||
case 1:
|
||||
while (1)
|
||||
{
|
||||
u16 cmdCode;
|
||||
ScrCmdFunc *func;
|
||||
|
||||
if (!ctx->scriptPtr)
|
||||
{
|
||||
ctx->mode = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
cmdCode = ScriptReadHalfword(ctx);
|
||||
if (cmdCode >= ctx->cmdCount)
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
ctx->mode = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
func = &ctx->cmdTable[cmdCode];
|
||||
|
||||
if ((*func)(ctx) == 1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
if (ctx->stackDepth + 1 >= 20)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->stack[ctx->stackDepth] = ptr;
|
||||
ctx->stackDepth++;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC const u8 *ScriptPop(struct ScriptContext *ctx)
|
||||
{
|
||||
if (ctx->stackDepth == 0)
|
||||
return NULL;
|
||||
|
||||
ctx->stackDepth--;
|
||||
return ctx->stack[ctx->stackDepth];
|
||||
}
|
||||
|
||||
THUMB_FUNC void ScriptJump(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
ctx->scriptPtr = ptr;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr)
|
||||
{
|
||||
u8 ret = ScriptPush(ctx, ctx->scriptPtr);
|
||||
ctx->scriptPtr = ptr;
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void ScriptReturn(struct ScriptContext *ctx)
|
||||
{
|
||||
ctx->scriptPtr = ScriptPop(ctx);
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 ScriptReadHalfword(struct ScriptContext *ctx)
|
||||
{
|
||||
u16 value = *(ctx->scriptPtr++);
|
||||
value += *(ctx->scriptPtr++) << 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 ScriptReadWord(struct ScriptContext *ctx)
|
||||
{
|
||||
u32 value0 = *(ctx->scriptPtr++);
|
||||
u32 value1 = *(ctx->scriptPtr++);
|
||||
u32 value2 = *(ctx->scriptPtr++);
|
||||
u32 value3 = *(ctx->scriptPtr++);
|
||||
u32 retVal = 0;
|
||||
|
||||
retVal += value3;
|
||||
retVal <<= 8;
|
||||
retVal += value2;
|
||||
retVal <<= 8;
|
||||
retVal += value1;
|
||||
retVal <<= 8;
|
||||
retVal += value0;
|
||||
return retVal;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,204 +1,204 @@
|
|||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "party.h"
|
||||
#include "player_data.h"
|
||||
#include "pokemon.h"
|
||||
#include "save_block_2.h"
|
||||
#include "unk_02015CC0.h"
|
||||
#include "unk_0202C144.h"
|
||||
#include "module_05.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/script_pokemon_util.h"
|
||||
|
||||
#pragma thumb on
|
||||
|
||||
BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon)
|
||||
{
|
||||
if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0)
|
||||
return FALSE;
|
||||
if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType)
|
||||
{
|
||||
u32 ptr;
|
||||
struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
|
||||
struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
|
||||
struct Pokemon * mon = AllocMonZeroed(heap_id);
|
||||
ZeroMonData(mon);
|
||||
CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id);
|
||||
ptr = item;
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &ptr);
|
||||
BOOL isAdded = AddMonToParty(party, mon);
|
||||
if (isAdded)
|
||||
{
|
||||
FUN_0202C144(sav2, mon);
|
||||
}
|
||||
FreeToHeap(mon);
|
||||
return isAdded;
|
||||
}
|
||||
|
||||
/* Seems to have something to do with Manaphy Egg*/
|
||||
BOOL GiveEgg(u32 heapId, struct SaveBlock2 * sav2, u16 species, int level, int metLocIndex, int a3)
|
||||
{
|
||||
#pragma unused(heapId)
|
||||
struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
|
||||
struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
|
||||
struct Pokemon * mon = AllocMonZeroed(32);
|
||||
ZeroMonData(mon);
|
||||
MOD05_SetEggStats(mon, species, level, data, 4, FUN_02015CF8(metLocIndex, a3));
|
||||
BOOL isAdded = AddMonToParty(party, mon);
|
||||
FreeToHeap(mon);
|
||||
return isAdded;
|
||||
}
|
||||
|
||||
void PartyMonSetMoveInSlot(struct PlayerParty * party, int partySlot, int moveSlot, u16 move)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, partySlot);
|
||||
MonSetMoveInSlot(mon, move, (u8)moveSlot);
|
||||
}
|
||||
|
||||
int GetIdxOfFirstPartyMonWithMove(struct PlayerParty * party, int move)
|
||||
{
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
continue;
|
||||
if (GetMonData(mon, MON_DATA_MOVE1, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE2, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE3, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE4, NULL) == move)
|
||||
return i;
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
int CountAlivePokemon(struct PlayerParty * party)
|
||||
{
|
||||
int partyCount = GetPartyCount(party);
|
||||
int i;
|
||||
int aliveCount = 0;
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(MonNotFaintedOrEgg(mon))
|
||||
aliveCount++;
|
||||
}
|
||||
return aliveCount;
|
||||
}
|
||||
|
||||
struct Pokemon * GetFirstAliveMonInParty_CrashIfNone(struct PlayerParty * party)
|
||||
{
|
||||
int i;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(MonNotFaintedOrEgg(mon))
|
||||
return mon;
|
||||
}
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct Pokemon * GetFirstNonEggInParty(struct PlayerParty * party)
|
||||
{
|
||||
u16 i;
|
||||
u16 partyCount = (u16)GetPartyCount(party);
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (!GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
return mon;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL HasEnoughAlivePokemonForDoubleBattle(struct PlayerParty * party)
|
||||
{
|
||||
return (CountAlivePokemon(party) >= 2);
|
||||
}
|
||||
|
||||
void GiveAllMonsTheSinnohChampRibbon(struct PlayerParty * party)
|
||||
{
|
||||
u8 var = 1;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
continue;
|
||||
|
||||
SetMonData(mon, MON_DATA_SINNOH_CHAMP_RIBBON, &var);
|
||||
}
|
||||
}
|
||||
|
||||
int ApplyPoisonStep(struct PlayerParty * party, int location)
|
||||
{
|
||||
u32 hp;
|
||||
int numPoisoned = 0;
|
||||
int numHealed = 0;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(!MonNotFaintedOrEgg(mon))
|
||||
continue;
|
||||
|
||||
if (!(GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88))
|
||||
continue;
|
||||
|
||||
hp = GetMonData(mon, MON_DATA_HP, NULL);
|
||||
if (hp > 1)
|
||||
hp--;
|
||||
SetMonData(mon, MON_DATA_HP, &hp);
|
||||
if (hp == 1)
|
||||
{
|
||||
numHealed++;
|
||||
MonApplyFriendshipMod(mon, FRIENDSHIP_EVENT_HEAL_FIELD_PSN, (u32)location);
|
||||
}
|
||||
numPoisoned++;
|
||||
}
|
||||
|
||||
if (numHealed != 0)
|
||||
return FLDPSN_HEAL;
|
||||
|
||||
if (numPoisoned != 0)
|
||||
return FLDPSN_PSN;
|
||||
|
||||
return FLDPSN_NONE;
|
||||
}
|
||||
|
||||
BOOL SurvivePoisoning(struct Pokemon * mon)
|
||||
{
|
||||
int status;
|
||||
if (GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88)
|
||||
{
|
||||
if (GetMonData(mon, MON_DATA_HP, NULL) == 1)
|
||||
{
|
||||
status = 0;
|
||||
SetMonData(mon, MON_DATA_STATUS, &status);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "party.h"
|
||||
#include "player_data.h"
|
||||
#include "pokemon.h"
|
||||
#include "save_block_2.h"
|
||||
#include "unk_02015CC0.h"
|
||||
#include "unk_0202C144.h"
|
||||
#include "module_05.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/script_pokemon_util.h"
|
||||
|
||||
#pragma thumb on
|
||||
|
||||
BOOL MonNotFaintedOrEgg(struct Pokemon * pokemon)
|
||||
{
|
||||
if (GetMonData(pokemon, MON_DATA_HP, NULL) == 0)
|
||||
return FALSE;
|
||||
if (GetMonData(pokemon, MON_DATA_IS_EGG, NULL))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u32 encounterType)
|
||||
{
|
||||
u32 ptr;
|
||||
struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
|
||||
struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
|
||||
struct Pokemon * mon = AllocMonZeroed(heap_id);
|
||||
ZeroMonData(mon);
|
||||
CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
FUN_0206A014(mon, data, ITEM_POKE_BALL, mapSec, encounterType, heap_id);
|
||||
ptr = item;
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &ptr);
|
||||
BOOL isAdded = AddMonToParty(party, mon);
|
||||
if (isAdded)
|
||||
{
|
||||
FUN_0202C144(sav2, mon);
|
||||
}
|
||||
FreeToHeap(mon);
|
||||
return isAdded;
|
||||
}
|
||||
|
||||
/* Seems to have something to do with Manaphy Egg*/
|
||||
BOOL GiveEgg(u32 heapId, struct SaveBlock2 * sav2, u16 species, int level, int metLocIndex, int a3)
|
||||
{
|
||||
#pragma unused(heapId)
|
||||
struct PlayerData * data = Sav2_PlayerData_GetProfileAddr(sav2);
|
||||
struct PlayerParty * party = SavArray_PlayerParty_get(sav2);
|
||||
struct Pokemon * mon = AllocMonZeroed(32);
|
||||
ZeroMonData(mon);
|
||||
MOD05_SetEggStats(mon, species, level, data, 4, FUN_02015CF8(metLocIndex, a3));
|
||||
BOOL isAdded = AddMonToParty(party, mon);
|
||||
FreeToHeap(mon);
|
||||
return isAdded;
|
||||
}
|
||||
|
||||
void PartyMonSetMoveInSlot(struct PlayerParty * party, int partySlot, int moveSlot, u16 move)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, partySlot);
|
||||
MonSetMoveInSlot(mon, move, (u8)moveSlot);
|
||||
}
|
||||
|
||||
int GetIdxOfFirstPartyMonWithMove(struct PlayerParty * party, int move)
|
||||
{
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
continue;
|
||||
if (GetMonData(mon, MON_DATA_MOVE1, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE2, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE3, NULL) == move
|
||||
|| GetMonData(mon, MON_DATA_MOVE4, NULL) == move)
|
||||
return i;
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
int CountAlivePokemon(struct PlayerParty * party)
|
||||
{
|
||||
int partyCount = GetPartyCount(party);
|
||||
int i;
|
||||
int aliveCount = 0;
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(MonNotFaintedOrEgg(mon))
|
||||
aliveCount++;
|
||||
}
|
||||
return aliveCount;
|
||||
}
|
||||
|
||||
struct Pokemon * GetFirstAliveMonInParty_CrashIfNone(struct PlayerParty * party)
|
||||
{
|
||||
int i;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(MonNotFaintedOrEgg(mon))
|
||||
return mon;
|
||||
}
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct Pokemon * GetFirstNonEggInParty(struct PlayerParty * party)
|
||||
{
|
||||
u16 i;
|
||||
u16 partyCount = (u16)GetPartyCount(party);
|
||||
|
||||
for (i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (!GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
return mon;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL HasEnoughAlivePokemonForDoubleBattle(struct PlayerParty * party)
|
||||
{
|
||||
return (CountAlivePokemon(party) >= 2);
|
||||
}
|
||||
|
||||
void GiveAllMonsTheSinnohChampRibbon(struct PlayerParty * party)
|
||||
{
|
||||
u8 var = 1;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if (GetMonData(mon, MON_DATA_IS_EGG, NULL))
|
||||
continue;
|
||||
|
||||
SetMonData(mon, MON_DATA_SINNOH_CHAMP_RIBBON, &var);
|
||||
}
|
||||
}
|
||||
|
||||
int ApplyPoisonStep(struct PlayerParty * party, int location)
|
||||
{
|
||||
u32 hp;
|
||||
int numPoisoned = 0;
|
||||
int numHealed = 0;
|
||||
int partyCount = GetPartyCount(party);
|
||||
|
||||
for (int i = 0; i < partyCount; i++)
|
||||
{
|
||||
struct Pokemon * mon = GetPartyMonByIndex(party, i);
|
||||
|
||||
if(!MonNotFaintedOrEgg(mon))
|
||||
continue;
|
||||
|
||||
if (!(GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88))
|
||||
continue;
|
||||
|
||||
hp = GetMonData(mon, MON_DATA_HP, NULL);
|
||||
if (hp > 1)
|
||||
hp--;
|
||||
SetMonData(mon, MON_DATA_HP, &hp);
|
||||
if (hp == 1)
|
||||
{
|
||||
numHealed++;
|
||||
MonApplyFriendshipMod(mon, FRIENDSHIP_EVENT_HEAL_FIELD_PSN, (u32)location);
|
||||
}
|
||||
numPoisoned++;
|
||||
}
|
||||
|
||||
if (numHealed != 0)
|
||||
return FLDPSN_HEAL;
|
||||
|
||||
if (numPoisoned != 0)
|
||||
return FLDPSN_PSN;
|
||||
|
||||
return FLDPSN_NONE;
|
||||
}
|
||||
|
||||
BOOL SurvivePoisoning(struct Pokemon * mon)
|
||||
{
|
||||
int status;
|
||||
if (GetMonData(mon, MON_DATA_STATUS, NULL) & 0x88)
|
||||
{
|
||||
if (GetMonData(mon, MON_DATA_HP, NULL) == 1)
|
||||
{
|
||||
status = 0;
|
||||
SetMonData(mon, MON_DATA_STATUS, &status);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,143 +1,143 @@
|
|||
#include "string_util.h"
|
||||
|
||||
const u16 gDigitTable[] = {
|
||||
0xA2,
|
||||
0xA3,
|
||||
0xA4,
|
||||
0xA5,
|
||||
0xA6,
|
||||
0xA7,
|
||||
0xA8,
|
||||
0xA9,
|
||||
0xAA,
|
||||
0xAB,
|
||||
0xAC,
|
||||
0xAD,
|
||||
0xAE,
|
||||
0xAF,
|
||||
0xB0,
|
||||
0xB1
|
||||
};
|
||||
|
||||
const s32 gPowersOfTen[] = {
|
||||
1,
|
||||
10,
|
||||
100,
|
||||
1000,
|
||||
10000,
|
||||
100000,
|
||||
1000000,
|
||||
10000000,
|
||||
100000000,
|
||||
1000000000,
|
||||
};
|
||||
|
||||
THUMB_FUNC void CopyU16StringArray(u16 *dest, const u16 *src)
|
||||
{
|
||||
u16 c = *src;
|
||||
while (c != EOS) {
|
||||
src++;
|
||||
*dest = c;
|
||||
c = *src;
|
||||
dest++;
|
||||
}
|
||||
*dest = EOS;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *CopyU16StringArrayN(u16 *dest, const u16 *src, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied) {
|
||||
u16 *p = dest;
|
||||
do {
|
||||
u16 c = *src;
|
||||
copied++;
|
||||
src++;
|
||||
*p = c;
|
||||
p++;
|
||||
} while (num > copied);
|
||||
}
|
||||
return dest + num;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 StringLength(const u16 *s)
|
||||
{
|
||||
u16 c = *s;
|
||||
u32 len = 0;
|
||||
while (c != EOS) {
|
||||
s++;
|
||||
c = *s;
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL StringNotEqual(const u16 *s1, const u16 *s2)
|
||||
{
|
||||
for (; *s1 == *s2; s1++, s2++) {
|
||||
if (*s1 == EOS)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL StringNotEqualN(const u16 *s1, const u16 *s2, u32 num)
|
||||
{
|
||||
u16 c1, c2;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
while (c1 == c2) {
|
||||
if (num == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
if (*s1 == EOS && *s2 == EOS) {
|
||||
return FALSE;
|
||||
}
|
||||
s1++;
|
||||
s2++;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
num--;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *StringFill(u16 *dest, u16 value, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied) {
|
||||
u16 *p = dest;
|
||||
do {
|
||||
copied++;
|
||||
*p = value;
|
||||
p++;
|
||||
} while (copied < num);
|
||||
}
|
||||
return dest + copied;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *StringFillEOS(u16 *dest, u32 num)
|
||||
{
|
||||
return StringFill(dest, EOS, num);
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n)
|
||||
{
|
||||
for (u32 x = (u32)gPowersOfTen[n - 1]; x != 0; x = x / 10) {
|
||||
u16 res = (u16)(value / x);
|
||||
value = value - x * res;
|
||||
if (mode == PAD_ZEROES) {
|
||||
*dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
} else if (res != 0 || x == 1) {
|
||||
mode = PAD_ZEROES;
|
||||
*dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
} else if (mode == PAD_SPACE) {
|
||||
*dest = 1;
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
*dest = EOS;
|
||||
return dest;
|
||||
}
|
||||
#include "string_util.h"
|
||||
|
||||
const u16 gDigitTable[] = {
|
||||
0xA2,
|
||||
0xA3,
|
||||
0xA4,
|
||||
0xA5,
|
||||
0xA6,
|
||||
0xA7,
|
||||
0xA8,
|
||||
0xA9,
|
||||
0xAA,
|
||||
0xAB,
|
||||
0xAC,
|
||||
0xAD,
|
||||
0xAE,
|
||||
0xAF,
|
||||
0xB0,
|
||||
0xB1
|
||||
};
|
||||
|
||||
const s32 gPowersOfTen[] = {
|
||||
1,
|
||||
10,
|
||||
100,
|
||||
1000,
|
||||
10000,
|
||||
100000,
|
||||
1000000,
|
||||
10000000,
|
||||
100000000,
|
||||
1000000000,
|
||||
};
|
||||
|
||||
THUMB_FUNC void CopyU16StringArray(u16 *dest, const u16 *src)
|
||||
{
|
||||
u16 c = *src;
|
||||
while (c != EOS) {
|
||||
src++;
|
||||
*dest = c;
|
||||
c = *src;
|
||||
dest++;
|
||||
}
|
||||
*dest = EOS;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *CopyU16StringArrayN(u16 *dest, const u16 *src, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied) {
|
||||
u16 *p = dest;
|
||||
do {
|
||||
u16 c = *src;
|
||||
copied++;
|
||||
src++;
|
||||
*p = c;
|
||||
p++;
|
||||
} while (num > copied);
|
||||
}
|
||||
return dest + num;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 StringLength(const u16 *s)
|
||||
{
|
||||
u16 c = *s;
|
||||
u32 len = 0;
|
||||
while (c != EOS) {
|
||||
s++;
|
||||
c = *s;
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL StringNotEqual(const u16 *s1, const u16 *s2)
|
||||
{
|
||||
for (; *s1 == *s2; s1++, s2++) {
|
||||
if (*s1 == EOS)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL StringNotEqualN(const u16 *s1, const u16 *s2, u32 num)
|
||||
{
|
||||
u16 c1, c2;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
while (c1 == c2) {
|
||||
if (num == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
if (*s1 == EOS && *s2 == EOS) {
|
||||
return FALSE;
|
||||
}
|
||||
s1++;
|
||||
s2++;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
num--;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *StringFill(u16 *dest, u16 value, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied) {
|
||||
u16 *p = dest;
|
||||
do {
|
||||
copied++;
|
||||
*p = value;
|
||||
p++;
|
||||
} while (copied < num);
|
||||
}
|
||||
return dest + copied;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *StringFillEOS(u16 *dest, u32 num)
|
||||
{
|
||||
return StringFill(dest, EOS, num);
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n)
|
||||
{
|
||||
for (u32 x = (u32)gPowersOfTen[n - 1]; x != 0; x = x / 10) {
|
||||
u16 res = (u16)(value / x);
|
||||
value = value - x * res;
|
||||
if (mode == PAD_ZEROES) {
|
||||
*dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
} else if (res != 0 || x == 1) {
|
||||
mode = PAD_ZEROES;
|
||||
*dest = res >= 10 ? (u16)NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
} else if (mode == PAD_SPACE) {
|
||||
*dest = 1;
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
*dest = EOS;
|
||||
return dest;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "unk_0200CA44.h"
|
||||
#include "unk_020061E8.h"
|
||||
|
||||
extern struct TextPrinter *FUN_0201B6C8(void);
|
||||
|
||||
THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3)
|
||||
{
|
||||
void * r4;
|
||||
if(r1 != 0)
|
||||
{
|
||||
r4 = AllocFromHeap(r3, r1);
|
||||
if(r4 == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
memset(r4, 0, r1);
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 = NULL;
|
||||
}
|
||||
return FUN_0200CA44(r0, r4, r2);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0200621C(s32 r4)
|
||||
{
|
||||
struct TextPrinter * r0 = FUN_0201B6C8();
|
||||
if(r0 != NULL)
|
||||
{
|
||||
FreeToHeap(r0);
|
||||
}
|
||||
FUN_0200CAB4(r4);
|
||||
}
|
||||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "unk_0200CA44.h"
|
||||
#include "unk_020061E8.h"
|
||||
|
||||
extern struct TextPrinter *FUN_0201B6C8(void);
|
||||
|
||||
THUMB_FUNC BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3)
|
||||
{
|
||||
void * r4;
|
||||
if(r1 != 0)
|
||||
{
|
||||
r4 = AllocFromHeap(r3, r1);
|
||||
if(r4 == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
memset(r4, 0, r1);
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 = NULL;
|
||||
}
|
||||
return FUN_0200CA44(r0, r4, r2);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0200621C(s32 r4)
|
||||
{
|
||||
struct TextPrinter * r0 = FUN_0201B6C8();
|
||||
if(r0 != NULL)
|
||||
{
|
||||
FreeToHeap(r0);
|
||||
}
|
||||
FUN_0200CAB4(r4);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
#include "global.h"
|
||||
|
||||
struct UnkStruct_021C46B4
|
||||
{
|
||||
u8 unk_000[0x14];
|
||||
u8 unk_014[0x30];
|
||||
u8 unk_044[0x30];
|
||||
u8 unk_074[0x18];
|
||||
u8 unk_08C[0xC0];
|
||||
u16 unk_14C;
|
||||
u8 unk_14E;
|
||||
u8 unk_14F;
|
||||
u32 unk_150;
|
||||
};
|
||||
|
||||
struct UnkStruct_021C46B4 UNK_021C46B4;
|
||||
#include "global.h"
|
||||
|
||||
struct UnkStruct_021C46B4
|
||||
{
|
||||
u8 unk_000[0x14];
|
||||
u8 unk_014[0x30];
|
||||
u8 unk_044[0x30];
|
||||
u8 unk_074[0x18];
|
||||
u8 unk_08C[0xC0];
|
||||
u16 unk_14C;
|
||||
u8 unk_14E;
|
||||
u8 unk_14F;
|
||||
u32 unk_150;
|
||||
};
|
||||
|
||||
struct UnkStruct_021C46B4 UNK_021C46B4;
|
||||
|
|
|
|||
|
|
@ -1,80 +1,80 @@
|
|||
#include "global.h"
|
||||
#include "unk_0201C6B4.h"
|
||||
|
||||
THUMB_FUNC s32 FUN_0201C6B4(s8 * r0)
|
||||
{
|
||||
s32 r2 = 0;
|
||||
while(r0[r2] != 0)
|
||||
{
|
||||
r2++;
|
||||
}
|
||||
return r2;
|
||||
}
|
||||
|
||||
THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2)
|
||||
{
|
||||
for(int r3 = 0; r3 < 0x100; r3++)
|
||||
{
|
||||
r1[r3] = r0[r3];
|
||||
if(r2 == r0[r3] || r0[r3] == 0)
|
||||
{
|
||||
r1[r3] = 0;
|
||||
if(r2 == 0xd && r0[r3 + 1] == 0xa)
|
||||
{
|
||||
return &r0[r3 + 2];
|
||||
}
|
||||
return &r0[r3 + 1];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 FUN_0201C70C(s8 * r4)
|
||||
{
|
||||
s32 unk0 = FUN_0201C6B4(r4);
|
||||
s32 r3;
|
||||
s32 r5 = 1;
|
||||
s32 r6 = 0;
|
||||
for(r3 = unk0 - 1; r3 >= 0; r3--)
|
||||
{
|
||||
if(r4[r3] >= 0x30 && r4[r3] <= 0x39)
|
||||
{
|
||||
r6 += (r4[r3] - 0x30) * r5;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(r3 == 0)
|
||||
{
|
||||
if(r4[r3] == 0x2d)
|
||||
{
|
||||
r6 *= -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
r5 *= 0xa;
|
||||
}
|
||||
return r6;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4)
|
||||
{
|
||||
for(u8 r2 = 0; r2 < 4; r2++)
|
||||
{
|
||||
s32 * unk5 = (s32 *)r5;
|
||||
unk5[r2] = 0;
|
||||
}
|
||||
u8 r0 = (u8)(FUN_0201C6B4(r4));
|
||||
for(u8 r2 = 0; r2 < r0; r2++)
|
||||
{
|
||||
r5[r2] = r4[r2];
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0201C78C(u32 r0)
|
||||
{
|
||||
return r0 < 0x121;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "unk_0201C6B4.h"
|
||||
|
||||
THUMB_FUNC s32 FUN_0201C6B4(s8 * r0)
|
||||
{
|
||||
s32 r2 = 0;
|
||||
while(r0[r2] != 0)
|
||||
{
|
||||
r2++;
|
||||
}
|
||||
return r2;
|
||||
}
|
||||
|
||||
THUMB_FUNC s8 * FUN_0201C6C8(s8 * r0, s8 * r1, s8 r2)
|
||||
{
|
||||
for(int r3 = 0; r3 < 0x100; r3++)
|
||||
{
|
||||
r1[r3] = r0[r3];
|
||||
if(r2 == r0[r3] || r0[r3] == 0)
|
||||
{
|
||||
r1[r3] = 0;
|
||||
if(r2 == 0xd && r0[r3 + 1] == 0xa)
|
||||
{
|
||||
return &r0[r3 + 2];
|
||||
}
|
||||
return &r0[r3 + 1];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 FUN_0201C70C(s8 * r4)
|
||||
{
|
||||
s32 unk0 = FUN_0201C6B4(r4);
|
||||
s32 r3;
|
||||
s32 r5 = 1;
|
||||
s32 r6 = 0;
|
||||
for(r3 = unk0 - 1; r3 >= 0; r3--)
|
||||
{
|
||||
if(r4[r3] >= 0x30 && r4[r3] <= 0x39)
|
||||
{
|
||||
r6 += (r4[r3] - 0x30) * r5;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(r3 == 0)
|
||||
{
|
||||
if(r4[r3] == 0x2d)
|
||||
{
|
||||
r6 *= -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
r5 *= 0xa;
|
||||
}
|
||||
return r6;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0201C750(s8 * r5, s8 * r4)
|
||||
{
|
||||
for(u8 r2 = 0; r2 < 4; r2++)
|
||||
{
|
||||
s32 * unk5 = (s32 *)r5;
|
||||
unk5[r2] = 0;
|
||||
}
|
||||
u8 r0 = (u8)(FUN_0201C6B4(r4));
|
||||
for(u8 r2 = 0; r2 < r0; r2++)
|
||||
{
|
||||
r5[r2] = r4[r2];
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0201C78C(u32 r0)
|
||||
{
|
||||
return r0 < 0x121;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,262 +1,262 @@
|
|||
#include "global.h"
|
||||
#include "unk_02021590.h"
|
||||
#include "filesystem.h"
|
||||
#include "heap.h"
|
||||
#include "string_control_code.h"
|
||||
#include "string_util.h"
|
||||
|
||||
static const u8 sGlyphShapes[][2] = {
|
||||
{ 0, 1 },
|
||||
{ 2, 3 },
|
||||
};
|
||||
|
||||
static void (*const sAllocators[])(struct FontData *, u32) = {
|
||||
InitFontResources_FromPreloaded,
|
||||
InitFontResources_LazyFromNarc,
|
||||
};
|
||||
|
||||
static void (*const sDestructors[])(struct FontData *) = {
|
||||
FreeLoadedFontResources_FromPreloaded,
|
||||
FreeLoadedFontResources_LazyFromNarc,
|
||||
};
|
||||
|
||||
THUMB_FUNC struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id)
|
||||
{
|
||||
struct FontData * ret = (struct FontData *)AllocFromHeap(heap_id, sizeof(struct FontData));
|
||||
if (ret != NULL)
|
||||
{
|
||||
FontData_Init(ret, narcId, fileId, unk3, heap_id);
|
||||
InitFontResources(ret, unk2, heap_id);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_delete(struct FontData * ptr)
|
||||
{
|
||||
FreeLoadedFontResources(ptr);
|
||||
FontData_FreeWidthsAndNarc(ptr);
|
||||
FreeToHeap(ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id)
|
||||
{
|
||||
if (ptr->glyphAccessMode != a1)
|
||||
{
|
||||
FreeLoadedFontResources(ptr);
|
||||
InitFontResources(ptr, a1, heap_id);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id)
|
||||
{
|
||||
ptr->narc = NARC_ctor(narcId, heap_id);
|
||||
if (ptr->narc != NULL)
|
||||
{
|
||||
NARC_ReadFromMember(ptr->narc, (u32)fileId, 0, 16, &ptr->gfxHeader);
|
||||
ptr->isFixedWidthFont = unk;
|
||||
if (unk)
|
||||
{
|
||||
ptr->glyphWidths = NULL;
|
||||
ptr->glyphWidthFunc = GetGlyphWidth_FixedWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(ptr->gfxHeader.widthDataStart != 0);
|
||||
ptr->glyphWidths = AllocFromHeap(heap_id, ptr->gfxHeader.numGlyphs);
|
||||
ptr->glyphWidthFunc = GetGlyphWidth_VariableWidth;
|
||||
NARC_ReadFromMember(ptr->narc, (u32)fileId, ptr->gfxHeader.widthDataStart, ptr->gfxHeader.numGlyphs, ptr->glyphWidths);
|
||||
}
|
||||
GF_ASSERT(ptr->gfxHeader.glyphWidth <= 2 && ptr->gfxHeader.glyphHeight <= 2);
|
||||
ptr->glyphShape = sGlyphShapes[ptr->gfxHeader.glyphWidth - 1][ptr->gfxHeader.glyphHeight - 1];
|
||||
ptr->glyphSize = (u32)(16 * ptr->gfxHeader.glyphWidth * ptr->gfxHeader.glyphHeight);
|
||||
ptr->fileId = (u32)fileId;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_FreeWidthsAndNarc(struct FontData * ptr)
|
||||
{
|
||||
if (ptr->glyphWidths != NULL)
|
||||
FreeToHeap(ptr->glyphWidths);
|
||||
if (ptr->narc != NULL)
|
||||
NARC_dtor(ptr->narc);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id)
|
||||
{
|
||||
ptr->glyphAccessMode = a1;
|
||||
sAllocators[a1](ptr, heap_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id)
|
||||
{
|
||||
u32 r4 = ptr->glyphSize * ptr->gfxHeader.numGlyphs;
|
||||
ptr->narcReadBuf = AllocFromHeap(heap_id, r4);
|
||||
ptr->uncompGlyphFunc = DecompressGlyphTiles_FromPreloaded;
|
||||
NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize, r4, ptr->narcReadBuf);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id)
|
||||
{
|
||||
#pragma unused(heap_id)
|
||||
ptr->uncompGlyphFunc = DecompressGlyphTiles_LazyFromNarc;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources(struct FontData * ptr)
|
||||
{
|
||||
sDestructors[ptr->glyphAccessMode](ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr)
|
||||
{
|
||||
FreeToHeap(ptr->narcReadBuf);
|
||||
ptr->narcReadBuf = NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr)
|
||||
{
|
||||
#pragma unused(ptr)
|
||||
}
|
||||
|
||||
THUMB_FUNC void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2)
|
||||
{
|
||||
if (param1 <= ptr->gfxHeader.numGlyphs)
|
||||
ptr->uncompGlyphFunc(ptr, (u16)(param1 - 1), ptr2);
|
||||
else
|
||||
{
|
||||
ptr2->width = 0;
|
||||
ptr2->height = 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2)
|
||||
{
|
||||
u8 *r4 = &((u8 *)ptr->narcReadBuf)[param1 * ptr->glyphSize];
|
||||
switch (ptr->glyphShape)
|
||||
{
|
||||
case 0:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
break;
|
||||
case 1:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x40));
|
||||
break;
|
||||
case 2:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20));
|
||||
break;
|
||||
case 3:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20));
|
||||
DecompressGlyphTile((void *)(r4 + 0x20), (void *)(param2->buf + 0x40));
|
||||
DecompressGlyphTile((void *)(r4 + 0x30), (void *)(param2->buf + 0x60));
|
||||
break;
|
||||
}
|
||||
param2->width = (u8)ptr->glyphWidthFunc(ptr, param1);
|
||||
param2->height = ptr->gfxHeader.fixedHeight;
|
||||
}
|
||||
|
||||
THUMB_FUNC void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2)
|
||||
{
|
||||
NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize + param1 * ptr->glyphSize, ptr->glyphSize, ptr->glyphReadBuf);
|
||||
switch (ptr->glyphShape)
|
||||
{
|
||||
case 0:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
break;
|
||||
case 1:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x40));
|
||||
break;
|
||||
case 2:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20));
|
||||
break;
|
||||
case 3:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20));
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x20), (void *)(param2->buf + 0x40));
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x30), (void *)(param2->buf + 0x60));
|
||||
break;
|
||||
}
|
||||
param2->width = (u8)ptr->glyphWidthFunc(ptr, param1);
|
||||
param2->height = ptr->gfxHeader.fixedHeight;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing)
|
||||
{
|
||||
u32 width = 0;
|
||||
|
||||
while (*str != EOS)
|
||||
{
|
||||
if (*str == 0xFFFE)
|
||||
{
|
||||
str = MsgArray_SkipControlCode(str);
|
||||
if (*str == EOS)
|
||||
break;
|
||||
}
|
||||
width += ptr->glyphWidthFunc(ptr, (*str) - 1) + letterSpacing;
|
||||
str++;
|
||||
}
|
||||
return width - letterSpacing;
|
||||
}
|
||||
|
||||
THUMB_FUNC int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1)
|
||||
{
|
||||
return ptr->glyphWidths[a1];
|
||||
}
|
||||
|
||||
THUMB_FUNC int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1)
|
||||
{
|
||||
#pragma unused(a1)
|
||||
return ptr->gfxHeader.fixedWidth;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6)
|
||||
{
|
||||
s32 ret = 0;
|
||||
u32 r4 = 0;
|
||||
while (*arr != 0xFFFF)
|
||||
{
|
||||
if (*arr == 0xFFFE)
|
||||
{
|
||||
arr = MsgArray_SkipControlCode(arr);
|
||||
}
|
||||
else if (*arr == 0xE000) // newline
|
||||
{
|
||||
if (ret < r4 - r6)
|
||||
ret = (int)(r4 - r6);
|
||||
r4 = 0;
|
||||
arr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 += (r6 + r7->glyphWidthFunc(r7, *arr - 1));
|
||||
arr++;
|
||||
}
|
||||
}
|
||||
if (ret < r4 - r6)
|
||||
ret = (int)(r4 - r6);
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr)
|
||||
{
|
||||
s32 ret = 0;
|
||||
while (*arr != 0xFFFF)
|
||||
{
|
||||
if (*arr == 0xFFFE)
|
||||
{
|
||||
if (MsgArray_GetControlCode(arr) == 515)
|
||||
{
|
||||
ret = MsgArray_ControlCodeGetField(arr, 0) - 12;
|
||||
}
|
||||
arr = MsgArray_SkipControlCode(arr);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret += r6->glyphWidthFunc(r6, *arr - 1);
|
||||
arr++;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "unk_02021590.h"
|
||||
#include "filesystem.h"
|
||||
#include "heap.h"
|
||||
#include "string_control_code.h"
|
||||
#include "string_util.h"
|
||||
|
||||
static const u8 sGlyphShapes[][2] = {
|
||||
{ 0, 1 },
|
||||
{ 2, 3 },
|
||||
};
|
||||
|
||||
static void (*const sAllocators[])(struct FontData *, u32) = {
|
||||
InitFontResources_FromPreloaded,
|
||||
InitFontResources_LazyFromNarc,
|
||||
};
|
||||
|
||||
static void (*const sDestructors[])(struct FontData *) = {
|
||||
FreeLoadedFontResources_FromPreloaded,
|
||||
FreeLoadedFontResources_LazyFromNarc,
|
||||
};
|
||||
|
||||
THUMB_FUNC struct FontData *FontData_new(NarcId narcId, s32 fileId, u32 unk2, BOOL unk3, u32 heap_id)
|
||||
{
|
||||
struct FontData * ret = (struct FontData *)AllocFromHeap(heap_id, sizeof(struct FontData));
|
||||
if (ret != NULL)
|
||||
{
|
||||
FontData_Init(ret, narcId, fileId, unk3, heap_id);
|
||||
InitFontResources(ret, unk2, heap_id);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_delete(struct FontData * ptr)
|
||||
{
|
||||
FreeLoadedFontResources(ptr);
|
||||
FontData_FreeWidthsAndNarc(ptr);
|
||||
FreeToHeap(ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_ModeSwitch(struct FontData * ptr, u32 a1, u32 heap_id)
|
||||
{
|
||||
if (ptr->glyphAccessMode != a1)
|
||||
{
|
||||
FreeLoadedFontResources(ptr);
|
||||
InitFontResources(ptr, a1, heap_id);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_Init(struct FontData *ptr, NarcId narcId, s32 fileId, BOOL unk, u32 heap_id)
|
||||
{
|
||||
ptr->narc = NARC_ctor(narcId, heap_id);
|
||||
if (ptr->narc != NULL)
|
||||
{
|
||||
NARC_ReadFromMember(ptr->narc, (u32)fileId, 0, 16, &ptr->gfxHeader);
|
||||
ptr->isFixedWidthFont = unk;
|
||||
if (unk)
|
||||
{
|
||||
ptr->glyphWidths = NULL;
|
||||
ptr->glyphWidthFunc = GetGlyphWidth_FixedWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(ptr->gfxHeader.widthDataStart != 0);
|
||||
ptr->glyphWidths = AllocFromHeap(heap_id, ptr->gfxHeader.numGlyphs);
|
||||
ptr->glyphWidthFunc = GetGlyphWidth_VariableWidth;
|
||||
NARC_ReadFromMember(ptr->narc, (u32)fileId, ptr->gfxHeader.widthDataStart, ptr->gfxHeader.numGlyphs, ptr->glyphWidths);
|
||||
}
|
||||
GF_ASSERT(ptr->gfxHeader.glyphWidth <= 2 && ptr->gfxHeader.glyphHeight <= 2);
|
||||
ptr->glyphShape = sGlyphShapes[ptr->gfxHeader.glyphWidth - 1][ptr->gfxHeader.glyphHeight - 1];
|
||||
ptr->glyphSize = (u32)(16 * ptr->gfxHeader.glyphWidth * ptr->gfxHeader.glyphHeight);
|
||||
ptr->fileId = (u32)fileId;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FontData_FreeWidthsAndNarc(struct FontData * ptr)
|
||||
{
|
||||
if (ptr->glyphWidths != NULL)
|
||||
FreeToHeap(ptr->glyphWidths);
|
||||
if (ptr->narc != NULL)
|
||||
NARC_dtor(ptr->narc);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources(struct FontData * ptr, u32 a1, u32 heap_id)
|
||||
{
|
||||
ptr->glyphAccessMode = a1;
|
||||
sAllocators[a1](ptr, heap_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources_FromPreloaded(struct FontData * ptr, u32 heap_id)
|
||||
{
|
||||
u32 r4 = ptr->glyphSize * ptr->gfxHeader.numGlyphs;
|
||||
ptr->narcReadBuf = AllocFromHeap(heap_id, r4);
|
||||
ptr->uncompGlyphFunc = DecompressGlyphTiles_FromPreloaded;
|
||||
NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize, r4, ptr->narcReadBuf);
|
||||
}
|
||||
|
||||
THUMB_FUNC void InitFontResources_LazyFromNarc(struct FontData * ptr, u32 heap_id)
|
||||
{
|
||||
#pragma unused(heap_id)
|
||||
ptr->uncompGlyphFunc = DecompressGlyphTiles_LazyFromNarc;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources(struct FontData * ptr)
|
||||
{
|
||||
sDestructors[ptr->glyphAccessMode](ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources_FromPreloaded(struct FontData * ptr)
|
||||
{
|
||||
FreeToHeap(ptr->narcReadBuf);
|
||||
ptr->narcReadBuf = NULL;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FreeLoadedFontResources_LazyFromNarc(struct FontData * ptr)
|
||||
{
|
||||
#pragma unused(ptr)
|
||||
}
|
||||
|
||||
THUMB_FUNC void TryLoadGlyph(struct FontData * ptr, u32 param1, struct UnkStruct_02002C14_sub * ptr2)
|
||||
{
|
||||
if (param1 <= ptr->gfxHeader.numGlyphs)
|
||||
ptr->uncompGlyphFunc(ptr, (u16)(param1 - 1), ptr2);
|
||||
else
|
||||
{
|
||||
ptr2->width = 0;
|
||||
ptr2->height = 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void DecompressGlyphTiles_FromPreloaded(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2)
|
||||
{
|
||||
u8 *r4 = &((u8 *)ptr->narcReadBuf)[param1 * ptr->glyphSize];
|
||||
switch (ptr->glyphShape)
|
||||
{
|
||||
case 0:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
break;
|
||||
case 1:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x40));
|
||||
break;
|
||||
case 2:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20));
|
||||
break;
|
||||
case 3:
|
||||
DecompressGlyphTile((void *)(r4), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(r4 + 0x10), (void *)(param2->buf + 0x20));
|
||||
DecompressGlyphTile((void *)(r4 + 0x20), (void *)(param2->buf + 0x40));
|
||||
DecompressGlyphTile((void *)(r4 + 0x30), (void *)(param2->buf + 0x60));
|
||||
break;
|
||||
}
|
||||
param2->width = (u8)ptr->glyphWidthFunc(ptr, param1);
|
||||
param2->height = ptr->gfxHeader.fixedHeight;
|
||||
}
|
||||
|
||||
THUMB_FUNC void DecompressGlyphTiles_LazyFromNarc(struct FontData * ptr, u16 param1, struct UnkStruct_02002C14_sub * param2)
|
||||
{
|
||||
NARC_ReadFromMember(ptr->narc, ptr->fileId, ptr->gfxHeader.headerSize + param1 * ptr->glyphSize, ptr->glyphSize, ptr->glyphReadBuf);
|
||||
switch (ptr->glyphShape)
|
||||
{
|
||||
case 0:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
break;
|
||||
case 1:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x40));
|
||||
break;
|
||||
case 2:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20));
|
||||
break;
|
||||
case 3:
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf), (void *)param2->buf);
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x10), (void *)(param2->buf + 0x20));
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x20), (void *)(param2->buf + 0x40));
|
||||
DecompressGlyphTile((void *)(ptr->glyphReadBuf + 0x30), (void *)(param2->buf + 0x60));
|
||||
break;
|
||||
}
|
||||
param2->width = (u8)ptr->glyphWidthFunc(ptr, param1);
|
||||
param2->height = ptr->gfxHeader.fixedHeight;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GetStringWidth(struct FontData * ptr, const u16 * str, u32 letterSpacing)
|
||||
{
|
||||
u32 width = 0;
|
||||
|
||||
while (*str != EOS)
|
||||
{
|
||||
if (*str == 0xFFFE)
|
||||
{
|
||||
str = MsgArray_SkipControlCode(str);
|
||||
if (*str == EOS)
|
||||
break;
|
||||
}
|
||||
width += ptr->glyphWidthFunc(ptr, (*str) - 1) + letterSpacing;
|
||||
str++;
|
||||
}
|
||||
return width - letterSpacing;
|
||||
}
|
||||
|
||||
THUMB_FUNC int GetGlyphWidth_VariableWidth(struct FontData * ptr, int a1)
|
||||
{
|
||||
return ptr->glyphWidths[a1];
|
||||
}
|
||||
|
||||
THUMB_FUNC int GetGlyphWidth_FixedWidth(struct FontData * ptr, int a1)
|
||||
{
|
||||
#pragma unused(a1)
|
||||
return ptr->gfxHeader.fixedWidth;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 GetStringWidthMultiline(struct FontData * r7, const u16 * arr, u32 r6)
|
||||
{
|
||||
s32 ret = 0;
|
||||
u32 r4 = 0;
|
||||
while (*arr != 0xFFFF)
|
||||
{
|
||||
if (*arr == 0xFFFE)
|
||||
{
|
||||
arr = MsgArray_SkipControlCode(arr);
|
||||
}
|
||||
else if (*arr == 0xE000) // newline
|
||||
{
|
||||
if (ret < r4 - r6)
|
||||
ret = (int)(r4 - r6);
|
||||
r4 = 0;
|
||||
arr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 += (r6 + r7->glyphWidthFunc(r7, *arr - 1));
|
||||
arr++;
|
||||
}
|
||||
}
|
||||
if (ret < r4 - r6)
|
||||
ret = (int)(r4 - r6);
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 StringGetWidth_SingleLine_HandleClearToControlCode(struct FontData * r6, const u16 * arr)
|
||||
{
|
||||
s32 ret = 0;
|
||||
while (*arr != 0xFFFF)
|
||||
{
|
||||
if (*arr == 0xFFFE)
|
||||
{
|
||||
if (MsgArray_GetControlCode(arr) == 515)
|
||||
{
|
||||
ret = MsgArray_ControlCodeGetField(arr, 0) - 12;
|
||||
}
|
||||
arr = MsgArray_SkipControlCode(arr);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret += r6->glyphWidthFunc(r6, *arr - 1);
|
||||
arr++;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,34 +1,34 @@
|
|||
#include "global.h"
|
||||
#include "unk_020222E8.h"
|
||||
#include "mmap.h"
|
||||
|
||||
THUMB_FUNC void * FUN_020222E8()
|
||||
{
|
||||
return (void *)HW_BG_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_020222F0()
|
||||
{
|
||||
return HW_BG_PLTT_SIZE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_020222F8()
|
||||
{
|
||||
return (void *)HW_DB_BG_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_02022300()
|
||||
{
|
||||
return HW_DB_BG_PLTT_SIZE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_02022308()
|
||||
{
|
||||
return (void *)HW_OBJ_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_02022310()
|
||||
{
|
||||
return (void *)HW_DB_OBJ_PLTT;
|
||||
}
|
||||
|
||||
#include "global.h"
|
||||
#include "unk_020222E8.h"
|
||||
#include "mmap.h"
|
||||
|
||||
THUMB_FUNC void * FUN_020222E8()
|
||||
{
|
||||
return (void *)HW_BG_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_020222F0()
|
||||
{
|
||||
return HW_BG_PLTT_SIZE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_020222F8()
|
||||
{
|
||||
return (void *)HW_DB_BG_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_02022300()
|
||||
{
|
||||
return HW_DB_BG_PLTT_SIZE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_02022308()
|
||||
{
|
||||
return (void *)HW_OBJ_PLTT;
|
||||
}
|
||||
|
||||
THUMB_FUNC void * FUN_02022310()
|
||||
{
|
||||
return (void *)HW_DB_OBJ_PLTT;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,357 +1,357 @@
|
|||
#include "global.h"
|
||||
#include "pokedex.h"
|
||||
#include "unk_02029FB0.h"
|
||||
|
||||
const u16 UNK_020EEA7C[] = {
|
||||
0x0001, // 00
|
||||
0x0001, // 01
|
||||
0x0001, // 02
|
||||
0x0001, // 03
|
||||
0x0001, // 04
|
||||
0x0001, // 05
|
||||
0x0002, // 06
|
||||
0x0002, // 07
|
||||
0x0002, // 08
|
||||
0x0002, // 09
|
||||
0x0003, // 10
|
||||
0x0003, // 11
|
||||
0x0003, // 12
|
||||
0x0007, // 13
|
||||
0x0007, // 14
|
||||
0x0007, // 15
|
||||
0x000A, // 16
|
||||
0x000A, // 17
|
||||
0x000B, // 18
|
||||
0x000B, // 19
|
||||
0x000B, // 20
|
||||
0x000B, // 21
|
||||
0x0014, // 22
|
||||
0x001E, // 23
|
||||
0x0023, // 24
|
||||
0x0028, // 25
|
||||
0x01F4, // 26
|
||||
0x2710, // 27
|
||||
0x001E, // 28
|
||||
0x001E, // 29
|
||||
0x0002, // 30
|
||||
0x0005, // 31
|
||||
0x0001, // 32
|
||||
0x0001, // 33
|
||||
0x0005, // 34
|
||||
0x0003, // 35
|
||||
0x0001, // 36
|
||||
0x0001, // 37
|
||||
};
|
||||
|
||||
u8 UNK_02105CD8[] = {
|
||||
TRUE, // 000
|
||||
TRUE, // 001
|
||||
FALSE, // 002
|
||||
TRUE, // 003
|
||||
TRUE, // 004
|
||||
TRUE, // 005
|
||||
TRUE, // 006
|
||||
TRUE, // 007
|
||||
TRUE, // 008
|
||||
FALSE, // 009
|
||||
FALSE, // 010
|
||||
FALSE, // 011
|
||||
TRUE, // 012
|
||||
TRUE, // 013
|
||||
TRUE, // 014
|
||||
TRUE, // 015
|
||||
TRUE, // 016
|
||||
TRUE, // 017
|
||||
TRUE, // 018
|
||||
TRUE, // 019
|
||||
TRUE, // 020
|
||||
TRUE, // 021
|
||||
TRUE, // 022
|
||||
TRUE, // 023
|
||||
TRUE, // 024
|
||||
TRUE, // 025
|
||||
TRUE, // 026
|
||||
TRUE, // 027
|
||||
TRUE, // 028
|
||||
TRUE, // 029
|
||||
TRUE, // 030
|
||||
TRUE, // 031
|
||||
TRUE, // 032
|
||||
TRUE, // 033
|
||||
TRUE, // 034
|
||||
TRUE, // 035
|
||||
TRUE, // 036
|
||||
TRUE, // 037
|
||||
TRUE, // 038
|
||||
TRUE, // 039
|
||||
TRUE, // 040
|
||||
FALSE, // 041
|
||||
FALSE, // 042
|
||||
FALSE, // 043
|
||||
|
||||
TRUE, // 044
|
||||
TRUE, // 045
|
||||
FALSE, // 046
|
||||
TRUE, // 047
|
||||
TRUE, // 048
|
||||
FALSE, // 049
|
||||
FALSE, // 050
|
||||
FALSE, // 051
|
||||
FALSE, // 052
|
||||
FALSE, // 053
|
||||
FALSE, // 054
|
||||
FALSE, // 055
|
||||
FALSE, // 056
|
||||
FALSE, // 057
|
||||
FALSE, // 058
|
||||
FALSE, // 059
|
||||
FALSE, // 060
|
||||
FALSE, // 061
|
||||
FALSE, // 062
|
||||
FALSE, // 063
|
||||
FALSE, // 064
|
||||
FALSE, // 065
|
||||
FALSE, // 066
|
||||
TRUE, // 067
|
||||
FALSE, // 068
|
||||
FALSE, // 069
|
||||
FALSE, // 070
|
||||
FALSE, // 071
|
||||
FALSE, // 072
|
||||
FALSE, // 073
|
||||
FALSE, // 074
|
||||
FALSE, // 075
|
||||
FALSE, // 076
|
||||
FALSE, // 077
|
||||
FALSE, // 078
|
||||
FALSE, // 079
|
||||
FALSE, // 080
|
||||
FALSE, // 081
|
||||
FALSE, // 082
|
||||
FALSE, // 083
|
||||
FALSE, // 084
|
||||
TRUE, // 085
|
||||
FALSE, // 086
|
||||
FALSE, // 087
|
||||
FALSE, // 088
|
||||
FALSE, // 089
|
||||
FALSE, // 090
|
||||
FALSE, // 091
|
||||
FALSE, // 092
|
||||
FALSE, // 093
|
||||
FALSE, // 094
|
||||
FALSE, // 095
|
||||
FALSE, // 096
|
||||
FALSE, // 097
|
||||
FALSE, // 098
|
||||
FALSE, // 099
|
||||
FALSE, // 100
|
||||
FALSE, // 101
|
||||
FALSE, // 102
|
||||
FALSE, // 103
|
||||
FALSE, // 104
|
||||
FALSE, // 105
|
||||
FALSE, // 106
|
||||
FALSE, // 107
|
||||
FALSE, // 108
|
||||
FALSE, // 109
|
||||
FALSE, // 110
|
||||
FALSE, // 111
|
||||
FALSE, // 112
|
||||
FALSE, // 113
|
||||
FALSE, // 114
|
||||
FALSE, // 115
|
||||
FALSE, // 116
|
||||
FALSE, // 117
|
||||
FALSE, // 118
|
||||
FALSE, // 119
|
||||
FALSE, // 120
|
||||
FALSE, // 121
|
||||
};
|
||||
|
||||
static inline s32 GetOffsetToUnk00(s32 a0)
|
||||
{
|
||||
return a0;
|
||||
}
|
||||
|
||||
static inline s32 GetOffsetToUnkB0(s32 a0)
|
||||
{
|
||||
return a0 - 44;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 Sav2_GameStats_sizeof(void)
|
||||
{
|
||||
return sizeof(struct GameStats);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Sav2_GameStats_init(struct GameStats * ptr)
|
||||
{
|
||||
MI_CpuClear32(ptr, sizeof(struct GameStats));
|
||||
}
|
||||
|
||||
THUMB_FUNC struct GameStats * Sav2_GameStats_get(struct SaveBlock2 * sav2)
|
||||
{
|
||||
return SavArray_get(sav2, 20);
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetValue(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
if (a1 < 44)
|
||||
{
|
||||
return ptr->unk_00[GetOffsetToUnk00(a1)];
|
||||
}
|
||||
else if (a1 < 121)
|
||||
{
|
||||
return ptr->unk_B0[GetOffsetToUnkB0(a1)];
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_SetValue(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
if (a1 < 44)
|
||||
{
|
||||
ptr->unk_00[GetOffsetToUnk00(a1)] = a2;
|
||||
}
|
||||
else if (a1 < 121)
|
||||
{
|
||||
ptr->unk_B0[GetOffsetToUnkB0(a1)] = a2;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
return GameStats_GetValue(ptr, a1);
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetMaxValue(s32 a0)
|
||||
{
|
||||
if (a0 < 44)
|
||||
{
|
||||
if (UNK_02105CD8[a0])
|
||||
return 999999999;
|
||||
else
|
||||
return 999999;
|
||||
}
|
||||
else if (a0 < 121)
|
||||
{
|
||||
if (UNK_02105CD8[a0])
|
||||
return 0xFFFF;
|
||||
else
|
||||
return 9999;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 GameStats_GetStdInc(s32 a0)
|
||||
{
|
||||
return UNK_020EEA7C[a0];
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_SetCapped(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r2 = GameStats_GetMaxValue(a1);
|
||||
if (a2 < r2)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, a2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_UpdateBounded(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r0 = GameStats_GetValue(ptr, a1);
|
||||
if (a2 > r4)
|
||||
{
|
||||
a2 = r4;
|
||||
}
|
||||
if (r0 < a2)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, a2);
|
||||
}
|
||||
else if (r0 > r4)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r4);
|
||||
}
|
||||
else
|
||||
{
|
||||
return r0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_Inc(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r2 = GameStats_GetValue(ptr, a1) + 1;
|
||||
if (r2 < r4)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r4);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_Add(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r6 = GameStats_GetMaxValue(a1);
|
||||
u32 r2 = GameStats_GetValue(ptr, a1);
|
||||
r2 += a2;
|
||||
if (r2 < r6)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r6);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetCapped(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r0 = GameStats_GetValue(ptr, a1);
|
||||
if (r0 <= r4)
|
||||
r4 = r0;
|
||||
return r4;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_AddSpecial(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
GF_ASSERT(a1 < 38);
|
||||
u32 r0 = GameStats_GetCapped(ptr, 0) + GameStats_GetStdInc(a1);
|
||||
if (r0 > 99999999)
|
||||
{
|
||||
return GameStats_SetCapped(ptr, 0, 99999999);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_Add(ptr, 0, GameStats_GetStdInc(a1));
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetStat0(struct GameStats * ptr)
|
||||
{
|
||||
return GameStats_GetCapped(ptr, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GameStats_IncSpeciesCaught(struct GameStats * ptr, struct Pokedex * pokedex, u16 species)
|
||||
{
|
||||
if (!Pokedex_CheckMonCaughtFlag(pokedex, species))
|
||||
{
|
||||
GameStats_AddSpecial(ptr, 22);
|
||||
}
|
||||
}
|
||||
#include "global.h"
|
||||
#include "pokedex.h"
|
||||
#include "unk_02029FB0.h"
|
||||
|
||||
const u16 UNK_020EEA7C[] = {
|
||||
0x0001, // 00
|
||||
0x0001, // 01
|
||||
0x0001, // 02
|
||||
0x0001, // 03
|
||||
0x0001, // 04
|
||||
0x0001, // 05
|
||||
0x0002, // 06
|
||||
0x0002, // 07
|
||||
0x0002, // 08
|
||||
0x0002, // 09
|
||||
0x0003, // 10
|
||||
0x0003, // 11
|
||||
0x0003, // 12
|
||||
0x0007, // 13
|
||||
0x0007, // 14
|
||||
0x0007, // 15
|
||||
0x000A, // 16
|
||||
0x000A, // 17
|
||||
0x000B, // 18
|
||||
0x000B, // 19
|
||||
0x000B, // 20
|
||||
0x000B, // 21
|
||||
0x0014, // 22
|
||||
0x001E, // 23
|
||||
0x0023, // 24
|
||||
0x0028, // 25
|
||||
0x01F4, // 26
|
||||
0x2710, // 27
|
||||
0x001E, // 28
|
||||
0x001E, // 29
|
||||
0x0002, // 30
|
||||
0x0005, // 31
|
||||
0x0001, // 32
|
||||
0x0001, // 33
|
||||
0x0005, // 34
|
||||
0x0003, // 35
|
||||
0x0001, // 36
|
||||
0x0001, // 37
|
||||
};
|
||||
|
||||
u8 UNK_02105CD8[] = {
|
||||
TRUE, // 000
|
||||
TRUE, // 001
|
||||
FALSE, // 002
|
||||
TRUE, // 003
|
||||
TRUE, // 004
|
||||
TRUE, // 005
|
||||
TRUE, // 006
|
||||
TRUE, // 007
|
||||
TRUE, // 008
|
||||
FALSE, // 009
|
||||
FALSE, // 010
|
||||
FALSE, // 011
|
||||
TRUE, // 012
|
||||
TRUE, // 013
|
||||
TRUE, // 014
|
||||
TRUE, // 015
|
||||
TRUE, // 016
|
||||
TRUE, // 017
|
||||
TRUE, // 018
|
||||
TRUE, // 019
|
||||
TRUE, // 020
|
||||
TRUE, // 021
|
||||
TRUE, // 022
|
||||
TRUE, // 023
|
||||
TRUE, // 024
|
||||
TRUE, // 025
|
||||
TRUE, // 026
|
||||
TRUE, // 027
|
||||
TRUE, // 028
|
||||
TRUE, // 029
|
||||
TRUE, // 030
|
||||
TRUE, // 031
|
||||
TRUE, // 032
|
||||
TRUE, // 033
|
||||
TRUE, // 034
|
||||
TRUE, // 035
|
||||
TRUE, // 036
|
||||
TRUE, // 037
|
||||
TRUE, // 038
|
||||
TRUE, // 039
|
||||
TRUE, // 040
|
||||
FALSE, // 041
|
||||
FALSE, // 042
|
||||
FALSE, // 043
|
||||
|
||||
TRUE, // 044
|
||||
TRUE, // 045
|
||||
FALSE, // 046
|
||||
TRUE, // 047
|
||||
TRUE, // 048
|
||||
FALSE, // 049
|
||||
FALSE, // 050
|
||||
FALSE, // 051
|
||||
FALSE, // 052
|
||||
FALSE, // 053
|
||||
FALSE, // 054
|
||||
FALSE, // 055
|
||||
FALSE, // 056
|
||||
FALSE, // 057
|
||||
FALSE, // 058
|
||||
FALSE, // 059
|
||||
FALSE, // 060
|
||||
FALSE, // 061
|
||||
FALSE, // 062
|
||||
FALSE, // 063
|
||||
FALSE, // 064
|
||||
FALSE, // 065
|
||||
FALSE, // 066
|
||||
TRUE, // 067
|
||||
FALSE, // 068
|
||||
FALSE, // 069
|
||||
FALSE, // 070
|
||||
FALSE, // 071
|
||||
FALSE, // 072
|
||||
FALSE, // 073
|
||||
FALSE, // 074
|
||||
FALSE, // 075
|
||||
FALSE, // 076
|
||||
FALSE, // 077
|
||||
FALSE, // 078
|
||||
FALSE, // 079
|
||||
FALSE, // 080
|
||||
FALSE, // 081
|
||||
FALSE, // 082
|
||||
FALSE, // 083
|
||||
FALSE, // 084
|
||||
TRUE, // 085
|
||||
FALSE, // 086
|
||||
FALSE, // 087
|
||||
FALSE, // 088
|
||||
FALSE, // 089
|
||||
FALSE, // 090
|
||||
FALSE, // 091
|
||||
FALSE, // 092
|
||||
FALSE, // 093
|
||||
FALSE, // 094
|
||||
FALSE, // 095
|
||||
FALSE, // 096
|
||||
FALSE, // 097
|
||||
FALSE, // 098
|
||||
FALSE, // 099
|
||||
FALSE, // 100
|
||||
FALSE, // 101
|
||||
FALSE, // 102
|
||||
FALSE, // 103
|
||||
FALSE, // 104
|
||||
FALSE, // 105
|
||||
FALSE, // 106
|
||||
FALSE, // 107
|
||||
FALSE, // 108
|
||||
FALSE, // 109
|
||||
FALSE, // 110
|
||||
FALSE, // 111
|
||||
FALSE, // 112
|
||||
FALSE, // 113
|
||||
FALSE, // 114
|
||||
FALSE, // 115
|
||||
FALSE, // 116
|
||||
FALSE, // 117
|
||||
FALSE, // 118
|
||||
FALSE, // 119
|
||||
FALSE, // 120
|
||||
FALSE, // 121
|
||||
};
|
||||
|
||||
static inline s32 GetOffsetToUnk00(s32 a0)
|
||||
{
|
||||
return a0;
|
||||
}
|
||||
|
||||
static inline s32 GetOffsetToUnkB0(s32 a0)
|
||||
{
|
||||
return a0 - 44;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 Sav2_GameStats_sizeof(void)
|
||||
{
|
||||
return sizeof(struct GameStats);
|
||||
}
|
||||
|
||||
THUMB_FUNC void Sav2_GameStats_init(struct GameStats * ptr)
|
||||
{
|
||||
MI_CpuClear32(ptr, sizeof(struct GameStats));
|
||||
}
|
||||
|
||||
THUMB_FUNC struct GameStats * Sav2_GameStats_get(struct SaveBlock2 * sav2)
|
||||
{
|
||||
return SavArray_get(sav2, 20);
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetValue(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
if (a1 < 44)
|
||||
{
|
||||
return ptr->unk_00[GetOffsetToUnk00(a1)];
|
||||
}
|
||||
else if (a1 < 121)
|
||||
{
|
||||
return ptr->unk_B0[GetOffsetToUnkB0(a1)];
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_SetValue(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
if (a1 < 44)
|
||||
{
|
||||
ptr->unk_00[GetOffsetToUnk00(a1)] = a2;
|
||||
}
|
||||
else if (a1 < 121)
|
||||
{
|
||||
ptr->unk_B0[GetOffsetToUnkB0(a1)] = a2;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
return GameStats_GetValue(ptr, a1);
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetMaxValue(s32 a0)
|
||||
{
|
||||
if (a0 < 44)
|
||||
{
|
||||
if (UNK_02105CD8[a0])
|
||||
return 999999999;
|
||||
else
|
||||
return 999999;
|
||||
}
|
||||
else if (a0 < 121)
|
||||
{
|
||||
if (UNK_02105CD8[a0])
|
||||
return 0xFFFF;
|
||||
else
|
||||
return 9999;
|
||||
}
|
||||
else
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 GameStats_GetStdInc(s32 a0)
|
||||
{
|
||||
return UNK_020EEA7C[a0];
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_SetCapped(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r2 = GameStats_GetMaxValue(a1);
|
||||
if (a2 < r2)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, a2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_UpdateBounded(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r0 = GameStats_GetValue(ptr, a1);
|
||||
if (a2 > r4)
|
||||
{
|
||||
a2 = r4;
|
||||
}
|
||||
if (r0 < a2)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, a2);
|
||||
}
|
||||
else if (r0 > r4)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r4);
|
||||
}
|
||||
else
|
||||
{
|
||||
return r0;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_Inc(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r2 = GameStats_GetValue(ptr, a1) + 1;
|
||||
if (r2 < r4)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r4);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_Add(struct GameStats * ptr, s32 a1, u32 a2)
|
||||
{
|
||||
u32 r6 = GameStats_GetMaxValue(a1);
|
||||
u32 r2 = GameStats_GetValue(ptr, a1);
|
||||
r2 += a2;
|
||||
if (r2 < r6)
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r2);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_SetValue(ptr, a1, r6);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetCapped(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
u32 r4 = GameStats_GetMaxValue(a1);
|
||||
u32 r0 = GameStats_GetValue(ptr, a1);
|
||||
if (r0 <= r4)
|
||||
r4 = r0;
|
||||
return r4;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_AddSpecial(struct GameStats * ptr, s32 a1)
|
||||
{
|
||||
GF_ASSERT(a1 < 38);
|
||||
u32 r0 = GameStats_GetCapped(ptr, 0) + GameStats_GetStdInc(a1);
|
||||
if (r0 > 99999999)
|
||||
{
|
||||
return GameStats_SetCapped(ptr, 0, 99999999);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GameStats_Add(ptr, 0, GameStats_GetStdInc(a1));
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 GameStats_GetStat0(struct GameStats * ptr)
|
||||
{
|
||||
return GameStats_GetCapped(ptr, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC void GameStats_IncSpeciesCaught(struct GameStats * ptr, struct Pokedex * pokedex, u16 species)
|
||||
{
|
||||
if (!Pokedex_CheckMonCaughtFlag(pokedex, species))
|
||||
{
|
||||
GameStats_AddSpecial(ptr, 22);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,135 +1,135 @@
|
|||
#include "global.h"
|
||||
#include "unk_0204AF24.h"
|
||||
|
||||
extern void FUN_02037394(struct FieldSystem *);
|
||||
extern u32 FUN_0200E308(void);
|
||||
extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id);
|
||||
extern void MOD05_021E331C(struct FieldSystem *);
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AF24(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AF3C(struct TaskManager *taskManager)
|
||||
{
|
||||
struct FieldSystem * fieldSystem= FUN_02046528(taskManager);
|
||||
if(!FUN_0203739C(fieldSystem))
|
||||
{
|
||||
GF_ASSERT(FALSE);
|
||||
return;
|
||||
}
|
||||
FUN_02037394(fieldSystem);
|
||||
FUN_0204640C(taskManager, &FUN_0204AF24, NULL);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AF6C(struct TaskManager *taskManager)
|
||||
{
|
||||
if(FUN_020464A4(FUN_02046528(taskManager)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AF84(struct TaskManager *taskManager)
|
||||
{
|
||||
struct FieldSystem *fieldSystem = FUN_02046528(taskManager);
|
||||
if(FUN_0203739C(fieldSystem))
|
||||
{
|
||||
GF_ASSERT(FALSE);
|
||||
return;
|
||||
}
|
||||
FUN_0204649C(fieldSystem);
|
||||
FUN_0204640C(taskManager, &FUN_0204AF6C, NULL);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AFB4(struct TaskManager *taskManager)
|
||||
{
|
||||
#pragma unused(arg0)
|
||||
if(FUN_0200E308())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AFC8(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
FUN_0200E1D0(0, 0, 0, 0, 6, 1, 4);
|
||||
FUN_0204640C(taskManager, &FUN_0204AFB4, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B00C(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
FUN_0200E1D0(0, 1, 1, 0, 6, 1, 4);
|
||||
FUN_0204640C(taskManager, FUN_0204AFB4, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204B050(struct TaskManager *taskManager)
|
||||
{
|
||||
u32 * r4 = FUN_02046530(taskManager);
|
||||
switch(r4[0])
|
||||
{
|
||||
case 0:
|
||||
FUN_0204AFC8(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 1:
|
||||
FUN_0204AF3C(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 2:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B090(struct TaskManager *taskManager)
|
||||
{
|
||||
FUN_0204640C(taskManager, &FUN_0204B050, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204B0A0(struct TaskManager *taskManager)
|
||||
{
|
||||
u32 * r4 = FUN_02046530(taskManager);
|
||||
struct FieldSystem *fieldSystem = FUN_02046528(taskManager);
|
||||
switch(r4[0])
|
||||
{
|
||||
case 0:
|
||||
FUN_0204AF84(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 1:
|
||||
MOD05_021E331C(fieldSystem);
|
||||
FUN_0204B00C(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 2:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B0E8(struct TaskManager *taskManager)
|
||||
{
|
||||
FUN_0204640C(taskManager, &FUN_0204B0A0, 0);
|
||||
}
|
||||
#include "global.h"
|
||||
#include "unk_0204AF24.h"
|
||||
|
||||
extern void FUN_02037394(struct FieldSystem *);
|
||||
extern u32 FUN_0200E308(void);
|
||||
extern void FUN_0200E1D0(u32 param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 heap_id);
|
||||
extern void MOD05_021E331C(struct FieldSystem *);
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AF24(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AF3C(struct TaskManager *taskManager)
|
||||
{
|
||||
struct FieldSystem * fieldSystem= FUN_02046528(taskManager);
|
||||
if(!FUN_0203739C(fieldSystem))
|
||||
{
|
||||
GF_ASSERT(FALSE);
|
||||
return;
|
||||
}
|
||||
FUN_02037394(fieldSystem);
|
||||
FUN_0204640C(taskManager, &FUN_0204AF24, NULL);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AF6C(struct TaskManager *taskManager)
|
||||
{
|
||||
if(FUN_020464A4(FUN_02046528(taskManager)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AF84(struct TaskManager *taskManager)
|
||||
{
|
||||
struct FieldSystem *fieldSystem = FUN_02046528(taskManager);
|
||||
if(FUN_0203739C(fieldSystem))
|
||||
{
|
||||
GF_ASSERT(FALSE);
|
||||
return;
|
||||
}
|
||||
FUN_0204649C(fieldSystem);
|
||||
FUN_0204640C(taskManager, &FUN_0204AF6C, NULL);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204AFB4(struct TaskManager *taskManager)
|
||||
{
|
||||
#pragma unused(arg0)
|
||||
if(FUN_0200E308())
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204AFC8(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
FUN_0200E1D0(0, 0, 0, 0, 6, 1, 4);
|
||||
FUN_0204640C(taskManager, &FUN_0204AFB4, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B00C(struct TaskManager *taskManager)
|
||||
{
|
||||
if(!FUN_0203739C(FUN_02046528(taskManager)))
|
||||
{
|
||||
GF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
FUN_0200E1D0(0, 1, 1, 0, 6, 1, 4);
|
||||
FUN_0204640C(taskManager, FUN_0204AFB4, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204B050(struct TaskManager *taskManager)
|
||||
{
|
||||
u32 * r4 = FUN_02046530(taskManager);
|
||||
switch(r4[0])
|
||||
{
|
||||
case 0:
|
||||
FUN_0204AFC8(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 1:
|
||||
FUN_0204AF3C(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 2:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B090(struct TaskManager *taskManager)
|
||||
{
|
||||
FUN_0204640C(taskManager, &FUN_0204B050, 0);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0204B0A0(struct TaskManager *taskManager)
|
||||
{
|
||||
u32 * r4 = FUN_02046530(taskManager);
|
||||
struct FieldSystem *fieldSystem = FUN_02046528(taskManager);
|
||||
switch(r4[0])
|
||||
{
|
||||
case 0:
|
||||
FUN_0204AF84(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 1:
|
||||
MOD05_021E331C(fieldSystem);
|
||||
FUN_0204B00C(taskManager);
|
||||
r4[0]++;
|
||||
break;
|
||||
case 2:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0204B0E8(struct TaskManager *taskManager)
|
||||
{
|
||||
FUN_0204640C(taskManager, &FUN_0204B0A0, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,438 +1,438 @@
|
|||
#include "global.h"
|
||||
#include "proto.h"
|
||||
#include "unk_0205EC84.h"
|
||||
#include "constants/sndseq.h"
|
||||
#include "constants/maps.h"
|
||||
|
||||
static THUMB_FUNC void _flag_set(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
SetFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC void _flag_clear(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
ClearFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC BOOL _flag_check(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
return CheckFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC BOOL _flag_op(struct ScriptState * state, u32 op, u32 flag_id)
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
case 1:
|
||||
_flag_set(state, (u16)flag_id);
|
||||
break;
|
||||
case 0:
|
||||
_flag_clear(state, (u16)flag_id);
|
||||
break;
|
||||
case 2:
|
||||
return _flag_check(state, (u16)flag_id);
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ECD4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x960);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ECE0(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x960);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ECEC(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x98D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ECFC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x964);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED0C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x964);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED1C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED2C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED3C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED4C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED5C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED6C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED7C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED8C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED9C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDAC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96E);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDBC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96F);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDCC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x970);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDD8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x971);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDE8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x972);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDF8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x973);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EE08(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
_flag_set(state, 0x968);
|
||||
break;
|
||||
case 1:
|
||||
_flag_set(state, 0x969);
|
||||
break;
|
||||
case 2:
|
||||
_flag_set(state, 0x96A);
|
||||
break;
|
||||
case 3:
|
||||
_flag_set(state, 0x96B);
|
||||
break;
|
||||
case 4:
|
||||
_flag_set(state, 0x96C);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205EE60(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
return _flag_check(state, 0x968);
|
||||
case 1:
|
||||
return _flag_check(state, 0x969);
|
||||
case 2:
|
||||
return _flag_check(state, 0x96A);
|
||||
case 3:
|
||||
return _flag_check(state, 0x96B);
|
||||
case 4:
|
||||
return _flag_check(state, 0x96C);
|
||||
}
|
||||
// UB: No return value
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
ret = _flag_check(state, 0x97F);
|
||||
break;
|
||||
case 2:
|
||||
ret = _flag_check(state, 0x980);
|
||||
break;
|
||||
case 3:
|
||||
ret = _flag_check(state, 0x981);
|
||||
break;
|
||||
case 4:
|
||||
ret = _flag_check(state, 0x982);
|
||||
break;
|
||||
case 5:
|
||||
ret = _flag_check(state, 0x983);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 FUN_0205EF20(struct ScriptState * state, s32 a1)
|
||||
{
|
||||
s32 ret = 0;
|
||||
switch (a1)
|
||||
{
|
||||
case MAP_D28R0101:
|
||||
if (_flag_check(state, 0x984) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D28R0103:
|
||||
if (_flag_check(state, 0x984) == TRUE)
|
||||
ret = SEQ_D_RYAYHY;
|
||||
break;
|
||||
case MAP_D27R0102:
|
||||
if (_flag_check(state, 0x98E) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D29R0102:
|
||||
if (_flag_check(state, 0x98F) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D10R0101:
|
||||
if (_flag_check(state, 0x995) == TRUE)
|
||||
ret = SEQ_D_SAFARI;
|
||||
break;
|
||||
case MAP_T02R0101:
|
||||
if (_flag_check(state, 0x993) == TRUE)
|
||||
ret = SEQ_OPENING2;
|
||||
break;
|
||||
case MAP_D26R0101:
|
||||
case MAP_D26R0102:
|
||||
case MAP_D26R0103:
|
||||
case MAP_D26R0104:
|
||||
case MAP_D26R0105:
|
||||
case MAP_D26R0106:
|
||||
case MAP_D26R0107:
|
||||
case MAP_D26R0108:
|
||||
if (_flag_check(state, 0x985) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_CITY07_D;
|
||||
else
|
||||
ret = SEQ_CITY07_N;
|
||||
}
|
||||
else if (a1 == MAP_D26R0101)
|
||||
{
|
||||
if (_flag_check(state, 0x986) == TRUE)
|
||||
ret = SEQ_D_AGITO;
|
||||
}
|
||||
break;
|
||||
case MAP_C04R0201:
|
||||
case MAP_C04R0202:
|
||||
case MAP_C04R0203:
|
||||
case MAP_C04R0204:
|
||||
if (_flag_check(state, 0x987) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_CITY04_D;
|
||||
else
|
||||
ret = SEQ_CITY04_N;
|
||||
}
|
||||
break;
|
||||
case MAP_D02R0101:
|
||||
if (_flag_check(state, 0x988) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_ROAD_C_D;
|
||||
else
|
||||
ret = SEQ_ROAD_C_N;
|
||||
}
|
||||
break;
|
||||
case MAP_D13R0101:
|
||||
if (_flag_check(state, 0x989) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_TOWN03_D;
|
||||
else
|
||||
ret = SEQ_TOWN03_N;
|
||||
}
|
||||
break;
|
||||
case MAP_R224:
|
||||
if (_flag_check(state, 0x98A) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_TOWN03_D;
|
||||
else
|
||||
ret = SEQ_TOWN03_N;
|
||||
}
|
||||
break;
|
||||
case MAP_C10R0111:
|
||||
if (_flag_check(state, 0x98B) == TRUE)
|
||||
ret = SEQ_SILENCE_FIELD;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
THUMB_FUNC void FUN_0205F154(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F164(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F174(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F184(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x978);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F194(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x992);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1A4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97D);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1B4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97E);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1C4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1D4(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1E4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1F4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F204(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F214(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F224(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F234(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F244(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F254(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x994);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F264(struct ScriptState * state, u32 op)
|
||||
{
|
||||
return _flag_op(state, op, 0x962);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F274(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F284(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F294(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F2A4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F2B4(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2C4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2D4(struct ScriptState * state, u32 op)
|
||||
{
|
||||
return _flag_op(state, op, 0x963);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id)
|
||||
{
|
||||
GF_ASSERT(flag_id < 69);
|
||||
return _flag_op(state, op, 0x9B0 + flag_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F304(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x98C);
|
||||
}
|
||||
#include "global.h"
|
||||
#include "proto.h"
|
||||
#include "unk_0205EC84.h"
|
||||
#include "constants/sndseq.h"
|
||||
#include "constants/maps.h"
|
||||
|
||||
static THUMB_FUNC void _flag_set(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
SetFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC void _flag_clear(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
ClearFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC BOOL _flag_check(struct ScriptState * state, u16 flag_id)
|
||||
{
|
||||
return CheckFlagInArray(state, flag_id);
|
||||
}
|
||||
|
||||
static THUMB_FUNC BOOL _flag_op(struct ScriptState * state, u32 op, u32 flag_id)
|
||||
{
|
||||
switch (op)
|
||||
{
|
||||
case 1:
|
||||
_flag_set(state, (u16)flag_id);
|
||||
break;
|
||||
case 0:
|
||||
_flag_clear(state, (u16)flag_id);
|
||||
break;
|
||||
case 2:
|
||||
return _flag_check(state, (u16)flag_id);
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ECD4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x960);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ECE0(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x960);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ECEC(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x98D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ECFC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x964);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED0C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x964);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED1C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED2C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED3C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x961);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED4C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED5C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED6C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x965);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED7C(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205ED8C(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205ED9C(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x96D);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDAC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96E);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDBC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x96F);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDCC(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x970);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDD8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x971);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDE8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x972);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EDF8(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x973);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205EE08(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
_flag_set(state, 0x968);
|
||||
break;
|
||||
case 1:
|
||||
_flag_set(state, 0x969);
|
||||
break;
|
||||
case 2:
|
||||
_flag_set(state, 0x96A);
|
||||
break;
|
||||
case 3:
|
||||
_flag_set(state, 0x96B);
|
||||
break;
|
||||
case 4:
|
||||
_flag_set(state, 0x96C);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205EE60(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
return _flag_check(state, 0x968);
|
||||
case 1:
|
||||
return _flag_check(state, 0x969);
|
||||
case 2:
|
||||
return _flag_check(state, 0x96A);
|
||||
case 3:
|
||||
return _flag_check(state, 0x96B);
|
||||
case 4:
|
||||
return _flag_check(state, 0x96C);
|
||||
}
|
||||
// UB: No return value
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205EEB8(struct ScriptState * state, u32 a1)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
switch (a1)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
ret = _flag_check(state, 0x97F);
|
||||
break;
|
||||
case 2:
|
||||
ret = _flag_check(state, 0x980);
|
||||
break;
|
||||
case 3:
|
||||
ret = _flag_check(state, 0x981);
|
||||
break;
|
||||
case 4:
|
||||
ret = _flag_check(state, 0x982);
|
||||
break;
|
||||
case 5:
|
||||
ret = _flag_check(state, 0x983);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC s32 FUN_0205EF20(struct ScriptState * state, s32 a1)
|
||||
{
|
||||
s32 ret = 0;
|
||||
switch (a1)
|
||||
{
|
||||
case MAP_D28R0101:
|
||||
if (_flag_check(state, 0x984) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D28R0103:
|
||||
if (_flag_check(state, 0x984) == TRUE)
|
||||
ret = SEQ_D_RYAYHY;
|
||||
break;
|
||||
case MAP_D27R0102:
|
||||
if (_flag_check(state, 0x98E) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D29R0102:
|
||||
if (_flag_check(state, 0x98F) == TRUE)
|
||||
ret = SEQ_D_LAKE;
|
||||
break;
|
||||
case MAP_D10R0101:
|
||||
if (_flag_check(state, 0x995) == TRUE)
|
||||
ret = SEQ_D_SAFARI;
|
||||
break;
|
||||
case MAP_T02R0101:
|
||||
if (_flag_check(state, 0x993) == TRUE)
|
||||
ret = SEQ_OPENING2;
|
||||
break;
|
||||
case MAP_D26R0101:
|
||||
case MAP_D26R0102:
|
||||
case MAP_D26R0103:
|
||||
case MAP_D26R0104:
|
||||
case MAP_D26R0105:
|
||||
case MAP_D26R0106:
|
||||
case MAP_D26R0107:
|
||||
case MAP_D26R0108:
|
||||
if (_flag_check(state, 0x985) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_CITY07_D;
|
||||
else
|
||||
ret = SEQ_CITY07_N;
|
||||
}
|
||||
else if (a1 == MAP_D26R0101)
|
||||
{
|
||||
if (_flag_check(state, 0x986) == TRUE)
|
||||
ret = SEQ_D_AGITO;
|
||||
}
|
||||
break;
|
||||
case MAP_C04R0201:
|
||||
case MAP_C04R0202:
|
||||
case MAP_C04R0203:
|
||||
case MAP_C04R0204:
|
||||
if (_flag_check(state, 0x987) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_CITY04_D;
|
||||
else
|
||||
ret = SEQ_CITY04_N;
|
||||
}
|
||||
break;
|
||||
case MAP_D02R0101:
|
||||
if (_flag_check(state, 0x988) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_ROAD_C_D;
|
||||
else
|
||||
ret = SEQ_ROAD_C_N;
|
||||
}
|
||||
break;
|
||||
case MAP_D13R0101:
|
||||
if (_flag_check(state, 0x989) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_TOWN03_D;
|
||||
else
|
||||
ret = SEQ_TOWN03_N;
|
||||
}
|
||||
break;
|
||||
case MAP_R224:
|
||||
if (_flag_check(state, 0x98A) == TRUE)
|
||||
{
|
||||
if (!IsNighttime())
|
||||
ret = SEQ_TOWN03_D;
|
||||
else
|
||||
ret = SEQ_TOWN03_N;
|
||||
}
|
||||
break;
|
||||
case MAP_C10R0111:
|
||||
if (_flag_check(state, 0x98B) == TRUE)
|
||||
ret = SEQ_SILENCE_FIELD;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
THUMB_FUNC void FUN_0205F154(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F164(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F174(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x966);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F184(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x978);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F194(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x992);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1A4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97D);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1B4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97E);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1C4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1D4(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F1E4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97C);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F1F4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F204(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F214(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x967);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F224(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F234(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F244(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x979);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F254(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x994);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F264(struct ScriptState * state, u32 op)
|
||||
{
|
||||
return _flag_op(state, op, 0x962);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F274(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F284(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F294(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97A);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F2A4(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F2B4(struct ScriptState * state)
|
||||
{
|
||||
_flag_clear(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2C4(struct ScriptState * state)
|
||||
{
|
||||
return _flag_check(state, 0x97B);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2D4(struct ScriptState * state, u32 op)
|
||||
{
|
||||
return _flag_op(state, op, 0x963);
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0205F2E4(struct ScriptState * state, u32 op, u16 flag_id)
|
||||
{
|
||||
GF_ASSERT(flag_id < 69);
|
||||
return _flag_op(state, op, 0x9B0 + flag_id);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_0205F304(struct ScriptState * state)
|
||||
{
|
||||
_flag_set(state, 0x98C);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
#include "global.h"
|
||||
#include "scrcmd.h"
|
||||
#include "unk_02025484.h"
|
||||
#include "unk_02024E64.h"
|
||||
#include "unk_02064E20.h"
|
||||
|
||||
THUMB_FUNC void FUN_02064E20(struct FieldSystem* fieldSystem)
|
||||
{
|
||||
struct unk_2025484 * r4 = (struct unk_2025484 *)FUN_02024ED8(ScriptEnvironment_GetSav2Ptr(fieldSystem));
|
||||
if((u32)FUN_020254B4(r4) == 6)
|
||||
{
|
||||
return;
|
||||
}
|
||||
FUN_02025490(r4, 6);
|
||||
u16 * ptr0 = (u16 *)FUN_020254A0(r4 , 6);
|
||||
ptr0[0] = 2;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "scrcmd.h"
|
||||
#include "unk_02025484.h"
|
||||
#include "unk_02024E64.h"
|
||||
#include "unk_02064E20.h"
|
||||
|
||||
THUMB_FUNC void FUN_02064E20(struct FieldSystem* fieldSystem)
|
||||
{
|
||||
struct unk_2025484 * r4 = (struct unk_2025484 *)FUN_02024ED8(ScriptEnvironment_GetSav2Ptr(fieldSystem));
|
||||
if((u32)FUN_020254B4(r4) == 6)
|
||||
{
|
||||
return;
|
||||
}
|
||||
FUN_02025490(r4, 6);
|
||||
u16 * ptr0 = (u16 *)FUN_020254A0(r4 , 6);
|
||||
ptr0[0] = 2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,165 +1,165 @@
|
|||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "event_data.h"
|
||||
#include "unk_02085338.h"
|
||||
|
||||
extern BOOL FUN_0205ED0C(struct ScriptState * state);
|
||||
|
||||
THUMB_FUNC struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id)
|
||||
{
|
||||
struct UnkStruct_02085338 * ret = (struct UnkStruct_02085338 *) AllocFromHeap(heap_id, sizeof(struct UnkStruct_02085338));
|
||||
ret->unk_00 = r5;
|
||||
ret->unk_01 = r7;
|
||||
ret->unk_0c = Sav2_Pokedex_get(sav2);
|
||||
ret->unk_10 = FUN_02013B5C(sav2);
|
||||
ret->unk_04 = (u8)FUN_0205ED0C(SavArray_Flags_get(sav2));
|
||||
ret->unk_05 = 0;
|
||||
ret->unk_02 = 1;
|
||||
ret->unk_03 = 0;
|
||||
ret->unk_08 = Options_GetFrame(Sav2_PlayerData_GetOptionsAddr(sav2));
|
||||
if (r5 == 2)
|
||||
{
|
||||
MailMsg_init_withBank(&ret->unk_14, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
ret->unk_1c[i] = 0xFFFF;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853A8(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
FreeToHeap(ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1)
|
||||
{
|
||||
ptr->unk_1c[0] = a1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2)
|
||||
{
|
||||
ptr->unk_1c[0] = a1;
|
||||
ptr->unk_1c[1] = a2;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1)
|
||||
{
|
||||
ptr->unk_14 = *a1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853D0(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
ptr->unk_02 = 1;
|
||||
ptr->unk_03 = 0;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853DC(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
ptr->unk_05 = 1;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_020853E4(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_02;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_020853E8(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_03;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 FUN_020853EC(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_1c[0];
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1)
|
||||
{
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
a1[1] = ptr->unk_1c[1];
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1)
|
||||
{
|
||||
return MailMsg_copy(a1, &ptr->unk_14);
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_0208540C(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_00;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085410(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_01;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_02085414(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_08;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_0c;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_10;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085420(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_04;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085424(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_05;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2)
|
||||
{
|
||||
switch (ptr->unk_00)
|
||||
{
|
||||
case 0:
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
break;
|
||||
case 1:
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
a1[1] = ptr->unk_1c[1];
|
||||
break;
|
||||
case 2:
|
||||
*a2 = ptr->unk_14;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2)
|
||||
{
|
||||
switch (ptr->unk_00)
|
||||
{
|
||||
case 0:
|
||||
return a1[0] == ptr->unk_1c[0];
|
||||
case 1:
|
||||
return a1[0] == ptr->unk_1c[0] && a1[1] == ptr->unk_1c[1];
|
||||
case 2:
|
||||
default:
|
||||
return MailMsg_compare(&ptr->unk_14, a2);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6)
|
||||
{
|
||||
r5->unk_03 = (u8)(!FUN_0208545C(r5, r4, r6) ? 1 : 0);
|
||||
r5->unk_02 = 0;
|
||||
for (int i = 0; i < 2; i++)
|
||||
r5->unk_1c[i] = r4[i];
|
||||
r5->unk_14 = *r6;
|
||||
}
|
||||
#include "global.h"
|
||||
#include "heap.h"
|
||||
#include "event_data.h"
|
||||
#include "unk_02085338.h"
|
||||
|
||||
extern BOOL FUN_0205ED0C(struct ScriptState * state);
|
||||
|
||||
THUMB_FUNC struct UnkStruct_02085338 * FUN_02085338(u8 r5, u8 r7, struct SaveBlock2 * sav2, u32 heap_id)
|
||||
{
|
||||
struct UnkStruct_02085338 * ret = (struct UnkStruct_02085338 *) AllocFromHeap(heap_id, sizeof(struct UnkStruct_02085338));
|
||||
ret->unk_00 = r5;
|
||||
ret->unk_01 = r7;
|
||||
ret->unk_0c = Sav2_Pokedex_get(sav2);
|
||||
ret->unk_10 = FUN_02013B5C(sav2);
|
||||
ret->unk_04 = (u8)FUN_0205ED0C(SavArray_Flags_get(sav2));
|
||||
ret->unk_05 = 0;
|
||||
ret->unk_02 = 1;
|
||||
ret->unk_03 = 0;
|
||||
ret->unk_08 = Options_GetFrame(Sav2_PlayerData_GetOptionsAddr(sav2));
|
||||
if (r5 == 2)
|
||||
{
|
||||
MailMsg_init_withBank(&ret->unk_14, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
ret->unk_1c[i] = 0xFFFF;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853A8(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
FreeToHeap(ptr);
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853B0(struct UnkStruct_02085338 * ptr, u16 a1)
|
||||
{
|
||||
ptr->unk_1c[0] = a1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853B4(struct UnkStruct_02085338 * ptr, u16 a1, u16 a2)
|
||||
{
|
||||
ptr->unk_1c[0] = a1;
|
||||
ptr->unk_1c[1] = a2;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853BC(struct UnkStruct_02085338 * ptr, const struct MailMessage * a1)
|
||||
{
|
||||
ptr->unk_14 = *a1;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853D0(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
ptr->unk_02 = 1;
|
||||
ptr->unk_03 = 0;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853DC(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
ptr->unk_05 = 1;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_020853E4(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_02;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_020853E8(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_03;
|
||||
}
|
||||
|
||||
THUMB_FUNC u16 FUN_020853EC(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_1c[0];
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853F0(struct UnkStruct_02085338 * ptr, u16 * a1)
|
||||
{
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
a1[1] = ptr->unk_1c[1];
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020853FC(struct UnkStruct_02085338 * ptr, struct MailMessage * a1)
|
||||
{
|
||||
return MailMsg_copy(a1, &ptr->unk_14);
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_0208540C(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_00;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085410(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_01;
|
||||
}
|
||||
|
||||
THUMB_FUNC u32 FUN_02085414(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_08;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct Pokedex * FUN_02085418(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_0c;
|
||||
}
|
||||
|
||||
THUMB_FUNC struct UnkStruct_02013B28 * FUN_0208541C(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_10;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085420(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_04;
|
||||
}
|
||||
|
||||
THUMB_FUNC u8 FUN_02085424(struct UnkStruct_02085338 * ptr)
|
||||
{
|
||||
return ptr->unk_05;
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_02085428(struct UnkStruct_02085338 * ptr, u16 * a1, struct MailMessage * a2)
|
||||
{
|
||||
switch (ptr->unk_00)
|
||||
{
|
||||
case 0:
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
break;
|
||||
case 1:
|
||||
a1[0] = ptr->unk_1c[0];
|
||||
a1[1] = ptr->unk_1c[1];
|
||||
break;
|
||||
case 2:
|
||||
*a2 = ptr->unk_14;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC BOOL FUN_0208545C(struct UnkStruct_02085338 * ptr, const u16 * a1, const struct MailMessage * a2)
|
||||
{
|
||||
switch (ptr->unk_00)
|
||||
{
|
||||
case 0:
|
||||
return a1[0] == ptr->unk_1c[0];
|
||||
case 1:
|
||||
return a1[0] == ptr->unk_1c[0] && a1[1] == ptr->unk_1c[1];
|
||||
case 2:
|
||||
default:
|
||||
return MailMsg_compare(&ptr->unk_14, a2);
|
||||
}
|
||||
}
|
||||
|
||||
THUMB_FUNC void FUN_020854A0(struct UnkStruct_02085338 * r5, u16 * r4, struct MailMessage * r6)
|
||||
{
|
||||
r5->unk_03 = (u8)(!FUN_0208545C(r5, r4, r6) ? 1 : 0);
|
||||
r5->unk_02 = 0;
|
||||
for (int i = 0; i < 2; i++)
|
||||
r5->unk_1c[i] = r4[i];
|
||||
r5->unk_14 = *r6;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#ifndef POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
#define POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
|
||||
#define FLDPSN_NONE 0
|
||||
#define FLDPSN_PSN 1
|
||||
#define FLDPSN_HEAL 2
|
||||
|
||||
#endif //POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
#ifndef POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
#define POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
|
||||
#define FLDPSN_NONE 0
|
||||
#define FLDPSN_PSN 1
|
||||
#define FLDPSN_HEAL 2
|
||||
|
||||
#endif //POKEDIAMOND_CONSTANTS_SCRIPT_POKEMON_UTIL_H
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,24 +1,24 @@
|
|||
#ifndef POKEDIAMOND_GF_GFX_LOADER_H
|
||||
#define POKEDIAMOND_GF_GFX_LOADER_H
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "filesystem.h"
|
||||
|
||||
u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id);
|
||||
void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id);
|
||||
u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy);
|
||||
u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy);
|
||||
void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy);
|
||||
void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id);
|
||||
void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id);
|
||||
void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id);
|
||||
void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id);
|
||||
void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id);
|
||||
void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id);
|
||||
void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd);
|
||||
void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p);
|
||||
|
||||
#endif //POKEDIAMOND_GF_GFX_LOADER_H
|
||||
#ifndef POKEDIAMOND_GF_GFX_LOADER_H
|
||||
#define POKEDIAMOND_GF_GFX_LOADER_H
|
||||
|
||||
#include "bg_window.h"
|
||||
#include "filesystem.h"
|
||||
|
||||
u32 GfGfxLoader_LoadCharData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 numTiles, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_LoadScrnData(NarcId narcId, s32 memberNo, struct BgConfig * unkStruct02016B94_2, u32 layer, u32 tileOffset, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_GXLoadPal(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id);
|
||||
void GfGfxLoader_GXLoadPalWithSrcOffset(NarcId narcId, s32 memberNo, enum GFPalLoadLocation location, u32 srcOffset, enum GFPalSlotOffset palSlotOffset, u32 szByte, u32 heap_id);
|
||||
u32 GfGfxLoader_LoadWholePalette(NarcId narcId, s32 memberId, u32 layer, u32 baseAddr, u32 szByte, BOOL isCompressed, u32 heap_id);
|
||||
void GfGfxLoader_PartiallyLoadPalette(NarcId narcId, s32 memberId, NNS_G2D_VRAM_TYPE vramType, u32 baseAddr, u32 heap_id, NNSG2dImagePaletteProxy * pPltProxy);
|
||||
u32 GfGfxLoader_LoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy *pImgProxy);
|
||||
void GfGfxLoader_SetObjCntFlagsAndLoadImageMapping(NarcId narcId, s32 memberId, BOOL isCompressed, u32 layer, u32 szByte, NNS_G2D_VRAM_TYPE type, u32 baseAddr, u32 heap_id, NNSG2dImageProxy * pImageProxy);
|
||||
void * GfGfxLoader_GetCharData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCharacterData ** ppCharData, u32 heap_id);
|
||||
void * GfGfxLoader_GetScrnData(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dScreenData ** ppScrData, u32 heap_id);
|
||||
void * GfGfxLoader_GetPlttData(NarcId narcId, s32 memberId, NNSG2dPaletteData ** ppPltData, u32 heap_id);
|
||||
void * GfGfxLoader_GetCellBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dCellDataBank ** ppCellBank, u32 heap_id);
|
||||
void * GfGfxLoader_GetAnimBank(NarcId narcId, s32 memberId, BOOL isCompressed, NNSG2dAnimBankData ** ppAnimBank, u32 heap_id);
|
||||
void * GfGfxLoader_UncompressFromNarc(NarcId narcId, s32 memberId, u32 heap_id);
|
||||
void * GfGfxLoader_LoadFromNarc(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd);
|
||||
void * GfGfxLoader_LoadFromNarc_GetSizeOut(NarcId narcId, s32 memberNo, BOOL isCompressed, u32 heap_id, BOOL allocAtEnd, u32 *size_p);
|
||||
|
||||
#endif //POKEDIAMOND_GF_GFX_LOADER_H
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
#ifndef POKEDIAMOND_GF_RTC_H
|
||||
#define POKEDIAMOND_GF_RTC_H
|
||||
|
||||
#include "RTC_api.h"
|
||||
|
||||
enum RTC_Month
|
||||
{
|
||||
RTC_MONTH_JANUARY = 1,
|
||||
RTC_MONTH_FEBRUARY,
|
||||
RTC_MONTH_MARCH,
|
||||
RTC_MONTH_APRIL,
|
||||
RTC_MONTH_MAY,
|
||||
RTC_MONTH_JUNE,
|
||||
RTC_MONTH_JULY,
|
||||
RTC_MONTH_AUGUST,
|
||||
RTC_MONTH_SEPTEMBER,
|
||||
RTC_MONTH_OCTOBER,
|
||||
RTC_MONTH_NOVEMBER,
|
||||
RTC_MONTH_DECEMBER,
|
||||
};
|
||||
|
||||
enum RTC_TimeOfDay
|
||||
{
|
||||
RTC_TIMEOFDAY_MORN = 0,
|
||||
RTC_TIMEOFDAY_DAY,
|
||||
RTC_TIMEOFDAY_EVE,
|
||||
RTC_TIMEOFDAY_NITE,
|
||||
RTC_TIMEOFDAY_LATE,
|
||||
};
|
||||
|
||||
#endif //POKEDIAMOND_GF_RTC_H
|
||||
#ifndef POKEDIAMOND_GF_RTC_H
|
||||
#define POKEDIAMOND_GF_RTC_H
|
||||
|
||||
#include "RTC_api.h"
|
||||
|
||||
enum RTC_Month
|
||||
{
|
||||
RTC_MONTH_JANUARY = 1,
|
||||
RTC_MONTH_FEBRUARY,
|
||||
RTC_MONTH_MARCH,
|
||||
RTC_MONTH_APRIL,
|
||||
RTC_MONTH_MAY,
|
||||
RTC_MONTH_JUNE,
|
||||
RTC_MONTH_JULY,
|
||||
RTC_MONTH_AUGUST,
|
||||
RTC_MONTH_SEPTEMBER,
|
||||
RTC_MONTH_OCTOBER,
|
||||
RTC_MONTH_NOVEMBER,
|
||||
RTC_MONTH_DECEMBER,
|
||||
};
|
||||
|
||||
enum RTC_TimeOfDay
|
||||
{
|
||||
RTC_TIMEOFDAY_MORN = 0,
|
||||
RTC_TIMEOFDAY_DAY,
|
||||
RTC_TIMEOFDAY_EVE,
|
||||
RTC_TIMEOFDAY_NITE,
|
||||
RTC_TIMEOFDAY_LATE,
|
||||
};
|
||||
|
||||
#endif //POKEDIAMOND_GF_RTC_H
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
.macro glabel label
|
||||
.global \label
|
||||
.thumb
|
||||
\label:
|
||||
.endm
|
||||
.macro glabel label
|
||||
.global \label
|
||||
.thumb
|
||||
\label:
|
||||
.endm
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#ifndef POKEDIAMOND_MODULE_05_H
|
||||
#define POKEDIAMOND_MODULE_05_H
|
||||
|
||||
#include "pokemon.h"
|
||||
|
||||
void MOD05_SetEggStats(struct Pokemon * mon, u16 species, int a1, struct PlayerData * data, int a2, int metLoc);
|
||||
|
||||
#endif //POKEDIAMOND_MODULE_05_H
|
||||
#ifndef POKEDIAMOND_MODULE_05_H
|
||||
#define POKEDIAMOND_MODULE_05_H
|
||||
|
||||
#include "pokemon.h"
|
||||
|
||||
void MOD05_SetEggStats(struct Pokemon * mon, u16 species, int a1, struct PlayerData * data, int a2, int metLoc);
|
||||
|
||||
#endif //POKEDIAMOND_MODULE_05_H
|
||||
|
|
|
|||
|
|
@ -1,109 +1,109 @@
|
|||
#ifndef GUARD_FX_TYPES_H
|
||||
#define GUARD_FX_TYPES_H
|
||||
|
||||
#include "nitro/types.h"
|
||||
|
||||
|
||||
typedef s16 fx16;
|
||||
typedef s32 fx32;
|
||||
typedef s64 fx64;
|
||||
typedef s64 fx64c;
|
||||
|
||||
#define FX16_INT_MASK 0xF000
|
||||
#define FX16_INT_ABS_MASK 0x7000
|
||||
#define FX16_FRAC_MASK 0x0FFF
|
||||
#define FX16_INT_SHIFT 0xC
|
||||
|
||||
#define FX32_INT_MASK 0xFFFFF000
|
||||
#define FX32_INT_ABS_MASK 0x7FFFF000
|
||||
#define FX32_FRAC_MASK 0x00000FFF
|
||||
#define FX32_INT_SHIFT 0xC
|
||||
|
||||
#define FX64_INT_MASK 0xFFFFFFFFFFFFF000
|
||||
#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000
|
||||
#define FX64_FRAC_MASK 0x0000000000000FFF
|
||||
#define FX64_INT_SHIFT 0xC
|
||||
|
||||
#define FX64C_INT_MASK 0xFFFFFFFF00000000
|
||||
#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000
|
||||
#define FX64C_FRAC_MASK 0x00000000FFFFFFFF
|
||||
#define FX64C_INT_SHIFT 0x20
|
||||
|
||||
#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT)
|
||||
#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT)
|
||||
#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK)
|
||||
|
||||
#define FX16_INT(x) FX_INT(FX16, x)
|
||||
#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x)
|
||||
#define FX16_FRAC(x) FX_FRAC(FX16, x)
|
||||
|
||||
#define FX32_INT(x) FX_INT(FX32, x)
|
||||
#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x)
|
||||
#define FX32_FRAC(x) FX_FRAC(FX32, x)
|
||||
|
||||
#define FX64_INT(x) FX_INT(FX64, x)
|
||||
#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x)
|
||||
#define FX64_FRAC(x) FX_FRAC(FX64, x)
|
||||
|
||||
#define FX64C_INT(x) FX_INT(FX64C, x)
|
||||
#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x)
|
||||
#define FX64C_FRAC(x) FX_FRAC(FX64C, x)
|
||||
|
||||
//TODO: clean up these macros
|
||||
#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT))
|
||||
#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)))
|
||||
#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT))
|
||||
//the extra term here is for rounding
|
||||
#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))
|
||||
|
||||
#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT)))
|
||||
|
||||
#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT)))
|
||||
#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \
|
||||
((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \
|
||||
((x) * (1 << FX16_INT_SHIFT) - 0.5f )))
|
||||
#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \
|
||||
((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \
|
||||
((x) * (1 << FX32_INT_SHIFT) - 0.5f )))
|
||||
#define FX16_CONST(x) FX_F32_TO_FX16(x)
|
||||
#define FX32_CONST(x) FX_F32_TO_FX32(x)
|
||||
|
||||
#define FX16_ONE ((fx16)0x1000)
|
||||
#define FX32_ONE ((fx32)0x00001000L)
|
||||
|
||||
typedef struct Vecx32
|
||||
{
|
||||
fx32 x;
|
||||
fx32 y;
|
||||
fx32 z;
|
||||
} VecFx32;
|
||||
|
||||
typedef struct Vecx16
|
||||
{
|
||||
fx16 x;
|
||||
fx16 y;
|
||||
fx16 z;
|
||||
} VecFx16;
|
||||
|
||||
//Matrices are indexed as [column][row]
|
||||
typedef struct Mtx44
|
||||
{
|
||||
fx32 _[16];
|
||||
} MtxFx44;
|
||||
|
||||
typedef struct Mtx43
|
||||
{
|
||||
fx32 _[12];
|
||||
} MtxFx43;
|
||||
|
||||
typedef struct Mtx33
|
||||
{
|
||||
fx32 _[9];
|
||||
} MtxFx33;
|
||||
|
||||
typedef struct Mtx22
|
||||
{
|
||||
fx32 _[4];
|
||||
} MtxFx22;
|
||||
|
||||
#endif //GUARD_FX_TYPES_H
|
||||
#ifndef GUARD_FX_TYPES_H
|
||||
#define GUARD_FX_TYPES_H
|
||||
|
||||
#include "nitro/types.h"
|
||||
|
||||
|
||||
typedef s16 fx16;
|
||||
typedef s32 fx32;
|
||||
typedef s64 fx64;
|
||||
typedef s64 fx64c;
|
||||
|
||||
#define FX16_INT_MASK 0xF000
|
||||
#define FX16_INT_ABS_MASK 0x7000
|
||||
#define FX16_FRAC_MASK 0x0FFF
|
||||
#define FX16_INT_SHIFT 0xC
|
||||
|
||||
#define FX32_INT_MASK 0xFFFFF000
|
||||
#define FX32_INT_ABS_MASK 0x7FFFF000
|
||||
#define FX32_FRAC_MASK 0x00000FFF
|
||||
#define FX32_INT_SHIFT 0xC
|
||||
|
||||
#define FX64_INT_MASK 0xFFFFFFFFFFFFF000
|
||||
#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000
|
||||
#define FX64_FRAC_MASK 0x0000000000000FFF
|
||||
#define FX64_INT_SHIFT 0xC
|
||||
|
||||
#define FX64C_INT_MASK 0xFFFFFFFF00000000
|
||||
#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000
|
||||
#define FX64C_FRAC_MASK 0x00000000FFFFFFFF
|
||||
#define FX64C_INT_SHIFT 0x20
|
||||
|
||||
#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT)
|
||||
#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT)
|
||||
#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK)
|
||||
|
||||
#define FX16_INT(x) FX_INT(FX16, x)
|
||||
#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x)
|
||||
#define FX16_FRAC(x) FX_FRAC(FX16, x)
|
||||
|
||||
#define FX32_INT(x) FX_INT(FX32, x)
|
||||
#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x)
|
||||
#define FX32_FRAC(x) FX_FRAC(FX32, x)
|
||||
|
||||
#define FX64_INT(x) FX_INT(FX64, x)
|
||||
#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x)
|
||||
#define FX64_FRAC(x) FX_FRAC(FX64, x)
|
||||
|
||||
#define FX64C_INT(x) FX_INT(FX64C, x)
|
||||
#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x)
|
||||
#define FX64C_FRAC(x) FX_FRAC(FX64C, x)
|
||||
|
||||
//TODO: clean up these macros
|
||||
#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT))
|
||||
#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)))
|
||||
#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT))
|
||||
//the extra term here is for rounding
|
||||
#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))
|
||||
|
||||
#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT)))
|
||||
|
||||
#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT)))
|
||||
#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \
|
||||
((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \
|
||||
((x) * (1 << FX16_INT_SHIFT) - 0.5f )))
|
||||
#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \
|
||||
((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \
|
||||
((x) * (1 << FX32_INT_SHIFT) - 0.5f )))
|
||||
#define FX16_CONST(x) FX_F32_TO_FX16(x)
|
||||
#define FX32_CONST(x) FX_F32_TO_FX32(x)
|
||||
|
||||
#define FX16_ONE ((fx16)0x1000)
|
||||
#define FX32_ONE ((fx32)0x00001000L)
|
||||
|
||||
typedef struct Vecx32
|
||||
{
|
||||
fx32 x;
|
||||
fx32 y;
|
||||
fx32 z;
|
||||
} VecFx32;
|
||||
|
||||
typedef struct Vecx16
|
||||
{
|
||||
fx16 x;
|
||||
fx16 y;
|
||||
fx16 z;
|
||||
} VecFx16;
|
||||
|
||||
//Matrices are indexed as [column][row]
|
||||
typedef struct Mtx44
|
||||
{
|
||||
fx32 _[16];
|
||||
} MtxFx44;
|
||||
|
||||
typedef struct Mtx43
|
||||
{
|
||||
fx32 _[12];
|
||||
} MtxFx43;
|
||||
|
||||
typedef struct Mtx33
|
||||
{
|
||||
fx32 _[9];
|
||||
} MtxFx33;
|
||||
|
||||
typedef struct Mtx22
|
||||
{
|
||||
fx32 _[4];
|
||||
} MtxFx22;
|
||||
|
||||
#endif //GUARD_FX_TYPES_H
|
||||
|
|
|
|||
|
|
@ -1,89 +1,89 @@
|
|||
#ifndef GUARD_NNS_G3D_H
|
||||
#define GUARD_NNS_G3D_H
|
||||
|
||||
#include "fx.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NNS_G3D_GLB_FLAG_FLUSH_WVP = 0x00000001,
|
||||
NNS_G3D_GLB_FLAG_FLUSH_VP = 0x00000002,
|
||||
NNS_G3D_GLB_FLAG_INVBASE_UPTODATE = 0x00000004,
|
||||
NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE = 0x00000008,
|
||||
NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE = 0x00000010,
|
||||
NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE = 0x00000020,
|
||||
NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE = 0x00000040,
|
||||
|
||||
NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE = 0x00000080,
|
||||
|
||||
NNS_G3D_GLB_FLAG_SRTCAMERA_UPTODATE = NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE,
|
||||
NNS_G3D_GLB_FLAG_FLUSH_ALT = NNS_G3D_GLB_FLAG_FLUSH_WVP
|
||||
}
|
||||
NNSG3dGlbFlag;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/*0x000*/ u32 cmd0;
|
||||
/*0x004*/ u32 mtxmode_proj;
|
||||
/*0x008*/ MtxFx44 projMtx;
|
||||
|
||||
/*0x048*/ u32 mtxmode_posvec;
|
||||
/*0x04C*/ MtxFx43 cameraMtx;
|
||||
|
||||
/*0x07C*/ u32 cmd1;
|
||||
/*0x080*/ u32 lightVec[4];
|
||||
|
||||
/*0x090*/ u32 cmd2;
|
||||
/*0x094*/ u32 prmMatColor0;
|
||||
/*0x098*/ u32 prmMatColor1;
|
||||
/*0x09C*/ u32 prmPolygonAttr;
|
||||
/*0x0A0*/ u32 prmViewPort;
|
||||
|
||||
/*0x0A4*/ u32 cmd3;
|
||||
/*0x0A8*/ u32 lightColor[4];
|
||||
|
||||
/*0x0B8*/ u32 cmd4;
|
||||
/*0x0BC*/ MtxFx33 prmBaseRot;
|
||||
/*0x0E0*/ VecFx32 prmBaseTrans;
|
||||
/*0x0EC*/ VecFx32 prmBaseScale;
|
||||
/*0x0F8*/ u32 prmTexImageParam;
|
||||
|
||||
/*0x0FC*/ u32 flag;
|
||||
/*0x100*/ MtxFx43 invCameraMtx;
|
||||
/*0x130*/ MtxFx43 srtCameraMtx;
|
||||
/*0x160*/ MtxFx43 invSrtCameraMtx;
|
||||
|
||||
/*0x190*/ MtxFx43 invBaseMtx;
|
||||
|
||||
/*0x1C0*/ MtxFx44 invProjMtx;
|
||||
/*0x200*/ MtxFx44 invCameraProjMtx;
|
||||
|
||||
/*0x240*/ VecFx32 camPos;
|
||||
/*0x24C*/ VecFx32 camUp;
|
||||
/*0x258*/ VecFx32 camTarget;
|
||||
}
|
||||
NNSG3dGlb;
|
||||
|
||||
extern NNSG3dGlb NNS_G3dGlb;
|
||||
|
||||
static inline void NNS_G3dGlbLookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * camTarget)
|
||||
{
|
||||
NNS_G3dGlb.camPos = *camPos;
|
||||
NNS_G3dGlb.camUp = *camUp;
|
||||
NNS_G3dGlb.camTarget = *camTarget;
|
||||
MTX_LookAt(camPos, camUp, camTarget, &NNS_G3dGlb.cameraMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE | NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE);
|
||||
}
|
||||
|
||||
static inline void NNS_G3dGlbPerspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f)
|
||||
{
|
||||
MTX_Perspective(fovySin, fovyCos, aspect, n, f, &NNS_G3dGlb.projMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
|
||||
}
|
||||
|
||||
static inline void NNS_G3dGlbOrtho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f)
|
||||
{
|
||||
MTX_Ortho(t, b, l, r, n, f, &NNS_G3dGlb.projMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
|
||||
}
|
||||
|
||||
#endif //GUARD_NNS_G3D_H
|
||||
#ifndef GUARD_NNS_G3D_H
|
||||
#define GUARD_NNS_G3D_H
|
||||
|
||||
#include "fx.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
NNS_G3D_GLB_FLAG_FLUSH_WVP = 0x00000001,
|
||||
NNS_G3D_GLB_FLAG_FLUSH_VP = 0x00000002,
|
||||
NNS_G3D_GLB_FLAG_INVBASE_UPTODATE = 0x00000004,
|
||||
NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE = 0x00000008,
|
||||
NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE = 0x00000010,
|
||||
NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE = 0x00000020,
|
||||
NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE = 0x00000040,
|
||||
|
||||
NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE = 0x00000080,
|
||||
|
||||
NNS_G3D_GLB_FLAG_SRTCAMERA_UPTODATE = NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE,
|
||||
NNS_G3D_GLB_FLAG_FLUSH_ALT = NNS_G3D_GLB_FLAG_FLUSH_WVP
|
||||
}
|
||||
NNSG3dGlbFlag;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/*0x000*/ u32 cmd0;
|
||||
/*0x004*/ u32 mtxmode_proj;
|
||||
/*0x008*/ MtxFx44 projMtx;
|
||||
|
||||
/*0x048*/ u32 mtxmode_posvec;
|
||||
/*0x04C*/ MtxFx43 cameraMtx;
|
||||
|
||||
/*0x07C*/ u32 cmd1;
|
||||
/*0x080*/ u32 lightVec[4];
|
||||
|
||||
/*0x090*/ u32 cmd2;
|
||||
/*0x094*/ u32 prmMatColor0;
|
||||
/*0x098*/ u32 prmMatColor1;
|
||||
/*0x09C*/ u32 prmPolygonAttr;
|
||||
/*0x0A0*/ u32 prmViewPort;
|
||||
|
||||
/*0x0A4*/ u32 cmd3;
|
||||
/*0x0A8*/ u32 lightColor[4];
|
||||
|
||||
/*0x0B8*/ u32 cmd4;
|
||||
/*0x0BC*/ MtxFx33 prmBaseRot;
|
||||
/*0x0E0*/ VecFx32 prmBaseTrans;
|
||||
/*0x0EC*/ VecFx32 prmBaseScale;
|
||||
/*0x0F8*/ u32 prmTexImageParam;
|
||||
|
||||
/*0x0FC*/ u32 flag;
|
||||
/*0x100*/ MtxFx43 invCameraMtx;
|
||||
/*0x130*/ MtxFx43 srtCameraMtx;
|
||||
/*0x160*/ MtxFx43 invSrtCameraMtx;
|
||||
|
||||
/*0x190*/ MtxFx43 invBaseMtx;
|
||||
|
||||
/*0x1C0*/ MtxFx44 invProjMtx;
|
||||
/*0x200*/ MtxFx44 invCameraProjMtx;
|
||||
|
||||
/*0x240*/ VecFx32 camPos;
|
||||
/*0x24C*/ VecFx32 camUp;
|
||||
/*0x258*/ VecFx32 camTarget;
|
||||
}
|
||||
NNSG3dGlb;
|
||||
|
||||
extern NNSG3dGlb NNS_G3dGlb;
|
||||
|
||||
static inline void NNS_G3dGlbLookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * camTarget)
|
||||
{
|
||||
NNS_G3dGlb.camPos = *camPos;
|
||||
NNS_G3dGlb.camUp = *camUp;
|
||||
NNS_G3dGlb.camTarget = *camTarget;
|
||||
MTX_LookAt(camPos, camUp, camTarget, &NNS_G3dGlb.cameraMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE | NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE);
|
||||
}
|
||||
|
||||
static inline void NNS_G3dGlbPerspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f)
|
||||
{
|
||||
MTX_Perspective(fovySin, fovyCos, aspect, n, f, &NNS_G3dGlb.projMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
|
||||
}
|
||||
|
||||
static inline void NNS_G3dGlbOrtho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f)
|
||||
{
|
||||
MTX_Ortho(t, b, l, r, n, f, &NNS_G3dGlb.projMtx);
|
||||
NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
|
||||
}
|
||||
|
||||
#endif //GUARD_NNS_G3D_H
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
#ifndef POKEDIAMOND_UNK_02015D14_H
|
||||
#define POKEDIAMOND_UNK_02015D14_H
|
||||
|
||||
// --------------------------------------------
|
||||
// ConvertRSStringToDPStringInternational
|
||||
// ============================================
|
||||
// Param rs_str: Pointer to u8 representing
|
||||
// the name of a Pokemon or
|
||||
// its OT when migrating from
|
||||
// Advanced Gameboy.
|
||||
// Param dp_str: Pointer to u16 representing
|
||||
// the destination string buffer
|
||||
// for migration to Diamond
|
||||
// or Pearl.
|
||||
// Param length: The length of the string
|
||||
// to convert, including the
|
||||
// terminator byte.
|
||||
// Param language: Game language of origin.
|
||||
// See include/config.h.
|
||||
// Return: TRUE if the conversion was completed
|
||||
// successfully. Otherwise, dp_str will
|
||||
// be filled with up to 10 question mark
|
||||
// characters.
|
||||
BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language);
|
||||
|
||||
#endif //POKEDIAMOND_UNK_02015D14_H
|
||||
#ifndef POKEDIAMOND_UNK_02015D14_H
|
||||
#define POKEDIAMOND_UNK_02015D14_H
|
||||
|
||||
// --------------------------------------------
|
||||
// ConvertRSStringToDPStringInternational
|
||||
// ============================================
|
||||
// Param rs_str: Pointer to u8 representing
|
||||
// the name of a Pokemon or
|
||||
// its OT when migrating from
|
||||
// Advanced Gameboy.
|
||||
// Param dp_str: Pointer to u16 representing
|
||||
// the destination string buffer
|
||||
// for migration to Diamond
|
||||
// or Pearl.
|
||||
// Param length: The length of the string
|
||||
// to convert, including the
|
||||
// terminator byte.
|
||||
// Param language: Game language of origin.
|
||||
// See include/config.h.
|
||||
// Return: TRUE if the conversion was completed
|
||||
// successfully. Otherwise, dp_str will
|
||||
// be filled with up to 10 question mark
|
||||
// characters.
|
||||
BOOL ConvertRSStringToDPStringInternational(const u8 * rs_str, u16 * dp_str, u32 length, u32 language);
|
||||
|
||||
#endif //POKEDIAMOND_UNK_02015D14_H
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
#ifndef POKEDIAMOND_SAV_CHATOT_H
|
||||
#define POKEDIAMOND_SAV_CHATOT_H
|
||||
|
||||
#include "save_block_2.h"
|
||||
|
||||
struct SaveChatotSoundClip
|
||||
{
|
||||
// TODO: Fill this in
|
||||
BOOL exists;
|
||||
s8 data[1000];
|
||||
};
|
||||
|
||||
u32 Sav2_Chatot_sizeof(void);
|
||||
void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot);
|
||||
struct SaveChatotSoundClip * Chatot_new(u32 heap_id);
|
||||
struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2);
|
||||
BOOL Chatot_exists(struct SaveChatotSoundClip * chatot);
|
||||
void Chatot_invalidate(struct SaveChatotSoundClip * chatot);
|
||||
s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot);
|
||||
void Chatot_Decode(s8 * dest, const s8 * data);
|
||||
void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data);
|
||||
void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src);
|
||||
|
||||
#endif //POKEDIAMOND_SAV_CHATOT_H
|
||||
#ifndef POKEDIAMOND_SAV_CHATOT_H
|
||||
#define POKEDIAMOND_SAV_CHATOT_H
|
||||
|
||||
#include "save_block_2.h"
|
||||
|
||||
struct SaveChatotSoundClip
|
||||
{
|
||||
// TODO: Fill this in
|
||||
BOOL exists;
|
||||
s8 data[1000];
|
||||
};
|
||||
|
||||
u32 Sav2_Chatot_sizeof(void);
|
||||
void Sav2_Chatot_init(struct SaveChatotSoundClip * chatot);
|
||||
struct SaveChatotSoundClip * Chatot_new(u32 heap_id);
|
||||
struct SaveChatotSoundClip * Sav2_Chatot_get(struct SaveBlock2 * sav2);
|
||||
BOOL Chatot_exists(struct SaveChatotSoundClip * chatot);
|
||||
void Chatot_invalidate(struct SaveChatotSoundClip * chatot);
|
||||
s8 * Chatot_GetData(struct SaveChatotSoundClip * chatot);
|
||||
void Chatot_Decode(s8 * dest, const s8 * data);
|
||||
void Chatot_Encode(struct SaveChatotSoundClip * chatot, const s8 * data);
|
||||
void Chatot_copy(struct SaveChatotSoundClip * dest, const struct SaveChatotSoundClip * src);
|
||||
|
||||
#endif //POKEDIAMOND_SAV_CHATOT_H
|
||||
|
|
|
|||
240
include/script.h
240
include/script.h
|
|
@ -1,120 +1,120 @@
|
|||
#ifndef _SCRIPT_H_
|
||||
#define _SCRIPT_H_
|
||||
|
||||
#include "global.h"
|
||||
#include "bg_window.h"
|
||||
#include "camera.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "msgdata.h"
|
||||
#include "render_window.h"
|
||||
#include "save_block_2.h"
|
||||
#include "task.h"
|
||||
|
||||
struct ScriptContext;
|
||||
|
||||
typedef u8 (*ScrCmdFunc)(struct ScriptContext *);
|
||||
typedef u8 Script[];
|
||||
|
||||
struct UnkStruct_020464D4
|
||||
{
|
||||
u16 unk0[4];
|
||||
u8 padding[0x108];
|
||||
};
|
||||
|
||||
struct UnkStruct_02046444
|
||||
{
|
||||
u8 padding[0x90];
|
||||
struct UnkStruct_020464D4 unk90[1]; //todo find size
|
||||
};
|
||||
|
||||
typedef struct LocalMapObject { //todo move to local_map_object.c
|
||||
u8 padding[0x12C]; //todo verify size
|
||||
} LocalMapObject;
|
||||
|
||||
typedef struct PartyMenuAppData PartyMenuAppData; //todo move to own file
|
||||
|
||||
struct FieldSystem //todo move to field_system.c
|
||||
{
|
||||
u32 *unk00;
|
||||
u8 padding[0x4];
|
||||
struct BgConfig *bgConfig;
|
||||
struct SaveBlock2 *saveBlock2; //0xC
|
||||
struct TaskManager *taskManager;
|
||||
u8 padding2[0x8];
|
||||
u32 *mapId; //0x1C
|
||||
struct Camera *camera;
|
||||
u32 unk24;
|
||||
u8 padding3[0xC];
|
||||
u32 unk34;
|
||||
struct PlayerAvatar *playerAvatar;
|
||||
u8 padding4[0x24];
|
||||
u32 unk60;
|
||||
u8 padding5[0x14];
|
||||
u32 unk78;
|
||||
u8 padding6[0x1C];
|
||||
void *unk98;
|
||||
u8 padding7[0xC];
|
||||
struct UnkStruct_02046444 * unkA8;
|
||||
};
|
||||
|
||||
typedef struct ScriptContext
|
||||
{
|
||||
u8 stackDepth;
|
||||
u8 mode;
|
||||
u8 comparisonResult;
|
||||
BOOL (*nativePtr)(struct ScriptContext *);
|
||||
const u8 *scriptPtr;
|
||||
const u8 *stack[20];
|
||||
ScrCmdFunc *cmdTable;
|
||||
u32 cmdCount;
|
||||
u32 data[4];
|
||||
struct TaskManager *taskManager;
|
||||
struct MsgData *msgData;
|
||||
u8 *mapScripts;
|
||||
struct FieldSystem *fieldSystem;
|
||||
} ScriptContext;
|
||||
|
||||
typedef enum ScriptEnvField {
|
||||
SCRIPTENV_MENU_WINDOW,
|
||||
SCRIPTENV_WINDOW,
|
||||
SCRIPTENV_LIST_MENU_2D,
|
||||
SCRIPTENV_TEXT_PRINTER_NUMBER,
|
||||
SCRIPTENV_ACTIVE_MOVEMENT_COUNTER,
|
||||
SCRIPTENV_UNKNOWN_05,
|
||||
SCRIPTENV_UNKNOWN_06,
|
||||
SCRIPTENV_ACTIVE_SCRIPTCONTEXT_COUNT,
|
||||
SCRIPTENV_ACTIVE_SCRIPT_NUMBER,
|
||||
SCRIPTENV_FACING_DIRECTION,
|
||||
SCRIPTENV_LAST_INTERACTED,
|
||||
SCRIPTENV_CAMERA_TARGET,
|
||||
SCRIPTENV_UNKNOWN_12,
|
||||
SCRIPTENV_SCRIPT_CONTEXT_0,
|
||||
SCRIPTENV_SCRIPT_CONTEXT_1, //diamond does not appear to have SCRIPT_CONTEXT_2 like HG
|
||||
SCRIPTENV_MESSAGE_FORMAT,
|
||||
SCRIPTENV_STRING_BUFFER_0,
|
||||
SCRIPTENV_STRING_BUFFER_1,
|
||||
SCRIPTENV_WAITING_ICON,
|
||||
SCRIPTENV_RUNNING_APP_DATA,
|
||||
SCRIPTENV_MISC_DATA_PTR,
|
||||
SCRIPTENV_UNKNOWN_21,
|
||||
SCRIPTENV_UNKNOWN_22,
|
||||
SCRIPTENV_BATTLE_WIN_FLAG,
|
||||
} ScriptEnvField;
|
||||
|
||||
#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))
|
||||
|
||||
void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount);
|
||||
u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
|
||||
void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *));
|
||||
void StopScript(struct ScriptContext *ctx);
|
||||
void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManger);
|
||||
u8 RunScriptCommand(struct ScriptContext *ctx);
|
||||
u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
|
||||
const u8 *ScriptPop(struct ScriptContext *ctx);
|
||||
void ScriptJump(struct ScriptContext *ctx, const u8 *ptr);
|
||||
u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr);
|
||||
void ScriptReturn(struct ScriptContext *ctx);
|
||||
u16 ScriptReadHalfword(struct ScriptContext *ctx);
|
||||
u32 ScriptReadWord(struct ScriptContext *ctx);
|
||||
|
||||
#endif // _SCRIPT_H_
|
||||
#ifndef _SCRIPT_H_
|
||||
#define _SCRIPT_H_
|
||||
|
||||
#include "global.h"
|
||||
#include "bg_window.h"
|
||||
#include "camera.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "msgdata.h"
|
||||
#include "render_window.h"
|
||||
#include "save_block_2.h"
|
||||
#include "task.h"
|
||||
|
||||
struct ScriptContext;
|
||||
|
||||
typedef u8 (*ScrCmdFunc)(struct ScriptContext *);
|
||||
typedef u8 Script[];
|
||||
|
||||
struct UnkStruct_020464D4
|
||||
{
|
||||
u16 unk0[4];
|
||||
u8 padding[0x108];
|
||||
};
|
||||
|
||||
struct UnkStruct_02046444
|
||||
{
|
||||
u8 padding[0x90];
|
||||
struct UnkStruct_020464D4 unk90[1]; //todo find size
|
||||
};
|
||||
|
||||
typedef struct LocalMapObject { //todo move to local_map_object.c
|
||||
u8 padding[0x12C]; //todo verify size
|
||||
} LocalMapObject;
|
||||
|
||||
typedef struct PartyMenuAppData PartyMenuAppData; //todo move to own file
|
||||
|
||||
struct FieldSystem //todo move to field_system.c
|
||||
{
|
||||
u32 *unk00;
|
||||
u8 padding[0x4];
|
||||
struct BgConfig *bgConfig;
|
||||
struct SaveBlock2 *saveBlock2; //0xC
|
||||
struct TaskManager *taskManager;
|
||||
u8 padding2[0x8];
|
||||
u32 *mapId; //0x1C
|
||||
struct Camera *camera;
|
||||
u32 unk24;
|
||||
u8 padding3[0xC];
|
||||
u32 unk34;
|
||||
struct PlayerAvatar *playerAvatar;
|
||||
u8 padding4[0x24];
|
||||
u32 unk60;
|
||||
u8 padding5[0x14];
|
||||
u32 unk78;
|
||||
u8 padding6[0x1C];
|
||||
void *unk98;
|
||||
u8 padding7[0xC];
|
||||
struct UnkStruct_02046444 * unkA8;
|
||||
};
|
||||
|
||||
typedef struct ScriptContext
|
||||
{
|
||||
u8 stackDepth;
|
||||
u8 mode;
|
||||
u8 comparisonResult;
|
||||
BOOL (*nativePtr)(struct ScriptContext *);
|
||||
const u8 *scriptPtr;
|
||||
const u8 *stack[20];
|
||||
ScrCmdFunc *cmdTable;
|
||||
u32 cmdCount;
|
||||
u32 data[4];
|
||||
struct TaskManager *taskManager;
|
||||
struct MsgData *msgData;
|
||||
u8 *mapScripts;
|
||||
struct FieldSystem *fieldSystem;
|
||||
} ScriptContext;
|
||||
|
||||
typedef enum ScriptEnvField {
|
||||
SCRIPTENV_MENU_WINDOW,
|
||||
SCRIPTENV_WINDOW,
|
||||
SCRIPTENV_LIST_MENU_2D,
|
||||
SCRIPTENV_TEXT_PRINTER_NUMBER,
|
||||
SCRIPTENV_ACTIVE_MOVEMENT_COUNTER,
|
||||
SCRIPTENV_UNKNOWN_05,
|
||||
SCRIPTENV_UNKNOWN_06,
|
||||
SCRIPTENV_ACTIVE_SCRIPTCONTEXT_COUNT,
|
||||
SCRIPTENV_ACTIVE_SCRIPT_NUMBER,
|
||||
SCRIPTENV_FACING_DIRECTION,
|
||||
SCRIPTENV_LAST_INTERACTED,
|
||||
SCRIPTENV_CAMERA_TARGET,
|
||||
SCRIPTENV_UNKNOWN_12,
|
||||
SCRIPTENV_SCRIPT_CONTEXT_0,
|
||||
SCRIPTENV_SCRIPT_CONTEXT_1, //diamond does not appear to have SCRIPT_CONTEXT_2 like HG
|
||||
SCRIPTENV_MESSAGE_FORMAT,
|
||||
SCRIPTENV_STRING_BUFFER_0,
|
||||
SCRIPTENV_STRING_BUFFER_1,
|
||||
SCRIPTENV_WAITING_ICON,
|
||||
SCRIPTENV_RUNNING_APP_DATA,
|
||||
SCRIPTENV_MISC_DATA_PTR,
|
||||
SCRIPTENV_UNKNOWN_21,
|
||||
SCRIPTENV_UNKNOWN_22,
|
||||
SCRIPTENV_BATTLE_WIN_FLAG,
|
||||
} ScriptEnvField;
|
||||
|
||||
#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))
|
||||
|
||||
void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, u32 cmdCount);
|
||||
u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
|
||||
void SetupNativeScript(struct ScriptContext *ctx, BOOL (*ptr)(struct ScriptContext *));
|
||||
void StopScript(struct ScriptContext *ctx);
|
||||
void FUN_02038B6C(struct ScriptContext *ctx, struct TaskManager *taskManger);
|
||||
u8 RunScriptCommand(struct ScriptContext *ctx);
|
||||
u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
|
||||
const u8 *ScriptPop(struct ScriptContext *ctx);
|
||||
void ScriptJump(struct ScriptContext *ctx, const u8 *ptr);
|
||||
u8 ScriptCall(struct ScriptContext *ctx, const u8 *ptr);
|
||||
void ScriptReturn(struct ScriptContext *ctx);
|
||||
u16 ScriptReadHalfword(struct ScriptContext *ctx);
|
||||
u32 ScriptReadWord(struct ScriptContext *ctx);
|
||||
|
||||
#endif // _SCRIPT_H_
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#ifndef POKEDIAMOND_UNK_020061E8_H
|
||||
#define POKEDIAMOND_UNK_020061E8_H
|
||||
|
||||
#include "nitro/types.h"
|
||||
#include "text.h"
|
||||
|
||||
BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3);
|
||||
void FUN_0200621C(s32 r0);
|
||||
|
||||
#endif // POKEDIAMOND_UNK_020061E8_H
|
||||
#ifndef POKEDIAMOND_UNK_020061E8_H
|
||||
#define POKEDIAMOND_UNK_020061E8_H
|
||||
|
||||
#include "nitro/types.h"
|
||||
#include "text.h"
|
||||
|
||||
BOOL FUN_020061E8(void (*r0)(u32, void *), u32 r1, u32 r2, u32 r3);
|
||||
void FUN_0200621C(s32 r0);
|
||||
|
||||
#endif // POKEDIAMOND_UNK_020061E8_H
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user