mirror of https://github.com/PCSX2/pcsx2.git
114 lines
2.3 KiB
ArmAsm
114 lines
2.3 KiB
ArmAsm
.set noat
|
|
.set noreorder
|
|
|
|
.global _start
|
|
.global _exit
|
|
|
|
.text
|
|
nop
|
|
nop
|
|
_start:
|
|
lui $2,%hi(_args_ptr)
|
|
addiu $2,$2, %lo(_args_ptr)
|
|
sw $4,($2)
|
|
# Clear bss
|
|
zerobss:
|
|
lui $2,%hi(_fbss)
|
|
lui $3,%hi(_end)
|
|
addiu $2,$2,%lo(_fbss)
|
|
addiu $3,$3,%lo(_end)
|
|
loop:
|
|
nop
|
|
nop
|
|
sq $0,($2)
|
|
sltu $1,$2,$3
|
|
bne $1,$0,loop
|
|
addiu $2,$2,16
|
|
# Thread
|
|
lui $4,%hi(_gp)
|
|
lui $5,%hi(_stack)
|
|
lui $6,%hi(_stack_size)
|
|
lui $7,%hi(_args)
|
|
lui $8,%hi(_exit)
|
|
addiu $4,$4,%lo(_gp)
|
|
addiu $5,$5,%lo(_stack)
|
|
addiu $6,$6,%lo(_stack_size)
|
|
addiu $7,$7,%lo(_args)
|
|
addiu $8,$8,%lo(_exit)
|
|
move $28,$4
|
|
addiu $3,$0,60
|
|
syscall
|
|
move $29, $2
|
|
|
|
# Heap
|
|
addiu $3,$0,61
|
|
lui $4,%hi(_end)
|
|
addiu $4,$4,%lo(_end)
|
|
lui $5,%hi(_heap_size)
|
|
addiu $5,$5,%lo(_heap_size)
|
|
syscall
|
|
nop
|
|
|
|
# Cache
|
|
li $3, 100
|
|
move $4,$0
|
|
syscall
|
|
nop
|
|
|
|
# Jump main
|
|
ei
|
|
|
|
# Check if we got args from system
|
|
lui $2, %hi(_args)
|
|
addiu $2, %lo(_args)
|
|
lw $3, 0($2)
|
|
bnez $3, _gotArgv # Started w (Load)ExecPS2
|
|
nop
|
|
|
|
# Check args via $a0
|
|
lui $2,%hi(_args_ptr)
|
|
addiu $2,$2,%lo(_args_ptr)
|
|
lw $3,0($2)
|
|
|
|
beqzl $3, _goMain
|
|
addu $4, $0, $0
|
|
|
|
addiu $2, $3, 4
|
|
b _gotArgv
|
|
nop
|
|
|
|
_gotArgv:
|
|
lw $4, ($2)
|
|
addiu $5, $2, 4
|
|
_goMain:
|
|
jal main
|
|
nop
|
|
|
|
# Check if we got our args in $a0 again
|
|
la $4, _args_ptr
|
|
lw $5, 0($4)
|
|
beqz $5, _exit
|
|
nop
|
|
_root:
|
|
lw $6, 0($5)
|
|
sw $0, 0($6)
|
|
# Call ExitDeleteThread()
|
|
addiu $3, $0, 36
|
|
syscall
|
|
nop
|
|
_exit:
|
|
# Exit
|
|
# Should call Exit(retval) if not called by pukklink
|
|
addiu $3,$0,35
|
|
syscall
|
|
move $4, $2
|
|
nop
|
|
|
|
.bss
|
|
.align 6
|
|
_args: .space 256+16*4+4
|
|
|
|
.data
|
|
_args_ptr:
|
|
.space 4
|