more line endings

This commit is contained in:
Akashi Akira 2023-05-24 09:15:59 +01:00
parent 675e8f2992
commit b5cf46393f
No known key found for this signature in database
GPG Key ID: D27E50C050AE0CE1
115 changed files with 25313 additions and 25311 deletions

2
.gitattributes vendored
View File

@ -2,4 +2,6 @@
charmap.txt text eol=crlf
m2ctx.sh text eol=lf
*.png binary
* text eol=crlf

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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(&region);
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(&region, 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(&region);
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(&region, 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;
}
*/

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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));
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,5 +1,5 @@
.macro glabel label
.global \label
.thumb
\label:
.endm
.macro glabel label
.global \label
.thumb
\label:
.endm

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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_

View File

@ -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